1. Python环境搭建与批次效应简介
说实话,我自己最开始做单细胞分析那会儿,踩过最大的坑就是环境问题。不同工具包版本打架、依赖冲突,一搞就是半天。所以这一章,咱们先把地基打牢。
1.1 为什么必须用虚拟环境?
你有没有遇到过这种情况:装了一个新包,结果把另一个项目搞崩了?
这在生物信息学里太常见了。比如说,scanpy 1.9 和 1.8 的某些 API 都不一样。一个项目用旧的,另一个项目用新的,硬装在一起,迟早出问题。
我的建议很简单:每个项目独立环境,互不干扰。
1.2 Anaconda安装与虚拟环境配置
Anaconda 是目前最省心的 Python 发行版。内置了 conda 包管理器,管理环境非常方便。
安装步骤
去官网下载对应系统的安装包,我建议选 Python 3.9 以上的版本。安装过程一路默认就好。
装完之后,验证一下:
conda --version
python --version
创建虚拟环境
我给这门课专门建了一个环境:
conda create -n batch_effect python=3.9
conda activate batch_effect
嗯,这里要注意:环境名别用中文,有些包在解析路径时会崩溃。
安装核心依赖
先装一批基础工具:
conda install numpy pandas matplotlib seaborn jupyter
conda install -c conda-forge scanpy anndata
pip install combat pyHarmonize
我个人习惯用 conda 装 scanpy,因为它的依赖链很复杂,conda 能自动处理版本冲突。
1.3 批次效应到底是个什么东西?
说白了,批次效应就是:你测两批数据,结果差别不是因为生物差异,而是因为实验操作、试剂批次、测序仪不同等非生物因素造成的。
我有个例子特别典型。有一年我们实验室做单细胞测序,同一批样本分了两次上机。结果拿回来一聚类,两批数据各自抱团,跟本来想研究的细胞类型完全无关。这就是明显的 batch effect。
它长什么样?你可以想象成:你的细胞样本本来在 UMAP 图上是一团糊糊,但因为是不同批次测的,结果两团糊糊分开了。你以为是不同细胞类型,其实只是批次假象。
批量转录组 vs 单细胞数据
| 维度 | 批量转录组(Bulk RNA-seq) | 单细胞转录组(scRNA-seq) |
|---|---|---|
| 样本量 | 通常几十个样本 | 数百到数万个细胞 |
| 批次来源 | 不同测序批次、不同实验室 | 不同样本、不同捕获批次 |
| 常见表现 | PCA 图上不同批次分离 | UMAP/t-SNE 上不同批次分离 |
| 校正难度 | 较简单(可用 ComBat 等) | 较复杂(需考虑细胞异质性) |
为什么会这样?你可以想想看:单细胞数据每个样本有几千个细胞,你混在一起分析时,首先得搞清楚哪些差异是真实生物差异,哪些只是批次技术噪声。
核心要点:批次效应不是“脏数据”,它是实验设计本身带来的系统偏差。关键不是避免它——很多时候你根本避免不了——而是正确识别并校正它。
1.4 批次效应的常见来源
我在项目中遇到过这样的坑:同一个实验室,不同研究生操作,同一批样本,结果还是出来了批次效应。为什么呢?
- 试剂批号不同:试剂盒、酶、试剂的有效期和配方可能有微小差异
- 操作人员不同:手的轻重、反应时间长短,都会影响
- 测序仪不同:Illumina 不同型号(HiSeq、NovaSeq)产生的数据都有偏差
- 捕获技术不同:10x Genomics 不同版本、Smart-seq2 等
- 保存条件不同:样本冻存时间、冻融次数
嗯,这里要记住:批次效应不一定肉眼可见。有时候 PCA 图上不明显,但在后续差异分析里它悄悄影响 p 值和 fold change。
1.5 我们这门课的处理路径
先看一眼整体流程,心里有个大概:
这张图是我自己总结的。从数据加载到最终报告,我们每一步都会用 Python 代码实际跑一遍。你想想看,有了这个认知框架,后面学起来就不会觉得乱了。
1.6 避坑指南
我曾经踩过的坑: 有次我直接在 base 环境里装包,结果 scanpy 和 scikit-learn 的依赖冲突了,怎么都装不上。最后只能删掉重装全部环境。从那以后,每开一个新项目,我第一件事就是 conda create -n new_project python=3.9。
小技巧: 用 conda 装包时,如果网络慢,可以加 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ 用国内镜像。
1.7 本章小结
这一章我们搞定了三件事:
- 装好了 Python 环境和核心工具包
- 理解了批次效应到底是个啥,它从哪来
- 看清了整门课的检测流程——从数据到报告