Scanpy 是一个用于分析单细胞基因表达数据的可扩展工具包,构建在 AnnData 之上,重点支持聚类、轨迹推断和可视化。它用于处理高维生物数据,通过 PCA/UMAP 等降维方法识别组织或微生物组中的稀有细胞群体。
用途
Scanpy 适用于以下场景:分析单细胞 RNA 测序(scRNA-seq)数据;识别异质组织中的细胞类型和状态;重建发育轨迹;比较不同条件下的细胞群体;发现稀有细胞类型。
核心原则
AnnData 格式:Scanpy 使用 AnnData 对象,将表达矩阵、细胞元数据和基因注释存储在一起。
降维:将高维基因表达(20,000+ 基因)降至 2D/3D 以便可视化(PCA → UMAP/t-SNE)。
聚类:根据基因表达空间中的相似性对细胞进行分组,以识别细胞类型。
使用方式
标准导入:
import scanpy as sc import pandas as pd import numpy as np
基本模式:
1. 加载数据集(AnnData 对象)
adata = sc.read_h5ad("cells.h5ad")
或:adata = sc.read_10x_mtx("path/to/mtx")
2. 质控与归一化
sc.pp.filter_cells(adata, min_genes=200) sc.pp.filter_genes(adata, min_cells=3) sc.pp.normalize_total(adata, target_sum=1e4) sc.pp.log1p(adata)
3. 降维与可视化
sc.pp.highly_variable_genes(adata) sc.tl.pca(adata) sc.tl.umap(adata) sc.pl.umap(adata, color=['cell_type', 'gene_A'])
4. 聚类
sc.tl.leiden(adata, resolution=0.5) sc.pl.umap(adata, color='leiden')
关键规则
建议做法:设置 scanpy 配置,例如使用 sc.settings.verbosity = 3 获取进度信息;过滤低质量细胞,移除基因数过少或线粒体含量过高的细胞;分析前进行归一化,以消除测序深度差异;使用高变基因,将分析聚焦于有信息量的基因。
不建议做法:不要跳过质控,低质量细胞可能主导聚类结果;不要对原始计数使用 PCA,务必先归一化并进行对数变换;不要忽略批次效应,合并数据集时应使用批次校正(例如 sc.pp.harmony_integrate)。
高级模式
轨迹推断:
import cellrank as cr
重建发育轨迹
sc.tl.paga(adata) sc.pl.paga(adata) adata.uns['iroot'] = np.flatnonzero(adata.obs['cell_type'] == 'stem')[0] sc.tl.dpt(adata)
差异表达:
查找每个聚类的标记基因
sc.tl.rank_genes_groups(adata, 'leiden', method='wilcoxon') sc.pl.rank_genes_groups(adata, n_genes=20)
Scanpy 已经革新了单细胞生物学,使研究人员能够绘制组织的细胞多样性图谱,并理解细胞如何分化与发挥功能。