3. 数据格式与获取:FASTQ格式详解、SRA/GEO数据库下载、Cell Ranger输出结构

做单细胞RNA-seq分析,第一步就是跟数据打交道。不管你用的是自己的测序数据,还是从公共数据库扒下来的公开数据,搞清楚数据格式和获取方式,是后续所有分析的基础。这一章咱们就聊聊这三件事:FASTQ文件到底长什么样、怎么从SRA/GEO把数据拽下来、以及Cell Ranger跑完之后吐出来的一堆文件都是干嘛的。

3.1 FASTQ格式:四行定乾坤

FASTQ是目前测序数据的标准格式。说白了,它就是给每条测序片段(read)配了一张「身份证」加一份「质量报告」。每条read固定用四行来表示,少一行都不行。

FASTQ四行结构:
@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
避坑指南:我曾经因为没检查FASTQ的质量编码版本,直接用默认参数跑质控,结果把一批高质量数据当低质量滤掉了。建议拿到FASTQ后先看第一行的仪器信息,或者用 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校正时用
关键提醒:大多数下游工具(如Seurat的 Read10X()、Scanpy的 sc.read_10x_mtx())直接读取 filtered_feature_bc_matrix/ 目录下的三个文件。你不需要手动解压或合并,工具会自动处理。

整体流程一览

下面这张图把从原始数据到Cell Ranger输出的完整路径串起来了,方便你对照理解:

单细胞RNA-seq数据获取与处理流程 单细胞RNA-seq 数据获取与处理流程 📦 数据来源 原始测序 (FASTQ) SRA / GEO 数据库 ⬇️ 数据获取 SRA Toolkit 下载 ⚙️ 定量与输出 Cell Ranger 定量 输出:表达矩阵 / BAM / 质控报告 → 下游分析 (Seurat/Scanpy) 💡 核心原则:从FASTQ到表达矩阵,每一步都要记录参数和版本。我曾经因为没保存Cell Ranger版本号,回溯时花了半天才对上结果。

这张图把本章的核心脉络串起来了。从原始FASTQ数据出发,你可以选择直接跑Cell Ranger(如果有原始数据),也可以从SRA/GEO下载别人的公开数据再跑。最终Cell Ranger会输出一套标准化的结果,其中 filtered_feature_bc_matrix 就是下游分析的起点。

我的习惯:每次拿到新的FASTQ数据,我都会先跑一个 fastqc 快速扫一遍质量分布,再用 cellranger count 的 --expect-cells 参数预估细胞数。这个小习惯帮我早期发现过两次文库污染的问题。