单细胞Ana-Python
🌟单细胞分析框架概览(总)
单细胞组学是当前生命科学研究中的热点领域,随着技术发展,分析工具生态也日趋完善。当前主流的单细胞分析框架主要分为三大阵营:
框架 | 语言 | 代表生态 |
---|---|---|
Bioconductor | R | 多种包:SingleCellExperiment 、scran 等 |
Seurat | R | Seurat 本身支持多模态和空间数据 |
scverse | Python | scanpy , anndata , muon , scvi-tools , scirpy , squidpy , cell2location , 等 |
其中 scverse 是当前发展最迅速的生态系统,具有出色的可扩展性、模块化能力,并与 Python 的机器学习、图像处理生态高度兼容,逐渐成为现代大数据单细胞分析的主流选择。
📦 1. scverse 生态核心工具详解(分)
1.1 anndata
:统一数据结构核心
- 基本对象:
AnnData
,用于存储单细胞表达矩阵及其元数据。 - 数据槽设计(类似 HDF5 层级结构):
X
:主表达矩阵(通常为稀疏矩阵)obs
/var
:细胞和基因注释obsm
/varm
:嵌入维度数据(如UMAP, PCA)layers
:不同变换方式的表达矩阵uns
:非结构化元信息(颜色映射、聚类设置等)obsp
/varp
:细胞对/基因对关系矩阵(如邻接图)
📖 官方教程:anndata 文档
1.2 scanpy
:单细胞表达分析主力库
提供完整分析流程:
- 预处理:过滤、归一化、对数化
- 降维:PCA、UMAP、t-SNE
- 聚类:louvain、leiden
- 差异表达分析:
sc.tl.rank_genes_groups
- 可视化:UMAP图、热图、空间图(spatial)
🌍 空间可视化函数:
sc.pl.spatial(adata, color="gene_name", img_key="hires")
📖 教程:Scanpy API
1.3 muon
:多组学分析框架
- 支持
scRNA+ATAC
、CITE-seq
等多模态整合分析。 - 核心对象:
MuData
,扩展自AnnData
。 - 完美兼容
scanpy
与scvi-tools
。
1.4 scvi-tools
:基于深度学习的统计建模工具包
用于高阶分析,核心方法为变分自编码器(VAE):
- 批次效应校正
- 数据降噪与特征提取
- 差异表达分析
- 多组学联合建模
📌 模型支持:
SCVI
:基础VAE建模TOTALVI
:RNA+蛋白MULTIVI
:RNA+ATACPEVI
:预测性建模
📖 文档:https://docs.scvi-tools.org
1.5 SpatialData
与 Squidpy
:空间组学利器
- SpatialData:统一空间数据存储框架,支持 FAIR 原则。
- Squidpy:用于分析和可视化空间转录组与组织图像数据,功能包括:
- 邻域图构建
- 空间统计
- 图像整合与分割
- napari 交互式可视化
📖 文档:https://squidpy.readthedocs.io
1.6 scirpy
:TCR/BCR 重构分析
- 支持从单细胞测序数据中分析TCR/BCR序列重构
- 与
scanpy
和mudata
高度兼容 - 模块丰富,支持聚类、克隆图谱可视化等
📖 文档:https://scirpy.scverse.org
1.7 其他常用工具包(简略介绍)
工具 | 功能 |
---|---|
pySCENIC |
转录因子活性分析 |
scVelo |
RNA velocity 分析 |
cell2location |
空间定位细胞类型 |
tangram |
scRNA与空间数据对齐 |
DoubletDetection |
检测双细胞 |
CellRank |
动态细胞轨迹推断 |
PyDESeq2 |
bulk RNA-seq 差异分析(Python实现) |
cellxgene |
高效交互式可视化工具 |
hotspot |
基因模块识别 |
🧠 总结(总)
基于当前单细胞分析需求的复杂性,scverse 生态成为单细胞 Python 社区的分析标准。其高度模块化的数据结构(anndata, mudata, spatialdata)以及围绕 scanpy / scvi-tools 等工具构建的分析工作流,为科研人员提供了从原始数据导入到建模、可视化、解释的一站式解决方案。
随着空间组学、多模态组学数据的普及,工具如 muon
、SpatialData
、Squidpy
也将成为未来研究的关键工具。
🧪 代码总结(实用框架)
# 1. 导入数据
import scanpy as sc
adata = sc.read_10x_h5("filtered_feature_bc_matrix.h5")
# 2. 基础预处理
sc.pp.filter_cells(adata, min_genes=200)
sc.pp.normalize_total(adata, target_sum=1e4)
sc.pp.log1p(adata)
sc.pp.highly_variable_genes(adata, n_top_genes=2000)
# 3. 降维 + 聚类
sc.pp.pca(adata)
sc.pp.neighbors(adata)
sc.tl.umap(adata)
sc.tl.leiden(adata)
# 4. 差异表达分析
sc.tl.rank_genes_groups(adata, groupby="leiden", method="t-test")
# 5. 可视化
sc.pl.umap(adata, color=["leiden"])
sc.pl.rank_genes_groups_heatmap(adata, groups="3", n_genes=10)
# 6. 空间可视化(如有空间数据)
sc.pl.spatial(adata, color="GeneX", img_key="hires", size=1.5)
# 7. scvi-tools 初始化(如需高级分析)
from scvi.model import SCVI
import scvi
scvi.data.setup_anndata(adata)
model = SCVI(adata)
model.train()
adata.obsm["X_scVI"] = model.get_latents()