1. FASTQ 格式基础

各位做生信的朋友,咱们每天跟测序数据打交道,打交道最多的文件格式就是 FASTQ。这玩意儿看着简单,但里面的门道其实不少。我刚开始接触 NGS 数据时,就因为没搞懂质量分数编码,差点把一批重要样本的分析结果搞砸了。今天咱们就把它彻底捋清楚。

1.1 什么是 FASTQ 文件?

FASTQ 格式,说白了就是测序仪吐出来的原始数据存储格式。它把每条测序读段(read)的序列信息和对应的质量信息打包在一起。这个格式之所以叫 FASTQ,是从 FASTA 格式演化来的,多了个 Q,代表 Quality(质量)。

你想想看,测序仪读到每个碱基时,其实都有一个置信度判断——这个碱基叫得准不准?FASTQ 格式把这些信息全都记录下来了,这是我们做后续过滤、比对、变异检测的基础。

小提示: 市面上常见的 FASTQ 文件名后缀有 .fastq、.fq 或者 .fastq.gz(gzip 压缩版)。我个人习惯直接处理 .gz 格式,既能节省磁盘空间,又方便传输。

1.2 四行结构详解

一个标准的 FASTQ 文件,每条 read 由且仅由 四行 组成。这个结构很固定,咱们一条条来看:

@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG
CTACGTAGCGCGTGAGCTGATCGACGCGCGCGAGCTAGCG
+
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
行号 标识符 内容说明
第1行 @ read 标识符(ID),包含测序仪器、flowcell、坐标等元数据
第2行 序列 实际的碱基序列(A/T/C/G/N)
第3行 + 分隔符,有时后面跟着重复的 ID(可选)
第4行 质量 与第2行碱基一一对应的质量分数编码

第一行 以 @ 开头,后面的字符串是这条 read 的唯一标识。嗯,这里要注意,不同测序平台(Illumina、Ion Torrent、PacBio)的 ID 格式稍微不同,但功能一样——定位这条 read 的来源。

第二行 就是碱基序列了。大小写都可以,但惯例是大写。N 代表测序仪无法判定的碱基。

第三行 简单得不能再简单,只有一个 + 号。有些平台会在 + 后面重复 read ID,但解析时通常忽略它。

第四行 是质量字符串,长度必须和第二行完全一致。每个字符代表对应位置碱基的质量分数。这里面的门道最深,咱们下面细讲。

重要提醒: 我曾经在合并多个 FASTQ 文件时,发现质量字符串长度和序列长度不匹配,结果是某条 read 的第四行被截断了。解析这类文件时,一定要检查四行结构的完整性。少一行或者多一行,整条 read 就废了。

1.3 质量分数编码

质量分数编码是 FASTQ 格式的核心。咱们刚才看到第四行是一串类似 IIIIII 的字符,这些字符是怎么对应到碱基质量的呢?

基本原理是这样的:测序仪对每个碱基计算一个错误概率 p,然后通过 Phred 公式转换成质量分数 Q:

Q = -10 × log10(p)

比如 p=0.01(1% 的错误率),Q = -10 × log10(0.01) = 20。

质量分数 Q 越高,说明这个碱基叫得越准。Q20 意味着 99% 的准确率,Q30 意味着 99.9% 的准确率。这个咱们做质控时经常用。

但问题来了——Q 值是一个数字,怎么存到文本文件里呢?

答案是用 ASCII 字符来表示。具体来说,把 Q 值加上一个偏移量(offset),然后转成对应的 ASCII 字符。我遇到过最常见的编码方案有两种:

编码方案 偏移量 ASCII 范围 对应 Q 值范围 常见平台
Sanger / Illumina 1.8+ 33 33-126 0-93 目前绝大部分平台
Illumina 1.3-1.7 64 64-126 1-62 较旧的 Illumina 数据

举个例子,一个 Q=20 的碱基:

  • 在 Sanger 编码下:20 + 33 = 53,ASCII 53 对应字符 5
  • 在 Illumina 1.3-1.7 编码下:20 + 64 = 84,ASCII 84 对应字符 T

同一个碱基质量,在不同编码方案下看到的字符完全不一样。所以搞错编码方案是新手最容易犯的错误。

避坑指南: 我曾经下载过一批 NCBI SRA 上的公共数据,用 FastQC 检查时发现质量分布图诡异得很。后来仔细一查,原来是这批数据用的是旧版 Illumina 1.3 编码(+64)。我默认用 +33 解析,质量分数全部解读错误。从那以后,我养成了一个习惯:拿到任何 FASTQ 文件,第一件事就是用 head -n 40 看一眼质量字符串的第1个字符,初步判断编码方案。

1.4 Phred 值如何读懂

Phred 质量分数不仅仅是一个数字,它背后代表着我们对测序结果的信任程度。为了让你有直观感受,我做了一个对照表:

Phred 质量分数 (Q) 碱基错误概率 碱基准确率 通俗理解
Q10 10% 90% 每10个碱基就有1个可能错误
Q20 1% 99% 每100个碱基有1个错误
Q30 0.1% 99.9% 每1000个碱基有1个错误
Q40 0.01% 99.99% 每10000个碱基有1个错误

大多数下游分析工具对 Q20 和 Q30 的比例有硬性要求。比如做变异检测时,Q30 以上的碱基才被当作高质量位点使用。我做 RNA-seq 分析时,一般会过滤掉 Q 值低于 20 的碱基。

还有个细节要注意:为什么 ASCII 编码要从 33 开始?因为 ASCII 0-31 是控制字符,没法直接显示和传输。Sanger 格式从 33(字符 '!')开始,正好避开了这些不可见字符。说白了,这是设计者的一个实用考虑。

1.5 核心知识体系一览

为了让你对整个章节有一个整体认知,我画了一张结构图:

FASTQ 格式核心知识体系 FASTQ 文件格式 第1行 @ID 第2行 序列 第3行 + 第4行 质量 质量分数编码 Q = -10·log₁₀(p) 偏移量+33/64 ASCII 字符转换 质量编码方案一旦识别错误 → 整批数据质量解读全部失真

这张图把本章的知识结构串联起来了。从左到右,从 FASTQ 的完整定义到质量编码的转换链路,你可以按这个框架去理解接下来的实操内容。

关键总结: FASTQ 文件的灵魂就在那根质量字符串上。读懂了它,你才算真正掌握了测序数据的源头。后面章节讲 FASTQ 与元数据关联时,咱们还要频繁用到质量分数的信息——比如根据质量阈值过滤样本、合并批次、或者评估测序深度是否够用。