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 个模块

你想想看,每个模块都会给出一个评价:通过(绿色)、警告(黄色)或失败(红色)。这样一眼就能看出哪里有问题。

我的个人习惯: 拿到新数据后,先跑 FastQC 看一下整体轮廓。不需要太纠结单个指标,重点看绿色和黄色的比例。如果大片红色,那就得考虑是不是建库出了问题。
FastQC 工作流程 输入 FASTQ 文件 单端 / 双端 运行参数 --extract --threads 11 个分析模块 碱基质量 / GC / 接头 HTML 报告 交互式图表 结果解读 绿 / 黄 / 红 双端数据需要分别输入两个 FASTQ 文件,FastQC 会独立生成两个 HTML 报告。

2. 单端与双端数据输入

FastQC 默认支持单端和双端。双端数据其实是分别跑两个文件,不会合并分析。你给两个文件,它就出两个报告。

数据模式命令行示例说明
单端
fastqc sample_R1.fastq.gz -o qc_reports/
一个文件一个报告
双端
fastqc sample_R1.fastq.gz sample_R2.fastq.gz -o qc_reports/
两个文件各自报告
批量
fastqc *.fastq.gz -o qc_reports/
通配符一次跑全部

我记得有一次做双端测序项目,同事只用了 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。测序偏倚较大时可以改大,但一般别动。
曾经踩过的坑: 有一次我用 --threads 32 跑,结果系统内存爆了。因为 FastQC 多线程是每个线程独立加载文件,文件太大时内存会成倍增长。建议大文件时先试试 4 线程,看内存能顶住再加。

4. 生成 HTML 报告与解读

跑完之后,你会得到两个输出:一个 .html 文件和一个 .zip 压缩包(如果不加 --noextract)。HTML 是主报告,用浏览器打开就能看。

报告长什么样?上面是摘要表格,左边是导航,右边是详细图表。我通常会直接看右边每个模块的图表,重点关注:

  1. Per base sequence quality:Boxplot 中位数应在绿色区域(Q ≥ 28),低于 Q20 的区域要警惕。
  2. Per sequence GC content:理论分布是正态分布,如果出现双峰可能是污染或建库偏倚。
  3. Adapter content:如果在 3' 端出现曲线上升,说明接头没切干净。
  4. 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”的具体数值。