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

dud*_*udu 5 python cluster-analysis scipy

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

...
z=linkage(dist, method='complete')
R=dendrogram(z, labels=mylabels)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

1.我知道R["ival"]有叶子节点对应的标签,但是在如此密集的图中匹配一个值和数据并不是一件容易的事情。

2.我想到了提取一部分数据。例如,左侧的绿色链接。在这个比例下,可以清楚地看到标签。我认为这是一种非常灵活的数据分析方式。但我不知道该怎么做。

3.我用leaf_label_func. 我的目标是:当数据真正属于一个类时——例如cups——显示其名称/标签的一部分。例如,如果一个模型的名称为“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 )
Run Code Online (Sandbox Code Playgroud)

但即使这样,我也无法识别标签。

在此处输入图片说明

Kev*_*vin 0

确实没有一种很好的方法可以从树状图中直观地提取小细节。我想到了几个解决方案。

使用图表外部的集群数据。

from collections import defaultdict

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

现在您可以单独探索每个集群。

In [50]:
clusterdict['g']

Out[50]:
[73, 8, 30, 14, 0, 67, 91, 60, 81, 61, 83, 22]
Run Code Online (Sandbox Code Playgroud)

另一种选择是在两个轴 (x,y) 上打印树状图,如此处的代码所示。然后,如果您绝对必须看到图表上的标签,您可以在 x 轴上打印一半标签,在 y 轴上打印一半标签。