数据展示

数据展示,用图表说话

252010
假回国,办完一堆事情,回家躲在小村子里悠哉悠哉,无丝竹之乱耳,无案牍之劳形,谈笑木有鸿儒,往来全是白丁注1。那古人云“春困秋乏夏打盹,冬日漫漫睡不醒”。本小子虽然贪睡,但在闭关写书这件事情上不含糊。其实与其说在写,不如说在复制,因为以前已经用纯LaTeX写了很多内容,后来看到pgfSweave包和LyX之后,觉得纯LaTeX太麻烦了,于是把原来的内容都复制到LyX中接着写。到从村子里出关时,R的基础图形(graphics包)已经全部写完,包括常见的底层作图函数和几乎所有高层作图函数。

后来回到有网络的世界,git push一下,就同步上网了,供各位客官公开下载(见于本站“作品”页面)。过了一阵子,领导的领导们看见了,觉得这样做有点不靠谱。再过了一阵子,又有好几个人建议我不要放出来公开下载。我呢,也绝非来自石器时代、对“世风日下人心不古”一无所知,佛曰“我不下地狱那哪个来下地狱呢?”佛敢下地狱,那是因为他是佛,是佛又咋地?佛有核心竞争力啊。现在这个忙碌年代,我们(别人)想尽办法折腾别人(我们),折腾的途径就是评价。网站不看内容要看备案,活人不看要看KPI,百姓生活不看要看GDP……而混学界的人就得靠著作来评价,于是使出浑身解数去发表,自己努力也好,坑蒙拐骗也好。我这样赤果果把作品放在网上供任何人下载,说出来真是一件很恐怖的事情,娘亲呐,多少豺狼虎豹盯着呢。

本来想继续扯到李一、马云等人,似乎有点扯远了,我是在想像马云这样伟大的宗教领袖式人物为何需要道教思想的支撑。俺们这个时代的人,真的越来越没底气了?打住打住。

最后我接受了腾飞的意见,把原本公开的书稿撤下来了。倒不是怕盗版抄袭,主要是一本不完整的书稿,对读者似乎不是一件好事,等正式完成之后,再集中发给大家提意见,这样效用会大一些;再想一想,出版之前公开下载也会对出版社带来一些麻烦,于是撤销下载。当然,目前我仍然内部开放书稿,我熟悉放心的人以及答应我在COS论坛帮别人回答图形方面100帖的人(鼓励为别人做贡献的人),皆可获得我的书稿。这本书的目录部分可以公开浏览:

《现代统计图形》目录下载(PDF)

各位客官若有任何建议,请随时与我联系,我会在完稿前尽量多采纳读者的意见。

—————————————
注1:平民老百姓。

192010

