3、FastQC输入与输出:支持的输入格式与报告结构

好了,到了动手跑FastQC的时候了。不过你得先搞清楚它能吃什么格式的数据,以及吃完后拉出来的报告长什么样。我最早用FastQC的时候,直接拿.bam文件往里塞,结果报错——后来才发现我用的版本不支持。嗯,这坑我替你们踩过了。

3.1 支持的输入格式

FastQC吃三种格式:FastQ、SAM、BAM。说白了就是测序仪出来的原始数据,以及比对软件生成的中间文件。不过要注意,不是所有SAM/BAM它都爱吃。

FastQ格式

这是最常见的格式。每条read包含四行信息:标识符、序列、分隔符(+)、质量值。

@SEQ_ID_1
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65

我个人习惯是,拿到新项目先看一眼FastQ文件的行数,确认是4的倍数。如果不是,那多半是上传时被截断了。

小技巧:检查FastQ完整性可以用一条简单的shell命令:
lines=$(wc -l < sample.fastq)
echo $((lines % 4))
# 输出0才正常

你想想看,如果文件损坏了,后面的质控结果全是错的,那不是浪费时间嘛。

SAM格式

SAM是比对后的文本格式,FastQC只支持单端或双端比对产生的SAM文件。它要求文件是有序的,并且包含完整的header信息。

@HD     VN:1.6  SO:coordinate
@SQ     SN:chr1 LN:248956422
@PG     ID:bwa  PN:bwa  VN:0.7.17
read1   99      chr1    10001   60      150M    =       10250   399
read2   147     chr1    10250   60      150M    =       10001   -399

有一次我拿到客户的数据,他的SAM文件头里没写@SQ信息,FastQC直接崩了。后来我让他重新跑一遍bwa,加上-R参数就好。遇到这种问题,先检查文件头。

避坑提醒:SAM文件一般很大,建议先压缩再传输。但FastQC不能直接吃压缩后的SAM,需要解压。我一般都转成BAM再处理,省得折腾。

BAM格式

BAM是SAM的二进制版本,体积小、读取快。FastQC吃BAM文件时,会自动检测是否包含索引文件(.bai)。如果有索引,它就能按需读取,速度能快不少。

使用BAM输入时,我建议加上--noextract参数,这样FastQC不会解压整个文件,能节省大量内存。

fastqc sample.bam --noextract
关键区别:FastQ是原始数据,SAM/BAM是比对后数据。若用BAM做质控,得到的是比对后的序列质量,跟原始质量不完全一样。做文库评估时建议用FastQ,做比对效率评估时用BAM。

3.2 输出HTML报告结构概览

FastQC输出的HTML报告,说白了就是一个长得规规矩矩的网页。左侧是模块列表,右侧是具体内容。报告里有11个模块,每个模块对应一项质控指标。

下面这个表格,是我整理出来的报告结构框架,你对照着看就清楚了。

模块编号 模块名称 核心检查内容
1 Basic Statistics 文件总reads数、序列长度、GC含量等基础统计
2 Per Base Sequence Quality 每个碱基位置的Q值分布
3 Per Tile Sequence Quality 测序芯片每个tile区域的碱基质量
4 Per Sequence Quality Scores 所有reads平均质量的分布
5 Per Base Sequence Content 每个碱基位置A/T/G/C的比例
6 Per Sequence GC Content 每条read的GC含量分布
7 Per Base N Content 每个碱基位置N的比例
8 Sequence Length Distribution 序列长度分布情况
9 Sequence Duplication Levels 序列重复度水平
10 Overrepresented Sequences 过度代表序列的检测与注释
11 Adapter Content 接头序列污染检测

每个模块会用三种颜色标记状态:绿色(通过)、黄色(警告)、红色(失败)。这些阈值的设置方法,我们后面章节会细讲。

3.3 报告的核心逻辑图

这张图展示的是FastQC从输入到输出的完整流程,以及报告内部各模块之间的逻辑关系。你看看,是不是一目了然。

FastQC输入输出与报告结构流程图 输入格式 FastQ SAM BAM 质量评估引擎 HTML报告 报告11大模块 1. Basic Statistics 2. Per Base Seq Quality 3. Per Tile Seq Quality 4. Per Sequence Quality 5. Per Base Seq Content 6. Per Sequence GC Content 7. Per Base N Content 8. Seq Length Distribution 9. Duplication Levels 10. Overrepresented Seq 11. Adapter Content 图形 + 表格 + 状态标记

你看,左边是输入,中间是计算引擎,右边吐出来的是带11个模块的HTML报告。每个模块里都有图形和统计表,顶部还有个整体评估的状态条。

个人经验:我一般在跑完FastQC后,先看报告顶部的“Summary”栏。如果所有模块都是绿色,那恭喜你,数据质量很好。如果出现红色,那就得点进去看具体是什么问题。别急着调参数,先弄清楚问题原因。

3.4 报告的基本元素

每个模块的报告页包含这几部分内容:

  • 模块标题:比如“Per Base Sequence Quality”
  • 状态指示:绿色勾(Pass)、黄色感叹号(WARN)、红色叉(FAIL)
  • 统计图:大多数模块都有对应的分布图或热图
  • 表格数据:如果图形不够详细,下方会附加数值表格
  • 说明文字:FastQC会给出简短的模块解释

举个例子,打开“Per Base Sequence Quality”这个模块,你会看到一张箱线图。横轴是碱基位置,纵轴是Q值。每个位置都有个盒子,盒子的中线代表中位数,上下边缘代表四分位数。正常数据应该是大部分位置Q值在30以上。

# 快速查看报告摘要(命令行版)
unzip -p sample_fastqc.zip fastqc_data.txt | head -30

这个命令可以直接从压缩包中提取核心数据,不用打开网页。我经常在服务器上这么干,省得下载HTML。

提示:不同版本的FastQC生成的报告结构基本一致,但偶尔会有细微差别。比如老版本没有“Per Tile Sequence Quality”这个模块。使用时建议更新到最新版,目前是v0.12.x。

3.5 关于输出的那些坑

说几个我遇到过的实际问题:

  • FastQC默认输出到当前目录,如果你在数据盘跑,报告会写在数据盘上。建议加上-o参数,指定输出目录。
  • 如果输入的是BAM文件,FastQC会把索引文件(.bai)自动找出来。要是没有索引,它会提示“No index file found”,但依然能跑,就是慢一些。
  • 报告里的图是嵌入的SVG和PNG,你可以直接右键另存为图片。不过我个人习惯用fastqc -f fastq生成纯文本输出,然后用其他工具画图,灵活度更高。
# 指定输出目录示例
fastqc sample.fastq -o /path/to/output/

嗯,关于输入输出这部分,记住一句话:给的格式要对,输出的报告要会看。格式错了白跑,报告看不懂等于没跑。后面几章我们会逐个模块深入拆解,每个指标怎么解读、阈值怎么设,都会有具体案例。先把这个基础打好。