大型多序列比对异常点的灵活识别、可视化和剔除模块

spruceup的Python项目详细描述


整修

        A  
       TCG  
      ACGTA  
        T 

用于发现、可视化和删除大型多序列比对中异常序列的工具。

如果您正在使用此程序,请引用本出版物:

此脚本使用numpyscipymatplotlibpsutiltqdm,和treeswift

安装和要求

您可以下载一个压缩的github存储库,如果您的系统上安装了git,则可以克隆它,或者使用pip安装(推荐)从python包索引

spruceup要求您使用python 3.6或更高版本。您可以在Python3.7的早期版本中使用spruceup,但从今天(2019年8月12日)起,如果使用Python3.7.4,您可能会遇到安装问题。应自动安装依赖项。如果您的系统没有python 3.6或更新版本,则需要下载并安装它。在类似linux的系统(包括ubuntu)上,您可以使用

sudo apt-get install python3.6

最好在安装spruceup之前创建一个新环境,可以使用venv

python3 -m venv spruceup

或者如果您有conda

conda create --name spruceup python=3.6

现在激活您的环境(使用conda您可以键入conda activate spruceup)并安装:

pip install spruceup

接口

成功安装spruceup后,您将需要1)在fastaphylipnexus格式中对齐,2)(可选)在newick格式中对齐的指导树,以及3)配置文件来运行程序。要从命令行运行程序,可以键入:

spruceup.py my-configuration-file.conf

目录示例包含模板配置文件。它有以下字段:

[输入]

输入类别定义输入对齐的参数及其类型。

输入文件名是要处理的对齐的文件路径。

输入格式指示对齐文件的格式。它可以是五种流行格式之一:fastaphylipphylip int(交错phylip),nexus,以及nexus int

数据类型告诉程序您的比对是否包含氨基酸(AA)或DNA核苷酸(NT)。

距离对象文件是现有距离对象的文件名。因为有时您需要调整截止值或截止标准,而计算距离是分析中最耗时的部分,spruceup保存一个json格式文件,其中包含与每个分析的距离。默认情况下,这是空的,但是如果您确实有一个与以前的分析有距离的文件,并且您想用新的截断来修剪对齐,请在这里提供json文件名。spruceup将使用新的修剪截断和/或标准运行,但无需重新计算距离。

指南树是一个系统图或分类图newick格式文件,用作指南树。树可以使用任何方法推断,并且可以完全解析或包含多原子。如果不提供指导树,程序仍将运行,但如果没有系统发育,则识别未对齐序列的信息将更少。这是特别小鬼Ortant在具有远相关样本的可变序列中,在这种情况下,很难区分真正可变序列和未对齐片段。如果您怀疑并主要关注具有伪长终端分支的样本,则可以提供仅拓扑(cladogram)导向树和/或在没有导向树的情况下运行程序。

[分析]

分析类定义用于分析和清理对齐的参数。

用于计算距离的CPU核数。

距离法选择用未修正的计算未修正的p-距离,或用jc计算朱克斯-坎托修正的距离

窗口大小选择要在计算距离的窗口中包含多少字符(a a/nt)。对大多数路线都有效的默认值是20

重叠指示每个滑动窗口与前一个窗口重叠的字符数(aa/nt)。重叠15和窗口大小20意味着每个新窗口将向下移动5个位置,并与前一个窗口重叠15个字符。减少重叠将减少计算负担,因为将创建更少的窗口。默认值是15(默认窗口大小的三分之二20),但如果对齐非常大,并且您希望减少计算时间和内存使用,并且不介意牺牲精确到一定程度。

分数表示将用于计算每个窗口中平均距离的otu/样本的比例。当分数设置为1.0时,将根据校准中的所有其他OTU计算每个OTU的距离。分数设置为0.5时,每个OTU的距离将根据代表路线中50%OTU的随机样本计算。降低这一数字将有助于加快与大量分类相一致的计算速度。

标准选择如何确定异常值距离。如果使用mean(推荐),则为每个otu计算的这些值的简单倍数将被视为确定异常值的截止值。lognorm意味着alognormal distribution将适用于每个otu的距离数据,并通过指定观测分位数来确定截止值,高于该分位数的序列将被视为异常值。

截断指定多个被视为截断的值。如果使用mean作为标准,请使用这些值的倍数,例如5,30等。对于lognorm标准,请使用1的分数,例如0.9,0.995等。对于大多数路线,应使用的默认值为0.9,0.95,0.97,0.99,0.995,0.999表示lognorm5,10,15,18,20,25,30表示mean。在初始分析之后,您始终可以使用其他条件和截止值进行修剪(请参见下面解释输出下的第5点)。如果对齐包含许多饱和或对齐不良的站点,则低设置可能会导致从原始对齐中修剪大量数据。这很耗时,在使用spruceup或从列表中删除较低的截止值之前,您可能需要使用更严格的"块"方法修剪对齐。

手动切断阀是一个可选设置,允许手动修改单个OTU的切断阀。如果只有一个或几个样本有相当比例的排列不好的序列,使它们的整体截止线倾斜,这样它们就不会被标记出来,那么它可能被证明是有用的。如果你发现这个是的,但是,您可能更应该检查您的数据和管道错误!

[输出]

