可视化许多一对多关系

数据挖掘 可视化 javascript
2021-09-25 20:31:03

我正在尝试可视化 github 存储库数据上的语言标签。我有 16k github 存储库的名称,以及与每个存储库相关的所有语言。下面是我想出的和弦图。

但是,我发现和弦图并不能很好地表示数据,因为

  1. 它没有显示一对多的关系。例如,大多数带有 JavaScript 的存储库将同时具有 html 和 css。这表示为 JavaScript-HTML 和 JavaScript-css,但不是全部一起表示。

  2. 弧的大小不代表数据集中的 repos 数量。例如,在我的数据集中使用 JavaScript 的 repos 数量约为 6k,然而,arc 约为 17k。这是因为每个 repo 中有多种语言。例如,如果一个 repo 包含 JavaScript、HTML、CSS 和 Python,那么弧的长度将为 3。

您对更好地可视化这些数据有什么建议吗,谢谢。这个特定的一个是 d3 和弦图,但可视化可以使用任何包(Python 或 JavaScript 或 R)完成。

Github 存储库语言和弦图

这是数据集,如果您有兴趣,请在 Google BigQuery 上进行此查询

SELECT
    sample_repos.repo_name,
    sample_repos.watch_count,
    languages.LANGUAGE
FROM
  `bigquery-public-data.github_repos.languages` languages
INNER JOIN
  `bigquery-public-data.github_repos.sample_repos` sample_repos
ON
  languages.repo_name = sample_repos.repo_name
WHERE sample_repos.repo_name IN (
  SELECT repo_name[OFFSET(0)]
  FROM `bigquery-public-data.github_repos.commits`)
ORDER BY sample_repos.watch_count DESC
LIMIT 16000
1个回答

在没有看到数据本身的情况下,我会想到两种可视化。一种选择是在存储库上运行层次聚类,并将结果绘制为带有热图(或集群图)的树状图。第二个是生成跨存储库的语言共现的强制导向图。

带有热图的树状图

这绘制了所有语言共现,类似于邻接矩阵这个由 seaborn生成的集群图是一个带有热图的树状图示例:

seaborn - 在热图数据中发现结构

通过考虑哪些语言在其他语言中出现的频率更高,或者根本不出现,也许可以从树状图中了解优势/层次结构。从热图中应该可以明显看出语言的普遍共现。

这种可视化的优点是它应该比和弦更清楚地显示语言之间的关系。特别是,可以从生成的每个集群内的语言“层次结构”中获得一些见解。然而,一个缺点是回购的数量不容易表示。

力导向图

解决先前方法缺点的可视化是力导向图,其中结构是通过使用“节点之间的排斥力和相邻节点之间的吸引力”得出的。这可能会更有效地显示涉及的回购数量,因为与其他节点一起出现更频繁的节点具有更大的“质量”权重:

Mike Bostock 的 d3 les miserables 图的副本

Mike Bostock 的上图是一个很好的代码和数据示例,但是对于您的用例,如果语言计数由节点的大小表示,它可能会得到改进,类似于Christopher Manning 的可视化作为事后的想法,如果这个气泡图可以用连接节点的边进行重新设计,以显示在 repo 中一起使用语言的位置,它也可能有用。


需要注意的是,在没有看到数据的情况下,我不能完全确定这个数据集有什么可能。如果您可以将数据整理成每个 repo 中出现的语言的计数,并假设出现在同一个 repo 中的所有语言都是共现的,那么这些可视化应该是一种选择。