1. 测序数据基础:FASTQ 格式与质量编码

做生信分析这么多年,我处理过的 FASTQ 文件少说也有几十 TB。但很多人一上来就写过滤脚本,结果数据越滤越少,才发现连格式都没搞对。这一章,我们就先把地基打牢。

1.1 四行结构:你不能只靠感觉

每个 FASTQ 文件记录一条测序序列,固定用四行表示。我刚开始干活时总记错换行符,后来被一个脏数据坑了一整晚,才老老实实背下来。

行号标识符内容
第1行@序列标识符(含测序仪、坐标等信息)
第2行(无)碱基序列(A/T/C/G/N)
第3行+可选重复标识符(通常只写 +)
第4行(无)质量字符串,长度与第2行一致

一个真实示例,你可以在任何测序数据目录里找到类似内容:

@EAS139:136:FC706VJ:2:2104:15343:197393
GTGCTGTGGTCTTATTTCCATTCTCAGTGTCAGTGACTGTGACTGTCAGTGACTGTCAG
+
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

需要注意,第4行的质量字符不能断行,长度必须严格等于第2行。我曾经遇到过一条 read 质量字符串少了一个字符,结果整个下游比对都报错——嗯,那个版本正好是 GATK 4.0,报错信息特别隐晦。

1.2 质量编码的进化史

Phred 质量分数用一个整数 Q 表示碱基的准确性。公式很简单:Q = -10 × log10(P),P 是错误概率。比如 Q=30 意味着错误率 0.1%,也就是每 1000 个碱基错 1 个。

但怎么把这个值存到文本里呢?不同测序平台用了不同的 ASCII 偏移量。我整理了一张表,建议你收藏:

编码名称ASCII 偏移质量值范围常见平台
Sanger / Illumina 1.8+330–40(常用 0–40)Illumina HiSeq, NovaSeq, 公共数据库
Solexa / Illumina 1.064−5–40(极少见)早期 GA
Illumina 1.3+640–40GAII, MiSeq 早期
Illumina 1.5+643–40部分遗留数据
PacBio / ONT330–93(低频高值)三代测序平台

常见的坑:很多人以为质量字符 '!' 对应 Q=0,其实在 Sanger 编码里 '!' 是 ASCII 33,刚好对应 Q=0。而 'I'(ASCII 73)对应 Q=40。你写过滤脚本时,千万别把字符直接当数值用,一定要减去偏移量。

我个人习惯用 ord(char) - 33 来转 Sanger 编码。如果是历史数据,先跑个 fastq_quality_check 或者直接看字符分布——质量字符如果大量出现 '@' 和 'A'(ASCII 64 和 65),基本就是 Illumina 1.3+ 的旧编码。

1.3 为什么质量编码影响过滤效果?

你想想看,如果我们用错偏移量,读出来的质量分全部错位。比如原本 Q=30 的碱基,用 64 偏移解析,会被当成 Q=-31,直接过滤掉——这叫冤假错案。反之,低质量碱基被当作高质量保留,导致后续组装出大量假阳性突变。

我曾经接手过一个客户数据,他们用 old Illumina 1.5+ 格式存了两年,硬是拿 Sanger 编码往下跑。结果变异检测结果全是杂音,debug 花了整整三天。

下面这张图帮你理清 FASTQ 的结构与质量编码流程:

FASTQ 结构与质量编码流程 @ 标识符行 碱基序列行 + 分隔符行 质量字符串行 ASCII → 偏移量 → Phred Q 偏移33(Sanger/Illu 1.8+) 偏移64(旧Illumina) 核心:质量字符串长度与碱基序列长度必须相等;解析时先判断编码版本,再减去对应偏移量

1.4 如何快速判断编码版本?

别纠结查文档。我教你一个土办法——看质量字符最小值。如果是 Sanger 编码,质量字符一般从 '!'(Q=0)到 'I'(Q=40)之间;如果是旧 Illumina 1.3+,最低字符会出现在 '@'(Q=0)附近。可以用下面这条命令快速扫描:

head -n 1000 sample.fastq | awk 'NR%4==0' | cut -c1-100 | perl -ne 'chomp; for $c (split //) { print ord($c)."\n" }' | sort -n | head -5

这个命令取前 1000 条 read 的质量字符串,提取每个字符的 ASCII 码,排序后看最小值。如果最小值在 33 附近,就是 Sanger 编码;如果在 64 附近,就是旧 Illumina 编码。

个人小技巧:处理公共数据库(NCBI SRA、ENA)下载的 FASTQ 时,直接按 Sanger 偏移 33 解析,因为现在所有公共库已统一为标准格式。但如果是从实验室本地拿到的数据,千万别信文件名里的所谓版本号——实际分析前先跑一遍上面的检测命令。

1.5 你还需要知道的几个硬规矩

  • 字符串不能包含换行符——序列行和质量行都必须是单行。
  • 如果标识符行以 @ 开头,但序列行里也出现 @?别担心,只有行首的 @ 才是标识符起点。
  • 质量字符串的允许字符:从 !(ASCII 33)到 ~(ASCII 126),但实际常用范围更窄。
  • GZIP 压缩的 FASTQ 不要直接解压后查看,用 zcat 或 less -S 预览,否则大文件会炸内存。