引言
本系列讲解 使用Scanpy
分析单细胞(scRNA-seq)数据 教程,持续更新,欢迎关注,转发!
归一化
接下来的预处理步骤是归一化。一种常用的方法是先进行计数深度缩放,然后进行对数加一(log1p)转换。计数深度缩放是将数据标准化到一个“尺寸因子”,比如数据集中所有样本的中位数计数深度、每万(CP10k)或每百万(CPM)计数。通过调整 pp.normalize_total 中的 target_sum 参数,可以控制计数深度缩放的尺寸因子。采用中位数计数深度进行归一化,并结合 log1p 转换(也就是 log1PF)来处理数据。
# Saving count data
adata.layers["counts"] = adata.X.copy()
# Normalizing to median total counts
sc.pp.normalize_total(adata)
# Logarithmize the data
sc.pp.log1p(adata)
特征选择
接下来,希望减少数据集的复杂性,只保留那些最有信息量的基因。这个过程通常被称为特征选择。scanpy 的 pp.highly_variable_genes 函数会根据所选的方法,来识别出高变基因。
sc.pp.highly_variable_genes(adata, n_top_genes=2000, batch_key="sample")
sc.pl.highly_variable_genes(adata)
降维
通过主成分分析(PCA)来降低数据的维度。PCA 可以揭示数据中主要的变化方向,并去除噪声。
sc.tl.pca(adata)
可以检查每个主成分对数据总方差的贡献,从而判断在计算细胞之间的相似性(例如用于聚类分析的 leiden() 或 tsne() 函数)时,应该考虑多少主成分。根据的经验,即使多选一些主成分,也不会有明显的负面影响。
sc.pl.pca_variance_ratio(adata, n_pcs=50, log=True)
此外,还可以绘制主成分图,看看是否有某些不期望的因素(比如批次效应或质量控制指标)在数据中导致了显著的变异。虽然在这个案例中没有发现特别严重的问题,但进行这样的探索还是很有必要的。
sc.pl.pca(
adata,
color=["sample", "sample", "pct_counts_mt", "pct_counts_mt"],
dimensions=[(0, 1), (2, 3), (0, 1), (2, 3)],
ncols=2,
size=2,
)
最近邻图的构建和可视化
利用数据矩阵的主成分分析(PCA)结果来构建细胞的邻域图。
sc.pp.neighbors(adata)
接着,通过 UMAP,将该图映射到二维空间中,以便进行可视化展示:
sc.tl.umap(adata)
现在,可以根据样本类型对 UMAP 图进行可视化处理。
sc.pl.umap(
adata,
color="sample",
# Setting a smaller point size to get prevent overlap
size=2,
)
虽然本教程涉及的数据包含了两个不同的样本,但发现它们之间的批次效应非常小,因此可以继续对数据进行聚类分析和注释。
如果你在 UMAP 图中发现了批次效应,那么进行跨样本整合以及批次校正或整合可能会有所帮助。建议你可以参考 scanorama
和 scvi-tools
这两个工具来进行批次整合。
聚类
和 Seurat
以及其他许多分析框架一样,推荐使用 Leiden 图聚类方法。需要注意的是,Leiden 聚类是直接对细胞的邻域图进行操作的,而这个邻域图已经在前面的步骤中计算完成了。
# Using the igraph implementation and a fixed number of iterations can be significantly faster, especially for larger datasets
sc.tl.leiden(adata, flavor="igraph", n_iterations=2)
sc.pl.umap(adata, color=["leiden"])
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。