第4章:常用质控软件FastQC入门:安装、运行、解读报告

做多组学数据质控,绕不开的第一个工具就是FastQC。说实话,我第一次接触它的时候,觉得这个软件其貌不扬——一个Java写的命令行工具,生成的报告也就一个HTML文件。但七年用下来,我可以很负责任地告诉你:它永远是测序数据下机后,我最先跑的那个程序。

这一章我会把FastQC的安装、运行、报告解读全部讲透。你不仅要会跑,还要能看懂报告里每个图在说什么,知道哪些是红灯、哪些只是黄灯警告。

4.1 安装FastQC

FastQC的安装非常友好。它只需要Java环境,你电脑里有Java 8以上版本就行。我个人习惯直接用包管理器安装,省事。

4.1.1 环境检查

先确认你的Java环境:

java -version
# 输出示例(版本号不同没关系)
openjdk version "11.0.18" 2023-01-17 LTS

如果提示命令找不到,去装个Java环境。我一般推荐OpenJDK 11,稳定且兼容性好。

4.1.2 三种安装方式

我按推荐顺序列出来:

方式 命令 备注
conda安装(推荐) conda install -c bioconda fastqc 版本可控,环境隔离
apt/snap(Ubuntu) sudo apt install fastqc 简单,但版本可能旧
官方下载 从Babraham Bioinformatics官网下载zip包 最原始,适合离线部署

我个人最推荐conda。原因很简单——管理方便,不会搞乱系统环境。我在项目里遇到过几次因为系统包管理器装的FastQC版本太低,结果报告里缺少新模块的坑。

避坑: 不同版本FastQC对同一份数据的判断标准可能略有差异。如果你和同事在对报告结果,请先确认大家用的是同一个版本。

4.1.3 验证安装

装完之后跑一下帮助命令:

fastqc --help
# 能看到类似下面的内容
Usage: fastqc seqfile1 seqfile2 ... seqfileN

能出来帮助信息,说明装好了。如果不出来,大概率是Java没装或者路径不对。

4.2 运行FastQC

FastQC的基本用法就一句话:fastqc 你的数据文件。不过真正做项目时,我们一般会加一些参数,让它更适合批处理。

4.2.1 基本命令

跑单样本的最简单写法:

fastqc sample_R1.fastq.gz

这行命令会生成两个文件:sample_R1_fastqc.html(可视化报告)和sample_R1_fastqc.zip(原始数据打包)。

4.2.2 常用参数组合

我在实际项目中用的最多的组合是:

fastqc -o ./qc_reports/ -t 8 sample_R1.fastq.gz sample_R2.fastq.gz

参数解释:

  • -o ./qc_reports/ 指定输出目录。如果不写,报告会生成在当前目录,一堆文件乱糟糟的
  • -t 8 使用8个线程并行处理。如果样本多,这个参数能节省大量时间
  • 后面直接跟FASTQ文件列表,可以用通配符

批量处理整个目录里所有fq.gz文件的命令:

# 处理当前目录下所有fastq.gz文件
fastqc -o ./qc_reports/ -t 8 *.fastq.gz

经验之谈: 我第一次做全外显子组测序质控时,直接跑了48个样本的FastQC。没指定输出目录,结果HTML文件混在原始数据里找了好久。后来我养成了习惯——先建好qc_reports文件夹,再跑命令。

4.2.3 处理大文件时的注意事项

FastQC默认只读取文件的前100万条reads做分析。对于大部分场景,这个采样量足够反映整体质量了。但如果你的数据超过10GB,或者你想更精确地评估,可以手动调整:

# 只分析前50万条(更快,适合快速预览)
fastqc -o ./qc_reports/ -t 8 --kmers 7 sample.fastq.gz

# 分析全部数据(更慢,但更准)
fastqc -o ./qc_reports/ -t 8 --noextract sample.fastq.gz

说句实话,大部分情况下默认的100万条就够用了。我只有做单细胞RNA-seq数据时会特别小心,因为细胞barcode和UMI的处理对质量很敏感,这时候我会考虑用--noextract跑完整分析。

重要提醒: 千万别在生产环境中直接看fastqc的输出日志而忽略错误提示。如果FastQC报"Unable to read file: java.io.FileNotFoundException",先检查文件权限和路径。

4.3 解读FastQC报告

终于进入最核心的部分了。打开生成的HTML报告,你会看到十多个模块。别慌,我挨个给你讲重点。

其实看懂FastQC报告的关键就三点:绿色通过、黄色警告、红色失败。黄色不是大问题,红色才需要警惕。但具体怎么看,我们来过一遍。

FastQC报告解读流程 FastQC 报告解读核心流程 原始FASTQ文件 FastQC 分析(采样100万条) 输出: .html + .zip 报告 核心评估模块(重点关注) Per base sequence quality Per base GC content Adapter Content Overrepresented seqs ✅ 绿色通过 ⚠️ 黄色警告 ❌ 红色失败 根据红灯/黄灯位置,判断是否需要修剪、过滤或重测

报告拿到手,我们按模块来拆解。

4.3.1 Basic Statistics(基本信息)

这个模块不涉及质量评分,它只是告诉你数据的基本情况。重点关注:

  • Total Sequences: 总reads数,和你预期的应该差不多
  • Sequence length: 序列长度,应该是固定值(比如150bp),如果不是固定长度,说明数据是可变长度测序
  • %GC: GC含量,这个要结合物种看。人的参考基因组GC含量大约41%,如果偏差太大,可能是PCR扩增偏好性导致的

有一次我拿到一份数据,GC含量只有28%。一开始以为样本污染了,检查了半天才发现,那是AT富集区域的捕获测序,不是全基因组,白费了很多功夫。所以说,一定要结合实验设计看报告。

