FASTQ 格式概述:起源、发展与核心地位
如果你做过高通量测序数据分析,那你一定跟 FASTQ 打过交道。说白了,FASTQ 就是目前存储测序原始数据的事实标准。我刚开始接触这个领域时,还在用 FASTA 格式处理数据,后来发现没有质量分数,很多分析根本没法做——嗯,那时候 FASTQ 还没完全普及呢。
这一章咱们就来聊聊:FASTQ 是怎么来的,经历了哪些演变,以及为什么它在生物信息学里这么重要。你想想看,一个文本格式能统治行业十几年,背后一定有它不可替代的理由。
1.1 从 FASTA 到 FASTQ——一个格式的诞生
早期的测序技术(比如 Sanger 测序)产出的数据量不大,用 FASTA 格式存序列就够了。FASTA 的结构很简单:一个 > 开头加序列标识,后面跟核苷酸或氨基酸序列。但问题来了——它不保存质量信息。
到了 2000 年代初,Solexa 公司(后来被 Illumina 收购)推出了新一代测序仪,一次运行能产出百万条 reads。这时候光有序列就不够了。为什么?因为测序过程有碱基判读错误,你需要知道每个碱基的可靠程度。质量分数成了刚需。
FASTQ 就是在这样的背景下诞生的。它在 FASTA 的基础上,增加了质量分数这一行。我个人习惯把 FASTQ 比作测序数据的「原始底片」——既记录了画面内容(序列),也记录了每个像素的曝光质量(质量分数)。两者缺一不可。
1.2 发展历程:从 Solexa 到 Illumina 时代
FASTQ 的发展其实挺曲折的。我记得早期不同平台用的质量编码方案五花八门,互不兼容。来,看下面这个时间线就清楚了。
从这张图你能看到几个关键转折点。2009 年 NCBI SRA 开始接受 FASTQ 格式,这相当于官方认证了。2010 年代 RNA-seq、ChIP-seq 等技术大爆发,FASTQ 彻底站稳了脚跟。
不过早期有个大坑——质量编码不统一。我跟你说,那时候不同平台出来的 FASTQ 文件,质量分数用的 ASCII 偏移都不一样。Solexa 用 @(偏移 64),Illumina 1.3+ 用 ?(也是偏移 64 但范围不同),Sanger 用 !(偏移 33)。
1.3 FASTQ 在生物信息学中的核心地位
现在 FASTQ 已经是整个 NGS 数据管线的起点。不管你后续做比对、组装、变异检测还是表达定量,第一步输入几乎都是 FASTQ。我甚至觉得,它是整个高通量测序分析链的「通用货币」。
具体来说,FASTQ 的核心地位体现在三个层面:
- 数据交换标准: 不管哪家测序平台(Illumina、MGI、PacBio、Nanopore),最终下机的数据都会转化为 FASTQ 格式。它是一个统一接口。
- 质控的基石: FastQC、MultiQC、Trimmomatic、cutadapt 等工具全部围绕 FASTQ 设计。质量分数直接决定过滤阈值。
- 分析流程的起点: BWA、Bowtie2、STAR、SPAdes——所有主流工具的输入都是 FASTQ。你几乎找不到一个跳过 FASTQ 直接处理 BCL 的通用流程。
1.4 一个典型的 FASTQ 记录长什么样
咱们直接看实例。下面就是一条标准的 FASTQ 记录,Sanger 编码(Phred+33):
@EAS139:136:FC706VJ:2:2104:15343:197392 1:Y:18:ATCACG
GTGCTGTGGTTAATTAAGCTCTAAGTAAGCTAGTAGCTAGTAGCTAG
+
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
结构分解一下,一共四行,循环重复:
| 行号 | 内容 | 说明 |
|---|---|---|
| 第 1 行 | @ 开头 + 序列标识符 | 仪器 ID、flowcell 坐标、index 等元数据 |
| 第 2 行 | 碱基序列 | A/T/C/G/N,长度因平台而异 |
| 第 3 行 | + 开头(可重复标识) | 通常只有 +,有时后面跟标识 |
| 第 4 行 | 质量分数 | ASCII 字符,个数与序列长度一致 |
第 4 行的质量分数是最有意思的部分。每个 ASCII 字符对应一个 Phred 质量值 Q,计算公式是 Q = -10 × log₁₀(P),其中 P 是碱基判读错误的概率。Q 值越高,这个碱基越可靠。
Sanger 编码的映射关系是:ASCII = Q + 33。所以刚才例子里的 'I' 对应 Q=40(因为 'I' 的 ASCII 是 73,73-33=40),意味着错误概率只有万分之一。
你想想看,如果没有质量分数,你怎么判断哪些碱基可信、哪些需要过滤?这就是 FASTQ 不可替代的原因。
1.5 质量编码的兼容性矩阵
前面提到编码类型曾经很混乱,我用一个表帮你快速对照:
| 编码方案 | ASCII 偏移 | Q 值范围 | ASCII 字符范围 | 代表平台 |
|---|---|---|---|---|
| Sanger | +33 | 0 – 93 | ! 到 ~ | Illumina 1.8+、多数现代平台 |
| Solexa | +64 | -5 – 62 | ; 到 ~ | Solexa 早期 |
| Illumina 1.3+ | +64 | 0 – 62 | @ 到 ~ | Illumina 1.3 – 1.7 |
现在的数据基本上都统一成 Sanger 编码了。但你保不准会从公共数据库下载到老数据,或者从特殊平台拿到非标的文件。嗯,这时候就要用 seqtk 或 FastQC 先检测一下。
head -n 1000 myfile.fastq | awk '{if(NR%4==0) print}' | od -An -tuC | awk '{for(i=1;i<=NF;i++) if($i<59) print $i}' | sort -n | head -3 来看最低 ASCII 值,判断偏移量。
说回核心——FASTQ 之所以能成为行业标准,因为它在「信息密度」和「人类可读」之间找到了平衡。二进制格式虽然更紧凑,但调试起来太痛苦。我遇到过好多次,用文本编辑器直接打开 FASTQ 就能定位问题,换成 BAM 就做不到。
所以你看,一个格式能长久不衰,背后都是实打实的工程考量。明白 FASTQ 的本质,后面解析头信息、关联元数据的时候才会得心应手。