FastQC 基础:运行参数、单端/双端数据输入、生成 HTML 报告
本章我们聊 FastQC。这东西可以说是 RNA-seq 质控的第一步,也是我最常用到的工具。你拿到测序数据后,第一件事就是跑 FastQC 看看质量怎么样。说白了,它就是个“体检报告”,告诉你原始数据有没有毛病。
我刚开始做生信时,直接拿别人的脚本跑完就完事了。有一次跑完才发现双端数据只输入了一个文件,结果报告全是单端的结果……嗯,后来我就养成了每次检查参数的习惯。
1. 认识 FastQC
FastQC 是一个轻量级的 QC 工具。它能快速扫描 FASTQ 文件,给出十几个维度的质量指标。核心模块包括:
- 碱基质量分布(Per base sequence quality)
- 序列 GC 含量(Per sequence GC content)
- 接头污染(Adapter content)
- 重复序列(Overrepresented sequences)
- 碱基含量偏倚(Per base sequence content)
- …… 一共 11 个模块
你想想看,每个模块都会给出一个评价:通过(绿色)、警告(黄色)或失败(红色)。这样一眼就能看出哪里有问题。
2. 单端与双端数据输入
FastQC 默认支持单端和双端。双端数据其实是分别跑两个文件,不会合并分析。你给两个文件,它就出两个报告。
| 数据模式 | 命令行示例 | 说明 |
|---|---|---|
| 单端 | | 一个文件一个报告 |
| 双端 | | 两个文件各自报告 |
| 批量 | | 通配符一次跑全部 |
我记得有一次做双端测序项目,同事只用了 R1 文件跑 FastQC,结果 R2 质量明显差却根本没发现。后来我检查时才发现 R2 的接头污染严重。所以我的建议是:双端数据一定两个文件都跑,不要偷懒。
3. 运行参数详解
FastQC 的参数不多,但有几个很实用。我整理一下常用的:
fastqc \
--outdir ./qc_output \
--threads 4 \
--extract \
--noextract \
--nogroup \
--kmers 7 \
sample.fastq.gz
逐个说说:
--outdir:指定输出目录。不指定的话 HTML 和 zip 会生成在当前目录,很乱。我一般都会建个qc_reports/文件夹统一存放。--threads:多核并行。建议和 CPU 核心数一致,但不能超过文件数(比如只有一个文件,--threads 8 也没意义)。--extract:解压 zip 包,直接得到文本格式的统计文件。后续用 MultiQC 汇总时常用。--noextract:不解压。如果你只要 HTML 报告看个大概,用这个节省磁盘。--nogroup:不分组。默认 FastQC 会把 binned 统计,不分组会逐碱基展示,更精细,但报告会很大。--kmers:设置 k-mer 长度检测,默认 7。测序偏倚较大时可以改大,但一般别动。
4. 生成 HTML 报告与解读
跑完之后,你会得到两个输出:一个 .html 文件和一个 .zip 压缩包(如果不加 --noextract)。HTML 是主报告,用浏览器打开就能看。
报告长什么样?上面是摘要表格,左边是导航,右边是详细图表。我通常会直接看右边每个模块的图表,重点关注:
- Per base sequence quality:Boxplot 中位数应在绿色区域(Q ≥ 28),低于 Q20 的区域要警惕。
- Per sequence GC content:理论分布是正态分布,如果出现双峰可能是污染或建库偏倚。
- Adapter content:如果在 3' 端出现曲线上升,说明接头没切干净。
- Overrepresented sequences:具体序列占比过高,可能是指标污染或 PCR duplicates。
我习惯先看 Per base sequence quality 和 Adapter content 这两个。如果质量没问题,其他模块即使出现黄色警告,也可以先忽略——很多是因为测序本身的技术偏差,不会影响下游分析。
5. 避坑指南
- 文件格式: FastQC 支持 .fastq、.fastq.gz、.bam、.sam。但 .bam 只能分析比对后的质量,不适用于原始 RNA-seq。我个人只推荐用原始 FASTQ。
- 大文件处理: 超过 2GB 的 gz 文件最好提前分割或用 --threads 控制。否则可能卡死。
- 报告存放: 如果项目有多个样本,把所有 HTML 放在一个目录,后期用 MultiQC 合并汇总非常方便。我每次都这样做。
- 版本差异: FastQC 0.11.9 之后的版本默认不显示 Kmer 曲线。如果需要,加 --kmers 7。老版本没有这个选项。
好了,FastQC 的基础就这些。下一步你可以在终端里跑一个例子试试。我个人建议先用一个小文件(比如 1M reads)跑一次,看看参数效果。这样心里有底,再上正式数据。
--extract 生成文本版报告,然后 less qc_reports/sample_fastqc/fastqc_data.txt 直接看。我经常这样快速查看“Per base sequence quality”的具体数值。