前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Scanpy 分析 scRNA-seq数据|质控

Scanpy 分析 scRNA-seq数据|质控

作者头像
数据科学工厂
发布于 2025-05-14 03:17:16
发布于 2025-05-14 03:17:16
5500
代码可运行
举报
运行总次数:0
代码可运行

预处理和聚类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Core scverse libraries
import scanpy as sc
import anndata as ad

# Data retrieval
import pooch

sc.settings.set_figure_params(dpi=50, facecolor="white")

在本文中,使用的数据来源于健康人类供体的骨髓单核细胞,这些数据属于 openproblem 的 NeurIPS 2021 基准数据集。这些样本是通过 10X Multiome 基因表达和染色质可及性试剂盒进行测量的。

将计数矩阵导入到 AnnData 对象中,该对象为数据注释和不同数据表示方式提供了多个存储位置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
EXAMPLE_DATA = pooch.create(
    path=pooch.os_cache("scverse_tutorials"),
    base_url="doi:10.6084/m9.figshare.22716739.v1

/", ) EXAMPLE_DATA.load_registry_from_doi() samples = { "s1d1": "s1d1_filtered_feature_bc_matrix.h5", "s1d3": "s1d3_filtered_feature_bc_matrix.h5", } adatas = {} for sample_id, filename in samples.items(): path = EXAMPLE_DATA.fetch(filename) sample_adata = sc.read_10x_h5(path) sample_adata.var_names_make_unique() adatas[sample_id] = sample_adata adata = ad.concat(adatas, label="sample") adata.obs_names_make_unique() print(adata.obs["sample"].value_counts()) adata

这些数据包含每个样本大约 8,000 个细胞和 36,601 个测量的基因。接下来,将通过基础的预处理和聚类流程来分析这些数据。

质量控制

scanpycalculate_qc_metrics() 函数用于计算常见的质量控制指标,这些指标主要基于 scater 中的 calculateQCMetrics。可以通过将特定基因群体传递给该函数,来计算这些基因群体的计数比例。线粒体基因、核糖体基因和血红蛋白基因分别由不同的前缀来定义。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# mitochondrial genes, "MT-" for human, "Mt-" for mouse
adata.var["mt"] = adata.var_names.str.startswith("MT-")
# ribosomal genes
adata.var["ribo"] = adata.var_names.str.startswith(("RPS", "RPL"))
# hemoglobin genes
adata.var["hb"] = adata.var_names.str.contains("^HB[^(P)]")

sc.pp.calculate_qc_metrics(
    adata, qc_vars=["mt", "ribo", "hb"], inplace=True, log1p=True
)

可以查看一些 QC 指标的提琴图,包括:

  • 计数矩阵中表达的基因数量
  • 每个细胞的总计数
  • 线粒体基因中的计数百分比
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sc.pl.violin(
    adata,
    ["n_genes_by_counts", "total_counts", "pct_counts_mt"],
    jitter=0.4,
    multi_panel=True,
)

此外,通过观察按线粒体基因计数百分比(pct_counts_mt)着色的散点图,可以更全面地评估 QC 指标之间的关系。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sc.pl.scatter(adata, "total_counts", "n_genes_by_counts", color="pct_counts_mt")

根据 QC 指标的图表,可以设置手动或自动阈值,以移除那些表达过多线粒体基因或总计数过多的细胞。然而,有时看似质量不佳的指标可能是由真实的生物学现象引起的,因此建议先采用较为宽松的过滤策略,稍后再重新评估。因此,目前仅过滤掉表达少于 100 个基因的细胞,以及在少于 3 个细胞中被检测到的基因。

另外,对于包含多个批次的数据集,建议对每个样本分别进行质量控制,因为不同批次之间的质量控制阈值可能会有很大差异。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sc.pp.filter_cells(adata, min_genes=100)
sc.pp.filter_genes(adata, min_cells=3)

双细胞检测

下一步,运行双细胞检测算法。识别双细胞非常重要,因为它们可能会导致下游分析步骤中的误分类或结果扭曲。Scanpy 提供了一种名为 Scrublet 的双细胞检测方法。Scrublet 通过最近邻分类器,结合观察到的转录组和模拟双细胞来预测细胞双细胞。scanpy.pp.scrublet() 函数会在 .obs 中添加 doublet_score(双细胞分数)和 predicted_doublet(预测的双细胞标记)。可以直接根据 predicted_doublet 进行过滤,也可以在后续的聚类分析中使用 doublet_score 来过滤掉那些双细胞分数较高的聚类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sc.pp.scrublet(adata, batch_key="sample")

有两种方式可以移除双细胞:

  • 一种是在早期直接过滤掉被标记为双细胞的细胞;
  • 另一种是在完成聚类后,再移除那些双细胞分数较高的聚类。

Reference

[1]

Source: https://scvelo.readthedocs.io/en/stable/about.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冷冻工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 预处理和聚类
  • 质量控制
  • 双细胞检测
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档