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

Posted

技术标签:

【中文标题】如何使用树状图处理大量数据【英文标题】:How to use dendrogram to work with a lot of data 【发布时间】:2016-04-22 13:03:41 【问题描述】:

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

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

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】:

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

使用图表外的集群数据。

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

【讨论】:

以上是关于如何使用树状图处理大量数据的主要内容,如果未能解决你的问题,请参考以下文章

大量数据处理的一个思路

如何使用 Python Ray 在不耗尽内存的情况下并行处理大量数据?

如何使用 Encoding.ASCII.GetBytes 处理大量数据? (抛出 OutOfMemoryException)

如何使用 Python 内置函数成功处理大量 .txt 文件?

数据可视化之Processing

如何使用Derwent Data Analyzer快速导入大量数据