7

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

现在的问题是如何可视化这些标签之间的关系。标签云可以很好地显示它们的频率,但它忽略了哪些标签与哪些其他标签一起出现。假设标记 :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,但我突然想到这也很好地映射到了可视化一个人的美味书签的问题。

4

4 回答 4

5

如果我正确理解您的问题,图像矩阵应该在这里很好地工作。我想到的实现将是一个 nxm 矩阵,其中标记的项目是行,每个标记类型是一个单独的列。矩阵中的每个单元格都将完全由“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))

替代文字

于 2010-07-13T06:42:33.340 回答
2

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

您可能还想考虑使用自组织地图

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

http://www.cis.hut.fi/research/som-research/povertymap.gif 世界贫困的自组织地图

于 2011-09-14T20:07:30.023 回答
2

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

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

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

于 2010-07-12T12:47:45.823 回答
1

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

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

于 2011-05-24T11:46:22.583 回答