输出类别告诉程序如何以及在何处保存分析结果。

output_file_aln是修剪输出对齐的名称。保存在您机器上的实际名称将有一个表示使用截止值的前缀。

输出格式修剪对齐的文件格式。从fastaphylipphylip intnexusnexus int中选择

报告包含将序列标记为异常值的信息的文件的名称。实际名称的前缀表示使用的截止值。

日志是所有分析屏幕输出的日志的名称。

示例和结果解释

要使用spruceup您需要从命令行运行spruceup脚本,并提供配置文件的名称作为参数:

spruceup.py ./examples/config_example.conf

运行脚本后,序列对齐将被划分为多个与指定大小和重叠的窗口。然后脚本将计算每个窗口中每个otu(样本/分类单元)的距离。默认情况下,这是按全部完成的,如果指定,则按OTU的小数部分完成。您将看到一些消息,其中包括一个进度条,它将显示迭代次数(窗口)和剩余时间,因为我们是用于计算距离的最大内存量。

进度条

计算完所有距离后,标准截止值设置将确定哪些窗口被视为异常值,应从对齐中修剪。当使用lognorm标准时,指定分位数0.99意味着位于给定otu到该窗口中其他out的距离的99%以上的任何序列窗口都将被视为异常值,应将其删除。理论上,设置0.99应该意味着每个otu将删除1%的所有序列窗口。实际上,这不是真的,因为现实生活中的序列数据并不完全符合对数正态分布。截止值为常数时,某些otu可能有许多离群(未对齐)序列片段和超过1%的序列数据被删除,而其他otu可能没有未对齐片段和离群值。

现在,您可以返回到配置文件并尝试其他截断或方法,而无需重新计算距离(除非您希望使用不同的校正或缩放)。使用[input]类别下的distances\u object\u file选项,简单地加载生成的json文件(见下文)。

解释输出

spruceup生成几种类型的输出:

  1. 以后缀-report.txt结尾的报表文件,其中一个文件是为指定的每个截断写入的,该截断由前缀表示(例如0.950.99等等)。这些文件包含每个otu的距离截止值,以及哪些序列窗口被确定为异常值并被删除。

  2. 以后缀-trimmed.fas/phylip/nexus结尾的修剪对齐文件,同样,每个截断值对应一个。这些是与已删除的异常值窗口的对齐。

  3. 距离分布png绘图,每个otu和截止值一个。这些图像可用于检查每个分类单元的距离分布,其与对数正态分布的拟合,以及在给定截止值的情况下放置在每个otu上的截止值。

下面是距离图的一个例子。头是otu的名称。X轴表示距离到其他otu,范围从0到为otu找到的最大距离。y轴指定相对窗口数。蓝色条构成距离的柱状图。橙色线是拟合的对数正态分布(仅在使用lognorm标准时显示),垂直虚线表示截止点,高于该点的任何窗口都将被视为异常值并被删除。

下面的第一个示例图显示了一个具有相对平滑的距离分布的otu和具有极值的几个序列窗口,它们都不大于0.2。您可能无法将单个窗口距离视为可见的直方图条,因为分布包括数千(在这个小示例中)到几十万的距离。

示例绘图良好

下图显示了一个分布不太平滑的otu,由于缺少数据,总体序列减少了序列,如直方图条的高度和许多异常值窗口所示。

Example Plot Poor

这两个例子都在相同的截断值下进行了处理,0.95,0.97,0.99拟合对数正态分布的分位数,但在排列不好的数据中,最后一个落在计算距离值之外。这些曲线图,再加上对报告文件和路线的视觉检查,应该可以作为指导,告诉您哪些标准和截止值对您的数据集最有意义。

  1. 日志文件

这是一个日志文件,它将包含终端屏幕上显示的相同信息,不包括进度条。它将记录程序采取了哪些步骤,它们的时间,显示在每个截断处修剪了多少/多少比例的站点的信息,并输出写入的文件名。

  1. 距离python对象文件

使用spruceup计算距离通常是过程中最耗时和最耗费内存的部分,尽管从对齐中修剪大量位置也可能需要很长时间。因此,每次从头开始运行分析时,spruceup都会编写一个json格式文件,允许您稍后加载分析,并使用不同的标准或截止值进行修剪。请注意,距离对于每个窗口大小、重叠和分类单元部分都是特定的,如果要调整这些参数,则需要重新运行整个分析。请注意,json文件可能相当大,每100000个窗口150 MB,100个分类单元。

问题与发展

如果在运行代码时遇到错误或问题,请在github上新建一个问题。我们鼓励每个人都贡献自己的力量。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java刷新系统。用自己的记录器输出   使用Jython将参数从Java传递到Python   JavaSocksV4代理   java如何使用通知?   java@DirtiesConext不工作   java将多个jar组合成一个(使用maven)   java使用相等运算符比较两个类   java我怎样才能让两个JOptionPane一起出现在我的第一页上,并让它们在两个页面上都有正确的答案?   html无法访问java中资产文件夹内的文件   通过post命令向SpringWebApp发送对象时,java对象字段为null   单个实例中静态变量的类更改值(Java)   java解决方案是什么   试图检查网站所有受支持的密码套件的安全性,在java中遇到chacha20和poly1035问题