星期六, 四月 28, 2012

广而告之

本博客使用的图床(http://thumbsnap.com/)被墙,导致RSS订阅用户无法看到图。先暂时只能够翻墙访问了。如果有好的图床请给我留言。

用RGL包绘制三维交互式图形

R语言中的rgl包是绘制三维图形的利器。在最新版本中,该包增加了一个writeWebGL函数,可以将三维图形转化为一个包含WebGL元素的网页文件。WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了。

下面的第一张图是静态图,是用一个二元函数绘制的心形图。第二张图是用来表现二元回归时散点与回归平面之间的关系,如果你的浏览器支持WebGL(如果可以打开这个图形,则表明支持),即可拖动鼠标以旋转图形。这种交互式图形相信在教学中会起到很好的辅助作用。

星期五, 四月 27, 2012

关于大数据的十个预言


1 将有更多的大数据人才进入市场
随着技术门槛的降低,将会有更多的人才可以用于大数据平台的管理。

2 企业级的Hadoop部署将迅速扩大
世界各地的大量行业用户已经开始积极投资于Hadoop分析技术,并准备在来年将其Hadoop计算集群上线。在2012年,随着新数据源的产生和新的业务分析的需要,部署集群的规模会增长至少十倍。

3 数据分析供应商将开始进军大数据
很少有厂商为大数据提供了一个综合全面的框架和蓝图,大部分厂商将只提供单项的解决方案,但那也很不错。在第一波的大数据浪潮中,不会出现大数据的综合解决方案。工具集的组合将取决于各个厂商。

星期六, 四月 21, 2012

用plyr包扩展apply族函数的功能

apply族函数是R语言中很有特色的一类函数,包括了apply、sapply、lapply、tapply、aggregate等等。在这篇博文里对它们进行了简略的说明。这一类函数本质上是将数据进行分割、计算和整合。它们在数据分析的各个阶段都有很好的用处。例如在数据准备阶段,我们可以按某个标准将数据分组,然后获得各组的统计描述。或是在建模阶段,为不同组的数据建立模型并比较建模结果。apply族函数与Google提出的mapreduce策略有着一致的思路。因为mapreduce的思路也是将数据进行分割、计算和整合。只不过它是将分割后的数据分发给多个处理核心进行运算。如果你熟悉了apply族函数,那么将数据转为并行运算是轻而易举的事情。plyr包则可看作是apply族函数的扩展,使之更容易运用,功能更为强大。

plyr包的主函数是**ply形式的,其中首字母可以是(d、l、a),第二个字母可以是 (d、l、a、_),不同的字母表示不同的数据格式,d表示数据框格式,l表示列表,a表示数组,_则表示没有输出。第一个字母表示输入的待处理的数据格式,第二个字母表示输出的数据格式。例如ddply函数,即表示输入一个数据框,输出也是一个数据框。

星期三, 四月 18, 2012

30个免费数据资源网站


人们都喜欢听故事而不是看数字和公式,数据可视化可能是讲故事的终级神器。但这里有个前提条件,你首先得拥有数据。获取可靠的数据涉及到多个步骤,找到数据、整理清洁数据、转换为合适的格式等等。数据准备往往是数据分析工作中非常让人头疼的方面。随着全世界对数据资源的重视,现在有很多新的公开数据源可供研究者使用。下面就是visual.ly归纳的三十个免费的数据资源网站。本文进行了翻译和补充。


1 政府数据
  • Data.gov:这是美国政府收集的数据资源。声称有多达40万个数据集,包括了原始数据和地理空间格式数据。使用这些数据集需要注意的是:你要进行必要的清理工作,因为许多数据是字符型的或是有缺失值。
  • Socrata它是探索政府相数据的另一个好地方。Socrata的一个了不起的地方是,他们有不错的可视化工具,使研究数据更为容易。
  • 一些城市都有自己的数据门户网站设置,可供访问者浏览城市的相关数据。例如,在旧金山数据网站,你可以获得很多数据,从犯罪统计到城市的停车位。
  • 联合国有关网站,例如世界卫生组织提供了丰富的数据资源,从死亡率到世界饥饿统计数字。
  • 美国人口普查局也有相当多的生活数据,例如收入、种族、教育、人口和商业信息。

星期六, 四月 14, 2012

基于OpenStreetMap的地理信息绘图

开放街道地图(OpenStreetMap,简称OSM)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。OSM可以根据用户的手持GPS装置、航空摄影照片、卫星影像、其他自由内容甚至单靠用户对目标区域的知识绘制。OSM网站的灵感来自维基百科等网站。这可从该网地图页的“编辑”按钮及其完整修订历史获知。经注册的用户可上载GPS路径及使用内置的编辑程式编辑数据。2010年海地大地震中,OpenStreetMap极大地提高了地面搜救小队的工作效率。这个地图以GeoEye等公司提供的最新卫星照片为基础,又加入了很多新资料,工作人员和志愿者可以随时用随身的电脑或手机在地图上即时标注救护站、帐篷和倒塌的大桥。2012年4月,继苹果和Foursquare相继放弃使用谷歌地图后,维基百科也放弃使用谷歌地图,转向使用OpenStreetMap。

本例结合OpenStreetMap包、XLM包和ggplot2包来介绍如何整合地图资料和其它数据。我们的任务是将中国城区人口最多的前十位城市标注在地图上。基本步骤如下:
  • 从wikipedia上抓取城市人口资料;
  • 利用Google API获得十个城市的经纬度;
  • 根据上面两类数据渲染得到地图如下(点击可看大图),圆的大小显示了城市居民数的多寡。

星期四, 四月 12, 2012

在R语言中使用正则表达式


有时候我们要处理的是非结构化的数据,例如网页或是电邮资料,那么就需要用R来抓取所需的字符串,整理为进一步处理的数据形式。R语言中有一整套可以用来处理字符的函数,在之前的博文中已经有所涉及。但真正的要用好字符处理函数,则不得不用到正则表达式。正则表达式(Regular Expression、regexp)是指一种用来描述一定数量文本的模式。熟练掌握正则表达式能使你随心所欲的操作文本来达成目标。其实学习正则表达式并没有想像中的那么困难。最好方法是从例子开始,然后多练习,多使用。网络上已经有许多不错的参考资料,例如这篇那篇。本文假设你对正则表达式有了基本的了解,下面我们来看看如何在R里面来使用它。

星期二, 四月 10, 2012

在R中模拟存储问题


本例来自于《统计模型及其R实现》的例题,但是书上的条件和代码都有些缺漏,所以仍值得在这里说道说道。存储模型是很经典的统计模拟问题,即考虑一个出售某种商品的商店,其销售单价为12元,单位成本为5元。顾客数服从参数为8的Poisson分布,且每个顾客的需求量是一个离散随机变量。店主必须储存一定的商品,当库存不足时,店主就会从发货商处得到补充。使用的订货策略即(s,S)策略,若当前库存x小于s时,则将存货补充到S,即购买S-x个单位商品。每次进货成本为10元,进货延迟时间为2天,单位时间内库存一个商品的成本是0.5元,若需求量大于当前存货,则发生损失。考虑30天之内的时间长度,店主能够决策的变量即是再订货点s和订货数量S。总成本包括了订货成本、存储成本和损失费用,要考虑如何决定这两个变量值,才能使平均收入(总收入除以30天)达到最大?

星期一, 四月 09, 2012

一个简单的狼兔追逐问题


四月八日,也就是春分月圆之后的首个星期日即是复活节(Easter)。而复活节兔是复活节象征之一。作为多产动物的兔子,象征了春天的复苏和新生命的诞生。此外,兔子是爱神阿弗洛狄特的宠物,也是日耳曼土地女神霍尔塔的持烛引路者。今天我们就来谈一个关于兔子的问题。狼兔追逐问题是欧洲文艺复兴时代达芬奇提出的一个数学问题。题目描述如下:一只兔子在O点外,其洞穴在正北20米的B处,一只狼位于兔子正东33米的A处。当两只动物同时发现对方以后,兔子奔向自己的洞穴,狼以快于兔子一倍的速度紧追兔子不放。狼在追赶过程中所形成的轨迹就是追击曲线。狼是否会在兔子跑回洞穴之前追赶上兔子?

这个问题也是《统计模拟及其R实现》一书后面的一个习题。我们先建立一个函数,参数为二者运动速度之比v,一个微小的位移delta_T,以及狼可以捕获兔子的最短距离eps。基本思路是先画出初始位置,然后用两个矩阵来存放二者的坐标。然后利用一个for循环来不断更新坐标数据。d为二者之间的距离,如果在循环结束时,d小于eps则意味着狼抓住了兔子,否则就是失败。函数会画出追击曲线,并根据情况返回逻辑值。如果抓住返回真值,并获得抓住点坐标。如果失败返回假值,并获得二者最后的距离。实际从结果来看,狼未能在兔子跑回洞穴之前追赶上兔子。但你可以试着将v值设置的大一些,大约在2.3左右,狼就可以成功追上兔子了。

星期六, 四月 07, 2012

什么样的人能逃离泰坦尼克号?

1912年4月15日,英国皇家邮轮泰坦尼克号(RMS Titanic)在北大西洋撞上冰山沉没,1500多名乘客遇难,成为和平时期死亡人数最多的海难之一。这个沉船故事不断地为作家、电影制作人和歌曲作者提供创作灵感。1997年末,大导演詹姆斯·卡梅隆耗资2.5亿美元打造的《泰坦尼克号》在全球各地掀起观影狂潮,影片运用最先进的数字技术在银幕上逼真还原了泰坦尼克号沉没的全过程,搭配上男女主人公杰克与露丝生死不渝的伟大爱情,令无数观众如痴如醉,狂揽18亿美元的全球票房,成为影史至尊。2012年4月,在泰坦尼克号沉船事件百年之际,全新打造的3D《泰坦尼克号》将在全球各地重映。

当时搭乘泰坦尼克号的乘客都留下了详细的资料,本文试图利用这个资料来建立各种图表,以回答这样一个问题:在当时什么样的人存活率最高?涉及的数据集中包括了四个变量:是否获救Survived,所在舱Class,年龄Age,性别Sex。我们首先从网络上读取数据文件,进行简单的统计描述。

Class   Age   Sex Survived
Crew:885   Adult:2092   Female:470   No:1490
First:325   Child:109   Male:1731   Yes:711
Second:285
Third:706




星期四, 四月 05, 2012

大数据分析的四类陷阱


高科技领域的人们正摩拳擦掌以迎接大数据(Big Data)时代的到来。大数据技术的本质是能够对数十亿的信息进行分析,从中获得有价值的洞见。例如惠普的研究人员就能根据Twitter来预测好莱坞的票房。由此看来,其它行业只要具备合适的工具,就能对社会网络进行数据分析。但是事情并非如此简单。首先,分析大数据集并不是什么新鲜事。有些公司已经做了几十年的数据分析。当前技术的不同之处在于,它提升了分析的速度,扩展了数据规模,使小型企业也能使用这种技术。而另一方面,大数据也会造成更严重的错误。针对上例,普林斯顿大学就得出了不同的研究结论:Twitter并不能真的预测票房成绩。

对同一个问题,研究者怎么会得出相反的结论呢?我们来看一下数据分析中最常见的四类陷阱。

星期日, 四月 01, 2012

清明时节说死刑

死刑是自人类社会发展以来就诞生的一种剥夺人生命的刑罚。死刑除了是对于不守规则的事件的惩罚外,也是对破坏规则的情况的一种极重度的威吓。这个史前就已有的制度,是对进行不容于社会的行为的严厉惩罚之一。世界上几乎每一个国家或地区都曾有过“死刑”这种刑罚制度,时至今日,仍有一些国家继续存有并继续执行死刑。然而多数国家已经废止了死刑,有些国家则是已经10年以上未执行过死刑,或是仅允许在战时使用死刑。

在最近卫报的一则文章中,根据从2007到2011年的死刑数据进行了一些可视化工作。特别是根据大赦国际最近公布的一份报告,给出了一份死刑执行情况的气泡地图。形象的说明了当今世界上还有哪些国家在判决与执行死刑。本文则是照猫画虎,以说明R语言中googleVis包ggplot2包的使用方法。