scNiche识别空间组细胞微环境
目录
环境构建与导入
数据准备
预处理
训练分群
结果可视化
在空间转录组的研究中,与单纯依靠表达量分群的单细胞转录组数据不同,我们经常要考虑细胞之间的免疫微环境进行分群,测试一下近期的一个新方法GitHub - ZJUFanLab/scNiche: a computational framework to identify and characterize cell niches from spatial omics data at single-cell resolution
环境构建与导入
我这里是依据Github建议的方法在conda环境中构建的
import scniche as sn
import scanpy as sc
import pandas as pd
from sklearn.metrics import adjusted_rand_score
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')print("Last run with scNiche version:", sn.__version__)# set seed
sn.pp.set_seed()
数据准备
这里需要的输入数据可以是带有注释标签的不同分辨率的空间组数据,转化成python读取的anndata格式,我这里读取示例数据如下
adata = sc.read('/data/work/scNiche-main/scniche/datasets/simulated_data.h5ad')
adata
这里注释标签为‘Cell_type’,空间组坐标位于obsm中的‘Spatial’
预处理
在进行正式训练前需要对我们的空间组数据进行一定的预处理
cutoff = 20#邻域细胞数量
lr = 0.01#学习率
epochs = 100#训练迭代次数
adata = sn.pp.cal_spatial_neighbors(adata=adata, celltype_key='Cell_type', mode='KNN', k_cutoff=cutoff, verbose=False)
adata = sn.pp.cal_spatial_exp(adata=adata, mode='KNN', k_cutoff=cutoff, is_pca=True, n_comps=50, verbose=False)
adata = sn.pp.prepare_data(adata=adata, verbose=False)
参数选择可以参照原文献或者Github,这里仅作测试
训练分群
训练过程中可以自定义需要的分群数量target_num,这里是根据注释分群的数量进行设定
model = sn.tr.Runner(adata=adata, device='cpu', verbose=False)#GPU可以替换成相应的设备
adata = model.fit(lr=lr, epochs=epochs)
# clustering
target_num = len(set(adata.obs['Cell_type']))
adata = sn.tr.clustering(adata=adata, target_k=target_num)
结果可视化
训练结束会自动生成一个“scNiche”的注释列和对应的坐标,29000左右的细胞数CPU使用默认参数,大约耗时4h,总体训练效率可以接受
plt.rcParams["figure.figsize"] = (3, 3)
sc.pl.embedding(adata, basis="spatial", color=['predict_Celltype', 'scNiche'], s=20, show=False)
plt.tight_layout()
plt.show()
最后简单展示我的数据分群情况,能看到明显的层次关系,但是该方法具体的生物学效应有待深入探索,可能更适宜较高分辨率下的病理学切片研究。