fastp: 极速全能的FASTQ文件自动质控+过滤+校正+预处理软件
The following article is from 生信者言 Author fastp
软件作者介绍
陈实富博士,海普洛斯联合创始人 / CTO
海普洛斯是全球领先的精准医疗和基因大数据国家高新技术企业,拥有 Illumina NovaSeq、 HiSeq X10、NextSeq等全系列测序仪,致力于整合液体活检、基因测序、人工智能、大数据等前沿新兴科技,让每一个生命健康 120 年。海普洛斯拥有很好的开源文化,发起和维护了开源基因数据分析项目组 OpenGene。
目前,陈博士正在招聘生物信息攻城狮(文末附招聘需求),如果你有兴趣加入这个开放而富有情怀的团队,请加他的微信(WeChat ID:opengene),或者直接将简历砸向 chen@haplox.com。
第一部分
引言
各位做生信的小伙伴都知道,对于下机的 FASTQ 数据需要进行质控和预处理,以保证下游分析输入的数据都是干净可靠的。通常我们都是使用 FASTQC 等软件进行质控,使用 cutadapt 软件去除接头,使用Trimmomatic 等软件进行剪裁,然后使用一些自已开发的脚本进行过滤。这一过程可能需要使用多个软件,相当繁琐,而且速度较慢,这些软件大多又不支持多线程,遇到较大的FASTQ 文件,处理起来可真是让人等得心急如焚。
所以今天给大家介绍一款新的软件:fastp。它可以仅仅扫描 FASTQ 文件一次,就完成比FASTQC + cutadapt + Trimmomatic 这三个软件加起来还多很多的功能,而且速度上比仅仅使用 Trimmomatic 一个软件还要快 3 倍左右,因为它使用 C++开发,处处使用了高效算法,而且完美支持多线程!正因为其强大的功能和飞快的速度,其 github 项目在第一个版本发布至今, 已经收到了194多个 star,这在生信软件小领域里面算是神速了!而且该软件更新频繁,最新版0.12.5,每一版都有新功能加入!
该项目的 github 地址请戳:https://github.com/OpenGene/fastp
第二部分
功能特点
先来看一看该软件的功能列表:
fastp软件十大功能列表
1、对数据自动进行全方位质控,生成人性化的报告;
2、过滤功能(低质量,太短,太多N......);
3、对每一个序列的头部或尾部,计算滑动窗内的质量均值,并将均值较低的子序列进行切除(类似 Trimmomatic 的做法,但是快非常多);
4、全局剪裁 (在头/尾部,不影响去重),对于 Illumina 下机数据往往最后一到两个 cycle 需要这样处理;
5、去除接头污染。厉害的是,你不用输入接头序列,因为算法会自动识别接头序列并进行剪裁;
6、对于双端测序(PE)的数据,软件会自动查找每一对read的重叠区域,并对该重叠区域中不匹配的碱基对进行校正;
7、去除尾部的 polyG。对于NextSeq/NovaSeq 的测序数据,因为是两色法发光,polyG 是常有的事,所以该特性对该两类测序平台默认打开;
8、进行fastq质量值转换,轻松转换老旧Phred64质量值为常用的Phred33,适应主流软件;
9、可以对带分子标签(UMI)的数据进行预处理,不管UMI在插入片段还是在index 上,都可以轻松处理;
10、可以将输出进行分拆,而且支持两种模式,分别是指定分拆的个数,或者分拆后每个文件的行数。
以上功能大多都不需要输入太多的参数,一些功能默认已经开启,但是可以用参数关闭。fastp 完美支持 gzip 的输入和输出,同时支持 SE 和 PE 数据,而且不但支持像 Illumina 平台的 short read 数据,也在一定程度上支持PacBio与Nanopore 的 long reads 数据。
fastp 软件会生成 HTML 格式的报告,而且该报告中没有任何一张静态图片,所有的图表都是使用 JavaScript 动态绘制,非常具有交互性,想要看一下样板报告的,可以去以下链接:http://opengene.org/fastp/fastp.html
而且软件的开发者还充分考虑到了各种自动化分析的需求,不但生成了人可读的HTML 报告,还生成了程序可读性非常强的 JSON 结果,该 JSON 报告中的数据包含了 HTML 报告 100%的信息,而且该 JSON 文件的格式还是特殊定制的,不但程序读得爽,你用任何一款文本编辑器打开,一眼过去也会看得明明白白。想要看一下 JSON 结果长什么样的,可以去以下链接:http://opengene.org/fastp/fastp.json
第三部分
轻松上手
看起来这个软件功能非常多,那使用起来是不是非常复杂呢?非也!
该软件的使用非常简单,默认情况下只需要指定输入和输出文件,就可以很好地工作。例如我们想对 in.fq 文件进行过滤和质控,并输出 clean data 为 out.fq,那么就可以使用以下的命令:
fastp -i in.fq -o out.fq
即使用小写的 i 和小写的 o 分别指定 input 和 output 文件,就大功告成啦。软件执行完成之后,会生成 out.fq,还会生成两个文件 fastp.html 和 fastp.json。其中fastp.html 是可视化的 QC 质控报告以及各类过滤统计,而 fastp.json 是 JSON 版本的报告,主要用于下游程序来解读质控和过滤的结果。而且 fastp 会同时统计过滤前(raw data)和过滤后(clean data)的质量信息,以方便你分析过滤前后数据质量发生了什么变化,够贴心吧?以上例子是对单端测序数据(single-end,SE)进行的,那对于双端测序数据 (paired-end,PE)是不是也可以呢?答案自然是肯定的,而且命令也基本上差不多,示例如下:
fastp -i in.R1.fq -o out.R1.fq -I in.R2.fq -O out.R2.fq
可以看到,-i 和-o 还是用来指定 read1 的输入了输出,而大写的-I 和-O(注意是喔,而不是零)则是用于指定read2的输入和输出,其他都保持不变。而且fastp软件最初的研发就是为了更好地处理 PE 数据,所以对于 PE 数据开发了更多的算法,比如基于 overlap 分析进行碱基校正等功能,就是只有 PE 数据独享的。fastp 对于输入和输出都支持 gzip 压缩,使用方法也很简单,只要文件名的末尾带有.gz,就会被认为是 gzip 压缩文件,会启用 gzip 对输入输出进行压缩和解压处理,例如以上 PE 的例子,如果是压缩的,就可以是以下命令:
fastp -i in.R1.fq.gz -I in.R2.fq.gz -o out.R1.fq.gz -O out.R2.fq.gz
第四部分
安装fastp
安装 fastp 十分简单,如果你使用的是 Linux 系统,可以直接使用网站上提供的预编译好的版本,下载地址是 http://opengene.org/fastp/fastp,可以使用 wget等命令进行下载,下载了之后记得使用 chmod a+x ./fastp 增加该文件的可执行权限,然后就可以使用了。
也可以从源代码进行编译,需要使用 git 工具或者直接在网页上下载 release 的 源代码,以 git 下载最新的代码为例:
git clone https://github.com/OpenGene/fastp.git
cd fastp
make
sudo make install
第五部分
功能介绍
接下来我们简单介绍一下 fastp 的一些功能,受公众号篇幅影响,每一个功能我们都只是简单地带过,如果想要看详细的介绍,可以上 github 官网上查看。
5.1
过滤
对于低质量序列,较多 N 的序列,该功能默认是启用的,但可以使用-Q参数关闭。使用-q 参数来指定合格的 phred 质量值,比如-q 15 表示质量值大于等于Q15 的即为合格,然后使用-u 参数来指定最多可以有多少百分比的质量不合格碱基。比如-q 15 -u 40 表示一个 read 最多只能有 40%的碱基的质量值低于Q15,否则会被扔掉。使用-n 可以限定一个 read 中最多能有多少个 N。
fastp 还默认启用了 read 长度过滤,但也可以使用-L 参数关闭。使用-l 参数指定最低要求一个 read 有多长,比如-l 30 表示低于 30 个碱基的 read 会被扔掉。这个功能可以用于实现常用的 discard 模式,以保证所有输出的序列都一样长。
在 fastp 的 HTML 报告中,最头上的 Summary 表格很清楚地显示了过滤的统计信息,如下图所示:
5.2
接头处理
接头(adapter)污染的处理是 FASTQ 文件预处理中很重要的一步。fastp 默认启用了接头处理,但是可以使用-A 命令来关掉。fastp 可以自动化地查找接头序列并进行剪裁,也就是说你可以不输入任何的接头序列,fastp 全自动搞定了!对于 SE 数据,你还是可以-a 参数来输入你的接头,而对于 PE 数据则完全没有必要,fastp 基于PE 数据的 overlap 分析可以更准确地查找接头,去得更干净,而且对于一些接头本身就有碱基不匹配情况处理得更好。fastp 对于接头去除会有一个汇总的报告,如下图所示:
5.3
滑窗质量裁剪
很多时候,一个 read 的低质量序列都是集中在 read 的末端,也有少部分是在 read的开头。fastp 支持像 Trimmomatic 那样对滑动窗口中的碱基计算平均质量值,然后将不符合的滑窗直接剪裁掉。使用-5 参数开启在 5’端,也就是 read 的开头的剪裁,使用-3 参数开启在 3’端,也就是 read 末尾的剪裁。使用-W 参数指定滑动窗大小,默认是 4,使用-M 参数指定要求的平均质量值,默认是 20,也就是 Q20。
5.4
PE 数据的碱基校正
fastp 支持对 PE 数据的每一对 read 进行分析,查找它们的 overlap 区间,然后对于 overlap 区间中不一致的碱基,如果发现其中一个质量非常高,而另一个非常低,则可以将非常低质量的碱基改为相应的非常高质量值的碱基值,如下图所示:
上图中所示的标红的 T 碱基是低质量序列,和高质量的 A 不匹配,它会被校正为 A。该校正功能默认没有开启使用-c 参数可以启用,对于一些对噪声容忍度低的应用,比如液体活检,建议开启。
5.5
全局剪裁
fastp 可以对所有 read 在头部和尾部进行统一剪裁,该功能在去除一些测序质量不好的 cycle 比较有用,比如 151*2 的 PE 测序中,最后一个 cycle 通常质量是非常低的,需要剪裁掉。使用-f 和-t 分别指定 read1 的头部和尾部的剪裁,使用-F和-T 分别指定 read2 的头部和尾部的剪裁。
5.6
polyG 剪裁
对于两色发光法的 Illumina 设备(NextSeq / NovaSeq),因为在没有光信号情况下 base calling 的结果会返回 G,所以在序列的尾端可能会出现较多的 polyG,需要被去除。fastp会自动化地识别NextSeq / NovaSeq的数据,然后进行polyG识别和剪裁。如果你想强制开启该功能,可以指定-g 参数,如果想强制关闭该功能,则可以指定-G 参数。
5.7
分子标签 UMI 处理
UMI 在处理 ctDNA 类似的超低频突变检测应用中是十分有用的,为了更好地对带 UMI 的 FASTQ 文件进行预处理,fastp 也很好地支持了 UMI 预处理功能。该 功能默认没有启用,需要使用-U 参数开启,另外需要使用--umi_loc 来指定 UMI所在的位置,它可以是(index1、index2、read1、read2、per_index、per_read ) 中的一种,分别表示 UMI 是在 index 位置上,还是在插入片段中。如果指定了是在插入序列中,还需要使用 --umi_len 参数来指定 UMI 所占的碱基长度。
5.8
输出文件切分
很多时候我们需要对输出的 FASTQ 进行切分,分成大小均匀的多个文件,这样可以使用比对软件并行地比对,高并行处理的速度。fastp 软件也供了相应的功能,并且支持了两种模式,分别是使用参数-s 指定切分后文件的个数,或者 使用-S 参数指定每个切分后文件的行数。
第六部分
质控报告解读
接下来,我们再看一下如何理解 fastp 生成的质控报告。
fastp 的报告在单一文件中同时包含了过滤前和过滤后的统计结果,如果是 PE 数据,则同时包含了 read1和 read2 的统计结果。之前我们已经说过了,fastp 会生成 HTML 的报告和 JSON格式的报告。HTML 报告的默认文件名是 fastp.html,但是可以通过-h 参数修改,JSON 报告的默认文件名是 fastp.json,但是可以通过-j 参数修改。而且 fastp 报 告还有一个标题,默认是 fastp report,这个也可以通过-R 参数修改为你想要的标题。JSON 格式的报告是优化过的,人机皆可读,适合进阶的用户使用程序解析,而这里我们重点关注 HTML 格式的报告。
6.1
质量含量分布曲线
我们第一关注的当然是质量,所以 fastp 供了质量分布曲线,即每一个 cycle的平均质量值,而且 fastp 同时供了 A/T/C/G 四种不同碱基的平均质量,以及总的平均质量,如下图所示:
从上图我们可以看到,一共有 5 条曲线,分别是 A/T/C/G 和 mean。而且 HTML报告的每一个项目和分项目都是可以点击进行隐藏和展开的。
6.2
碱基含量分布曲线
和质量分布曲线类似,碱基含量分布曲线也是按照每一个 cycle 来的,显示了每 一个位置的碱基含量。如下图所示:
从图中可以看到,fastp同时显示了A/T/C/G/N/GC 的每一个位置的比例和总的比例。而且如果你觉得头部那里比较乱看不清的话,可以用鼠标拉一个框,它就放大了。
6.3
KMER 统计表格
fastp 对 5 个碱基长度的所有组合的出现次数进行了统计,然后把它放在了一张表格中,表格的每一个元素为深背景白字,背景越深,则表示重复次数越多。这 样,一眼望去,就可以发现有哪些异常的信息。
6.4
过表达序列
fastp 的最新版本(v0.12)供了过表达序列(overrepresetned sequence )的分析,而且不但供了这些 overrepresented sequence 的序列个数和占比,还供了他们在测序cycles 中的分布情况,这有利于分析各种问题。具体示例如下图所示:
第七部分
结语
好了,本次 fastp 的介绍就到此结束了。
fastp 软件还在不断更新中,目前每星期都有新功能开发出来,所以要想了解 fastp 软件的最新动态,请关注该软件的github 项目地址 https://github.com/OpenGene/fastp
第八部分
招聘信息
目前,海普洛斯生物信息学团队正在召唤以下精英人才:
岗位一:生物信息学分析主管(科研服务方向)
任职要求:
5 年以上生物信息学分析相关经验
3 年以上科服领域分析经验和 2 年以上的团队带领经验
精通 Python/R/C/C++/WEB/SHELL/Perl 编程技术中的一种或多种
熟悉 Linux/docker/git 等基础应用工具
精通单细胞 WGS/WES、RNA-Seq、BS-Seq、肿瘤 WGS/WES 等分析中的多种
岗位二:生物信息学工程师(科研服务方向)
任职要求:
2 年以上生物信息学分析相关经验
1 年以上科服领域分析经验
熟悉 Python/R/C/C++/WEB/SHELL/Perl 编程技术中的一种或多种熟悉单细胞 WGS、单细胞 WES、RNA-Seq、BS-Seq、肿瘤 WGS/WES 等分析中的两种以上
岗位三:生物信息学软件开发工程师
任职要求:
对编程的极度热爱,并热衷于使用 IT 技术解读生命密码
对生物信息学较深度的了解
精通 C/C++/Python/R/Go/WEB 编程技术的两种或以上
熟悉 FASTQ/BAM/SAM/VCF 等不同的数据格式和相应的操作库
以上岗位,除主管之外,都可以实习。如果你足够优秀,以上的条件多条都可以作废。可选工作地点有两个,穿衣很省空气好的深圳,或者风景秀丽房价低的江西上饶。
如果有小伙伴想要加入,体验开源开放的团队文化和全栈的开发环境,请速速将简历传送到 chen@haplox.com,并抄送到 hr@haplox.com,或者添加以下微信进行勾搭(微信号:opengene):
猜你喜欢
10000+:肠道细菌 人体上的生命 宝宝与猫狗 梅毒狂想曲 提DNA发Nature 实验分析谁对结果影响大 Cell微生物专刊
文献阅读 热心肠 SemanticScholar Geenmedical
16S功能预测 PICRUSt FAPROTAX Bugbase Tax4Fun
写在后面
为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外150+ PI,1300+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍末解决群内讨论,问题不私聊,帮助同行。
学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”
点击阅读原文,跳转最新文章目录阅读