如何使用树状图处理大量数据
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)