0

我正在尝试在 python 中创建一个数组,该数组将包含系统发育树上每对节点之间的所有成对距离。我目前正在使用 dendropy 来执行此操作。(我最初查看了 biopython,但找不到执行此操作的选项)。到目前为止,我的代码如下所示:

import dendropy

tree_data = []
tree = dendropy.Tree.get(path="gonno_microreact_tree.nwk",schema="newick")
pdc = tree.phylogenetic_distance_matrix()
for i, t1 in enumerate(tree.taxon_namespace[:-1]):
    for t2 in tree.taxon_namespace[i+1:]:
        tip_pair = {}
        tip_dist_list = []
        tip_pair[t1] = t2
        distance = pdc(t1, t2)
        tip_dist_list.append(tip_pair)
        tip_dist_list.append(distance)
        tree_data.append(tip_dist_list)
print tree_data

除了编写提示标签的方式外,这很有效。例如,tree_data 列表中的条目如下所示:

[{<Taxon 0x7fc4c160b090 'ERS135651'>: <Taxon 0x7fc4c160b150 'ERS135335'>}, 0.0001294946558138355]

但是 newick 文件中的提示分别只是标记为 ERS135651 和 ERS135335。如何让 dendropy 仅使用原始提示标签编写数组,以便此条目如下所示:

 [{ERS135651:ERS135335}, 0.0001294946558138355]

(我还阅读了 dendropy 文档,我知道它说要使用 treecalc 来执行此操作,如下所示:

pdc = treecalc.PatristicDistanceMatrix(tree)

但我只是收到一个错误,说该命令不存在:

AttributeError: 'module' object has no attribute 'PairisticDistanceMatrix'

)

关于如何让这个工作的任何建议?

4

1 回答 1

0

将提示标签转换为字符串会将它们转换为由语音标记包围的名称,例如:

t1 = str(t1)
print t1

给出:

"'ERS135651'"

因此,使用字符串拼接去除多余的语音标记可以将提示标签转换回它的正确名称,例如:

t1 = t1.replace("'","")
于 2017-04-04T14:46:40.610 回答