3、FastQC输入与输出:支持的输入格式与报告结构
好了,到了动手跑FastQC的时候了。不过你得先搞清楚它能吃什么格式的数据,以及吃完后拉出来的报告长什么样。我最早用FastQC的时候,直接拿.bam文件往里塞,结果报错——后来才发现我用的版本不支持。嗯,这坑我替你们踩过了。
3.1 支持的输入格式
FastQC吃三种格式:FastQ、SAM、BAM。说白了就是测序仪出来的原始数据,以及比对软件生成的中间文件。不过要注意,不是所有SAM/BAM它都爱吃。
FastQ格式
这是最常见的格式。每条read包含四行信息:标识符、序列、分隔符(+)、质量值。
@SEQ_ID_1
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65
我个人习惯是,拿到新项目先看一眼FastQ文件的行数,确认是4的倍数。如果不是,那多半是上传时被截断了。
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参数就好。遇到这种问题,先检查文件头。
BAM格式
BAM是SAM的二进制版本,体积小、读取快。FastQC吃BAM文件时,会自动检测是否包含索引文件(.bai)。如果有索引,它就能按需读取,速度能快不少。
使用BAM输入时,我建议加上--noextract参数,这样FastQC不会解压整个文件,能节省大量内存。
fastqc sample.bam --noextract
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从输入到输出的完整流程,以及报告内部各模块之间的逻辑关系。你看看,是不是一目了然。
你看,左边是输入,中间是计算引擎,右边吐出来的是带11个模块的HTML报告。每个模块里都有图形和统计表,顶部还有个整体评估的状态条。
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。
3.5 关于输出的那些坑
说几个我遇到过的实际问题:
- FastQC默认输出到当前目录,如果你在数据盘跑,报告会写在数据盘上。建议加上
-o参数,指定输出目录。 - 如果输入的是BAM文件,FastQC会把索引文件(.bai)自动找出来。要是没有索引,它会提示“No index file found”,但依然能跑,就是慢一些。
- 报告里的图是嵌入的SVG和PNG,你可以直接右键另存为图片。不过我个人习惯用
fastqc -f fastq生成纯文本输出,然后用其他工具画图,灵活度更高。
# 指定输出目录示例
fastqc sample.fastq -o /path/to/output/
嗯,关于输入输出这部分,记住一句话:给的格式要对,输出的报告要会看。格式错了白跑,报告看不懂等于没跑。后面几章我们会逐个模块深入拆解,每个指标怎么解读、阈值怎么设,都会有具体案例。先把这个基础打好。