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

标签 python python-3.x phylogeny

大家好,我需要一些帮助:

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

   /-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,由 逗号 分隔。

儿子,如果我有类似的东西:

(A,(B,C)); 

那么就说明BC的关系比较近,A的关系最远。

我的问题的想法是找到一种方法,例如使用 python 来计算具有相同“TAG_number”且彼此之间比任何其他 更接近的组的数量TAG_numberYP_number 个节点。

例如,TAG22 组表示,其中 (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_number 是否在“单系群”中,但是如果 则没有什么可以告诉树中的组数TAG_number 个组在树中拆分。

如果您有任何想法可以做到这一点?非常感谢。

问题的其他部分:

现在我有了一个物种系统发育学,例如:

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

并且这个想法是在之前过程中评估的每个单系群中,计算物种系统发育中由进化枝的 MRCA 形成的进化枝内的节点数。

所以我有2组:

第一个:

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

这里 Canis_austracusCanis_taurus 在物种系统发育中共享一个 MRCA 并且这个祖先形成了由 2 物种组成的进化枝(Canis_austracus 和 Canis_taurus)

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

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

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

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

最佳答案

也许 ete3 的 get_monophyletic 就是您所需要的? http://etetoolkit.org/docs/latest/reference/reference_tree.html?highlight=get_monophyletic#ete3.TreeNode.get_monophyletic

从 ete3 导入树 导入重新

# 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

关于python - 计算特定格式(使用 Python)中的组数(具有特定 TAG),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55780843/

相关文章:

python - 如何在 Python 中检查回文?

Python 从流中生成 JSON 文档

python - Pdfkit 操作系统错误 : No wkhtmltopdf executable found

python-3.x - 升级 Python 版本以运行和创建 Sagemaker Endpoint 的自定义容器

r - 在 R 中规范化系统发育树

python - for in a parameter function python - zip dynamic

python-3.x - 文本文件读写,ValueError : need more than 1 value to unpack

python-3.x - 在python中使用 key 加密消息

python - TnT (Goloboff et al., 2008) 如何分配内部节点标签?

r - 使用点将提示标签链接到系统发育树