计算特定格式(Python)内的组数(具有特定 TAG)
Count number of groups (with specific TAG) within a specific format (with 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
) 的表示,这些节点 (seq_names
) 与 node
直接 descended
,由 commas
.
分隔
儿子,如果我有类似的东西:
(A,(B,C));
则表示B
与C
关系较近,A
关系最远。
我的问题的想法是找到一种方法,例如使用 python 来计算具有相同“TAG_number
”且彼此之间比任何其他更接近的组的数量TAG_number
或 YP_number
个节点。
例如,TAG2
表示在2 groups
中,其中(seq_TAG2_Canis_taurus, seq_TAG2_Canis_austracus)
在一起,第二组(seq_TAG2_Canis_canis, (seq_TAG2_Canis_familiaris , seq_TAG2_Canis_lupus))
在一起。如您所见,对于 TAG1
,它们中的 none 嵌套在一起,因为 seq_TAG1_Mus_griseus
比 TAG1 seq_TAG1_Mus_musculus
更接近组 (seq_TAG2_Canis_canis, (seq_TAG2_Canis_familiaris , seq_TAG2_Canis_lupus))
.
所以结果应该是这样的:
groups for TAG_1 : 0
groups for TAG_2 : 2
我知道 Python 或 R 中的一些包可以用来判断 TAG_number 是否在“monophyletic groups
”中,但是没有什么可以告诉其中的组数如果 TAG_number
组在树中分裂,则树。
如果你有什么想法可以做到这一点?非常感谢。
问题的其他部分:
现在我有一个 Species phylogeny
例如:
| /-Canis_taurus
| /-|
| | \-Canis_astracus
| /-|
| | | /-Canis_africus
| | \-|
| | | /-Canis_familiaris
\-| \-|
| \-Canis _lupus
|
| /-Canis_canis
\-|
\-Lupus_lupus
and 这个想法是在前面过程中评估的每个 monophyletic groups
中,在物种系统发育中的进化枝的 MRCA 形成的进化枝内计算节点的数量。
所以我有 2 groups
:
第一个:
# /-TAG2, seq_TAG2_Canis_austracus
# --|
# \-TAG2, seq_TAG2_Canis_taurus
#
这里 Canis_austracus
和 Canis_taurus
在物种系统发育中共享一个 MRCA
,这个祖先形成了由 2 species
(Canis_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
也许 get_monophyletic of ete3 是您所需要的?
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
大家好我需要一些帮助:
我不知道你是否熟悉系统发育树,但这里有一个例子:
/-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
) 的表示,这些节点 (seq_names
) 与 node
直接 descended
,由 commas
.
儿子,如果我有类似的东西:
(A,(B,C));
则表示B
与C
关系较近,A
关系最远。
我的问题的想法是找到一种方法,例如使用 python 来计算具有相同“TAG_number
”且彼此之间比任何其他更接近的组的数量TAG_number
或 YP_number
个节点。
例如,TAG2
表示在2 groups
中,其中(seq_TAG2_Canis_taurus, seq_TAG2_Canis_austracus)
在一起,第二组(seq_TAG2_Canis_canis, (seq_TAG2_Canis_familiaris , seq_TAG2_Canis_lupus))
在一起。如您所见,对于 TAG1
,它们中的 none 嵌套在一起,因为 seq_TAG1_Mus_griseus
比 TAG1 seq_TAG1_Mus_musculus
更接近组 (seq_TAG2_Canis_canis, (seq_TAG2_Canis_familiaris , seq_TAG2_Canis_lupus))
.
所以结果应该是这样的:
groups for TAG_1 : 0
groups for TAG_2 : 2
我知道 Python 或 R 中的一些包可以用来判断 TAG_number 是否在“monophyletic groups
”中,但是没有什么可以告诉其中的组数如果 TAG_number
组在树中分裂,则树。
如果你有什么想法可以做到这一点?非常感谢。
问题的其他部分:
现在我有一个 Species phylogeny
例如:
| /-Canis_taurus
| /-|
| | \-Canis_astracus
| /-|
| | | /-Canis_africus
| | \-|
| | | /-Canis_familiaris
\-| \-|
| \-Canis _lupus
|
| /-Canis_canis
\-|
\-Lupus_lupus
and 这个想法是在前面过程中评估的每个 monophyletic groups
中,在物种系统发育中的进化枝的 MRCA 形成的进化枝内计算节点的数量。
所以我有 2 groups
:
第一个:
# /-TAG2, seq_TAG2_Canis_austracus
# --|
# \-TAG2, seq_TAG2_Canis_taurus
#
这里 Canis_austracus
和 Canis_taurus
在物种系统发育中共享一个 MRCA
,这个祖先形成了由 2 species
(Canis_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
也许 get_monophyletic of ete3 是您所需要的? 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