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 我们这门课的处理路径

先看一眼整体流程,心里有个大概:

批次效应检测实战课程核心流程 批次效应检测实战核心流程 数据加载与预处理 可视化探索 量化检测指标 PCA/t-SNE/UMAP 批次评分计算 统计检验 报告生成 批量结果合并 输出:批次效应严重程度报告 + 可视化结果

这张图是我自己总结的。从数据加载到最终报告,我们每一步都会用 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 环境和核心工具包
  • 理解了批次效应到底是个啥,它从哪来
  • 看清了整门课的检测流程——从数据到报告