第2章 数据获取与格式:FASTQ格式、公共数据库(SRA/GEO)使用

好,聊完了RNA-seq的整个实验设计和基本原理,咱们得着手搞数据了。这一章,我带你看看最原始的数据长什么样,以及怎么从公共数据库里把它们扒下来。说实话,这一步要是搞错了,后面分析得再好也是白搭。

2.1 FASTQ格式:测序仪吐出来的“原始密码”

你从测序仪或者公共数据库下载下来的,多半是FASTQ文件。这个格式,说白了就是测序仪直接把读到的一堆DNA小片段,加上对应的质量分数,打包成文件扔给你。

FASTQ 文件里记录的是 序列(Sequence) 和 质量(Quality)。序列就是ATCG的排列组合,质量则记录了每个碱基被测序仪读错的概率。

2.1.1 FASTQ的“四行一条”结构

每个read在FASTQ文件中占4行,这是铁律。你随便打开一个看,结构都一模一样。

@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG
CTTCACAAAATCCTTTGATAATCTCATGACCAAAATCCCTTAACGTGAGTTTTCGTTCCACTGAGCGTC
+
;;C;;F;;FFF:FF::FFF:::FFFFF:F:FFCF:FFFF:F:FFFFFFFFFF:FFF:FFFFCFFFFF

第一行以 @ 开头,是读段的标识符,包含仪器ID、流动槽位置、坐标等信息。第二行是碱基序列。第三行是一个 +,后面可以跟描述信息(但通常为空)。第四行是质量分数,每个字符对应第二行每个碱基的质量。

质量分数怎么算?

第四行的每个字符通过ASCII码映射成一个数值,再经过一定的公式转换,就得到了这个碱基的 Phred Quality Score(Q值)。

  • Q = -10 log10(P),P是这个碱基测错的概率。
  • Q = 30,意味着测错概率是千分之一(P = 0.001),准确率99.9%。
  • Q = 20,意味着测错概率是百分之一(P = 0.01),准确率99%。
Phred质量分数 (Q) 碱基错误率 (P) 碱基准确率
10 1/10 90%
20 1/100 99%
30 1/1000 99.9%
40 1/10000 99.99%

避坑指南

我曾经以为FASTQ文件里第四行的+号是多余的,直到有一次我写脚本解析时,发现有些机器产出的数据在第三行后面带了额外的信息,直接导致解析错误。记住,第三行的+号是行分隔符,不能丢。另外,质量编码方式有Phred+33和Phred+64两种,大部分公共数据库用的是+33,但早年的Solexa数据用的是+64。用错了编码,你的质量分就全乱了。

2.1.2 用命令行看一眼FASTQ

在Linux环境下,我习惯用 less 或者 zcat 直接看压缩文件。但是千万别直接打开整个文件,会卡死。

# 查看压缩的FASTQ文件前8行(即前2条read)
zcat sample_R1.fastq.gz | head -n 8

# 查看共有多少条read
zcat sample_R1.fastq.gz | echo $((`wc -l` / 4))

# 或者直接用seqkit统计
seqkit stat sample_R1.fastq.gz

我的小习惯

拿到一个新的FASTQ文件,我总会先跑一下seqkit stat或者fastqc。这能快速告诉我数据量够不够,质量好不好,有没有接头污染。我的做法是:先快速看一眼,心里有数,再决定下一步的质量控制策略。

2.2 公共数据库:SRA和GEO的用法

你自己做实验拿到了数据,或者想用别人的数据练手,都得去公共数据库。环境里最常用的两个库:SRA(Sequence Read Archive) 和 GEO(Gene Expression Omnibus)。

有什么区别?

简单来说,SRA是存原始测序数据的“仓库”,而GEO是存处理后的表达矩阵和元数据的“档案馆”。你想下载原始FASTQ文件,就去SRA;你想看别人分析好的基因表达表、差异基因列表,就去GEO。

数据库 存储内容 典型用途 数据格式
SRA 原始测序reads (FASTQ/SRA格式) 下载原始数据、重复分析、开发新算法 SRR (SRA Run), FASTQ
GEO 处理后的数据、样本元数据、实验设计 查询研究背景、下载表达矩阵、查找样本信息 GSE, GSM, SOFT, MINiML

