无需加载项的 Excel、热图和数据可视化

机器算法验证 r 数据可视化 擅长
2022-04-08 20:50:08

我在一家大公司工作,该公司有严格的互联网政策和对 Excel 上瘾的同事。我目前正在研究市场相关性的演变,这意味着一些统计数据、数据分析、聚类、数据可视化......从我在互联网上看到的情况来看,在 Excel 中做这件事并不是一个好主意。(请参阅此处的一般研究:Excel 作为统计工作台

经过 2 周的努力,我终于从 IT 部门获得了 R 的工作版本和一些有趣的包。我的市场数据存储在一个 .txt 文件中,我使用 R 处理它并创建一个 results.txt 文件,然后我在 Excel 中加载 results.txt 文件并绘制我老板想要的东西。

我承认 Excel 对于在同一个地方处理大量数据集和图表很有用。对于我想做的事情,与 R 相比,这是唯一的优点。我认为我在 R 中进行计算的廉价 .txt 解决方案是正确且简单的......(对于在我工作的地方禁止使用 Rexcel 连接 R 和 Excel 之类的轶事 - 不要问为什么 - 所以我尝试了一个宏创建一个 .bat 来启动 R 并进行计算;对我的同事来说太复杂了)

但是对于数据可视化 Excel 是很差的;我真的很怀念我在 R 中的一些图表。树状图、箱线图、直方图、相关圆、汇总相关和热图对我来说非常有趣,但不可用。所以我的问题是如何在 Excel 中获取它们?(记住严格的互联网政策;我不能下载任何插件)。有没有一种(简单的)方法可以用宏或工作簿来绘制复杂的东西?你有一些来源吗?

4个回答

简短的回答是否定的,没有简单的方法来创建您提到的大多数图形。但是在任何可以绘制线段的图形环境中(例如 60 年代、70 年代和 80 年代的笔式绘图仪驱动程序),您都可以构建可行的可视化。因此,一种方法是关注连接散点图(这是在 Excel 中创建线段的主要机制)。如果允许,编写宏会有所帮助。

我在这个方向上还没有走太远,但几年前创建了带有并排盒须图的电子表格,表明这种方法是可行的。

2004 年 AL 击球率

此图形总结了棒球队中的个人击球平均值,是通过根据需要复制和排列球队击球平均值的摘要来创建的,以便将它们绘制为散点图。为此,您需要制定(x,y)您希望出现在图中的每个线段的端点坐标,将它们排列成成对的列行,并将它们作为新系列添加到图形中。为了说明,这里是驱动此图形的工作表的一部分:

电子表格提取物

(原始数据以蓝色显示;其他所有数据均经过计算。)

例如,“红袜队”箱线图的左侧(最右侧)由 U:V 列中的坐标给出,W:X 列中的右侧,M3:M5 中的中间条(显示中位数)和 O3:O5 等。总而言之,此图形显示98系列数据:每个箱线图七个系列。我记得(这是几年前的),需要一些手动编辑来格式化外围玩家的名字,但除此之外,箱线图是使用(非常粗糙的)宏自动生成的。此宏将汇总数据(在 I:L 列中看到)复制到必要的列中。另一个宏系统地设置了系列的图形样式,以此类推。编写此类宏几乎不需要 VBA 专业知识:您只需“记录”您正在执行的操作以创建图形的一个基本元素,然后编辑生成的宏以使其特定的单元格引用成为相关的单元格引用。

我不推荐任何这些,并且预计永远不会再这样做,但我可以证明在这样一个原始环境中创建统计图形的过程是有教育意义的。

由于我发现在图表中绘制热图的方式非常简单,几乎可以用来绘制所有内容,我认为它会引起一些人的兴趣。对于好奇的人(以及那些有时间失去的人)。

我的想法是逐个像素地创建一个“屏幕”。

创建一个与您要绘制的大小相同的表格,并用表格填充。将其绘制为堆叠的列。

屏幕

将列之间的间隙减小为0。(右键单击绘图区域,格式,间隙宽度为0)

屏幕

使用宏来更改每个“像素”的颜色。

Sub Macro6()

Application.ScreenUpdating = False
ActiveSheet.ChartObjects("Your table").Activate

   For i = 1 To row
   For j = 1 To col

   red = Int(WorksheetFunction.Max(ActiveSheet.Cells(j + col0, row0 + i), 0) * 255)
'' positive value in red
   blue = Int(-WorksheetFunction.Min(ActiveSheet.Cells(j + col0, row0 + i),  * 255)
'' negative value in blue  
 ActiveChart.SeriesCollection(i).Points(j).Interior.Color = RGB(255 - blue, 255 - red -   blue, 255 - red)
'' gives each pixel a colour based on the value in a cells in a table starting in row0,col0

   Next
   Next

   Application.ScreenUpdating = True

End Sub

并获得:

热图

现在,用更大的数据(33 * 2681)再做一次:

太棒了!

我的结果

尝试在崩溃前享受并保存它:

资源消耗

绘制图像很有用,并且在数据很少的情况下也能很好地工作(33*33 没有问题),但是如果数据过多,它会降低计算机的速度。正如你所看到的,我没有耐心用这么慢的电脑处理细节。

如果有人可以用一台好的计算机测试该方法,那么知道它是否可以在现实生活中的计算机上使用会很有趣。

现在,树状图!

Jon Peltier有一个非常棒的网站,里面有很多关于如何弯曲 Excel 来制作一些更奇特的图表的指南。例如,箱线图热图你不需要他的插件来执行很多。

Excel 不能做很多事情,有时你可以做的事情很难维护和更新,但就像你的情况一样,你有时别无选择。

有一些工具可以在 Excel 中创建树形图。尝试树形图迷你图