2016-08-19 4 views
1

私はnewick形式の系統樹を持っています。私は末端ノードのラベルに基づいてサブツリーを取り出す(種のリストに基づいて)。私が使用していますツリーのコピーはここで見つけることができます:http://hgdownload.soe.ucsc.edu/goldenPath/dm6/multiz27way/dm6.27way.nhBioPythonにおける系統樹のサブツリー

現在、私はそうのようなBioPythonを使用してツリーに読みました:

from Bio import Phylo 
#read in Phylogenetic Tree 
tree = Phylo.read('dm6.27way.nh', 'newick') 
#list of species of interest 
species_list = ['dm6', 'droSim1', 'droSec1', 'droYak3', 'droEre2', 'droBia2', 'droSuz1', 'droAna3', 'droBip2', 'droEug2', 'droEle2', 'droKik2', 'droTak2', 'droRho2', 'droFic2'] 

私はspecies_listで唯一の種のサブツリーを引き出すだろうか?

+0

あなたの種のリストにあるすべての種を持つ最小の樹が欲しいですか?このツリーのルートノードは、最も最近の共通の祖先か、リストのすべての種ですか? – mitoRibo

+0

ああもっと明確にすべきだった。サブツリーには、リスト内のすべての種のみが含まれます。下のあなたのソリューションはまさに私が望んでいたものです。 – user1385816

答えて

3

ええ、あなたの種リストにあるすべての種を持つ最小の樹木を望むなら、このツリーのルートノードは、リスト内のすべての種の最新の共通祖先(MRCA)すでにPhyloで実装:

from Bio import Phylo 

#read in Phylogenetic Tree 
tree = Phylo.read('dm6.27way.nh', 'newick') 
#list of species of interest 
species_list = ['dm6', 
       'droSim1', 
       'droSec1', 
       'droYak3', 
       'droEre2', 
       'droBia2', 
       'droSuz1', 
       'droAna3', 
       'droBip2', 
       'droEug2', 
       'droEle2', 
       'droKik2', 
       'droTak2', 
       'droRho2', 
       'droFic2'] 

common_ancestor = tree.common_ancestor(species_list) 
Phylo.draw_ascii(common_ancestor) 

は出力:

Clade 
              ___ dm6 
             ___| 
             | | , droSim1 
             | |_| 
          __________|  | droSec1 
          |   | 
          |   | _____ droYak3 
          ,|   |_| 
          ||   |____ droEre2 
          || 
          ||  _______ droBia2 
          ||_____| 
          |  |_____ droSuz1 
          | 
         __|         _______ droAna3 
         | |_________________________________| 
         | |         |________ droBip2 
         | | 
         | |___________________ droEug2 
         | 
         |_____________ droEle2 
         ,| 
         ||______________________________ droKik2 
        __|| 
        | ||______________ droTak2 
___________________| | 
        | |____________ droRho2 
        | 
        |_______________ droFic2 
+0

これは良いですね。ブランチの長さも再計算されますか? – user1385816

+0

ドキュメントに明示的に記載されていません(http://biopython.org/DIST/docs/tutorial/Tutorial.html#htoc200)。あなたはそれをテストして報告することができますか? – mitoRibo

0

代わりBioPython、使用ete3を使用します。ドキュメントから

from ete3 import Tree 
t = Tree('dm6.27way.nh') 
t.prune(species_list, preserve_branch_length=True) 
t.write() 

バージョン2.2から、この機能はまた、残りのノードのうち、元の距離を保ちながら、ツリーからノードを削除することを可能にするpreserve_branch_lengthフラグを含みます。