1. FASTQ 格式基础:从原始信号到文本记录
好,我们直接进入正题。FASTQ 格式,说白了就是测序仪吐出来的“原始数据”的标准包装盒。你从测序平台拿到的最原始的序列文件,十有八九就是 .fastq 或 .fq 后缀。咱们这整门课的所有操作,都建立在对这个文件格式的准确理解上。
我个人习惯把 FASTQ 看作一种“四行诗”。每一段测序读段(read)都对应着固定的四行记录。如果你不懂这四行各自代表什么,后面做质量评估、过滤、组装,就是在瞎蒙。
1.1 四行记录:每一行都不多余
打开一个 FASTQ 文件,内容看起来像一堆乱码加字母。但仔细看,它是由重复的四行块组成的。我把它拆开给你看:
@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65
这四行,一行都不能少。咱们逐个解析:
- 第一行(@开头):序列标识符。包含测序仪器、流动槽位置、坐标、条码等信息。@ 是行首标记,不能省略。
- 第二行(碱基序列):真正的 A、T、C、G、N 序列。N 表示“不确定”,也就是测序仪没把握的碱基。
- 第三行(+):分隔符。通常只有一个加号,后面可以跟重复的标识符(可选项,但我见过的绝大多数情况下就是光秃秃的 +)。
- 第四行(质量分数):与第二行一一对应的 ASCII 字符。每个字符代表一个碱基的测序质量。这行字符数与第二行必须完全相等。
小提醒:解析时,第四行的长度一定要与第二行严格一致。如果长度不匹配,说明文件损坏或者转录出错。我曾经在处理一个公共数据库下载的数据集时,发现机器出的文件在换行符上有问题,导致第四行少了一个字符,结果整个下游分析都报错。排查了半天,最后用 awk 硬查才找到问题。
1.2 质量分数编码:Phred+33 与 Phred+64
为什么第四行看起来是一堆符号?因为这些字符不是乱打的,它们编码了“质量分数(Quality Score)”。质量分数 Q 的计算公式很简单:
Q = -10 × log10(P)
其中 P 是“该碱基测错的概率”。Q 越高,说明测序仪越有把握。举个例子:
- Q = 30,对应错误概率 0.001(千分之一)
- Q = 20,对应错误概率 0.01(百分之一)
- Q = 10,对应错误概率 0.1(十分之一)
那怎么用 ASCII 字符表示 Q 值呢?有两种主流编码方案:
| 方案 | 偏移量 | Q 值范围 | ASCII 范围 | 常见场景 |
|---|---|---|---|---|
| Phred+33 | +33 | 0 ~ 41 | ! (33) ~ J (74) | Sanger、Illumina 1.8+、绝大多数现代数据 |
| Phred+64 | +64 | 3 ~ 45(某些实现可达 0~62) | @ (64) ~ m (109) | 早期 Illumina 1.3 ~ 1.7 |
举个具体的计算例子:
- 如果第四行出现字符
!,ASCII 码是 33。
Phred+33 解码:Q = 33 - 33 = 0。错误概率高达 100%。几乎不可信。 - 如果出现
J,ASCII 码是 74。
Phred+33 解码:Q = 74 - 33 = 41。错误概率约 0.00008。非常可靠。 - 如果出现
@,ASCII 码是 64。
如果按 Phred+64 解码:Q = 64 - 64 = 0。错误概率高。
但如果在 Phred+33 体系下:Q = 64 - 33 = 31。两种解释差别很大。
避坑指南:我曾经接手过一份别人给的 FASTQ 数据,看上去质量超高,全是 ~、} 这种字符。但仔细一查,他是在 Illumina 1.5 时代生成的,用的 Phred+64 编码,而我默认用了 Phred+33 去读。~(ASCII 126)减 33 之后 Q 高达 93,完全不现实。实际上应该是 126 - 64 = 62。所以,千万不要想当然。一定要确认数据来源的编码方案。通常测序中心会在 README 或元数据里写明。如果拿不准,也可以从质量分数符号的最高 ASCII 值来反向推断——高于 74 的字符几乎肯定是 Phred+64。
1.3 如何判断你的 FASTQ 是哪种编码?
嗯,这里有个实用技巧。拿到一个陌生的 FASTQ 文件,你先别急着跑流程。用 head 看一眼第四行,然后快速判断:
- 查看第四行的第一个字符。如果是
!、"、#、$、%等低 ASCII 字符(<74),基本可以确定是 Phred+33。 - 如果第一个字符是
@、A、B等(64~),而且完全看不到低于 64 的符号,那就很可能是 Phred+64。 - 还有更直接的方法:打印第四行所有字符的 ASCII 范围。如果最低值是 33~,最高是 74~,就是 Phred+33。如果最低是 64~,最高是 105~,就是 Phred+64。
我个人习惯写个小脚本看一眼:
# 提取第一条序列的第四行,转成 ASCII 十进制
sed -n '4p' sample.fastq | od -An -tuC
# 如果输出类似:33 35 35 37 ... 说明是 +33 编码
# 如果输出类似:64 66 68 70 ... 说明是 +64 编码
很多工具(比如 FastQC)会自动检测编码方案,但自动检测也可能出错。尤其是当数据质量普遍偏低时,+64 编码的最低值可能也落在 33~ 区域,就会引发误判。所以,手动确认一次,最稳妥。
核心结论:现代高通量测序数据(尤其是 2013 年之后)绝大多数使用 Phred+33 编码。但遇到旧数据集、或者从非主流平台下载的数据时,一定要多留个心眼。记住:质量分数是后续所有质量评估、过滤、比对的基础。基础错了,什么都白搭。
1.4 知识体系总览
下面这张图概括了本章的核心知识结构。你可以把它当作整个 FASTQ 质量评估流程的“起点”:
看到没有?整个结构非常清晰:四行记录是骨架,Phred 编码是灵魂。后面的课程里,我们要做的所有质量评估——比如画箱线图、看碱基分布、统计 GC 含量——都离不开对这个基础的理解。
好,这一章的内容就到这里。练好基本功,后面的实操你才会觉得得心应手。