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

5
我正在使用Python 2.7.9。我使用scipy.cluster.hierarchy.dendrogram来展示我的聚类结果。这里是Dendrogram。问题在于,我有大约200个数据,无法清楚地看到它们的标签。
...
z=linkage(dist, method='complete')
R=dendrogram(z, labels=mylabels)

enter image description here

1.我知道R["ival"]对应于叶节点的标签,但在如此密集的图形中匹配值和数据并不容易。

2.我想提取数据的一部分。例如,左侧的绿色链接。在这个比例尺下,标签可以清晰地看到。我认为这是一种具有很大灵活性的分析数据的方式。但我不知道如何做到这一点。

3.我使用leaf_label_func。我的目标是:当数据真正属于一个类别--例如杯子--时,显示其名称/标签的一部分。例如,如果一个模型的名称为“cups_b1”,那么只显示“b1”。因此,至少我可以一次看到一类数据的位置。

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 )

但是,我甚至无法识别这些标签。

在这里输入图片描述

1个回答

0

从系统树图中视觉提取小细节并没有一个非常好的方法。有几个解决方案值得考虑。

在图表外处理聚类数据。

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轴上打印另一半标签。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接