上和其他两位评委Simon Urbanek以及Hadley Wickham进行了电话会议,我们将今年的Chambers奖授给Michael J. Kane和他的bigmemory包(剧透了剧透了)。通过看今年提交的参赛作品,我觉得拿下这个奖的困难并没有想象中那么大,国内的客官们努力努力,也是很有希望获奖的(比如我相信精于C++的颜大站长能独立写出bigmemory包的概率大于95%)。此前在COS论坛上呼吁大家踊跃参加,估计大家都觉得这是天方夜谭,明年我以95%的概率不会做评委了,不过这评奖过程给我几点感想可供后来人借鉴:

  1. 严格按照主办方的规则行事。主办方的评奖规则中怎么写,我们就对照这一条一条规则检查自己的作品是否都符合了要求。比如Chambers奖的规则描述是:
  2. The entries will be judged on a variety of dimensions, including the importance and relevance for statistical practice of the tasks performed by the software, ease of use, clarity of description, elegance and availability for use by the statistical community. Preference will be given to those entries that are grounded in software design rather than calculation.

    最终评委的评分规则便根据三原则来:重要程度和与统计学的相关程度(多数作品都有很大的专业局限性,仅仅在自己的领域里针对某一特定模型写了软件包,不够通用,我也看不懂什么生物名词或天体物理名词)、创新和软件设计(想法是否足够新颖,没人做过当然最好,有人做过则要想想如何与众不同)、易用性和文档是否清楚(如果参赛者能多提供一些例子则会让评委更快了解你的软件,可以是录像、在线演示或动画、图形)。

  3. 关于这些原则,如果参赛者能站在评委角度来考虑,肯定能为自己挣得不少分。也许有些作者软件写得很精妙,但缺少恰当的表现形式,所以就可能被埋没。记得有一位参赛者把自己三百多页的博士论文都发来了,满篇数学公式,想想如果自己是评委,看一篇博士论文的概率是多大呢?
  4. 再回头看本小子去年的申请,估计很大程度上得益于本小子的动画网站,以及每个动画函数下都有例子展示,评委不用动脑子去仔细研究函数的每一个参数怎么用,只需要端着咖啡看演示就可以了。另外,本小子处心积虑套用了John Chambers那句名言“To turn ideas into software, quickly and faithfully”(我把software换成了animations),这主要是为了体现软件包与统计学思想的联系,另一方面,一眼看去这和竞赛的主题切合得甚为紧密。

  5. 包装很重要。由此又不得不说LaTeX与Word……呃,各位把本小子看作技术愤青的大人们,这真的不是技术问题,除非是Word高手,普通人用Word做出来的任何文档的排版质量跟LaTeX一比,评论只有两个字:垃圾。没得商量。LaTeX生产出来的论文,即使内容连垃圾都不如,其形式看起来也是正儿八经能唬住人的。拿着Word写的灰头土脸的PDF文档交上来,首先给人印象就是这童鞋以95%的概率不是高手,否则怎么连LaTeX都不会用呢。
  6. 去年我在申请的时候还没接触到LyX,所以老老实实写LaTeX源代码然后老老实实编译,而且用的是和R News文章一样的字体(这也是评委之一Hadley常用的字体),呈上去给大佬们一看,嘿,眼熟,我看这小子和R有一定关系。

最后,这获奖者比其他选手还占一点优势,就是他在去年的JSM大会上做过Data Expo的poster,硕大的宣传板,我们三人都在那里看过,回头一想,脸熟啊。这一点呢,也和我去年类似,三位评委我见过两位,一位七分熟,一位三分熟(你煎牛排呢?),剩下一位未曾近距离接触,但我曾给他的一本书提过一处勘误。所以混圈子也是有用的。

这些不是告诉各位客官可以不劳而获或投机取巧,世上没那么多好事,而是用一个例子说明怎样小心地铺路,把自己能控制的因素都一步步做到最佳状态,剩下的事,或水到则渠成,或听天而由命……理想情况下,呔!手起刀落,砍他个人仰马翻。

272009

华网关于学生冬季长跑的调查结果让人着实跌眼镜,一共调查了100人,报告中的结果都是xx.xx%形式的,例如“92.79%的学生认为强健了自己的身体”。这0.79个人是怎么来的?

咱们学统计的,应该对数字有一定的敏感性,比如当你看到小数位中含有667这样的数字(e.g. 0.291667)时就应该警觉:对方是否给出了样本量?如果没给的话,你就应该怀疑这个数字本来是0.29166666……如果你不知道这个比例是怎么来的,那么就拿一些整数去乘这个比例,看看哪个数字乘以这个比例能得到整数。最终你发现是24的倍数,样本量是7的倍数。然后你再想,7/24、14/48、28/96、……这一系列数字哪对更符合这个调查的背景。如:若你怀疑调查者很懒,那么不妨猜测他/她就调查了24个人。

以上只不过是低级的数字游戏,对统计来说根本没派上用场,现在很多人都琢磨着怎么建个模型整个P值去忽悠答辩委员会,而事实往往是,费尽千般心思,辛辛苦苦调查来的数据在建模之后根本没法用,要么系数是反的,要么不显著,或者有自相关,或有异方差,总之和初衷很不符,此时,离答辩往往只剩下几个星期,怎么办呢?只好眼睛一闭心一横,改数据吧!怎么改呢……【此处省略八千字】最后,王子和公主们过上了幸福生活。

我一般不相信经济学论文中的统计模型,原因之一就是数据。

202009

几天又看了一遍Processing的教程和示例,并且把作者Ben Fry的一本书”Visualizing Data”找来看了看,最终的结论是:Processing适合艺术设计人员使用,但并不适合数据分析人员使用。

