1. 课程简介:Scanpy 与单细胞 RNA-seq 分析的关系及本课程目标
大家好,我是老张,搞单细胞数据分析七八年了。今天咱们这第一讲,先不急着敲代码,而是聊清楚一个事:Scanpy 到底是个啥?我们这课要帮你搞定啥?说白了,就是给这门课画个地图,让你心里有数。
单细胞 RNA-seq,这几年火得不行。一个样本轻松测出几千甚至几万个细胞,每个细胞里两万多个基因的表达量。数据量一上来,分析就变得复杂。你需要把细胞分群、找 marker 基因、做差异分析、还得解释生物学意义。而这其中,整合和聚类是绝对的核心环节。我遇到过很多同学,跑完降维聚类就卡住了,不知道下一步怎么走,或者整合完数据发现批次效应没去掉,结果全是坑。
所以这门课的目标就一个:带着你从整合后的数据出发,手把手完成聚类和差异分析的全流程。不废话,只讲实战。
单细胞 RNA-seq 分析全流程
先给你一张全景图。整个分析链条大概是这样的:
虚线框里就是咱们这门课重点啃的部分。为什么跳过前两步?因为现在主流平台(10x Genomics、Drop-seq)出的数据都已经过初步处理,拿到手的往往是表达矩阵或者 h5 文件。我建议你从整合这一步入场——实际项目中 80% 的分析卡在整合和聚类的参数调优上。
Scanpy 是什么?
简单说,Scanpy 是 Python 生态里做单细胞 RNA-seq 分析的头号工具包。它基于 AnnData 数据结构,提供了一套从读取、预处理、降维、聚类到差异分析的完整 API。跟 Seurat(R 语言)不同,Scanpy 更轻量、更 Pythonic,适合嵌入到现有深度学习或机器学习流程中。
我个人习惯用 Scanpy 做分析,因为它的函数命名很直观,比如 sc.pp.filter_genes、sc.tl.leiden,看一眼就知道干嘛的。而且它的社区活跃,文档更新快,新算法(如 Harmony 整合)也很快就能集成进去。
本课程的核心目标
别误会,这门课不是扫盲课,而是实战进阶课。我们假设你已经跑过基本的 Scanpy 流程,但对整合后的数据如何做聚类、如何评估聚类质量、如何做差异分析并拿到可靠的 marker 基因,心里没底。
所以课程围绕以下 4 个目标展开:
| 目标 | 具体内容 | 解决什么问题 |
|---|---|---|
| 1. 整合后数据检查 | 如何用 PCA、UMAP 评估批次效应是否去除干净 | 避免把批次当成生物学变异 |
| 2. 聚类参数调优 | Leiden 算法的分辨率、邻居数如何选 | 聚类既不过粗也不过细 |
| 3. 差异分析 & marker 基因 | rank_genes_groups 的参数含义、p 值校正、效应量筛选 | 得到可靠且可重复的差异基因列表 |
| 4. 结果可视化与生物学解释 | dotplot、violin 图、热图、GO 富集 | 把数字变成生物学发现 |
我自己的经验:之前有个项目整合了 4 个批次的 PBMC 数据,第一次聚类分出 18 个亚群,但 UMAP 图上明显有批次分离的斑块。后来调整了 sc.pp.neighbors 的 n_neighbors 参数和聚类分辨率,才得到干净的 12 个群。这过程的调试,是我们课程要带你掌握的。
你需要具备的前置知识
为了让课程流畅,我建议你先装好这些:
- Python 3.8+,Anaconda 虚拟环境
- Scanpy >= 1.9 及依赖包(pandas, numpy, matplotlib, anndata)
- 一个可以跑 2 万细胞的数据集(课程会提供示例数据)
- 基本的 Python 语法和 pip 安装经验
如果你还没装,直接看这个命令:
conda create -n scanpy_env python=3.9
conda activate scanpy_env
pip install scanpy[leiden] python-igraph louvain
# 如果要用 Harmony 整合,再加:
pip install harmonypy
装好以后,建议跑个简单的测试:
import scanpy as sc
print(sc.__version__)
# 输出类似 '1.10.1' 就对了
小技巧:Scanpy 的 sc.settings.verbosity = 3 可以打开详细日志,调试时特别有用。我之前 debug 整合后的聚类,全靠日志里的邻居图构建信息定位问题。
课程组织方式
共 30 章,每章解决一个具体问题。我习惯用“问题→方案→代码→避坑”的结构来讲。你不会看到大段的纯理论,而是直接上手操作,然后我告诉你哪里容易踩坑。
举个例子,第 10 章讲如何用 sc.tl.leiden 做聚类,我会先让你跑默认参数,然后展示结果,再告诉你为什么有些小群被吞掉了——嗯,这就是分辨率没调对。
为什么会这么设计?因为我发现很多教程教完基础就停了,但实际工作中你面对的数据总是“不干净”的。整合后的数据可能有残留批次、不同测序深度、不同细胞类型比例失衡……这些都需要你手动调参。我们这门课就是补上这一段。
注意:本课程不涉及原始测序数据的预处理(FastQC、cellranger、STARsolo 等)。如果你还没搞定这些,建议先看 Scanpy 官方教程的前几章。
SVG 图背后的逻辑
刚才那张图,你看懂了吗?它其实告诉你:
- 蓝色:数据入口(我们不碰)
- 青色:预处理(略过)
- 紫色:整合(课程起点)
- 红色:聚类(核心)
- 橙色:差异分析(核心)
- 绿色:注释与可视化(收尾)
红色和橙色就是我们啃的硬骨头。你看那些箭头,数据流是单向的,但实际分析中你经常得往回跳——聚类结果不好,可能得重新调整合参数或邻居图参数。这个迭代过程也是课程要带你掌握的。
现在就准备好了吗?
别急着往后翻。先确认你的环境能跑通下面这段代码,这是所有后续章节的基础:
import scanpy as sc
import anndata as ad
# 读取一个示例数据(课程会提供)
adata = sc.read_h5ad('pbmc_integrated.h5ad')
print(adata)
# 输出类似:
# AnnData object with n_obs × n_vars = 8000 × 2000
# obs: 'batch', 'cell_type_guess'
# obsm: 'X_pca', 'X_umap'
# obsp: 'connectivities'
如果你看到了 AnnData 对象,恭喜,你可以直接冲进第 2 章了。如果报错,回头检查依赖版本——我遇到过 leidenalg 版本不兼容导致聚类函数崩溃,所以请确保 python-igraph 和 leidenalg 都装了。
嗯,第一章就到这里。内容不多,但重要——搞清了课程定位和你的装备,后面的路才走得稳。咱们第 2 章见,开始动真格的了。