python 如何使用树状图处理大量数据

vd2z7a6w  于 2022-11-28  发布在  Python
关注(0)|答案(1)|浏览(294)

我正在使用python 2.7.9。
我用scipy.cluster.hierarchy.dendrogram来显示我的聚类结果,这里是树状图,一个问题是,我有大约200个数据,我看不清楚它们的标签。

...
z=linkage(dist, method='complete')
R=dendrogram(z, labels=mylabels)

1.我知道R["ival"]有对应于叶节点的标签,但是在如此密集的图中匹配值和数据不是一件容易的工作。
2.我想提取一部分数据,比如左边的绿色链接,在这个比例下标签可以看得很清楚,我觉得这是一种很灵活的分析数据的方法,但是我不知道怎么做。
3.我使用leaf_label_func。我的目标是:当一个数据真正属于一个类时--比如cups--显示它的部分名称/标签。2比如,如果一个模型有一个名称“cups_b1”,那么只显示“b1”。3这样,至少我可以一次看到我的数据的一个类别的位置。

def llf(id):
  if id< nmodels:
    mylabel=labels[id]
    if mylabel.find("cups")!=-1:
      index=mylabel.find("_")
      outlabel=mylabel[index+1:]
      return outlabel
    else:
      return ""   #without the else part the function will return None, and that makes the output figure strange
R=dendrogram(z, leaf_label_func=llf, leaf_rotation=90 )

但即使这样,我也认不出标签。

lvmkulzt

lvmkulzt1#

目前还没有一种很好的方法可以从树状图中直观地提取小细节。
在图形之外使用群集数据。

from collections import defaultdict

clusterdict = defaultdict(list)
for ind,clust in zip(R['leaves'],R['color_list']):
    clusterdict[clust].append(ind)

现在,您可以分别浏览每个群集。

In [50]:
clusterdict['g']

Out[50]:
[73, 8, 30, 14, 0, 67, 91, 60, 81, 61, 83, 22]

另一个选项是在两个轴(x,y)上打印树状图,如代码here所示。然后,如果您一定要查看图表上的标签,则可以在x轴上打印一半标签,在y轴上打印一半标签。

相关问题