引言
本系列讲解 使用Scanpy
分析单细胞(scRNA-seq)数据教程,持续更新,欢迎关注,转发!
主成分分析
利用主成分分析(PCA)来降低数据维度,它能够揭示数据变化的主要方向,并且可以去除数据中的噪声。
sc.tl.pca(adata, svd_solver="arpack")
虽然我们可以在PCA坐标系中绘制散点图,但后续并不会用到这个图。
sc.pl.pca(adata, color="CST3")
我们来查看单个主成分对数据总方差的贡献程度。这有助于我们确定在计算细胞邻域关系时,应该考虑多少个主成分,比如在使用聚类函数sc.tl.louvain()
或tSNE sc.tl.tsne()
时。在我们的经验中,对主成分数量进行一个大致的估计往往就足够了。
sc.pl.pca_variance_ratio(adata, log=True)
结果保存:
adata.write(results_file)
adata
计算邻域图
我们来根据数据矩阵的PCA表示来计算细胞的邻域图。你可以直接使用默认值。不过,为了能够复现Seurat
的实验结果,我们还是采用以下这些特定的数值。
sc.pp.neighbors(adata, n_neighbors=10, n_pcs=40)
嵌入邻域图
我们建议采用UMAP将图嵌入到二维空间,具体内容见下文。相比tSNE
,UMAP
在呈现流形的全局连通性方面表现得更为出色,也就是说,它能更好地保留数据的轨迹信息。不过,在某些情况下,你可能会发现存在不相连的聚类或其他连通性问题。这些问题通常可以通过运行特定的命令来解决。
sc.tl.paga(adata)
sc.pl.paga(adata, plot=False) # remove `plot=False` if you want to see the coarse-grained graph
sc.tl.umap(adata, init_pos='paga')
sc.tl.umap(adata)
sc.pl.umap(adata, color=["CST3", "NKG7", "PPBP"])
由于我们对adata
设置了.raw
属性,之前的图展示的是“原始”(已经过标准化、对数化处理,但未经校正)的基因表达情况。你也可以通过明确指出不使用.raw
属性,来绘制经过缩放和校正后的基因表达情况。
sc.pl.umap(adata, color=["CST3", "NKG7", "PPBP"], use_raw=False)
聚类邻域图
和Seurat
以及许多其他框架一样,我们推荐使用Leiden
图聚类方法(基于优化模块性的社区检测)。需要注意的是,Leiden聚类是直接对细胞的邻域图进行聚类的,而我们在前面的部分已经计算出了这个邻域图。
sc.tl.leiden(
adata,
resolution=0.9,
random_state=0,
flavor="igraph",
n_iterations=2,
directed=False,
)
绘制聚类结果,这些结果与Seurat
的结果非常契合。
sc.pl.umap(adata, color=["leiden", "CST3", "NKG7"])
结果保存:
adata.write(results_file)