Visualizing Data一书中基本上以几个编程的例子为主线,从统计的角度来说,评价只能是Just-so-so;与Cleveland (1993)的同名书比起来在统计上的价值差距甚远。不过,Processing的最初目标本来也不在统计,而在于使得编程变得有趣,不可否认,用Processing写代码的确很有趣,而且设计出来的作品可以惊人地绚丽。

202009

天上课老杜说饼图是那位提灯女士发明的,事实上这种说法并不确切;不过很不幸,好像有很多人都说饼图是南丁格尔发明的。

历史记录最早的饼图是在William Playfair的著作中,关于这一点,我在我的书中第一章就说明了。南丁格尔的妙处在于把条形图以饼图的外观表现出来了:将一年12个月分散在圆的1/12扇形上,扇形的半径长度与统计数值成正比。乍一看像饼图,实质上是条形图(传说中的玫瑰图)。

老杜拿着Spine plot就可以忽悠中铝的老总(估计老杜自己并不知道自己用的是Spine plot),看来我可以去忽悠小胡了。

十一 042008

天大致浏览了一下Google可视化API,说实话现在Google在可视化方面开发的库还太贫乏了,寥寥几种可视化方法,对统计数据展示来说还相当不够用。下面我用它的MotionChart库结合R的正态随机数做了一个布朗运动展示,这个展示比我的animation包中那个布朗运动要更平滑,这也一直是我想达到的目的。

由于涉及到繁重的加载数据过程,所以JavaScript运行起来会很慢,使用IE的客官耐心等待20秒至半分钟左右(Firefox比较快)。以下是示例代码:

    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load("visualization", "1", {packages:["motionchart"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = new google.visualization.DataTable();
        data.addRows(750);
        data.addColumn('string', 'point');
        data.addColumn('number', 'year');
        data.addColumn('number', 'X');
        data.addColumn('number', 'Y');
        data.setValue(0, 0, "01");
        data.setValue(0, 1, 1901);
        data.setValue(0, 2, 1.24);
        data.setValue(0, 3, -0.37);
        data.setValue(1, 0, "02");
        data.setValue(1, 1, 1901);
        data.setValue(1, 2, 0.12);
        data.setValue(1, 3, 0.48);
        data.setValue(2, 0, "03");
        data.setValue(2, 1, 1901);
        data.setValue(2, 2, -1.5);
        data.setValue(2, 3, -1.21);
        ....
        data.setValue(748, 0, "14");
        data.setValue(748, 1, 1950);
        data.setValue(748, 2, 1.73);
        data.setValue(748, 3, -2.24);
        data.setValue(749, 0, "15");
        data.setValue(749, 1, 1950);
        data.setValue(749, 2, 2.38);
        data.setValue(749, 3, 16.65);
        var chart = new google.visualization.MotionChart(document.getElementById('chart_div'));
        chart.draw(data, {width: 600, height: 500});", "      }
    </script>

    <div id="chart_div" style="width: 600px; height: 500px;"></div>

点击这里在新窗口观看Flash动画

话说今日有一印度小经理给我发个邮件,让我LaTeX排版给他开个价,我晕,从哪儿看见我是干这行的了?

022008

我所知,历史上“大家来找茬”游戏中应该从来没有过找统计数据的茬的事件(不过国外曾经有类似的事情),老夫再此开一个先例,数据如下:

文件下载链接

一共20000条数据,2个变量,看看这数据有啥特别之处呢?走过路过,千万不要错过。 大约一周后公布答案。

注:答对有奖。于北京市各大商场超市领奖,领奖办法:任意商品均为奖品,拿了就使劲跑。

—————————————我是答案分割线—————————————

事实的真相是:这20000行数据中,有10000行是正态分布随机数,另10000行是在一个半径为0.5的圆上。为了揭露其邪恶本质,特提供如下五种办法:

http://yihui.name/en/2008/09/to-see-a-circle-in-a-pile-of-sand/

欢迎大家继续提供解决方案。

Density surface of 2D variables from Yihui Xie on Vimeo.

WWW.YIHUI.NAME XIE@YIHUI.NAME © 2007 - 2010 by Yihui Xie