如何更简单地查看数十个变量的重叠数据?

数据挖掘 Python 可视化 相关性
2021-09-22 20:46:17

我试图想出最好的方法来查看与一个非常大的用户群相关的多个变量(大约 40 个)如何相互交互。

打个比方,假设我有数千名学童喜欢的超级英雄的调查数据,比如Adam Agner只喜欢蝙蝠侠,Brian Agosto喜欢超人和蝙蝠侠,Cian Ailiff喜欢神奇女侠、超人和闪电侠等。指数将是孩子的名字列表(数万),变量将是每个超级英雄(来自 50 个列表),每个超级英雄都有一个 True 或 False 值。

而不仅仅是喜欢每个超级英雄的孩子的数量,如果我能以某种简单的方式看到重叠信息,我可能会发现一个异常大的数字只喜欢蝙蝠侠,或者大多数喜欢超人的人可能也喜欢闪光。

最简单的方法是直观地进行,但维恩图对于大量(这里为 50 个)变量并不实用。因此,看起来带有热图基础的相关矩阵将是可行的方法,如下所示:

资料来源:http://www.sthda.com/english/wiki/correlation-matrix-a-quick-start-guide-to-analyze-format-and-visualize-a-correlation-matrix-using-r-software

我可以想象在两个轴上绘制超级英雄的热图可以用于查看一个变量与所有其他变量的有趣匹配,但它仍然需要一些不太理想的额外步骤来查看三个或更多超级英雄何时匹配,例如查看颜色重叠superhero1 和 superhero2 和 superhero3 的比例都很高,这是一种猜测,因为真正喜欢这三个的孩子可能仍然很低。

目前,我能想到的最佳解决方案是尝试将变量减少到类别中,因此示例可能是MarvelDCmalefemale,但这会丢失一些可能对这些类别中的重叠有所帮助的潜在数据.

也许如果我做了类似上图的操作,圆圈大小将是重叠的数字,颜色可能是与其他变量匹配的数字(不列出它们,但我可以进一步调查)。这种编码有点超出我的舒适区,但我可以尝试。

想法赞赏!理想情况下,我会在 matplotlib 或 python 中的其他方式中执行此操作,但如果我必须使用 Matlab 或其他工具,那么我会考虑这一点。想法或建议表示赞赏!希望这很清楚,谢谢!

2个回答

对于这个例子,我建议使用Chord Diagram来可视化数据。

来自Delimited.io的和弦图 和弦图来自 http://www.delimited.io/blog/2013/12/8/chord-diagrams-in-d3]

和弦图可以让你直接看到每个英雄之间的交互和共同出现的喜欢,包括直观和立即的效果的相对大小。您还可以通过使用颜色和/或相关英雄在图表圆周上的位置来包含角色的其他属性(起源、性别、介绍时间段等)。

由于和弦图是一种基于图形的方法,因此您希望将您拥有的各个观察结果转换为(这对于本术语来说必须是第一个)类似英雄的共频矩阵,格式如下:

+-----------+--------+------------+----------+
|           | Batman | Spiderrman | Superman |  
+-----------+--------+------------+----------+
| Batman    | 0      | 2          | 3        |
+-----------+--------+------------+----------+
| Spiderman | 2      | 0          | 1        | 
+-----------+--------+------------+----------+
| Superman  | 3      | 1          | 0        |
+-----------+--------+------------+----------+

请注意,这表示一个无向图,并且它关于恒等列对称。

当您使用 Python 时,您可能需要考虑使用 Bokeh 来创建和弦图。此处提供了一个这样做的教程

祝你好运,真正的信徒!

t-Distributed Stochastic Neighbor Embedding ( t-SNE ) 可能正是您所需要的。链接页面有代码和链接到描述其使用的各种博客。