acm-header
登录

ACM通信

Kode恶性

策划了


工人面对显示

信贷:网卡McPhee

回到顶部

亲爱的KV,

我一直在处理一些生成大量数据集的代码,虽然我非常高兴地查看原始文本输出来找到模式,但我发现越来越多的情况下,我不得不向那些不愿意或不能理解原始格式的数据的人解释我的数据。我现在被要求为这些人生成摘要、报告和图表,你可以想象,他们是公司里控制资金的人,所以我也必须对他们友好。我知道这不是一个确切的编码问题,但当你必须把你非常了解的部分总结出来给像这样的人看时,你会怎么做?

如果不是短信……

亲爱的文字,

因为我经常给人的印象是那种硬派的、低级的、琐碎的家伙,我猜你会认为我的答案是告诉管理层,从你的描述来看,这些人肯定是管理层,他们喜欢用花哨的图表,嗯,做一些会在难以触及的地方割伤纸张的事情。虽然我很喜欢给出这样的建议,但事实是,能够将大型数据集从列和行的数字转换成更紧凑和更具有描述性的东西同样重要。关于这类建议的礼貌和文笔优美的版本,请参阅爱德华·塔夫特的经典著作,量化信息的可视化显示.下面是Kode Vicious Kwik可视化课程,请继续阅读。

虽然我同意能够看到一些令人难以置信的令人困惑的文本输出并能够找出你所寻找的针是很酷的,虽然我相信这让你的许多程序员朋友印象深刻,但这并不是一个能让你走得更远的技能。我还发现,那些不能理解单页结果图表中的价值的程序员,正是不应该允许他们自己编码的程序员。

人们应该把任何这样的问题当作科学实验来处理,而科学家知道如何用许多方法来表示他们的结果,包括在纸上画出结果。在你职业生涯的某个时刻,你必须弄清楚如何获得易于阅读的结果,以便你可以并排查看和比较。如果处理得当,数据图可以为您提供大量信息,并告诉您关于系统可能发生的情况的许多信息。如果做得好,请注意前面那句话中最重要的短语。与许多工具的情况一样,绘制数据图很容易误导您,就像它可以把您带到某处一样。

有很多工具可以用来绘制数据,我通常不会在这些回答中提倡使用特定的工具,但我可以说,如果你试图绘制数据很多对于超过32,767个元素的数据,明智的做法是使用gnuplot之类的东西。每次我看到有人试图使用某个供应商的电子表格来绘制超过32,767的数据集时,事情就会出错——我甚至可能会说,他们被那个特定的程序“搞砸了”。gnuplot的优点是,只要您有大量内存(而且内存现在很便宜),就可以绘制非常大的数据集。KV最近装备了一台24GB内存的机器,只是为了绘制一些重要的数据。我非常相信大内存是用来存储数据的,但不是用来存储程序的,但让我们先停止离题。

现在让我们浏览一下绘制数据时需要记住的要点。首先,如果您打算比较多个图,您的测量轴(您用来显示一个值的大小的轴)必须绝对保持不变,或者在您生成的整个图集中很容易进行比较。一个带有y-轴从0到10,另一个带ay-轴从0到5月25日相同,但它们的意思完全不同。如果要绘制的数据从0到25,那么所有的图形都应该从0到30运行。你为什么要浪费最后的时间?因为当你从一个大的数据集中生成数据时,你可能会遗漏一些东西,可能是一个疯狂的异常值,达到60,但只在每1000个样本中。如果你一开始就把坐标轴的界限设置得太紧,那么你可能永远都找不到这些异常值,你会做很多工作来说服你自己和其他看到你漂亮的小图的人,这真的没有问题,而实际上它就在你的鼻子底下,或者更准确地说,就在你的图形的极限上面。

既然您提到要绘制大型数据集,那么我假定您指的是超过10万个点。我经常绘制出数百万个独立点的数据。当您第一次绘制数据时,重要的不仅仅是获得y-轴的限制是正确的,但也要尽可能多地绘制数据,考虑到所绘制数据的系统的限制。如果过分减少数据,就不容易看到一些问题或影响。将数据集减少90%(每10个样本查看一次),你可能会错过一些微妙但重要的东西。如果你的数据不能一下子全部装进主存,那就把它分成几块x设在。如果你有100万个样本,每次画出10万个,把它们打印出来,粘在一起。是的,这是一种快速粗暴的解决方法,但它很有效,相信我。

