四、高通量测序数据获取与格式

做宏基因组分析,第一步就是搞到原始数据。这节我跟你聊聊从哪拿数据、拿回来长什么样、以及怎么保证文件没坏。你想想看,数据是分析的起点,如果起点就歪了,后面再漂亮的流程也是白搭。

4.1 FASTQ 格式详解

测序仪吐出来的原始数据,最常见的格式就是 FASTQ。说白了就是每条序列带一个质量分数。我用个简单的例子帮你理解:

@SEQ_ID
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65

每四行构成一条记录:第一行以 @ 开头,是序列标识符;第二行是碱基序列;第三行是 + 号(有时跟着标识符);第四行是质量值,每个字符对应一个碱基的质量分。

质量值 Q-score 怎么算? Q = -10 × log₁₀(P),P 是测序出错概率。Q30 意味着错误率千分之一,Q20 是百分之一。我在早期项目里碰到过一批数据,平均 Q20 都不到,跑出来的物种组成全是假阳性——嗯,后来我就不敢省这步 QC 了。

质量符号ASCII 码对应 Q 值错误概率
!330100%
553201%
?63300.1%
I73400.01%
小提示:现代 Illumina 数据通常用 Phred+33 编码(ASCII 33-126)。如果你看到开头符号是 @ 而不是 !,那很可能是 +64 编码——这种情况在非常老的数据里才有。拿不准时用 seqtk test 检查。

4.2 SRA / ENA 数据下载

全球最大公共测序库是 NCBI 的 SRA,欧洲对应 ENA。下载途径我常用两个工具:prefetch 和 fastq-dump,都是 SRA Toolkit 里的。

4.2.1 prefetch:下载 SRA 文件

# 单条数据
prefetch SRR12345678

# 批量下载(SRA 列表文件)
prefetch --option-file sra_list.txt

# 指定输出目录
prefetch -O /data/sra SRR12345678

prefetch 下载的是 .sra 压缩包,不是直接的 FASTQ。为什么要多这步?因为 .sra 体积小、可断点续传。我曾经在校园网下 500G 的宏基因组数据,中间断了三次,全靠 prefetch 的 --resume 保命。

注意:prefetch 默认下载到 ~/ncbi/public/sra/。如果你磁盘空间紧张(我这个月刚踩过坑),记得用 -O 指定到有大盘的分区。

4.2.2 fastq-dump:解压为 FASTQ

# 单端数据
fastq-dump --split-files SRR12345678

# 双端数据(拆成两个文件)
fastq-dump --split-files --gzip SRR12345678

# 只提取前 100000 条(先看一眼)
fastq-dump -X 100000 --split-files SRR12345678

参数说明:

  • --split-files:双端数据拆成 _1.fastq 和 _2.fastq
  • --gzip:输出直接压缩,省空间
  • -X:只取前 N 条,适合预览
  • --outdir:输出目录

我个人习惯把 prefetch 和 fastq-dump 串成一条脚本:

#!/bin/bash
# download_batch.sh
SRR_LIST=("SRR123" "SRR456" "SRR789")
OUTDIR="/data/raw_fastq"

for srr in "${SRR_LIST[@]}"; do
    prefetch -O "$OUTDIR/sra" "$srr" && \
    fastq-dump --split-files --gzip \
        --outdir "$OUTDIR/fastq" \
        "$OUTDIR/sra/$srr/$srr.sra"
done

4.3 数据完整性校验

下载完就开跑?别急。网络传输可能丢包、磁盘可能坏道,我亲眼见过团队拿到的数据跑到下游才发现 k-mer 分布不对——查了三天发现是下载时文件截断了。这个亏吃过一次就够了。

校验方法:

  1. MD5 校验(最常用):NCBI/ENA 会为每个 SRA 文件提供 MD5。下载后比对。
  2. GZip 完整性检查:如果文件是 .gz 压缩的,用 gzip -t 就行。
  3. fastq 格式检查:用 seqkit stats 看行数是否为 4 的倍数。
# 1. MD5 校验
wget -q -O - https://trace.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?cmd=download&run=SRR12345678&m5 | md5sum -c

# 或者手动比对
echo "expected_md5  file.sra" | md5sum -c

# 2. GZip 完整性
gzip -t SRR12345678_1.fastq.gz && echo "OK" || echo "CORRUPT"

# 3. fastq 行数检查
seqkit stats SRR12345678_1.fastq.gz
我的校验清单:
  • 每批数据下载完后跑一遍 md5sum -c md5sums.txt
  • 对 gz 文件追加 gzip -t
  • 用 fastq_info 或 seqkit head 查看前几条记录的质量编码

4.4 本章知识图谱

下面这张图概括了整个数据获取流程,从数据库到本地可用的 FASTQ 文件:

数据获取与校验流程图 数据获取流程 SRA / ENA 数据库 prefetch .sra 压缩包 fastq-dump FASTQ 文件 完整性校验 • MD5 比对 • gzip -t 检查 • fastq 行数统计 • 质量分布预览 (如果校验失败,重新下载)

这个流程我每次都会在分析笔记里画一遍——不是为了好看,而是防止手快漏掉哪一步。尤其新接手项目时,看一眼图就知道数据到哪了。

省流量小技巧:如果网速慢,可以先用 prefetch --max-size 50G 限制下载大小,或者只下载元数据(prefetch -m)先看看文件大概多大。

好了,数据到手、格式看清、校验通过——接下来就可以放心做质控和下游分析了。