Scanpy 分析 scRNA-seq:降维与聚类

简介: Scanpy 分析 scRNA-seq:降维与聚类

引言

本系列讲解 使用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"])

相关文章
|
11月前
|
人工智能 安全 Serverless
AgentRun Sandbox SDK 正式开源!集成 LangChain 等主流框架,一键开启智能体沙箱新体验
AgentRun Sandbox SDK 开源发布,基于Serverless架构提供安全、弹性的智能体运行环境。支持LangChain、AgentScope等主流框架,内置代码解释、浏览器操作等多模态沙箱能力,助力Agentic AI快速落地,让开发更轻盈,云端更安全。
|
编解码 算法 数据可视化
Scanpy 分析 scRNA-seq:细胞类型注释
Scanpy 分析 scRNA-seq:细胞类型注释
1024 0
Scanpy 分析 scRNA-seq:细胞类型注释
|
存储 数据可视化 数据挖掘
单细胞分析: Scanpy 核心绘图 (1)
单细胞分析: Scanpy 核心绘图 (1)
1102 4
|
数据采集 存储 数据可视化
Scanpy 分析 3k PBMCs:数据预处理
Scanpy 分析 3k PBMCs:数据预处理
614 12
Scanpy 分析 3k PBMCs:数据预处理
|
数据挖掘
Scanpy 分析 3k PBMCs:降维与聚类
Scanpy 分析 3k PBMCs:降维与聚类
Scanpy 分析 3k PBMCs:降维与聚类
|
机器学习/深度学习 数据可视化 Python
Scanpy 分析 3k PBMCs:寻找 marker 基因
Scanpy 分析 3k PBMCs:寻找 marker 基因
Scanpy 分析 3k PBMCs:寻找 marker 基因
|
存储 数据可视化
单细胞分析: Scanpy 核心绘图 (3)
单细胞分析: Scanpy 核心绘图 (3)
1420 0
单细胞分析: Scanpy 核心绘图 (3)
|
存储 数据可视化 数据挖掘
单细胞分析: Scanpy 核心绘图 (2)
单细胞分析: Scanpy 核心绘图 (2)
单细胞分析: Scanpy 核心绘图 (2)
|
数据采集 存储 索引
转录组分析丨一套完整的操作流程简单案例(上)
转录组分析丨一套完整的操作流程简单案例