单细胞分析最佳实践¶
概述¶
《单细胞分析最佳实践》(Single-cell best practices)是一本持续更新的开源在线书籍,由 Theislab 实验室主导编写并维护。其目标是为跨模态(scRNA-seq、scATAC-seq、空间转录组学等)的单细胞数据分析提供标准化、可复现的操作指南。本书的最新渲染版本可在 sc-best-practices.org 访问。
本书的核心理念建立在 2023 年发表在《Nature Reviews Genetics》上的专家建议文章 《跨模态单细胞分析的最佳实践》(Heumos et al., 2023)之上。该文章系统性总结了从数据预处理到生物学解释的各个环节中被广泛认可的分析策略与工具,旨在帮助研究人员减少试错成本,提高结果的可比性与可靠性。
本书与文章并非静止的文档,而是一个社区驱动的项目。作者明确邀请全球单细胞研究者共同参与维护,无论是新手还是资深分析师,都能在贡献过程中找到适合自己的任务。此外,所有的教程 Notebook 以及配套的 Conda 环境文件均开放在 GitHub 仓库中,并可直接下载或适配到使用者自己的数据集。
核心知识点¶
单细胞分析的最佳实践覆盖了从原始数据到最终结论的完整流程。以下根据 Heumos 等(2023)专家建议及相关书籍内容,提炼出各关键环节的核心原则与推荐策略。
1. 数据预处理与质量控制¶
- 原始数据处理:针对不同测序平台(如 10x Genomics、Smart-seq2)使用专用比对和定量流程(如 Cell Ranger、STARsolo),并强烈建议保留原始分子计数矩阵,避免过早标准化。
- 质量过滤:基于线粒体基因比例、总UMI数、检测到的基因数分布进行细胞级别的过滤;利用双细胞检测工具(如 Scrublet、DoubletFinder)计算双细胞概率并移除。
- 批次效应评估:在整合前必须对批次效应进行诊断,推荐通过 PCA 或 UMAP 可视化检查未校正的批次源差异。
2. 标准化与对数变换¶
- 标准化方法:推荐使用文库大小归一化(library-size normalization)结合对数转换(log1p),如
sc.pp.normalize_total和sc.pp.log1p(Scanpy)。 - 替代方案:对大数据集可使用
scran(R)或scTransform(Seurat)的基于去卷积的标准化,但需注意计算效率。 - 不要过度标准化:避免在保留生物学方差与去除技术噪声之间失衡;部分算法(如 GLM 模型)可直接基于原始计数建模,无需显式标准化。
3. 高变基因(HVG)选择与降维¶
- 高变基因选择:使用 Scanpy 的
sc.pp.highly_variable_genes(Seurat 默认为vst方法),推荐选 2000–4000 个 HVG 以捕获主要生物学信号并压缩噪声。 - 降维:通常先进行 PCA(如 50 个主成分),然后用 UMAP 或 t-SNE 进行非线性嵌入可视化。注意 UMAP 参数(如邻居数)对结构的影响,应避免过度解读小聚类间的距离。
- 批次校正嵌入:在需要整合多个批次时,可使用 Harmony、Scanorama 或 BBKNN 以获取批次混合良好的嵌入,但保守起见建议与未整合的嵌入对比。
4. 批次整合与数据 harmonization¶
- 整合策略选择:根据实验设计和先验知识选择整合方法。常见工具如:
- scVI:基于深度概率模型的整合,可同时用于去噪和差异分析。
- Harmony:在 PCA 空间迭代校正,速度快,适用于超大数据集。
- Seurat CCA/MNN 与 Scanorama:基于互近邻或字典学习的整合方法。
- 整合验证:必须通过局部逆 Simpson 指数(LISI)、ASW 等指标评估整合后的混合程度,同时确保细胞类型特异性标记基因的表达模式未被过度抹除。
- 保守整合:对于有监督的实验设计,优先选择“reference building”策略,即将新数据映射到已标注的参考图谱,避免反复全整合。
5. 细胞聚类与标注¶
- 聚类方法:最常用的是基于图的 Louvain 或 Leiden 聚类(在 Scanpy/Seurat 中实现)。分辨率的选择应通过稳定性分析和标记基因合理性来判断,而非固定默认值。
- 自动标注:可利用参考数据集(如 Human Cell Atlas)和标签转移工具(如 CellTypist、SingleR、scArches)进行自动细胞类型注释,但必须人工审核,尤其是稀有细胞群和过渡状态。
- 手动标注:基于已知标记基因的表达式和差异基因分析,结合领域知识给出细胞类型,推荐在文献中公开所用标记基因的列表。
6. 差异分析与基因程序发现¶
- 差异基因表达分析:推荐使用基于负二项分布的模型(如 MAST、DESeq2、EdgeR 的适配版本,或 Scanpy 的
rank_genes_groups并使用 Wilcoxon 或 t-test_overestim_var 作为快速方法)。对于复杂实验设计,可使用伪总体(pseudobulk)聚合减少假阳性。 - 基因程序/通路分析:利用基因集富集分析(如 GSEApy、Enrichr、AUCell)或非负矩阵分解(NMF)提取功能模块,注意多重检验校正。
- 跨模态比较:对于同时具有 scRNA-seq 和 scATAC-seq 的数据,可以使用 Seurat 的 WNN 或 MOFA+ 等工具进行多模态因子分析,揭示协同调控程序。
7. 空间转录组学专用考量¶
- 数据预处理:需要结合空间位置信息进行质量过滤,注意组织区域的组织学完整性。
- 空间变量基因:如 SpatialDE、SPARK-X 等方法识别与空间位置相关的基因。
- 整合分析:将空间数据与 scRNA-seq 参考整合(如 cell2location、RCTD)推断每个 spot 的细胞类型构成,是目前推荐的做法。
8. 可复现性与报告¶
- 容器化与环境管理:整个分析应使用 Conda 环境或 Docker 镜像记录所有软件版本。本书为每一位分析步骤的 Notebook 均提供了最小化 Conda 环境文件。
- 工作流与笔记本:推荐使用 Jupyter Notebook 或 R Markdown 记录分析,并利用 Nextflow、Snakemake 等工作流管理工具处理大规模重分析。
代码实操:获取与适配示例 Notebook¶
本书的所有 Notebook 都可以在 GitHub 仓库的 jupyter-book 文件夹中找到,并可直接下载或克隆整个仓库。
# 克隆整个书籍仓库,包含所有 Notebook 和环境文件
git clone https://github.com/theislab/single-cell-best-practices.git
cd single-cell-best-practices/jupyter-book
# 查看可用的示例 Notebook
ls *.ipynb
每个 Notebook 都配有一个 environment.yml 文件,用于快速构建一致的软件环境。例如,使用 Conda 创建专用环境:
# 进入某个章节文件夹(比如 03_quality_control)
cd 03_quality_control
conda env create -f environment.yml
conda activate sc-best-practices-qc
# 启动 Jupyter 并打开对应 Notebook
jupyter notebook quality-control.ipynb
如果希望在自己的数据集上运行分析,可以在 Notebook 的开始部分修改数据读取路径。例如,在 Scanpy 中加载自己的 h5ad 文件:
import scanpy as sc
# 原始代码加载示例数据:adata = sc.datasets.pbmc3k()
# 修改为加载自己的数据文件
adata = sc.read_h5ad("your_dataset.h5ad") # 替换为自己的文件路径
随后即可顺序执行 Notebook 中的单元格,按照最佳实践流程进行分析。注意部分步骤可能需要根据数据规模调整参数,如高变基因数量、聚类分辨率等。
常见问题¶
Q: 这本书和那篇《Nature Reviews Genetics》文章有什么区别?
A: 文章是专家共识性的建议,提供了高层次的原则和工具推荐。而书籍是基于这些原则的动手教程,包含可执行的 Jupyter Notebook、代码片段、环境配置以及更多的实操细节。书籍会持续更新,而文章作为静态文献提供学术引用。
Q: 如何为项目贡献内容?
A: 请阅读仓库中的 CONTRIBUTING.md 文件。您可以通过修复错误、改进文档、增加新工具教程或翻译等方式参与。所有贡献均通过 Pull Request 流程接受审阅。
Q: 项目正在寻求哪些特定帮助?
A: 项目维护者明确指出需要帮助处理下列任务:更新已有 Notebook 以适配新版 Scanpy/Seurat API、增加单细胞多模态(如 CITE-seq、scATAC-seq)和空间转录组学的章节、改进教科书中的叙述文本、以及审查开放 issue 中报告的问题。
Q: 如果我的数据不是人类或小鼠,这些最佳实践仍然适用吗?
A: 大部分通用步骤(质控、标准化、降维、聚类)是物种无关的。但需要注意:标记基因集合和参考数据集是物种特异性的,自动注释步骤需要使用与您的物种匹配的参考,或者改用无参考的特征提取方法。
Q: 如何在研究论文中引用这些资源?
A: 请优先引用 Heumos 等人 2023 年的专家建议文章。BibTeX 条目已在上方提供。同时可引用书籍的网站(https://sc-best-practices.org)和具体使用的代码版本(建议绑定 GitHub 的 commit hash)。
Q: 运行 Notebook 时遇到报错怎么办?
A: 首先确认已严格按照提供的 environment.yml 重建环境,并安装了所有依赖。如果问题持续,请在 GitHub 仓库中搜索或提交一个新的 issue,提供完整的错误信息和环境信息(conda list)。
Q: 能否将这些 Notebook 无缝应用于百万级细胞的数据集?
A: 部分 Notebook 是为教程规模设计的,直接用于超大数据集可能遇到内存瓶颈。建议将计算密集步骤(如 PCA、最近邻计算)替换为支持内存外计算或 GPU 加速的工具(如 rapids-singlecell),同时参考书中关于大规模数据处理的建议。
速查表¶
| 分析步骤 | 推荐工具 (Python) | 推荐工具 (R) | 关键参数/注意事项 |
|---|---|---|---|
| 原始数据处理 | Cell Ranger, STARsolo, kallisto|bustools | Cell Ranger, STARsolo | 输出 raw counts 矩阵 |
| 质控过滤 | Scanpy pp.filter_cells, Scrublet | Seurat PercentageFeatureSet, DoubletFinder | 线粒体上限:10-20%,基因数 200-5000,UMI < 60000 |
| 标准化 | Scanpy pp.normalize_total + pp.log1p | Seurat NormalizeData (LogNormalize) | 目标因子 10000 |
| 高变基因选择 | pp.highly_variable_genes | FindVariableFeatures (vst) | 默认 2000 个,极端差分时可增至 4000 |
| 批次整合 | scVI, Harmony, BBKNN | Harmony, Seurat (CCA) | 验证 LISI > 1.5, ASW < 0.2 可能过度整合 |
| 降维 | PCA → UMAP / t-SNE | PCA → UMAP / t-SNE | n_neighbors=15,随机种子固定 |
| 聚类 | tl.leiden(分辨率 0.5-1.2) | FindClusters (resolution 0.5-1.2) | 基于 Leiden 算法,必须用标记基因验证 |
| 差异基因 | rank_genes_groups (Wilcoxon); pseudobulk + DESeq2 | FindMarkers, FindAllMarkers; pseudobulk + DESeq2 | 伪总体法对重复实验更保守 |
| 自动注释 | CellTypist, SingleR (通过 anndata2ri) | SingleR, scmap | 必须核对标志基因,稀有类型易误标注 |
| 空间转录组 | Squidpy, cell2location, scanpy | Seurat, Giotto, RCTD | 结合 H&E 图像作为质量参考 |
| 环境与容器 | Conda/renv + Docker | renv + Docker | 务必导出 environment.yml 或 sessionInfo() |
持续学习与社区参与:单细胞分析领域正高速演进,最佳实践也会随之更新。我们鼓励读者通过 GitHub 仓库关注最新动态、提交问题,并共同推动该知识库的完善。