可视化多个“直方图”(条形图)

机器算法验证 主成分分析 数据可视化 直方图 条形图
2022-03-29 07:52:39

我很难选择正确的数据可视化方式。假设我们有卖书的书店每本书至少有一个类别

对于一家书店,如果我们计算所有书籍类别,我们会获得一个直方图,该直方图显示该书店属于特定类别的书籍数量。

我想可视化书店的行为,我想看看他们是否更喜欢一个类别而不是其他类别。我不想看看他们是否都偏爱科幻,但我想看看他们是否平等地对待每个类别。

我有大约 100 万家书店。

我想到了4种方法:

  1. 对数据进行采样,仅显示 500 个书店的直方图。使用 10x10 网格在 5 个单独的页面中显示它们。4x4 网格示例:

    多个直方图 1

  2. 与#1 相同。但是这一次根据它们的计数降序对 x 轴值进行排序,所以如果有一个偏爱它会很容易看到。

  3. 想象一下,将#2 中的直方图像套牌一样放在一起,并以 3D 形式显示它们。像这样的东西:
    3D直方图

  4. 而不是使用第三轴使用颜色来表示颜色,而是使用热图(2D 直方图): 二维直方图
    如果通常书店更喜欢某些类别而不是其他类别,它将显示为从左到右的漂亮渐变。

您是否有任何其他可视化想法/工具来表示多个直方图?

2个回答

正如您所发现的,您的问题没有简单的答案!

我想你有兴趣寻找奇怪或不同的书店吗?如果是这种情况,那么您可以尝试诸如PCA之类的方法(有关更多详细信息,请参阅维基百科集群分析页面)。

为了给你一个想法,考虑这个例子。您有 26 家书店(名称为 A、B、..Z)。所有的书店都是相似的,除了:

  1. Z 店只卖几本历史书。
  2. OY 商店销售的言情小说比平均水平高。

主成分图突出显示这些商店以供进一步调查。

这是一些示例 R 代码:

> d = data.frame(Romance = rpois(26, 50), Horror = rpois(26, 100), 
               Science = rpois(26, 75), History = rpois(26, 125))
> rownames(d) = LETTERS
#Alter a few shops
> d[15:25,][1] = rpois(11,150)
> d[26,][4] = rpois(1, 10)
#look at the data
> head(d, 2)
       Romance Horror Science History
 A      36    107      62     139
 B      47     93      64     118
> books.PC.cov = prcomp(d)
> books.scores.cov = predict(books.PC.cov)
# Plot of PC1 vs PC2
> plot(books.scores.cov[,1],books.scores.cov[,2],
       xlab="PC 1",ylab="PC 2", pch=NA)
> text(books.scores.cov[,1],books.scores.cov[,2],labels=LETTERS)

这给出了以下情节:

PCA 图 http://img265.imageshack.us/img265/7263/tmplx.jpg

请注意:

  1. Z 店是一个边远点。
  2. 其他商店形成两个不同的群体。

其他可能性

你也可以看看GGobi,我没用过,但看起来很有趣。

我会建议一些没有定义名称的东西(可能是“平行图”),看起来像这样:

替代文字

基本上,您将所有书店的所有计数绘制为 x 轴上列出的类别上的点,并将每个书店的结果用一条线连接起来。不过,这对于 1M 行来说可能还是太复杂了。这个概念来自csgillespie已经提到的GGobi。