四、高通量测序数据获取与格式
做宏基因组分析,第一步就是搞到原始数据。这节我跟你聊聊从哪拿数据、拿回来长什么样、以及怎么保证文件没坏。你想想看,数据是分析的起点,如果起点就歪了,后面再漂亮的流程也是白搭。
4.1 FASTQ 格式详解
测序仪吐出来的原始数据,最常见的格式就是 FASTQ。说白了就是每条序列带一个质量分数。我用个简单的例子帮你理解:
@SEQ_ID
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65
每四行构成一条记录:第一行以 @ 开头,是序列标识符;第二行是碱基序列;第三行是 + 号(有时跟着标识符);第四行是质量值,每个字符对应一个碱基的质量分。
质量值 Q-score 怎么算? Q = -10 × log₁₀(P),P 是测序出错概率。Q30 意味着错误率千分之一,Q20 是百分之一。我在早期项目里碰到过一批数据,平均 Q20 都不到,跑出来的物种组成全是假阳性——嗯,后来我就不敢省这步 QC 了。
| 质量符号 | ASCII 码 | 对应 Q 值 | 错误概率 |
|---|---|---|---|
| ! | 33 | 0 | 100% |
| 5 | 53 | 20 | 1% |
| ? | 63 | 30 | 0.1% |
| I | 73 | 40 | 0.01% |
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 保命。
~/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 分布不对——查了三天发现是下载时文件截断了。这个亏吃过一次就够了。
校验方法:
- MD5 校验(最常用):NCBI/ENA 会为每个 SRA 文件提供 MD5。下载后比对。
- GZip 完整性检查:如果文件是 .gz 压缩的,用
gzip -t就行。 - 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 文件:
这个流程我每次都会在分析笔记里画一遍——不是为了好看,而是防止手快漏掉哪一步。尤其新接手项目时,看一眼图就知道数据到哪了。
prefetch --max-size 50G 限制下载大小,或者只下载元数据(prefetch -m)先看看文件大概多大。
好了,数据到手、格式看清、校验通过——接下来就可以放心做质控和下游分析了。