1. FASTQ文件格式详解

做高通量测序的人,天天都在跟FASTQ打交道。但说实话,真正把这个格式吃透的人并不多。我第一次接触它的时候,就有个困惑——为什么短短几行文本,能承载那么多信息?今天咱们就把它彻底拆开看看。

1.1 四行结构,缺一不可

一个标准的FASTQ记录,固定占四行。少一行都不行,多一行算你错。我给你看个真实的例子:

@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG
CTTGAAGGGCGCTTCGTGCCTGGGTGCTCGAGATGTTCCGTACTGACACA
+
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

来,一行一行说清楚:

  • 第一行(@开头):序列标识符。@后面跟的是测序仪生成的唯一ID,包含仪器编号、flowcell位置、坐标这些信息。我习惯把它叫做“序列的身份证”。
  • 第二行:碱基序列。就是A、T、C、G组成的DNA序列。偶尔还会看到N,表示这个位置测不出来。
  • 第三行(+开头):分隔符。后面可以跟跟第一行相同的信息,也可以什么都不写。但我见过不少新手以为这行可有可无——可千万不能删。
  • 第四行:质量序列。每个字符对应第二行每个碱基的质量值。字符越多、越“花哨”,说明质量越高。
我的习惯:拿到一个不认识的FASTQ文件,我第一件事就是看看第三行。如果它跟第一行一样长,说明是某些旧版软件生成的。不影响使用,但心里要有数。

1.2 Phred分数——质量的“温度计”

质量值怎么来的?其实是一个叫Phred的算法算出来的。原理不复杂,但很重要:

Q = -10 × log₁₀(P)

这里P是碱基出错的概率。举个例子:

  • 如果Q=30,说明出错概率是千分之一。这个质量线,行业里叫“Q30门槛”。
  • 如果Q=20,出错概率是百分之一。说实话,这个质量做下游分析就有点悬了。
  • 如果Q=10,出错概率是10%。这种数据,我一般建议直接扔掉。

记住这个换算关系:

Phred分数错误概率碱基准确率
101/1090%
201/10099%
301/100099.9%
401/1000099.99%

1.3 ASCII编码——字符是怎么变成数字的

好,现在问题来了:FASTQ里存的是字符,不是数字。那怎么把Q值转成可见字符?

原理很简单:ASCII码 = Phred分数 + 偏移量

偏移量有两个主流值,这就是很多人踩坑的地方:

  • Sanger/Illumina 1.8+:偏移量33,Q值范围0-41。这是现在的标准,大部分新数据都用这个。
  • 旧版Illumina(1.3-1.7):偏移量64,Q值范围0-62。现在基本淘汰了,但老旧数据集里还能碰到。

举个具体的例子——Q=30:

  • 用Sanger编码:30 + 33 = 63,对应ASCII字符 ?
  • 用旧版编码:30 + 64 = 94,对应ASCII字符 ^
我曾经接手过一个项目,合作方发来的FASTQ质量看起来“特别好”——满屏都是高分字符。结果发现他们还在用老版本的编码,而我用的软件默认解析Sanger格式。那一次我花了整整一天定位这个问题。后来我学乖了:拿到新数据,先用FastQC扫一眼,看看质量分数分布曲线的纵坐标范围,立刻就能判断编码类型。

1.4 实战小技巧

平时怎么判断编码类型?我这里有个快速判断法:

# 看看质量序列里有没有小写字母或数字
# Sanger编码:字符从 ! 开始,到 ~ 结束(33-126)
# 旧版编码:字符从 @ 开始,到 k 结束(64-107)

# 快速检测方法
if quality_string contains any digit or '@':
    print("可能是旧版Illumina编码")
else if quality_string starts with '!':
    print("可能是Sanger编码")

嗯,这里要注意:不要完全依赖自动检测工具。我见过一些工具把64偏移的数据误判成33偏移,导致后续所有质量过滤都白做了。

1.5 完整结构总结

最后,我把FASTQ的整个知识体系画成一张图,方便你理解:

FASTQ文件结构全景图 四行记录结构 ① 标识符行 (@开头) ② 碱基序列行 ③ 分隔符行 (+开头) ④ 质量序列行 Phred 质量分数 Q = -10×log₁₀(P) ASCII编码 Sanger (+33) Illumina 1.8+ 旧版 (+64) 可复用标识符 常见陷阱与建议 • Q30 门槛:错误概率 1/1000 • 编码误判是最常见的低级错误 • 拿到新数据先跑 FastQC 确认编码类型

这张图把FASTQ的核心链条串起来了:从四行结构出发,到Phred分数怎么计算,再到ASCII编码怎么映射。你想想看,只要搞明白这三层,FASTQ文件在你面前就没有秘密了。

一句话总结:FASTQ = 序列身份证 + 碱基序列 + 质量分数(用ASCII编码保存)。三个要素缺一不可,任何一个环节出问题,下游分析都是白搭。