通过更好的数据可视化来改进数据分析?

机器算法验证 r 数据可视化
2022-03-22 13:44:29

我在两台不同的机器上a, b, c, d 并行运行了四个程序XY分别运行了 10 次。以下是数据示例。每个程序的运行时间(毫秒)在10它们各自的名称下给出。

Machine-X:

a b  c d
29 40 21 18
28 43 20 18
30 49 20 28
29 50 19 19
28 51 21 19
29 41 30 29
32 47 10 18
29 43 20 18
28 51 30 29
29 41 21 19


Machine-Y:

a b c d
16 24 19 18
16 24 19 18
16 23 19 18
16 24 19 18
16 24 19 18
16 22 19 18
16 24 19 18
16 24 19 18
16 24 19 18
16 24 19 18

我需要创建图表来可视化以下内容:

  1. 在机器 X 和 Y 上比较每个程序的性能(即运行时间)。
  2. 比较机器 X 和 Y 上每个程序的运行时间的变化
  3. 哪台机器为每个程序提供计算资源是公平的?
  4. 比较机器 X 和 Y 上每次运行的四个程序的总运行时间 (a+b+c+d)。
  5. 比较 10 次运行中四个程序的总运行时间的变化。

对于 1 和 2,我制作了图 A,图 B 是 3,图 C 是 4 和 5。但是,我并不满意,因为我的论文中有三张图,很难将这三张图全部拟合。而且,我相信我们可以生产出比这些更好的产品。如果有人在满足我的要求的同时帮助我在 R 中绘制一两个漂亮的图表而不是三个,我真的很感激。请参阅下面的 R 代码我用来生成这些图表。

图一:

图A

图 B:X 轴显示运行,Y 轴显示特定运行中四个程序的运行时间。

图B

图C:

图C

代码

> pdf("Figure A.pdf")
> par(mfrow=c(1,2))
> boxplot(x,boxwex=0.4, ylim=c(15, 60))
> mtext("Time", side=2, line=2)
> mtext("Running times of each program in 10 runs", side=3, line=2, at=6,cex=1.4)
> mtext("Machine X", side=3, line=0.5, at=2,cex=1.1)
> boxplot(y,boxwex=0.4, ylim=c(15, 60))
> mtext("Machine Y", side=3, line=0.4, at=2,cex=1.1)
> dev.off()



> pdf("Figure B.pdf")
> par(mfrow=c(1,2))
>  boxplot(t(x),boxwex=0.4, ylim=c(0,50))
> mtext("Run Number", side=1, line=2, at=12, cex=1.2)
> mtext("Fairness", side=3, line=2, at=12,cex=1.4)
>  mtext("Machine X", side=3, line=0.5, at=5,cex=1.1)
> boxplot(t(y),boxwex=0.4, ylim=c(0,50))
> mtext("Machine Y", side=3, line=0.4, at=5,cex=1.1)
> dev.off()


> pdf("Figure C.pdf")
> par(mfrow=c(1,2))
> barplot(t(x), ylim=c(0,150),names=1:10,col=mycolor)
> mtext("Run Number", side=1, line=2, at=14, cex=1.2)
> mtext("Total Running-Times in 10 Runs", side=3, line=2, at=14, cex=1.2)
> mtext("Machine X", side=3, line=0.5, at=5,cex=1.1)
> barplot(t(y), ylim=c(0,150), names=1:10,col=mycolor)
> mtext("Machine Y", side=3, line=0.5, at=5,cex=1.1)
> legend("topright",legend=c("a","b","c","d"),fill=mycolor,cex=1.1)
> dev.off()
3个回答

尽管其他受访者提供了有用的见解,但我发现自己不同意他们的一些观点。特别是,我相信可以显示数据细节(而不是混乱)的图形比那些公开总结或隐藏数据的图形更丰富,更有价值,我相信所有数据都很有趣,而不仅仅是那些电脑X。我们来看看。

算法和计算机的时序图

(我在这里展示了一些小图,以表明可以在小空间中详细地显示很多有用的数字。)

该图显示了各个数据值,全部为 80 美元 = 2 倍 4 倍 10 美元。它使用沿 y 轴的距离来表示计算时间,因为人们可以最快速、最准确地比较公共轴上的距离(如比尔克利夫兰的研究所示)。为了确保在实际时间的上下文中正确理解可变性,y 轴向下延伸到零:在任何正值处切断它都会夸大时间的相对变化,引入“谎言因子”(在 Tufte 的术语中) .80=2×4×10 of them. It uses the

图形几何(点标记线段)清楚地区分计算机 X(标记)和计算机 Y(线段)。符号的变化——点标记的形状和颜色——以及沿 x 轴的位置变化清楚地区分了程序。(使用形状可以确保即使在灰度渲染中也能保持差异,这很可能出现在印刷期刊中。)

这些程序似乎没有任何固有的顺序,因此按其代号“a”、...、“d”的字母顺序来呈现它们是没有意义的。这种自由已被利用来按计算机 X 所需的平均时间对结果进行排序。这种简单的更改不需要额外的复杂性或墨水,它揭示了一个有趣的模式:计算机 Y 上程序的相对时序与计算机上的相对时序不同计算机 X。尽管这可能具有或可能不具有统计意义,但该图形意外地表明了数据的一个特征。 就是我们希望一个好的图形能做到的。

通过使点标记足够大,它们几乎可以在视觉上融合到程序总可变性的图形表示中。(混合会丢失一些信息:我们看不到重叠发生的确切位置。这可以通过在水平方向稍微抖动点来解决,从而解决所有重叠。)

