作者:三金
审核:一只小羊、peacestore
前面介绍了如何使用Seurat对Xenium数据进行整合分群,今天介绍一种基于 Python 生态,以无监督的批次平衡近邻图构建为核心,可以对Xenium 等百万级细胞的大规模空间数据进行整合分群的方法:BBKNN。
2021年发表在Genome Biology上的一篇文章(A comparison of batch effect correction methods for single-cell RNA sequencing data)中提到,BBKNN在“速度 + 大数据集 + 生物学保留” 维度最优,Harmony 在“中等数据集 + 整合效果”最优,cca 在“小数据集 + 精细分群”最优。
利用 UMAP 可视化对小鼠细胞图谱数据集 2 的 14 种批次效应校正方法进行定性评估
从按批次着色 的 UMAP 图能看到,BBKNN 处理后,不同批次的细胞没有出现明显的抱团分离现象,而是均匀散落在整个图谱中。在按细胞类型着色的UMAP图中,相同类型的细胞聚集紧密,不同类型之间的边界清晰可辨,在去除技术噪音的同时,牢牢保留了细胞固有的生物学异质性。
各方法在不同数据集的运行时间
BBKNN 的运行时间与 Harmony 接近,在部分数据集上甚至更短,且显著快于 Seurat 3、fastMNN 等方法。
>准备样本数据和样本信息文件sample_info.txt,oldsample是前面的两个数据文件(默认样本名称),sample列是新样本名称,group列对应组别信息
cat sample_info.txtoldsample sample groupXenium_Prime_Human_Ovary_FF_outs S1 SXenium_Prime_Ovarian_Cancer_FFPE_XRrun_outs S2 T
>准备分析环境:安装需要的python库,如果是conda环境也可以使用conda快速安装。
pip install pandas scanpy bbknnpip install spatialdatapip install spatialdata_io
>导入整合分群所需要的python库
#导入python库
import pandas as pd
import scanpy as sc
import bbknn
import spatialdata as sd
from spatialdata_io import xenium
import matplotlib.pyplot as plt
#读取样本信息文件
sample_info = pd.read_csv("./sample_info.txt", sep='\t')
>读取并合并所有样本数据,使用spatialdata_io库中的xenium函数加载Xenium数据
adatas = []
for _, row in sample_info.iterrows(): oldsample = row['oldsample'] sample = row['sample'] group = row['group'] sdata = xenium(oldsample) adata = sdata['table'] adata.obs['sample'] = sample adata.obs['group'] = group adata.obs['oldsample'] = oldsample adatas.append(adata)combined_adata = adatas[0].concatenate(adatas[1:], index_unique='-')
>这里需要提一下xenium()函数load后的样本数据结构,后续如果是单样本分析无需整合,直接使用该函数load样本数据即可。
Images(图像数据):存储组织 / 细胞的形态学成像数据(如明场、荧光染色图像),是空间分析的 “背景图层”
Labels(分割标签):存储细胞 / 细胞核的像素级分割掩码。cell_labels:细胞级分割掩码,每个像素对应一个细胞 ID,nucleus_labels:细胞核级分割掩码,每个像素对应一个细胞核 ID
Points(点数据):每个点代表一个转录本分子的空间坐标(x/y/z)
Tables(表格数据):每个细胞的转录组数据 + 空间属性
>数据预处理:主要包括细胞过滤>基因水平过滤>表达量归一化>对数转换>高变基因筛选步骤,筛选后的高变基因集将用于后续 PCA 降维、批次效应校正及聚类分析。
sc.pp.filter_cells(combined_adata, min_genes=10)
sc.pp.filter_genes(combined_adata, min_cells=3)filtered_cell_ids = combined_adata.obs.indexsc.pp.normalize_total(combined_adata, target_sum=1e4)sc.pp.log1p(combined_adata)#高变基因的选择跟进自己的需求#Xenium平台可以使用全部基因sc.pp.highly_variable_genes( combined_adata, min_mean=0.0125, max_mean=3, min_disp=0.5, n_top_genes=5000 )
>对预处理后的数据开展降维、批次校正及聚类分析:首先基于筛选出的高变基因集进行主成分分析(PCA);随后使用 BBKNN 算法校正样本批次效应(以 “sample” 为批次分组依据,根据自己数据批次调整),消除不同样本间的技术偏差;接着通过 Leiden 算法对细胞进行无监督聚类,确定细胞亚群分类;最后基于校正后的近邻关系进行 UMAP 降维。
sc.tl.pca(combined_adata, svd_solver='arpack', n_comps=30)
sc.pl.pca_variance_ratio(combined_adata, n_pcs=30, show=False)
plt.savefig("pca_variance_ratio.png",dpi=300, bbox_inches="tight")
bbknn.bbknn(combined_adata,batch_key="sample",n_pcs=30)
sc.tl.leiden(combined_adata, resolution=0.6)
sc.tl.umap(combined_adata, n_components=2)
sc.pl.umap(combined_adata, color=['leiden'], show=False)
分群效果
需说明的是,分群效果与样本所属的组织类型关联度较高,实际应用中应根据项目的样本背景、研究目的等选择贴合需求的分析方法
这里用到的两个样本总计大约160万细胞,具体运行时间和资源消耗:
Python 下的 BBKNN 批次校正方法,填补了 Seurat 在大样本、高细胞量Xenium 数据处理中的资源适配短板。同时BBKNN 在速度、大数据兼容性及生物学特征保留上的显著优势,使其成为大规模 Xenium 数据整合的优选工具。大家可以在分析中结合自己的项目灵活调整分析策略,高效完成 Xenium 数据的批次校正与细胞亚群挖掘。
[1]Tran HTN, Ang KS, Chevrier M, Zhang X, Lee NYS, Goh M, Chen J. A benchmark of batch-effect correction methods for single-cell RNA sequencing data. Genome Biol. 2020 Jan 16;21(1):12. doi: 10.1186/s13059-019-1850-9. PMID: 31948481; PMCID: PMC6964114.
👉 关于亿科羲和 👈
南京亿科羲和基因数据科技有限公司(XHGeneData),成立于2023年,是一家以数据科学与人工智能为核心驱动力的前沿生物科技企业。公司深度融合生物信息学与软件工程的跨学科技术,专注为生命科学研究和医疗健康领域提供创新的组学数据分析解决方案,致力推动精准医疗和生物医药研发的智能化进程。我们以“解码生命数据,赋能健康未来”为使命,通过技术革新持续探索生命数据的价值边界,引领行业智能化变革。
官网链接:https://www.xhgenedata.cn

