3. 数据格式与获取:FASTQ格式详解、SRA/GEO数据库下载、Cell Ranger输出结构
做单细胞RNA-seq分析,第一步就是跟数据打交道。不管你用的是自己的测序数据,还是从公共数据库扒下来的公开数据,搞清楚数据格式和获取方式,是后续所有分析的基础。这一章咱们就聊聊这三件事:FASTQ文件到底长什么样、怎么从SRA/GEO把数据拽下来、以及Cell Ranger跑完之后吐出来的一堆文件都是干嘛的。
3.1 FASTQ格式:四行定乾坤
FASTQ是目前测序数据的标准格式。说白了,它就是给每条测序片段(read)配了一张「身份证」加一份「质量报告」。每条read固定用四行来表示,少一行都不行。
@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG
CTACGTACGTACGATCGATCGATCGATCGATCGATCGTAGC
+
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
- 第1行(@开头):序列标识符,包含仪器、flowcell、坐标、barcode等信息
- 第2行:碱基序列(A/T/C/G/N)
- 第3行(+开头):分隔符,有时会重复第1行内容(但一般省略)
- 第4行:质量分数,每个字符对应第2行对应位置的质量值
质量分数用的是Phred评分。我记得刚入行那会儿,总搞混Phred+33和Phred+64的区别。后来踩过一次坑——用错编码导致过滤了大量本该保留的细胞——才彻底记住了。
| 编码方式 | ASCII范围 | 质量范围 | 常见平台 |
|---|---|---|---|
| Phred+33(Sanger) | 33–126 | 0–93 | Illumina 1.8+ |
| Phred+64 | 64–126 | 0–62 | Illumina 1.3–1.7 |
seqtk 快速检查ASCII范围——如果字符集中有大量 '@' 和 'A' 之外的不可见字符,多半是Phred+64。
3.2 SRA/GEO数据库:公开数据的宝库
不是每个人都有条件自己测序。SRA和GEO这两个数据库,就是单细胞研究者的「数据粮仓」。SRA存的是原始测序数据(FASTQ/SRA格式),GEO则偏重处理后的表达矩阵和元数据。
3.2.1 数据搜索与下载
我个人习惯先查GEO。点开一个GEO页面,往下翻到「Supplementary file」部分,一般就能看到SRA的accession号(比如 SRR12345678)。拿到这个号,再用SRA Toolkit下载,流程很清晰。
下载SRA数据,核心工具就是 prefetch 和 fastq-dump。我通常两步走:
# 第一步:下载SRA文件(.sra格式)
prefetch SRR12345678
# 第二步:转成FASTQ(按双端拆分)
fastq-dump --split-files --gzip SRR12345678
--gzip 可以让输出直接压缩,省一个手动压缩的步骤。另外,--split-files 会把双端测序拆成两个文件(_1.fastq 和 _2.fastq),单细胞分析中经常需要区分。
3.2.2 数据量的坑
单细胞RNA-seq的SRA文件通常很大,几个GB到几十GB不等。我在项目里遇到过下载到一半断联的情况——那种挫败感,你懂的。解决方案有两个:一是用 aspera(ascp)加速,二是写个带断点续传的脚本。
# 使用ascp加速下载(需要安装aspera-connect)
ascp -i ~/.aspera/connect/etc/asperaweb_id_dsa.openssh \
-k 1 -T -l 200M anonftp@ftp.ncbi.nlm.nih.gov:/sra/sra-instant/reads/ByRun/sra/SRR/SRR123/SRR12345678/SRR12345678.sra .
还有个更省事的办法:直接用 fasterq-dump,它支持多线程,速度比 fastq-dump 快不少。
fasterq-dump --split-files --threads 8 SRR12345678
3.3 Cell Ranger输出结构:别被一堆文件夹吓到
Cell Ranger跑完之后,会在指定输出目录下生成一套标准化的文件结构。很多新手第一次看到那几十个文件夹就懵了。其实核心就几个:
outs/
├── web_summary.html # 交互式质控报告(最常用)
├── metrics_summary.csv # 关键指标汇总(我喜欢先看这个)
├── filtered_feature_bc_matrix/
│ ├── barcodes.tsv.gz # 通过质控的barcode列表
│ ├── features.tsv.gz # 基因/feature列表
│ └── matrix.mtx.gz # 稀疏表达矩阵
├── raw_feature_bc_matrix/ # 同上,但包含所有barcode
├── molecule_info.h5 # HDF5格式的分子信息
├── possorted_genome_bam.bam # 比对到基因组的BAM
└── analysis/ # 初步分析结果(降维、聚类等)
| 文件/目录 | 用途 | 我一般怎么用它 |
|---|---|---|
web_summary.html |
可视化质控报告 | 第一眼看细胞数、测序饱和度、Q30 |
metrics_summary.csv |
数值化质控指标 | 批量对比多个样本时直接用R/Python读 |
filtered_feature_bc_matrix/ |
下游分析输入 | Seurat/Scanpy直接读这三个文件 |
molecule_info.h5 |
分子级别的原始信息 | 需要做doublet检测或UMI校正时用 |
Read10X()、Scanpy的 sc.read_10x_mtx())直接读取 filtered_feature_bc_matrix/ 目录下的三个文件。你不需要手动解压或合并,工具会自动处理。
整体流程一览
下面这张图把从原始数据到Cell Ranger输出的完整路径串起来了,方便你对照理解:
这张图把本章的核心脉络串起来了。从原始FASTQ数据出发,你可以选择直接跑Cell Ranger(如果有原始数据),也可以从SRA/GEO下载别人的公开数据再跑。最终Cell Ranger会输出一套标准化的结果,其中 filtered_feature_bc_matrix 就是下游分析的起点。
fastqc 快速扫一遍质量分布,再用 cellranger count 的 --expect-cells 参数预估细胞数。这个小习惯帮我早期发现过两次文库污染的问题。