4.3.2 Per Base Sequence Quality(每碱基质量)

这张图是FastQC报告里最重要的一张。X轴是碱基位置(1到150),Y轴是质量分数(Phred score)。

  • 绿色区域:质量分数 > 28,很好
  • 橙色区域:20~28,可以接受
  • 红色区域:< 20,危险

你希望看到什么?箱线图的中位数(中间那根线)始终在绿色区域里,别往下掉。如果到了第100个碱基附近黄色线开始出现,或者红色报警,就要考虑做尾部修剪了。

小技巧: 观察箱线图的形状。如果箱体很窄,说明所有reads在这一位置的质量都很均匀。如果箱体很宽甚至出现很多离群点,说明部分reads的质量特别差。我通常把这类reads单独拎出来看下是不是片段污染。

4.3.3 Per Sequence GC Content(GC含量分布)

这里看的是所有reads的GC含量分布直方图。理想情况下,它应该近似正态分布,峰值落在物种基因组GC含量附近。如果出现双峰——嗯,要警惕了,可能是样本污染。

举个例子,人源样本的GC分布应该是单峰41%左右。如果同时出现一个45%的峰,可能是混入了细菌DNA。我在一次口腔微生物组项目的质控中,就靠这张图发现了一个重复取样导致的交叉污染。

4.3.4 Per Base N Content(N含量)

N代表测序仪无法确定是哪个碱基。正常情况下,每个位置的N比例应该几乎为0。如果有碱基位置的N比例超过5%,说明测序质量在这一段很差,或者reference区域自身有问题。

我见过最极端的例子是RNA-seq数据,5'端前10个碱基的N比例高达30%。一看,是逆转录引物设计的问题,导致前几个碱基测不出来。这种情况直接修掉前10个碱基就好了。

4.3.5 Sequence Length Distribution(序列长度分布)

对于双端150bp测序,这个应该是单峰,所有read长度都一样。如果出现长度不一致:

  • 可能是文库中有过长或过短的片段
  • 可能是测序仪提前终止
  • 也可能是软件切除了barcode之后长度不均匀

做三代测序(比如PacBio或Nanopore)时,长度分布是重要的质量指标,但对于二代测序,长度应该固定。

4.3.6 Overrepresented Sequences(过度代表序列)

如果一个序列出现的频率远超正常期望,就会在这里被标记。通常,过度代表序列是:

  • 接头序列(adapter)——最常见的报警原因
  • PCR重复——可能来自扩增偏好
  • 核糖体RNA——RNA-seq数据里常见

如果报告显示Adapter Content也是红色,那么基本可以断定是没切除干净接头。这时候你得在比对前走一步adapter trimming。我用cutadapt或者Trimmomatic都行。

避坑经验: 我曾经在评估一个建库公司的数据时,发现80%的reads都被标记为过度代表序列。查了一圈,原来是他们的文库定量出了问题,PCR循环太多导致大量重复。这个样本直接从项目里剔除了——因为再好的分析流程也救不了建库失败的数据。

4.3.7 Adapter Content(接头含量)

这个模块专门检测接头污染。如果绿色(通过),说明没有接头残留。如果红了,记住是哪个接头类型(Illumina universal adapter?还是small RNA adapter?),然后去选择对应的切除策略。

不同平台、不同建库试剂盒用的接头序列不一样。FastQC内置了24种常见的接头序列库,够覆盖99%的二代测序场景了。

4.4 批量查看报告

样本多了之后,一个一个点开HTML看太慢了。我这里有两个技巧:

4.4.1 MultiQC聚合

将所有FastQC报告汇总成一个网页:

# 安装MultiQC
pip install multiqc

# 在FastQC输出目录下运行
multiqc ./qc_reports/

这个会生成一个multiqc_report.html,里面把所有样本的同一模块放在一起对比,一目了然。

4.4.2 命令行快速提取

如果你只想看某个关键指标(比如每个样本的total reads数),可以解压FastQC的zip文件:

# 查看所有样本的reads总数
for zip in *.zip; do
  sample=${zip%_fastqc.zip}
  read_count=$(unzip -p $zip */fastqc_data.txt | grep "Total Sequences" | cut -f2)
  echo "$sample: $read_count"
done

这个小脚本帮我在一次400个样本的肿瘤Panel项目中,两分钟内定位到了3个建库失败的样本——它们reads数只有正常样本的十分之一。

4.5 常见FASTQC报警及处理策略

模块 报警状态 可能原因 我通常怎么做
Per base quality 红色(倒数5bp) 测序仪前端/末端质量下降 用Trimmomatic切除低质量尾部(比如只保留前135bp)
Per sequence GC 红色(双峰) 样本污染或PCR偏好 检查物种组成,必要时重新建库
Adapter Content 红色(>0.1%) 接头未切除干净 用cutadapt指定接头序列重新切除
Overrepresented seqs 红色(>1%) PCR重复或rRNA残留 RNA-seq数据手动去rRNA;PCR重复用picard MarkDuplicates
N content 红色(>1%) 测序失败区域 软件检测区域低复杂度,考虑合并或跳过

注意: 不要因为FastQC报告里有一个模块亮了红灯就马上判定数据不能用。黄色警告更常见,大部分黄灯只是提醒你数据有轻微瑕疵。真正的弃样标准是多个红灯同时出现,或者核心指标(如per base quality中后段大面积变红)严重恶化。

到这一步,你应该能独立完成FastQC的安装、运行和报告解读了。快速回顾一下:装好Java和FastQC -> 用通配符批量跑样本 -> 打开HTML报告重点关注per base quality、GC content和adapter content -> 发现异常后记录问题样本 -> 决定是否要去接头或低质量碱基 -> 全部合格的数据进入后续分析流程。