7

次のコマンドを実行して作成されたベクトルのリストがあります。

import hcluster
import numpy as np
from ete2 import Tree

vecs = [np.array(i) for i in document_list] 

ここで、document_listは、私が分析しているWebドキュメントのコレクションです。次に、階層的クラスタリングを実行します。

Z = hcluster.linkage(vecs, metric='cosine') 

これにより、次のようなndarrayが生成されます。

[[ 12.          19.           0.           1.        ]
[ 15.          21.           0.           3.        ]
[ 18.          22.           0.           4.        ]
[  3.          16.           0.           7.        ]
[  8.          23.           0.           6.        ]
[  5.          27.           0.           6.        ]
[  1.          28.           0.           7.        ]
[  0.          21.           0.           2.        ]
[  5.          29.           0.18350472   2.        ]
[  2.          10.           0.18350472   3.        ]
[ 47.          30.           0.29289577   9.        ]
[ 13.          28.           0.29289577  13.        ]
[ 73.          32.           0.29289577  18.        ]
[ 26.          12.           0.42264521   5.        ]
[  5.          33.           0.42264521  12.        ]
[ 14.          35.           0.42264521  12.        ]
[ 19.          35.           0.42264521  18.        ]
[  4.          20.           0.31174826   3.        ]
[ 34.          21.           0.5         19.        ]
[ 38.          29.           0.31174826  21.        ]]

このndarrayをete2Tree()コンストラクターに渡すことができるnewick文字列に変換して、ete2が提供するツールを使用してnewickツリーを描画および操作できるようにすることは可能ですか?

これを試してみるのも理にかなっていますか?そうでない場合は、同じデータとete2を使用してツリー/樹状図を生成できる別の方法があります(dendropyやhcluster自体などの樹状図を描画できる他のパッケージがあることを認識していますがete2をすべて同じように使用したいですか)?

ありがとう!

4

2 に答える 2

4

私はほとんど同じことに対して次のアプローチを使用します。

from hcluster import linkage, to_tree
from ete2 import Tree

#hcluster part
Y = dist_matrix(items, dist_fn)
Z = linkage(Y, "single")
T = to_tree(Z)

#ete2 section
root = Tree()
root.dist = 0
root.name = "root"
item2node = {T: root}

to_visit = [T]
while to_visit:
    node = to_visit.pop()
    cl_dist = node.dist /2.0
    for ch_node in [node.left, node.right]:
        if ch_node:
            ch = Tree()
            ch.dist = cl_dist
            ch.name = str(ch_node.id)
            item2node[node].add_child(ch)
            item2node[ch_node] = ch
            to_visit.append(ch_node)

# This is your ETE tree structure
tree = root
于 2013-07-15T15:03:55.910 に答える