# 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 对象中,该对象为数据注释和不同数据表示方式提供了多个存储位置。
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 个测量的基因。接下来,将通过基础的预处理和聚类流程来分析这些数据。
scanpy
的 calculate_qc_metrics()
函数用于计算常见的质量控制指标,这些指标主要基于 scater
中的 calculateQCMetrics
。可以通过将特定基因群体传递给该函数,来计算这些基因群体的计数比例。线粒体基因、核糖体基因和血红蛋白基因分别由不同的前缀来定义。
# 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 指标的提琴图,包括:
sc.pl.violin(
adata,
["n_genes_by_counts", "total_counts", "pct_counts_mt"],
jitter=0.4,
multi_panel=True,
)
此外,通过观察按线粒体基因计数百分比(pct_counts_mt)着色的散点图,可以更全面地评估 QC 指标之间的关系。
sc.pl.scatter(adata, "total_counts", "n_genes_by_counts", color="pct_counts_mt")
根据 QC 指标的图表,可以设置手动或自动阈值,以移除那些表达过多线粒体基因或总计数过多的细胞。然而,有时看似质量不佳的指标可能是由真实的生物学现象引起的,因此建议先采用较为宽松的过滤策略,稍后再重新评估。因此,目前仅过滤掉表达少于 100 个基因的细胞,以及在少于 3 个细胞中被检测到的基因。
另外,对于包含多个批次的数据集,建议对每个样本分别进行质量控制,因为不同批次之间的质量控制阈值可能会有很大差异。
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 来过滤掉那些双细胞分数较高的聚类。
sc.pp.scrublet(adata, batch_key="sample")
有两种方式可以移除双细胞:
Reference
[1]
Source: https://scvelo.readthedocs.io/en/stable/about.html
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有