【问题标题】:Data visualization: Bubble charts, Venn diagrams, and tag clouds (oh my!)数据可视化:气泡图、维恩图和标签云(天哪!)
【发布时间】:2011-03-14 13:28:47
【问题描述】:

假设我有一个很大的对象列表(数千或数万个),每个对象都带有一些标签。 有数十或数百种可能的标签,它们的使用遵循典型的幂律: 一些标签使用非常频繁,但大多数很少见。 事实上,除了最常见的几十个标签外,所有标签通常都可以忽略。

现在的问题是如何可视化这些标签之间的关系。 标签云可以很好地显示它们的频率,但它忽略了哪些标签与哪些其他标签一起出现。 假设标记 :bar 仅出现在也标记为 :foo 的对象上。 这应该在视觉上很明显。 对于倾向于一起出现的三个标签也是如此。

您可以将每个标签设为气泡并让它们部分重叠。 从技术上讲,这是一个维恩图,但以这种方式处理它可能很笨拙。 例如,谷歌图表可以创建维恩图,但只能用于 3 个或更少的集合(标签): http://code.google.com/apis/chart/docs/gallery/venn_charts.html
他们将其限制为 3 套的原因是,它看起来太可怕了。 请参阅 Wikipedia 页面上的“对更多集合的扩展”:http://en.wikipedia.org/wiki/Venn_diagrams

但这只有在每个可能的交叉点都不为空的情况下。 如果不超过 3 个标签同时出现(可能在丢弃稀有标签之后),那么维恩图的集合就可以工作(气泡的大小代表标签频率)。

或者也许是一个图形(如在顶点和边中),具有视觉上较粗或较细的边来表示共现频率。

您有什么想法或工具或库的指针吗? 理想情况下,我会使用 javascript 来执行此操作,但我对 R 和 Mathematica 之类的东西或其他任何东西都持开放态度。 如果有人好奇,我很乐意分享一些实际数据(如果我告诉你它代表什么,你会笑)。

附录:我最初想到的应用程序是TagTime,但我突然想到这也很好地映射到了可视化一个人的美味书签的问题。

【问题讨论】:

  • 您的问题似乎遗漏了有关编程的内容。
  • 他问他应该使用哪些库。除非,他有兴趣看一本书,否则这可能是一个编程问题。

标签: javascript r charts visualization data-visualization


【解决方案1】:

如果您以网络为目标,我会创建 like this。连接节点的边缘颜色可能更厚或更深,或者连接它们的力可能更强,因此它们的距离很近。我还会在圆圈内添加标签名称。

一些对此非常有用的库包括:

其他一些有趣的 JavaScript 库值得研究:

【讨论】:

  • 谢谢杰!我不知道 protovis。太好了。至于平台/语言,web/javascript 是理想的,但如果 Mathematica 或 R 或​​其他东西有很好的方法来做到这一点,我也很想知道。至于力导向布局,我不喜欢的是它没有捕获子集关系。也许是这样的——vis.stanford.edu/protovis/ex/bubble.html——但气泡可以在彼此内部。
  • 再次感谢,杰伊。如果我没记错的话,Protovis 似乎是 javascript,而不是 flash。
【解决方案2】:

如果我正确理解您的问题,图像矩阵 在这里应该可以很好地工作。我想到的实现将是一个 n x m 矩阵,其中标记的项目是行,每个标记类型是一个单独的列。矩阵中的每个单元格都将完全由“1”和“0”组成,即,特定项目要么具有给定的标签,要么没有。

在下面的矩阵中(我将它旋转了 90 度,因此它更适合这个窗口 - 所以列实际上代表标记的项目,每一行显示所有项目中是否存在给定标签),我模拟了有 8 个标签200 个标签项目 的场景。 ,“0”为蓝色“1”为浅黄色

这个矩阵中的所有值都是随机选择的(每个标记的项目是从一个由两个标记组成的盒子中抽取的八次,一个蓝色和一个黄色(分别没有标记和标记)。所以毫不奇怪,没有视觉证据表明模式在这里,但是如果您的数据中有一个,那么这种实现起来非常简单的技术可以帮助您找到它。

我使用 R 生成和绘制模拟数据,仅使用基本图形(没有外部包或库):

# create the matrix
A = matrix(data=r1, nrow=1, ncol=8)

# populate it with random data
for (i in seq(0, 200, 1)){r1 = sample(0:1, 8, replace=TRUE); A = rbind(A, r1)}

# now plot it
image(z=A, ann=F, axes=F, col=topo.colors(12))

【讨论】:

  • 鉴于存在“数千个对象”和“数百个标签”,我认为这种可视化不会有助于在数据中找到模式。生成的图像可能只是一张巨大的嘈杂图片。
  • 一个好的seriation对于在这种显示中看到模式非常重要
【解决方案3】:

请注意确保它会起作用,因为我没有测试过,但这是我将如何开始:

您可以按照 doug 在他的回答中建议的那样创建一个矩阵,但不是将文档作为行,将标签作为列,而是采用一个方矩阵,其中标签是行和列。单元格 T1;T2 的值将是同时标记有 T1 和 T2 的文档的数量(请注意,这样做你会得到一个对称矩阵,因为 [T1;T2] 将具有与 [T2;T1] 相同的值) .
完成此操作后,每一行(或每一列)都是一个向量,用于将标签定位在具有 T 维的空间中。在这个空间中彼此靠近的标签经常一起出现。为了可视化共现,您可以使用一种方法来降低您的空间维度或任何聚类方法。例如,您可以使用 kohonen 自组织地图将您的 T 维空间投影到 2D 空间,然后您将获得一个 2D 矩阵,其中每个单元格代表标签空间中的一个抽象向量(这意味着该向量不必存在在您的数据集中)。该向量反映了源空间的拓扑约束,可以看作是反映某些标签显着共现的“模型”向量。此外,此地图上彼此靠近的单元格将表示源空间中彼此靠近的向量,从而允许您将标签空间映射到 2D 矩阵上。
矩阵的最终可视化可以通过多种方式完成,但如果不先查看先前处理的结果,我无法就此提供建议。

【讨论】:

    【解决方案4】:

    虽然这是一个旧线程,但我今天才发现它。

    您可能还想考虑使用Self-Organizing Map

    这是世界贫困的自组织地图示例。它使用了 39 个你称之为“标签”的东西来排列你称之为“对象”的东西。

    http://www.cis.hut.fi/research/som-research/povertymap.gif

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      相关资源
      最近更新 更多