当您想要在同一个图上直接比较两个数据集时,会出现另一个问题。也许您有几天的数据,您想要查看周三和周四的比较情况,但是您没有足够的内存来同时绘制这两天的图,一次只能绘制一天的图。你可以请求你的IT部门给你更多的内存,或者,如果你有螺丝刀,从同事那里“借”一些内存,但如果你有一个窗口,这些措施就没有必要了。打印两个数据集,确保两个轴对齐,然后将页面对准窗口。哦,当我说“窗户”的时候,我指的是那种能让天空中那个明亮的黄色球体的光进入你办公室的窗户,而不是那种由你的电脑产生的窗户。

到目前为止,我还没有提到x-轴,但我们现在补救一下。如果你要绘制随时间变化的数据,那么你的x-轴实际上是时间轴。那些将其称为“样本”,然后进行各种内部心理转换的程序员是一群完全被误导的人。虽然你可能知道你的样本是在1KHz下采集的,因此每1000个样本是一秒,而360,000个样本是一小时,大多数看到你绘图的人不会知道这一点,即使你巧妙地标记了你的x设在“1 khz。”如果你在计划什么对抗时间,那么你的x-轴应该是时间。

当对长时间运行的数据(例如一个完整的工作日)进行绘图时,这个建议更加重要。事实证明,计算机是人类的奴隶,虽然许多人预测计算机在24小时内所做的工作将远比人类所做的工作更稳定,但所有这些人都大错特错了,而且将继续如此。如果你绘制一天的数据,那么你很有可能会看到人们在起床、上班、吃饭、回家和睡觉时的变化。对你来说,每天下午4点都会发生一些事情,这可能是至关重要的也许你在英国的系统记录的是人们喝茶的时间,而不是系统中奇怪的减速。您正在监视的系统可能没有得到充分利用,因为运茶车刚到!如果你的绘图有时间,那么就用时间作为轴。

在我结束的时候,您可能已经注意到,我没有提到颜色、字体、字体大小或任何与图表在纸上的外观有关的内容。我没有把这些因素排除在外,因为我是个十足的书呆子,自己的任何衣服都配不上。我很容易搭配衣服,因为黑色什么都搭。我见过的大多数生成图表的人都花了太多的时间来选择颜色或字体。接受默认值;只要确保图表上的线一致地代表你的数据。在正确绘制数据之前选择图形颜色或文本字体就像花几个小时在IDE中修改代码以突出显示颜色,而不是进行实际的编码工作。这是浪费时间。现在,回去工作吧。

KV

ACM队列的q戳相关文章
queue.acm.org

代码山洞探险回来的
乔治诉Neville-Neil
http://queue.acm.org/detail.cfm?id=1483108

使用HDF5统一生物图像格式
Matthew T. Dougherty, Michael J. Folk, Erez Zadok, Herbert J. Bernstein, Frances C. Bernstein, Kevin W. Eliceiri, Werner Benger, Christoph Best
http://queue.acm.org/detail.cfm?id=1628215

与Jeff Heer、Martin Wattenberg和Fernanda的对话Viégas
http://queue.acm.org/detail.cfm?id=1744741

回到顶部

作者

乔治诉Neville-Neilkv@acm.org)是内维尔-尼尔咨询公司(Neville-Neil Consulting)的业主,也是ACM队列编辑委员会。他从事网络和操作系统的代码编写工作,从中获得乐趣和利润,教授各种与编程相关的课程,并鼓励您发表与他有关的评论、妙语和代码片段通信列。

回到顶部

脚注

DOI: http://doi.acm.org/10.1145/1743546.1743561


版权归作者所有。

数字图书馆是由计算机协会出版的。版权所有©2010 ACM有限公司


没有发现记录

登录为完全访问
»忘记密码? *创建ACM Web帐户
文章内容:
Baidu
map