最近单细胞图谱越来越多的涌现,我们经常要用到别人产出的超级高质量的单细胞与自己测的细胞进行比较分析,但是图谱往往具有非常多的细胞数量,正常的计算设备无法带动,以最近发表的Science专刊的单细胞数据为例,动辄便是三四百万的单细胞量级,这个时候我们就需要对数据进行随机采样,以达到我们的计算能力,同时也不会影响我们的分析结果。

以小鼠的单细胞数据为例,The cell type composition of the adult mouse brain revealed by single cell and spatial genomics,这篇文章有4388420单核数据,读取下来需要400G+的运行内存,于是需要我们进行下采样,进行后续的分析。

有两种下采样方式,一种是每种细胞类群取N个,另一种是每种细胞类群取百分比,我通常使用百分比取样,是的细胞比例分布不改变。详细代码如下所示。

import anndata as ad

adata = ad.read('Macosko_Mouse_Atlas_Single_Nuclei.Use_Backed.h5ad')

# 比例采样
adata_temp = adata[adata.obs.groupby('ClusterNm').sample(frac = 0.1, random_state = 42, replace = True).index].copy()
adata_temp.write('Macosko_Mouse_Atlas_Single_Nuclei_percent10.h5ad')

# 固定采样
N = 2000
adata_temp = adata[adata.obs.groupby('ClusterNm').sample(n = N, random_state = 42, replace = True).index].copy()
adata_temp.write('Macosko_Mouse_Atlas_Single_Nuclei_2000.h5ad')

比例采样最后得到的结果并不一定是全部细胞数量的 10%,往往是有所出入的。