Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Bio.phylo从多个树中创建共识树_Python_Bioinformatics_Biopython_Phylogeny - Fatal编程技术网

Python 使用Bio.phylo从多个树中创建共识树

Python 使用Bio.phylo从多个树中创建共识树,python,bioinformatics,biopython,phylogeny,Python,Bioinformatics,Biopython,Phylogeny,我对肠杆菌基因组中的4个管家基因感兴趣 所以我有我的管家基因,我对NR做了一个爆炸,并下载了对齐的序列 我用MEGA7软件和最大似然法建立了系统发育树。Boostrap方法进行了200次迭代 我将树导出为newick文件 所以现在,我有4棵树来表达我的4个管家基因。我想创建一个我的4棵树的共识树 就我个人而言,我试图使用Bio.Phylo的共识树。 我选择了“多数共识”函数,它工作得很好。但我有个问题 我的剧本是这样的: import os import sys from Bio impor

我对肠杆菌基因组中的4个管家基因感兴趣

所以我有我的管家基因,我对NR做了一个爆炸,并下载了对齐的序列

我用MEGA7软件和最大似然法建立了系统发育树。Boostrap方法进行了200次迭代

我将树导出为newick文件

所以现在,我有4棵树来表达我的4个管家基因。我想创建一个我的4棵树的共识树

就我个人而言,我试图使用Bio.Phylo的共识树。 我选择了“多数共识”函数,它工作得很好。但我有个问题

我的剧本是这样的:

import os

import sys

from Bio import Phylo

from Bio.Phylo.Consensus import *

fichier=sys.argv[1]

fichier2=sys.argv[2]

fichier3=sys.argv[3]

fichier4=sys.argv[4]

tree1=Phylo.read(fichier, 'newick')

tree2=Phylo.read(fichier2, 'newick')

tree3=Phylo.read(fichier3, 'newick')

tree4=Phylo.read(fichier4, 'newick')

trees=tree1,tree2,tree3,tree4

majority_tree = majority_consensus(trees, 0.5)

Phylo.draw(majority_tree)
问题是共识树依赖于顺序。 例如,当我尝试trees=tree1,tree2,tree3,tree4和trees=tree2,tree4,tree1,tree3时,我得到了不同的结果

有人知道用newick文件制作共识树的其他软件吗


我需要Bio.Phylo的帮助。如果有人知道更多关于这个软件包的信息,那就太好了。

因为你没有发布你的newick文件,让我们尝试重现你的问题,这样我们就有了一个共识树,表明共识树取决于顺序

我们从以下三棵树开始:

以newick格式表示如下:

newicks = {1: '((A,B,C),(D,(E,F)))',
           2: '(((A,B),C),(D,(E,F)))',
           3: '((A,B,C),(E,(D,F)))'}
现在,我们尝试这三棵树的所有可能排列,创建共识树,看看它们是否都相同:

from io import StringIO
from Bio import Phylo
from Bio.Phylo.Consensus import majority_consensus
from itertools import permutations

def read_newick(treedata):
    handle = StringIO(treedata)
    return Phylo.read(handle, "newick")

for keys in permutations(newicks.keys()):
    trees = [read_newick(newicks[key]) for key in keys]
    majority_tree = majority_consensus(trees, 0.5)
    print('majority consensus for order: {}'.format(keys))
    Phylo.draw_ascii(majority_tree)
结果:

majority consensus for order: (1, 2, 3)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ D
 |________________________|
                          |                         ________________________ E
                          |________________________|
                                                   |________________________ F

majority consensus for order: (1, 3, 2)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ D
 |________________________|
                          |                         ________________________ E
                          |________________________|
                                                   |________________________ F

majority consensus for order: (2, 1, 3)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ D
 |________________________|
                          |                         ________________________ E
                          |________________________|
                                                   |________________________ F

majority consensus for order: (2, 3, 1)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ D
 |________________________|
                          |                         ________________________ E
                          |________________________|
                                                   |________________________ F

majority consensus for order: (3, 1, 2)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ E
 |________________________|
                          |                         ________________________ D
                          |________________________|
                                                   |________________________ F

majority consensus for order: (3, 2, 1)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ E
 |________________________|
                          |                         ________________________ D
                          |________________________|
                                                   |________________________ F
因此,事实上,最后两个共识树与前四个共识树不同

为了理解为什么会发生这种情况,我们查看了的源代码。在这里,我们看到第一步是创建根分支。终端分支的顺序由提供的第一棵树决定

因此,对于tree1、tree2、tree3,第一个提供的树是tree1,根分支是ABCDEF。但是对于tree3、tree2、tree1,提供的第一棵树是tree3,根分支变成ABCEDF


因此,这是算法本身的一个限制,多数共识的任何实现都会根据第一个提供的树给出不同的顺序。

