摘要
1简介
高通量测序(HTS)技术的快速发展导致了许多新的分析方法的开发,每种方法都需要开发合适的生物信息分析管道。对于典型管道中重复出现的“大任务”,例如对齐和组装,生物信息学从业者可以从一系列标准工具中进行选择。对于更专门的任务,以及现有工具之间的接口,通常需要编写自定义脚本。
在这里,我们介绍了HTSeq,这是一个Python库,用于帮助快速开发用于处理和分析HTS数据的脚本。HTSeq包括用于各种类型输入数据的通用文件格式的解析器,适合作为各种任务的通用平台。HTSeq的核心组件是一个容器类,它简化了与基因组坐标相关的数据的处理,即归因于基因组位置(例如读取覆盖率)或基因组间隔(例如基因组特征,例如外显子或基因)的值。使用HTSeq开发的两个独立应用程序随该软件包一起发布,即用于读取质量评估的HTSeq-qa和用于差异表达调用的RNA-Seq预处理比对的htsez-count。
自2010年HTSeq包首次发布以来,以下章节中描述的大多数功能都可用。从那时起,该包,尤其是htseq-count脚本在研究社区中得到了大量使用。本文介绍了该软件包,并报告了最近的改进。
HTSeq附带了大量文档,包括一个演示HTSeq核心类的使用并详细讨论几个重要用例的教程。该文档以及HTSeq的设计旨在允许仅具有中等Python知识的用户创建自己的脚本,同时屏蔽用户使用更高级的内部代码。
2 HTSeq的组件和设计
2.1解析器和记录对象
HTSeq为参考序列(FASTA)、短读(FASTQ)和短读比对(SAM/BAM格式和一些传统格式)以及基因组特征、注释和得分数据(GFF/GTF、VCF、BED和Wiggle)提供解析器。
每个解析器都作为一个类提供,其对象绑定到文件名或打开的文件或流,并用作迭代器生成器,即它们可以在对于循环,并将生成由循环变量占用的记录对象序列。这些记录对象是表示数据记录的合适类的实例。在适当的情况下,不同的解析器将产生相同类型的记录对象。例如,记录类序列与质量每当需要呈现具有基本质量的排序读取时,都会使用,因此由快速解析程序类并作为字段显示在SAM对齐由生成的对象SAM_读取器或BAM_阅读器分析器对象(图1). 特定类别(基因组位置和基因组间隔)用于表示基因组坐标或间隔,并且保证这些坐标或间隔始终遵循固定的约定(即遵循Python约定,基于零,间隔为半开放),并且当输入格式使用不同约定时,解析器类会注意应用适当的转换。写入文件的函数也是如此。
图1。
(一)SAM_校准类作为HT序列数据记录:使用类(此处具有质量的序列和基因组间隔)也用于其他数据记录中,以提供关于不同数据类型的通用视图。(b)雪茄中的字段SAM_校准对象以列表形式显示读取对齐的详细结构香烟经营这样可以方便地对复杂的对齐结构进行下游处理,例如顶部雪茄串给出的结构和中间所示的结构。五香烟经营带有表列插槽的对象(底部)提供来自雪茄串的数据,以及read('query')和reference中受影响区域的推断坐标
为了提供良好的性能HT序列写在赛马拉松(贝内尔等。, 2011),一个工具,用于将添加了类型信息的Python代码转换为C类。虽然用于读取和写入所有基于文本的格式(包括文本SAM文件)的代码是用Python/Cython编写的,因此没有外部依赖项,但类BAM_阅读器和BAM_编写器环绕功能派萨姆(http://code.google.com/p/pysam/)只有在安装了该软件包后,和才可用。
这个SAM_校准类提供了帮助处理复杂排列的功能,例如间隙排列(图1b) ,具有多条路线和成对的end数据。后者具有挑战性,因为在SAM格式中,读取对的对齐是由一对对齐记录描述的,不能期望它们彼此相邻。HTSeq提供了一个函数,pair_SAM_alignments_with_buffer(带缓冲区的配对SAM_校准),通过保留尚未找到配对的读取缓冲区来对这些记录进行配对,从而有助于在已排序片段级别而不是读取级别上处理数据。
2.2 GenomicArray类
基因组学分析中的数据通常与基因组上的位置相关,即参考集合中的坐标。此类数据的一个例子是读取覆盖率:对于参考基因组的每个碱基对或核苷酸,存储与该位置重叠的读取比对数。类似地,基因模型和其他基因组注释数据可以表示为描述特征的对象,例如与基因组间隔相关的外显子,即参考中的坐标范围。
HTSeq的核心组件是类基因组阵列,它是一个存储任何类型的基因组位置相关数据的容器。从概念上讲,基因组上的每个碱基对位置都可以与一个值相关联,该值可以在给定位置高效存储和检索,其中的值可以是标量类型,如数字,也可以是更复杂的Python对象。然而,在实践中,此类数据通常是分段常量,因此类内部使用树结构存储“步骤”,即具有给定值的基因组间隔。这已经在C++中实现,构建在地图C++标准库的模板,通常实现为红黑树(Josuttis,1999年). 为了链接C++和Python代码,我们使用了SWIG(比兹利等。, 1996). 或者,该类还提供了基于NumPy阵列的存储模式(范德沃尔特等。, 2011)无需步骤即可容纳密集数据。如果这样的数据太大而无法放入内存,则NumPy内存映射可以使用此功能,将当前未使用的数据部分交换到磁盘。存储后端的选择是透明的,即如果用户更改了它,则无需在使用基因组阵列物体。
的一个子类基因组阵列,的集合的基因组排列适用于存储与可能重叠的间隔相关的对象,例如来自基因模型参考的基因或外显子。这是使用Python集实现的(图2):每个步骤的值都是对实际对象的一组引用。当数据被插入到数组中时,步骤会被拆分,集合会根据需要被复制。查询间隔时,返回与查询间隔重叠的集合,它们的并集将包含与查询间隔重合的所有对象。
图2。
使用类基因组序列表示重叠的注释元数据。将指示的特征分配给数组,数组将其内部表示为步骤,每个步骤都有一个集作为值,其元素是对与步骤重叠的特征的引用
3文件和编码策略
HTSeq附带了大量文档来指导开发人员。我们已经注意到,读者对Python的体验只能适中。“教程”通过简单示例演示了HTSeq的类和原则的使用,提供了对HTSeq类和原理的概述。然后,详细讨论了两个常见的用例,以展示如何将HTSeq应用于复杂任务。
第一个用例是总覆盖率分布:给定ChiP-Seq数据,例如来自组蛋白标记的数据,我们想计算这些标记相对于基因组中特定位置的分布,例如转录起始位点(TSS),通过对齐以TSS为中心的窗口中的覆盖数据,并对所有基因或其子集的TSS进行平均。在这个用例中,需要集成来自两个特定位置数据源的信息,即从注释数据和对齐读取中获得的TSS列表。因此,可以先迭代读取,然后将此信息存储在基因组阵列然后在遍历TSS列表时使用特定于位置的访问权限,或者首先将TSS存储在基因组阵列然后在迭代读取时使用此选项。在这两种情况下,一个数据集以允许快速随机访问的形式保存在内存中,而另一个数据集中只保存摘要信息进行迭代。这些方法是基于HTSeq构建的脚本的原型,因此在文档中进行了详细解释和演示(“详细用例:TSS图”部分)。
详细讨论的第二个用例是计算基因组中每个基因的RNA-Seq读取映射到它的数量香烟经营以方便的形式表示复杂的线形(图1b) ●●●●。本节文档还解释了HTSeq处理多重比对和配对数据的功能。
文档的其余部分提供了HTSeq提供的所有类和函数的参考,包括教程部分突出显示的用例中未使用的类,例如处理变量调用格式(VCF)文件的工具。
4 HTSEQ计数
我们使用HTSeq发布了两个独立的脚本,这些脚本可以从shell命令行使用,而不需要任何Python知识,还演示了HTSeq框架的潜在应用程序htseq-qa是对测序运行进行初始质量评估的简单工具。它生成的图总结了read和base-call质量中位置的核苷酸组成。
脚本htseq计数是一种用于RNA-Seq数据分析的工具:给定一个SAM/BAM文件和一个带有基因模型的GTF或GFF文件,它会计算每个基因有多少对齐的读数与其外显子重叠。然后可以使用以下方法将这些计数用于基因级差异表达分析DESeq2公司(爱等。, 2014)或边缘R(罗宾逊等。, 2010). 因为脚本是专门为有差别的表达分析中,只计算明确映射到单个基因的读取数,而忽略对齐到多个位置或与多个基因重叠的读取数。为了了解为什么这是可取的,考虑两个具有某些序列相似性的基因,其中一个表达差异,而另一个不表达。应该放弃对这两个基因进行同样良好映射的读取,因为如果对两个基因都进行计算,那么来自差异表达基因的额外读取可能会导致另一个基因也被错误地称为差异表达基因。考虑到差异表达式测试的下游应用程序的另一个设计选择是计算片段数,而不是读取数,以防出现配对数据。这是因为来自同一片段的两个配对只提供了一个cDNA片段的证据,因此应该只计算一次。
作为htseq计数脚本在过去3年中得到了广泛的使用,我们注意到,我们最近用一个经过彻底修改的版本替换了它,现在允许处理成对的-end数据,而无需按读名优先排序SAM/BAM文件。有关原始版本的所有更改的列表,请参阅文档。
5讨论
HTSeq旨在填补为专门任务优化的高性能单片工具与完全从头开始为HTS应用程序编写数据处理代码的需要之间的差距。对于HTSeq涵盖的一些较小的任务,存在良好的独立解决方案,例如。快速质量控制(http://www.bioinformatics.babraham.ac.uk/projects/fastqc/)用于质量评估或Trimmomatic公司(博尔格等。, 2014)用于修剪读数。如果这些工具的开发人员选择的特定方法适合用户的应用程序,那么它们更容易使用。然而,在许多项目中不可避免地会出现编写自定义代码的需求,然后,HTSeq旨在提供比专注于特定文件格式的更窄的编程库更大的优势,例如。皮萨姆和皮卡德(http://picard.sourceforge.net网站/)对于SAM/BAM文件,通过集成许多常见文件格式的解析器并固定它们之间的数据交换约定。对于R开发人员,现在可以在生物导体项目(绅士等。, 2004)带有类似的包Rsamtools软件和基因组范围(劳伦斯等。, 2013). 在Python中,HTSeq补充了Biopython(公鸡等。, 2009)它为更“经典”的生物信息学任务(如序列分析和系统发育分析)提供了类似的功能,但对HTS任务的支持很少。
虽然HTSeq的大多数用途是在一次实验中为一个特定的分析任务开发自定义脚本,但它也可以用于编写更通用的工具。这个htseq计数例如,脚本为微分表达式分析准备计数表,这看起来很容易,但当必须正确处理模糊情况时,这会变得复杂。尽管是用Python编写的,htseq计数提供良好的性能:在标准笔记本电脑上测试,htseq-count(0.6.1版)每分钟处理约120万次读取(0.6M个读取对),使用约250 MB的RAM将人类基因注释保存在内存中。当文件按位置而不是读名排序时,以使配对不在相邻记录中,处理时间增加到略少于两倍的时间,并且对于26 GB的SAM文件,RAM中不到450 MB的额外空间用于缓冲区存储具有未完成配对的读取。
当HTSeq于2010年首次发布时,htseq计数是该任务的第一个综合解决方案,自那时以来得到了广泛应用。最近,此任务的其他工具已可用,包括summarizeOverlap(摘要重叠)中的函数基因组范围生物导体组件(劳伦斯等。, 2013)和独立工具特征计数(廖等。, 2014),由于在C中实现,实现了快速运行时间。在最近的一个基准测试中,丰塞卡等。(2014)相比htseq计数用这些其他计数工具判断htseq计数有利。然而,两者都不是htseq计数其他工具也没有提供很大的灵活性来处理特殊情况,这就是为什么HTSeq文档(“计数读取”部分)详细讨论了用户如何为这个重要用例编写自己的脚本。
区间查询是HTS分析问题中经常出现的任务,现在有几个库为不同的编程语言提供了解决方案,包括BEDtools(昆兰和霍尔,2010年;山谷等。, 2011)和I范围/基因组范围(劳伦斯等。, 2013). 通常,这些方法采用两个间隔列表,并且报告它们之间的重叠。HTSeq使用了不同的范式,即一个间隔列表被读入并存储在基因组序列对象,然后在循环中逐个查询其他间隔。这种显式循环可以更直观;一个例子是上面讨论的读取计数问题,其中分割读取、间隙对齐、模糊映射等导致非常需要处理由内部循环中的分支语句处理的特殊情况。
总之,HTSeq提供了一个全面的解决方案,以促进HTS数据分析背景下的广泛编程任务。
基金:S.A.和W.H.通过第六框架计划网络染色质可塑性(项目编号35733)和第七框架计划项目辐射(项目编号305626)感谢欧盟的支持。
利益冲突:未声明。
参考文献
等SWIG:一个易于使用的工具,用于将脚本语言与C和C集成++
, 第四届USENIX Tcl/Tk研讨会会议记录
, 1996
(第129
-139
) 等Cython:两全其美
, 计算。科学。工程师。
, 2011
,卷。 13
(第31
-39
) 等Trimmomatic:照明序列数据的灵活微调器
, 生物信息学
, 2014
,卷。 30
(第2114
-2120
) 等Biopython:用于计算分子生物学和生物信息学的免费Python工具
, 生物信息学
, 2009
,卷。 25
(第1422
-1423
) 等Pybedtools:一个灵活的Python库,用于操作基因组数据集和注释
, 生物信息学
, 2011
,卷。 27
(第3423
-3424
) 等RNA-seq基因谱分析——一项系统的经验比较
, PLoS综合
, 2014
,卷。 9
第页。 电子107026
等生物导体:计算生物学和生物信息学的开放软件开发
, 基因组生物学。
, 2004
,卷。 5
第页。 80兰特
等用于计算和注释基因组范围的软件
, 公共科学图书馆计算。生物。
, 2013
,卷。 9
第页。 e1003118号
等特征计数:一种有效的通用程序,用于将序列读取分配给基因组特征
, 生物信息学
, 2014
,卷。 30
(第923
-930
) 等利用DESeq2对RNA-Seq数据的折叠变化和离散度进行适度估计
, 生物Rxiv
, 2014
, . 床具:用于比较基因组特征的一套灵活实用工具
, 生物信息学
, 2010
,卷。 26
(第841
-842
) 等edgeR:用于数字基因表达数据差异表达分析的Bioconductor软件包
, 生物信息学
, 2010
,卷。 26
(第139
-140
) 等NumPy数组:高效数值计算的结构
, 计算。科学。工程师。
, 2011
,卷。 13
第页。 2230
作者注释
©作者2014。牛津大学出版社出版。
这是一篇根据知识共享署名许可条款发布的开放存取文章(http://creativecommons.org/licenses/by/4.0/)它允许在任何介质中不受限制地重用、分发和复制原始作品,前提是正确引用了原始作品。