第1章 Seurat入门:单细胞RNA-seq简介、Seurat包概述、安装Seurat及依赖
欢迎来到《Seurat数据标准化实战指南》。这一章我打算先带你把底子打牢——到底什么是单细胞RNA-seq,Seurat这个包能干什么,以及怎么把它装到你电脑上。你想想看,如果连工具都装不好,后面那些标准化、降维、聚类全白搭。所以咱们从最基础的东西开始,不跳步。
1.1 单细胞RNA-seq简介
单细胞RNA测序,说白了就是把一个个细胞拎出来看它们的基因表达。跟传统bulk RNA-seq不同,单细胞能告诉你每个细胞里哪些基因在活跃地转录。我刚开始做这行时,觉得它跟常规转录组没啥区别,直到跑了一次数据看到不同细胞亚群的表达模式,才真正体会到什么叫「分辨率爆炸」。
单细胞数据长什么样?一个标准的输出是UMI count矩阵:行是基因,列是细胞,每个格子代表某个基因在某个细胞中检测到的UMI数量。这个矩阵通常非常稀疏——大部分格子是0。举个例子:
细胞1 细胞2 细胞3 ...
GENE_A 2 0 5
GENE_B 0 3 0
GENE_C 1 8 2
...
拿到这个矩阵后,你要做标准化、降维、聚类、注释等一系列操作。而Seurat,就是目前最主流的R包去做这些事。我个人习惯把所有预处理步骤都放在Seurat里完成,因为它的管道统一,不用来回切换工具。
核心要点:单细胞RNA-seq的原始数据是基因×细胞计数矩阵,后续所有分析都基于这个矩阵。
1.2 Seurat包概述
Seurat最初由Rahul Satija实验室开发,现在已经是单细胞分析领域的「标配」了。它提供了从数据读取、质量控制、标准化、降维、聚类到差异表达、可视化的一整套流程。我特别喜欢它的FindClusters + TSNEPlot组合,一次跑完就能看到细胞分群结构。
Seurat的核心数据结构是SeuratObject,它把原始计数矩阵、元数据、降维结果、聚类标签等全部打包到一个对象里。你不需要手动管理一堆零散矩阵。
| 功能模块 | 主要函数 | 说明 |
|---|---|---|
| 数据创建 | CreateSeuratObject |
从计数矩阵构建Seurat对象 |
| 质量控制 | PercentageFeatureSet |
计算线粒体/核糖体占比等QC指标 |
| 标准化 | NormalizeData |
默认采用LogNormalize,全局缩放因子10000 |
| 降维 | RunPCA |
主成分分析,默认50个PC |
| 聚类 | FindClusters |
基于共享最近邻图进行Louvain/Leiden聚类 |
| 可视化 | DimPlot, FeaturePlot |
UMAP/tSNE降维图,基因表达特征图 |
嗯,这里要注意——Seurat的标准化不止一种。默认的NormalizeData就是简单的LogNormalize,但后面章节我们会专门讲更先进的SCTransform和正则化负二项回归。这一章你先记住标准化的位置即可。
1.3 安装Seurat及依赖
安装Seurat其实很简单,但坑不少。我记得有一次帮同事装,他R版本太旧,装了一下午报错。所以第一步:请确认你的R版本>=4.1。最好用最新版。
标准安装方式是从CRAN安装:
install.packages("Seurat")
这行命令会自动下载并安装Seurat以及大部分依赖包。但有几个依赖比较特殊,需要单独处理。尤其是igraph和RcppArmadillo,如果编译报错,通常是缺少系统库。在Ubuntu上你可以先装:
sudo apt-get install libgmp-dev libmpfr-dev libgsl-dev libxml2-dev libssl-dev libcurl4-openssl-dev
在Windows上一般不需要额外配置,但如果你遇到Rtools相关错误,就老老实实安装对应版本的Rtools。我个人习惯直接安装RTools并把它添加到PATH。
安装完成后,验证一下:
library(Seurat)
packageVersion("Seurat")
如果不出意外,你会看到类似[1] ‘5.1.0’的输出。注意版本号,不同版本接口可能有微小差异。本课程以Seurat v5为主,但大部分代码也兼容v4。
避坑指南:我曾经在服务器上因为网络代理问题导致安装卡在igraph上。解决办法是手动下载igraph的二进制包离线安装。如果你也遇到类似情况,可以去CRAN或GitHub提前下载好.tgz文件。
1.4 实战案例:安装与验证
光说不练假把式。咱们跑一个最简单的流程,确保从安装到运行都通顺:
# 1. 安装(如果还没装)
if (!requireNamespace("Seurat", quietly = TRUE)) {
install.packages("Seurat")
}
# 2. 加载包
library(Seurat)
# 3. 生成一个玩具数据集
pbmc_counts <- Read10X(data.dir = "path/to/filtered_feature_bc_matrix")
# 如果你没有真实数据,可以用内置数据集
pbmc_small <- pbmc_small # Seurat自带的小型PBMC数据
# 4. 创建Seurat对象
pbmc <- CreateSeuratObject(counts = pbmc_small@assays$RNA@counts,
project = "pbmc_demo",
min.cells = 3,
min.features = 200)
# 5. 做一次标准化试试
pbmc <- NormalizeData(pbmc, normalization.method = "LogNormalize",
scale.factor = 10000)
# 6. 查看标准化后的数据
GetAssayData(pbmc, slot = "data")[1:5, 1:5]
跑完这段代码,你应该看到类似下面的矩阵:
AAACATACAACCAC-1 AAACATTGAGCTAC-1 AAACATTGATCAGC-1
AL627309.1 0.0000 0.0000 0.0000
AP006222.2 0.0000 0.0000 0.0000
RP11-206L10.2 0.0000 0.0000 0.0000
RP11-206L10.9 0.0000 0.0000 0.0000
...
说明安装和基本流程都没问题。如果报错,多半是数据路径不对或R包版本冲突。别慌,仔细看错误信息——大部分错误都能在StackOverflow上找到答案。
提示:如果你想彻底清零重新安装,可以先用remove.packages("Seurat")卸载,然后重启R会话再装。
本章知识图谱
下面这张图帮你梳理了本章的核心逻辑:从单细胞测序数据到Seurat标准化的完整路径。中间涉及的依赖环境等也一并画出来了,方便你对照理解。
这张图把本章三个主要模块串起来了:左上角是单细胞RNA-seq数据基础,中间是Seurat包的定位,右上角是安装细节。下面两个框分别是实战案例和依赖坑点。你跟着这个框架走,思路就不会乱。
好,第一站就到这儿。记住:会安装、会创建Seurat对象、会做一次简单的标准化,这就是本章的硬指标。后面咱们会一步步深入标准化背后的数学原理和高级玩法。