由于您没有发布newick文件,让我们尝试重现您的问题,这样我们就有了一个显示共识树依赖于顺序的结果

我们从以下三棵树开始:

以newick格式表示如下:

newicks = {1: '((A,B,C),(D,(E,F)))',
           2: '(((A,B),C),(D,(E,F)))',
           3: '((A,B,C),(E,(D,F)))'}
现在,我们尝试这三棵树的所有可能排列,创建共识树,看看它们是否都相同:

from io import StringIO
from Bio import Phylo
from Bio.Phylo.Consensus import majority_consensus
from itertools import permutations

def read_newick(treedata):
    handle = StringIO(treedata)
    return Phylo.read(handle, "newick")

for keys in permutations(newicks.keys()):
    trees = [read_newick(newicks[key]) for key in keys]
    majority_tree = majority_consensus(trees, 0.5)
    print('majority consensus for order: {}'.format(keys))
    Phylo.draw_ascii(majority_tree)
结果:

majority consensus for order: (1, 2, 3)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ D
 |________________________|
                          |                         ________________________ E
                          |________________________|
                                                   |________________________ F

majority consensus for order: (1, 3, 2)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ D
 |________________________|
                          |                         ________________________ E
                          |________________________|
                                                   |________________________ F

majority consensus for order: (2, 1, 3)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ D
 |________________________|
                          |                         ________________________ E
                          |________________________|
                                                   |________________________ F

majority consensus for order: (2, 3, 1)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ D
 |________________________|
                          |                         ________________________ E
                          |________________________|
                                                   |________________________ F

majority consensus for order: (3, 1, 2)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ E
 |________________________|
                          |                         ________________________ D
                          |________________________|
                                                   |________________________ F

majority consensus for order: (3, 2, 1)
                           ________________________ A
                          |
  ________________________|________________________ B
 |                        |
_|                        |________________________ C
 |
 |                         ________________________ E
 |________________________|
                          |                         ________________________ D
                          |________________________|
                                                   |________________________ F
因此,事实上,最后两个共识树与前四个共识树不同

为了理解为什么会发生这种情况,我们查看了的源代码。在这里,我们看到第一步是创建根分支。终端分支的顺序由提供的第一棵树决定

因此,对于tree1、tree2、tree3,第一个提供的树是tree1,根分支是ABCDEF。但是对于tree3、tree2、tree1,提供的第一棵树是tree3,根分支变成ABCEDF


因此,这是算法本身的一个限制,任何多数共识的实现都会根据第一个提供的树给出不同的顺序。

欢迎使用。你的英语很清楚,但你的问题不清楚。它似乎是关于生物学和你打算使用的树构建算法的细节。也许你的问题更适合这个问题。然而,如果你的问题实际上是关于编程的,你应该重新措辞:跳过关于统计和生物学的细节。提供一个可以被其他人复制的例子,例如我们缺少你的文件。清楚地说明编程问题的性质。这将增加您获得答案的机会。谢谢。BioGeek很理解我的问题。这是关于生物学的,但这是一个信息问题。谢谢你的回答:我很高兴你得到了一个满意的答案:-我现在更好地理解了你的问题,因为我阅读了答案并看到了Newick格式的插图。欢迎来到SO。你的英语很清楚,但你的问题不清楚。它似乎是关于生物学和你打算使用的树构建算法的细节。也许你的问题更适合这个问题。然而,如果你的问题实际上是关于编程的,你应该重新措辞:跳过关于统计和生物学的细节。提供一个可以被其他人复制的例子,例如我们缺少你的文件。清楚地说明编程问题的性质。这将增加您获得答案的机会。谢谢。BioGeek很理解我的问题。这是关于生物学的,但这是一个信息问题。谢谢你的回答:我很高兴你得到了一个满意的答案:-我现在更好地理解了你的问题,因为我阅读了答案并看到了Newick格式的插图。谢谢。你的例子很清楚,你也很理解我的问题。很抱歉没有发布我的数据,这是一种b
搞笑树,我不知道怎么贴。但多亏了你。你举了一个很好的例子。所以我对此无能为力。因为无论输入文件的顺序如何,我都在等待拥有相同的共识树。非常感谢您的回复:我很惊讶多数规则取决于输入顺序。如果biopyton是这种情况,这可能是算法错误。结果应该包含分支E,F,因为它存在于2/3的树中。谢谢。你的例子很清楚,你也很理解我的问题。很抱歉没有发布我的数据,这是一棵大树,我不知道如何发布。但多亏了你。你举了一个很好的例子。所以我对此无能为力。因为无论输入文件的顺序如何,我都在等待拥有相同的共识树。非常感谢您的回复:我很惊讶多数规则取决于输入顺序。如果biopyton是这种情况,这可能是算法错误。结果应该包含分支E,F,因为它存在于2/3的树中。