2.2.1 从SRA下载原始数据:SRP、SRR、SRA Toolkit

我刚开始用SRA时,被那一串编号搞晕过。简单梳理一下:

  • SRP (SRA Project):对应一个研究项目,比如“某某癌细胞系RNA-seq”。
  • SRS (SRA Sample):对应一个生物学样本。
  • SRR (SRA Run):对应具体的测序数据文件,一个样本可能有多个SRR(比如双端测序的两个文件)。

下载数据,需要用到官方的工具 SRA Toolkit。

# 安装SRA Toolkit (Ubuntu)
conda install -c bioconda sra-tools

# 或者下载源码安装
wget https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/current/sratoolkit.current-ubuntu64.tar.gz
tar -vxzf sratoolkit.current-ubuntu64.tar.gz
# 然后添加到环境变量PATH

下载的核心命令是 fastq-dump 或者更好用的 fasterq-dump。

# 用fastq-dump下载一个SRR文件,默认生成单个FASTQ文件
fastq-dump SRR12345678

# 下载双端测序数据,生成_R1和_R2两个文件
fastq-dump --split-files SRR12345678

# 推荐用fasterq-dump,速度更快,支持线程
fasterq-dump --split-files --threads 8 SRR12345678

注意:环境变量配置

我记得有次在新服务器上装SRA Toolkit,跑了半天命令报错:vdb-config没配置。默认情况下,工具需要一个 .ncbi 目录来缓存配置。你可以运行一行命令初始化它:

vdb-config --interactive  # 或者直接接受默认设置:vdb-config -s

否则,后续下载可能因为找不到临时目录或者代理设置失败。

2.2.2 从GEO挖掘元数据

SRA只管原始数据,但你想知道样本是怎么处理的、用了什么细胞系、分组信息,这些得去GEO找。GEO的核心编号是 GSE (GEO Series) 和 GSM (GEO Sample)。

我教你一个快速抓取元数据的方法。GEO的官网支持直接下载处理后的数据(通常是表达矩阵),而且有个SOFT格式文件,里面包罗万象。

# 下载GSE的SOFT格式文件(包含所有样本信息和平台信息)
wget "https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE123456&targ=self&form=text&view=full" -O GSE123456_soft.txt

# 或者用R包GEOquery
# 在R中运行
library(GEOquery)
gse <- getGEO("GSE123456", destdir=".")
# 提取表达矩阵
exprs_data <- exprs(gse[[1]])
# 提取样本元数据
pdata <- pData(phenoData(gse[[1]]))

我的经验

看到一篇文献,想复现结果,我通常会:
1. 先在GEO搜GSE号,下载SOFT文件,快速看样本怎么分组的。
2. 然后根据GSE号对应的SRA项目号(SRP),去SRA下载对应的SRR文件。
3. 最后对着样本描述,把SRR文件跟分组信息对应起来。
这一步叫“元数据清洗”,往往最费时间。我曾经为了弄清楚一篇文章里两个样本的性别标签到底写没写,翻遍了所有的GEO的配套文档。

数据获取与格式核心知识框架 公共数据库 SRA (原始序列) GEO (表达+元数据) 本地数据 FASTQ 格式 (四行结构) 元数据 (分组信息) SRA下载直接文件,GEO下载元数据+表达矩阵 二者结合,才能让数据变得“可用”。

2.3 总结:拿到数据后的第一件事

好了,你现在知道数据从哪里来、长什么样了。我建议你拿到任何RNA-seq数据后,先做这三件事:

  1. 肉眼检查:用 zcat | head 看看格式对不对,特别是质量分数那行。
  2. 统计质量:跑 fastqc,生成初步的质量报告。
  3. 清洗元数据:整理出样本名称、分组、实验条件,做成一个清晰的CSV表格。

一句话总结

数据获取不光是下载文件,更关键的是建立 “数据-格式-元数据” 的铁三角关系。这一步做扎实了,后续分析才能站稳脚跟。