计算特定格式(使用Python)中的特定TAG组数

2024-09-29 02:14:50 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好我需要帮助:

我不知道你是否熟悉系统发育树,但这里有一个例子:

   /-YP_001604167.1
  |
  |--YP_001604351.1
--|
  |      /-seq_TAG2_Canis_taurus
  |   /-|
  |  |   \-seq_TAG2_Canis_austracus
   \-|
     |   /-YP_001798528.1
      \-|
        |   /-YP_009173671.1
         \-|
           |   /-seq_TAG1_Mus_musculus
            \-|
              |   /-seq_TAG1_Mus_griseus
               \-|
                 |   /-seq_TAG2_Canis_canis
                  \-|
                    |   /-seq_TAG2_Canis_familiaris
                     \-|
                        \-seq_TAG2_Canis_lupus

这棵树是用一种叫做newick的特定格式编码的:

'(YP_001604167.1,YP_001604351.1,((seq_TAG2_Canis_austracus,seq_TAG2_Canis_taurus),(YP_001798528.1,(YP_009173671.1,(seq_TAG1_Mus_musculus,(seq_TAG1_Mus_griseus,(seq_TAG2_Canis_lupus,(seq_TAG2_Canis_familiaris,seq_TAG2_Canis_canis))))))));'
  • 格式说明:

树以分号结尾。此树中最底部的节点是内部节点,而不是尖端。内部节点由一对匹配的圆括号表示。在它们之间是节点(seq_names)的表示,这些节点直接从该节点node开始descended,由commas分隔。你知道吗

儿子,如果我有这样的东西:

(A,(B,C)); 

这就意味着BC之间的联系更为密切,而A之间的距离最远。你知道吗

我的问题的想法是找到一种方法,例如使用python来计算具有相同“TAG_number”的组的数量,这些组比任何其他TAG_numberYP_number节点更接近。你知道吗

例如,表示在2 groups中的TAG2,其中(seq_TAG2_Canis_taurus, seq_TAG2_Canis_austracus)在一起,第二组(seq_TAG2_Canis_canis, (seq_TAG2_Canis_familiaris , seq_TAG2_Canis_lupus))在一起。如您所见,对于TAG1,它们都没有嵌套在一起,因为seq_TAG1_Mus_griseus与组(seq_TAG2_Canis_canis, (seq_TAG2_Canis_familiaris , seq_TAG2_Canis_lupus))的关系比与另一组TAG1 seq_TAG1_Mus_musculus的关系更密切。你知道吗

所以结果应该是这样的:

groups for TAG_1 : 0 
groups for TAG_2 : 2 

我知道Python或R中的一些包可以用来判断TAG\u number是否在“monophyletic groups”中,但是如果在树中拆分了TAG_number个组,则没有什么可以告诉树中的组数。你知道吗

如果你有什么办法的话?非常感谢你。你知道吗

问题的其他部分:

现在我有一个Species phylogeny例如:

|         /-Canis_taurus
|      /-|
|     |   \-Canis_astracus
|   /-|
|  |  |   /-Canis_africus
|  |   \-|
|  |     |   /-Canis_familiaris
 \-|      \-|
   |         \-Canis _lupus
   |
   |   /-Canis_canis
    \-|
       \-Lupus_lupus

这个想法是在前面的过程中,在由物种系统发育中的分支的MRCA形成的分支中,计算节点的数量。你知道吗

所以我有2 groups

第一个:

#    /-TAG2, seq_TAG2_Canis_austracus
# --|
#    \-TAG2, seq_TAG2_Canis_taurus
#

这里的Canis_austracusCanis_taurus在物种系统发育中共享一个MRCA,这个祖先形成了由2 speciesCanis_austracus and Canis_taurus)组成的分支

物种系统发育树中的Nb物种=2

#    /-TAG2, seq_TAG2_Canis_lupus
# --|
#   |   /-TAG2, seq_TAG2_Canis_familiaris
#    \-|
#       \-TAG2, seq_TAG2_Canis_canis

这里的3个分类群共享一个MRCA,这个祖先形成了由物种系统发育中所有物种组成的分支(7)

物种系统发育树中的Nb物种=7


Tags: number节点物种tagseqmusyptaurus
1条回答
网友
1楼 · 发布于 2024-09-29 02:14:50

也许你需要ete3的单系性? http://etetoolkit.org/docs/latest/reference/reference_tree.html?highlight=get_monophyletic#ete3.TreeNode.get_monophyletic

从ete3导入树 进口re

# build tree
t = Tree("(YP_001604167.1,YP_001604351.1,"
         "((seq_TAG2_Canis_austracus,seq_TAG2_Canis_taurus),"
         "(YP_001798528.1,(YP_009173671.1,(seq_TAG1_Mus_musculus,"
         "(seq_TAG1_Mus_griseus,(seq_TAG2_Canis_lupus,"
         "(seq_TAG2_Canis_familiaris,seq_TAG2_Canis_canis))))))));")

# set tag as leave attribute
for leaf in t:
    # get tag from name
    tag = re.search('TAG[0-9]', leaf.name)
    tag = tag.group(0) if tag else None
    leaf.add_features(tag=tag)

# show the hole tree
print(t.get_ascii(attributes=["name", "tag"], show_internal=False))

# show all monophyletic groups for tag=TAG2
for node in t.get_monophyletic(values=["TAG2"], target_attr="tag"):
    print(node.get_ascii(attributes=["tag", "name"], show_internal=False))


#    /-TAG2, seq_TAG2_Canis_austracus
#  |
#    \-TAG2, seq_TAG2_Canis_taurus
#
#    /-TAG2, seq_TAG2_Canis_lupus
#  |
#   |   /-TAG2, seq_TAG2_Canis_familiaris
#    \-|
#       \-TAG2, seq_TAG2_Canis_canis

相关问题 更多 >