仅此图形就足以呈现数据。然而,通过使用相同的技术来比较从一次运行到另一次运行的时间,还有更多的发现。

“公平”剧情

这一次,水平位置将计算机 Y 与计算机 X 区分开来,主要是通过使用并排面板。(每个面板周围的轮廓已被删除,因为它们会干扰我们想要在整个绘图中进行的视觉比较。)在每个面板中,位置区分运行。与第一个情节完全一样——并使用相同的标记方案来区分程序——标记的形状和颜色各不相同。这有助于两个图之间的比较。

请注意两个面板之间标记图案的视觉对比:这具有数字表所不具备的即时性,必须仔细扫描才能意识到计算机 Y 的时序如此一致。

标记由微弱的虚线连接,以提供每个程序内的视觉连接。这些线条是多余的墨水,似乎不需要呈现数据,所以我怀疑 Tufte 教授会避开它们。但是,我发现它们可以作为有用的视觉指南来区分不同程序的标记几乎重叠的混乱。

同样,我假设运行是独立的,因此运行编号是没有意义的。我们可以再一次利用这一点:在每个面板中,分别按照四种算法的总时间对运行进行排序。(x 轴没有标记运行编号,因为这只会分散注意力。)在第一个图中,这个排序揭示了每次运行中四种算法的时间之间的几个有趣的相关模式。计算机 X 的大部分变化是由于算法“b”(红色方块)的变化。我们已经在第一张图中看到了这一点。然而,最差的总性能是由于算法“c”和“d”(分别为金色菱形和绿色三角形)的两次长时间运行,并且这些发生在相同的两次运行中。 有趣的是,程序“a”和“c”的异常值都发生在同一次运行中。这些观察结果可以揭示有关计算机 X 的程序时序变化的有用信息。它们是示例,因为这些图形显示了数据的细节(而不是像条形图或箱线图等总结),因此可以看到很多关于变化和相关性的信息—— -但我不需要在这里详细说明;你可以自己去探索。

我构建这些图形时没有考虑“故事”或“旋转”数据,因为我想先看看数据要表达什么。 这样的图形也许永远不会为《今日美国》的页面增光添彩,但由于它们能够通过实现快速、准确的视觉比较来揭示模式,他们是向科学或技术受众传达结果的好人选。(这并不是说它们没有缺陷:有一些明显的方法可以改进它们,包括一开始就抖动,并在两者中提供好的传说和明智的标签。)所以是的,我同意关注潜在观众很重要,但我不认为应该以倡导或强调特定观点为目的创建图形。

总之,我想提出这个建议。

  • 使用制图学和认知神经科学文献中的设计原则(例如,Alan MacEachren)来提高读者按照您的意图解释您的图形的机会,并且他们将能够从中得出诚实、公正的结论。

  • 使用统计图形文献中的设计原则(例如Ed TufteBill Cleveland)来创建信息丰富的数据演示文稿。

  • 尝试并发挥创造力。原则是制作统计图表的起点,但也可能被打破。了解您违反了哪些原则以及原因。

  • 以启示为目标,而不仅仅是总结。令人满意的图形清楚地揭示了数据中感兴趣的模式。出色的图形将揭示出乎意料的模式,并邀请我们进行事先可能没有想到的比较。它可能会促使我们提出新的问题和更多的问题。这就是我们增进理解的方式。

绘图让您可以讲述一个故事,以您希望读者解释您的结果的方式旋转数据。外卖信息是什么?你想在他们心中留下什么?确定该信息,然后考虑如何将其制成图形。

在你的情节中,我不知道我应该学习什么信息,而且你给了我太多的原始数据——我想要有效的总结,而不是数据本身。

对于情节 1,我会问,您想进行哪些比较?您拥有的图表说明了给定计算机的跨程序运行时间。听起来您想对给定程序的计算机进行比较。如果是这种情况,那么您希望计算机 x 上程序 a 的统计信息与计算机 y 上程序 a 的统计信息在同一个图中。我会将您的两个箱线图中的所有 8 个框放在同一个图中,按顺序排列 ax、ay、bx、...以方便您进行真正的比较。

情节 2 也是如此,但我觉得这个情节很奇怪。您基本上显示了您拥有的每个数据点——每次运行一个框,一次运行只有 4 个观察值。为什么不给我一个关于计算机 x 和一个计算机 y 的总运行时间的箱线图?

同样的“数据过多”批评也适用于您的最后一个情节。情节 3 没有向情节 2 添加任何新信息。如果我在情节 2 中将平均时间乘以 4,我可以获得总时间。在这里,您也可以为计算机 x 和 y 分别绘制一个框,但是这些从字面上看,将是我建议替换情节 2 的情节的倍数。

我同意@Andy W 的观点,即计算机 y 并不那么有趣,也许您只想说明这一点并将其从图中排除(尽管我认为我提出的建议可以帮助您缩小这些图)。然而,我不认为桌子是很好的选择。

你的情节对我来说似乎很好,如果你有空间限制,你可以将它们全部放在一个情节而不是三个单独的情节中(例如,使用par(mfrow=c(3,2))然后将它们输出到所有相同的设备)。

虽然没有太多要报告的内容Machine Y,但除了 program 之外,它实际上没有任何变化b我确实认为这些图表不仅可以了解运行时间有多长,Machine X还可以了解运行时间的变化程度。

如果这确实是您的用例,那么将所有数据放在一个表中的如此简单的数据足以证明机器之间的差异(尽管我相信如果您有足够的空间将这些图表放在文件)。