可视化数据和群集

时间:2010-07-13 19:22:51

标签: python cluster-analysis visualization

我正在编写一个python脚本来查找文档之间的相似性。我已经计算了每个文档对的相似度得分并将它们存储在词典中。它看起来像这样:

{(8328,8327):1.0,(8313,8306):0.12405229825691289,(8329,8328):1.0,(8322,8321):0.99999999999999989,(8328,8329):1.0,(8306,8316): 0.12405229825691289,(8320,8319):0.67999999999999989,(8337,8336):1.0000000000000002,(8319,8320):0.67999999999999989,(8313,8316):0.99999999999999989,(8321,8322):0.99999999999999989,(8330,8328):1.0}

我的最终目标是将类似的文档聚集在一起。上述数据可以用其他方式查看。让我们说文档对(8313,8306)。相似度得分为0.12405。我可以指定得分的倒数将是文档8313和8306之间的距离。因此,类似的文档将更紧密地聚集在一起,而不相似的文档将基于它们的距离进一步分开。

我的问题是,是否有任何开源可视化工具可以帮助我实现这一目标?

5 个答案:

答案 0 :(得分:1)

我不确定这种类型的图表的术语是什么(最小权重生成树?),但请查看Graphviz。它也有一些Python bindings,但如果没有,你可以简单地为它生成一个输入文件,或直接管道数据。

答案 1 :(得分:1)

答案 2 :(得分:0)

我认为Weka可以做到这一点。您可能必须先将输入文件按到不同的格式。 Weka也有一个API,虽然它是用Java而不是Python。

答案 3 :(得分:0)

您可以使用许多工具来执行此操作。

还有其他一些提及,但你可以很容易地在Tkinter,PyGTK +,PyQT,matplotlib或者真正的任何图形库中做这样的事情。

然而,matplotlib中的极坐标图很简单:

(未测试):

import math
from matplotlib.pyplot import figure, show

# assign your data here
fig = figure()
ax = fig.add_subplot(111, polar=True)

for pair in data:
    ax.plot(0, data[pair], 'o')
show()

这应该给你一个基本的可视化。您也可以将其更改为

ax.plot(pair*math.pi, 1, 'o')

对于不同的可视化风格。

matplotlib文档非常好,他们有很多例子。

答案 4 :(得分:0)

也许Networkx可能有所帮助。这个例子可能是一个很好的起点:

http://networkx.lanl.gov/examples/drawing/knuth_miles.html