让R与Python共舞185cm的自然卷 » 车东's shared items in Google Reader
Shared by JunChen
R很牛逼的。

R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现工具。通俗点说,R是用来做统计和画图的。R拥有自己的脚本语言和大量的统计、图形库(得益于开源社区),这让她看起来既美又实用。与其他同类软件(如SPSS)相比,R的特点是纯命令行的,这倒也好,我们更应该把注意力放在数据本身,而非统计工具的UI。

R虽说有一套自己的语言,还挺完备,但她最专业的还是做统计和画图,而像连接数据库、文本处理、文件操作等这些脏活可不能委屈R来干哪,这些得有其他语言来负责,我的选择是咱最熟悉的、做这些脏活最棒的Python。那接下来的问题很清楚了,R和Python如何一起工作?拍拍脑袋,想到可能有下面几种办法:

1. R和Python只共享文件,Python把源数据处理干净,生成格式化的文件放在预定的目录下,做个定时器让R去读文件,最终输出统计结果和图表。
    这种做法一定程度上可行,除了做定时器外,还可以让Python即时执行"rscript"命令调用R脚本来工作,只是这种办法限制太大,只能够交换文件,Python不能对R进行精确的控制。

2. 让Python直接调用R的函数,R是开源项目,肯定会有一些第三方库实现Python与R互通。
    果然,我找到了rpy2,可以实现使用python读取R的对象、调用R的方法以及Python与R数据结构转换等。实际上除了Python,其他语言与R互通的第三方包也大大的有。

最后我选择第2种方法,来让R与Python共舞。

模块 rpy2.robjects 是rpy2对R的一个高级封装,该模块里包含了一个r对象和一系列的R数据结构。使用rpy2的大多数情况,只需要跟这个模块打交道即可。rpy2的安装在此不多讲了,有兴趣的同学看文档去,直接体验一下R如何与Python无缝整合吧。

了解r实例

r实例是指rpy2.robjects.r,它是在Python中的嵌入式R进程,把r当作从python走向R的通道来看就可以了。通过r实例,我们可以读取R的内置变量、调用R的函数、甚至,直接把它当作R的解析器来用。

访问R的对象

在R的命令行中,我们直接输入对象名来访问R的内置对象,如pi、letters:
在R控制台中访问R对象
access r objects
而使用r实例,python访问R对象也很简单,而且方法很多:
在python中访问R对象
access r object in python
在这段代码中,我们用了三种方式来访问R对象,把r实例当作字典,把r实例当作方法,把r实例当作一个类对象(真是神喻呀~)。在实际中,使用哪一种方式要因习惯而异,我喜欢的方法是使用第三种,把r实例当作自己人,直接使用"."来访问R对象。但这种方法有一个缺陷,就是不能访问带名字空间的R对象或函数,而其他两种方式是可以的,这点将在随后说明。

调用R函数

通过r实例,我们可以轻易地实现用Python调用R的函数。下面我们分别在R控制台和python命令行下读一个数据文件并画一张点图。
R控制台读取文件画点图
dotchart
代码解读:
data.csv 的内容就是上面代码的3到7的内容。
data = read.table('data.csv') :把文件读进一个数据框变量data中。
mtx = data.matrix(data):把data转变成矩阵。
dotchart(mtx)用矩阵的数据画点图。
结果如下:
dotchart
接下来用python来做一遍同样的事情,我们之前了解到,使用r实例可以直接访问R对象,还可以直接调用R的函数,其实在Python看来,对象和函数是相同的东西,函数也是一种对象罢了。现在来试一下调用"read.table()"函数读入一个数据文件data.csv:
read_error
出错了!怎么回事?在上面我提到过了,使用“.”引用的方式不能访问带有名字空间的R对象和函数,read.table 是表示在read包下面的table函数,通过"."的形式调用失败,必须要用字典的方式或参数的方式来获得:
dotchart in python
这段代码得到的结果与在R控制台下画点图的效果是一样的。最后一行r.dotchart(mtx)是直接通过"."来调用R的函数dotchart的,在没有名实空间的情况下,是正常的。如果你为了避免太多不可控制的出错机会,你可以统一地使用字典的方式来访问R对象和方法,这是最保险的方法,虽然我个人认为看起来有点别扭。

r实例就是一R控制台

其实r实例就是一个可交互的R控制台,只不过交互对象是Python与R罢了,为了证明r实例具有R控制台的特性,来做个实验,写一串R脚本,作为Python一个字符串变量的内容,把该字符串传给r实例,然后把r实例当作方法来调用:

console

出来的结果这样:

plot

注意,把r实例当作控制台,只能够通过r(r代码)的方式来使用r实例,字典的方式行不通。

加载自定义函数

在实际应用中,使用R语言来编写自己的函数同样是不可避免的,在R控制台中,可以使用source('script_path')的方法来加载自定义R脚本。而在Python中使用自己义R脚本中的函数也同样方便:使用r.source('script_path')即可把自定义函数加载到全局环境中,再使用r.自定义方法名就可以实现调用,我就是这样做的,在此不再详述,同学们自己动手玩一下。

R Vector与Python list

向量(Vector)是R的一个最重要的也是最常用的数据类型,可以理解为一个二维数据,对应Python的list。在R控制台中,声明一个变量:“x <- 1”,X会被声明成一个向量,而其第一个值是1。R常常用c()函数来声创建一个由多个值组成的向量,例如c(1,2,3,4)。Python要与R打交道,除了访问R对象和调用R函数,还有就是要学会如何转换常见的数据类型。

rpy2提供了几个类,供我们把Python的list转换成R的Vector。分别是robjects.IntVector,robjects.Boolvector,robjects.StringVector,robjects.FloatVector.以IntVector为例,将Python的list转换成R的Vector:robjects.IntVector([1,2,3,4,5]),毕!

下面来使用刚学到的类型转换知识画上一个例子的散点图来结束此次体验:

list 

没有结束

rpy2提供的不仅仅是上面这些,上面的知识只是rpy2所提供的20%,但是已经足以解决80%的问题。rpy2还提供了更低级的API,你可以做更多的事情,例如你可以实现另一个robjects对象来支持使用"."来访问带名字空间的对象和函数。更多的知识,请移步官方文档

=======================来自185cm的自然卷=======================

185cm's 自然卷,关于黑莓手机、apple、twitter、互联网、web2.0以及生活的碎言碎语。请在twitter上 follow我,欢迎同好者talk to me bbmyth AT gmail.com。博客Hosting在 webfaction。wee bfaction,比你想像中要聪明的虚拟主机,中文网站请点击:
webfaction中国

16:35 年终特稿:前瞻2020社会化媒体趋势 » 大学小容@善用网络

这是09年底应FACE杂志的约稿写的文章,前几天家人收到了从北京邮寄来的杂志,扫描了文章,发邮件给我。

下面是原文的全文,与发表出来的有些许不同。实际原始稿件更长,限于篇幅已经删减了许多。

前瞻2020新媒体观:
迈向激情与科技交织的混合媒体年代

刚刚过去的世代,当网络技术与资本运作交织,网络文化与社会运动也渐趋繁荣。那么,在一个新世代的起跑线上,让我们展望下一个十年网络媒体的全景。

网络媒体与通常的大众媒体相比在五方面呈现出显著的差异。首先,就网络媒体而言,用户即是消费者也是生产者;其次,在内容方面,网络媒体呈现公共内容、群体内容和私有内容的分野,并伴随着品质上良莠不齐的长尾分布特征;其三;在品牌方面,网络媒体创建品牌的速度比传统媒体更快;其四,与传统媒体相比,网络媒体在创建社区方面天然具有优势;其五,在网络上,个性化的相关性广告正在崛起。

如果以十年的时间跨度来观察,这些显著的差异将会继续放大,并在某个时间点达到从量变到质变的临界点,催生新的动向和风潮,引领网络媒体迈向新的纪元。从量变到质变的轨迹将在如下三个方向演进: You世代用户的群体规模更大,网络技术继续日新月异,自由平等分享的互联网文化继续普及。

趋势一:
激情驱动的内容创造

人类的激情天性,将给下一个十年的内容创造领域带来革新驱动力。

传统媒体由专业工作者生产内容的模式,在网络上已经显得落伍。未来的网络媒体,在公共内容、群体内容和私有内容的层次架构中,将呈现业余、专业余和正业余的内容创造模式,商业力量、个人品牌力量和社会正义力量等交织在一起,展现出多层次的内容创造生态。

因为激情,人们会在业余时间分享自我,探索兴趣和知识,经过演练和交互,逐渐从业余选手发展到陛美专业选手的素质;因为激情,正式职业的专业选手,会在业余时间,通过网络共享专业技能到公共领域,原本由商业机构垄断的个人才华,将释放到更广阔的空间,造福更多的机构和个人;因为激情,个人品牌运动不仅造就了博客生态圈(Blogosphere)的繁荣,也促进了社交网络服务的繁荣,改写了人类社会资本的流动方式;因为激情,人们选择以社会企业或公益机构的模式来运营网络媒体,此举已经造就全球排名第六的维基百科(Wikipedia.org)。

指导下一个世代网络媒体的规则,除了注意力经济(Attention economy),维基经济学(Wikinomics),魔鬼经济学(Freakonomics),可能还包括激情经济学(Passionomics)。因为当激情遇上网络,人们将创造无限可能。

趋势二:
后搜索引擎时代之社会化信息获取

搜索引擎是过去十年里发展最快的主流网络应用。它成功地解决来人们面临海量信息时的信息获取困境。然而,随着时代的演进,它最初的优势,也成为它的软肋。由于人类的思考相当复杂,而关键字能够表达的语义信息相当有限,搜索引擎已经在方法论上遭遇它的发展瓶颈,这台机器无法变得更聪明。

好在社会化网络的发展,让每个人的朋友变成每个人的信息过滤器。对于一个标准的Web 2.0用户来说,社会化信息获取 (Social Information Adoption) 已经成为他们获得网络信息的新途径之一。人们通过Twitter,Google Reader、Facebook、Friendfeed、Linkedin以及任何提供广播机制的地方,分享自己喜欢的链接,群体筛选出值得注意的内容。

你的社会化信息环境也比搜索引擎更智能,更加具有互动性,一旦你发出任何的信息请求,你的联系人以及他们的六度间隔网络,将发挥出巨大的信息过滤智慧,为你迅速找出答案。

趋势三:
让我们谈谈信任力,而非注意力

在网络媒体中,信息获取和信息传播是一枚硬币的两面。在社会化信息环境中,每个人即是受众(信息接收者),也是传众(信息传播者)。控制受众眼球的传统媒体模式在网络环境中已经崩溃瓦解,人们用鼠标投票,信息权利由把关人转移到参与者,信息真相不再由少数人主导,内容最终将以民主化的方式分销。

由于在网络时代,声誉成为比内容更重要的资产,在社会化信息环境中,基于信任的开放传播体系取代了基于注意力的受控传播体系。由于联系人之间的联系管道,也成为信息获取/信息传播的管道,因此,每一次的信息交互,都会影响着联系人之间的交往。即使是一条140字的短信息,如果内容不当的话,它也可能影响你和联系人之间的关系,对你的个人品牌带来伤害。

在络绎不绝的即时动态信息流中,人们会很快地做出瞬时决断,转发值得关注的信息,对好的信息投信任票。有价值的信息,将借助扁平化的多向传播机制,从个人圈子扩展到更广阔的公共空间,内容传播的过程本身也成为群体筛选的过程。

当信息开始转发,信任也开始传递。

趋势四:
聚焦中等秩序的关联性网络

时间序列,这个古老的信息组织方法,继续在网络上占有强大的领地,随着时间单元越来越小,人们在网络上交互的速度越来越快,时间序列也以不同面貌出现在人们面前,最初它是blog的基本形态,接着它成为生活流(Lifestream)的驱动力,现在则改头换面为Twitter鼓吹的实时搜索。在Web 2.0的潮流中,以标签(Tag)为核心的通俗分类法(Folksonomy)却崭露头角,在用户贡献内容(UGC)的社会化媒体网站中绽放异彩。

那么,在下一个十年,在信息架构方面,除了时间序列、传统分类法和通俗分类法之外,人们能不能找到全新的信息组织方法,解决海量信息,过滤器失效的问题?!在宏观层面,搜索引擎解决了海量过滤的问题,而在某个网站,通俗分类也解决了网站内部的信息架构的问题。那么,在中部却依然缺乏有效的方法和工具,来缔造中等秩序。蒂姆•伯纳斯-李(Tim Berners-Lee)提出语义网(Semantic Web)构想,从理论上展现了美好的愿景,历经多年却没有在产业实践中取得实质性的进展。

在未来,或许一种叫做关联性组织方法(Relevant Approach)将成为新崛起的组织方法,它将解决中等秩序的困扰,让人们参与整个网络信息的组织和整理,让信息随时随地都呈现出关联性,人们在浏览每个网页时,都可以很快地获取和当前浏览的网页信息相关的信息。当一个一个的中等秩序发展起来,最终中等秩序将实现无缝互联,覆盖整个万维网,届时搜索引擎的重要性将大大降低。

趋势五:
开放的不仅仅是内容,也可以是品牌

创作共用(Creative Commons)针对版权法和自由分享的矛盾建立一个合理的机制,让人们得以合法而更有效率地重用原创内容。当创作者将内容开放给整个世界,他的内容价值也以几何倍数增长。

许多网络媒体已经从采纳创作共用机制中获得了巨大收益。Flickr图片分享社区是这方面的典范,它甚至设立比创作共用更为开放的The Commons专区,和美国国会图书馆以及其他著名的博物馆建立博物馆收藏数字档案馆。 TED大会在2006年建立TED.com网站,采纳创作共用协议,将各界精英的高清晰演讲视频,让用户免费下载和传播,在短短三年中,TED品牌在全球迅速扩展,赢得无数热情粉丝的青睐。在采纳创作共用取得成功之后,TED于09年3月发布TEDx计划,鼓励粉丝使用TEDx这一全新的子品牌,在世界各地独立组织TED粉丝聚会活动,在短短的9个月内,世界各地已经举行了超过300场TEDx活动。

在开放的道路上,人们还可以走得更远,内容可以开放,数据接口可以开放,现在,连品牌也可以开放。以合理的许可方式,开放品牌,让热情的粉丝聚集在品牌的大旗下,进行自组织的品牌传播活动和粉丝社群活动——这正是值得我们思考的品牌共用议题。

即将发生的不是一场派对,
而是一场革命

当汤姆•弗里德曼(Tom Friedman)讨论绿色战略的时候,他批评美国的绿色运动缺乏政策面的强有力干预,他说现在的绿色运动不是一场真正的革命,只是看似热闹的派对。

展望下一个十年网络媒体的发展,我们可以说即将发生的不是一场派对,而是一场革命。人类的天性将在互联网上得以充分的释放,激情和科技交织,梦想与数据融合,新媒体革命不仅仅带来新媒体的繁荣,也带来旧媒体的改朝换代,因为下一个十年是真正的混合媒体年代,各种力量在线离线混合的年代。

欢迎来到2010年,来到混合媒体年代的起点。

原稿完成于2009年12月26日

04:34 中国人口年龄构成统计 2007 - 2100 » 车东[Blog^2]

最近刚看完《异类》一书:其中讲了有所成就的人士除了10,000小时定律之外很重要的(而且经常被人们忽视的)一个因素就是人口的变化。因此也额外对人口变化趋势非常关注,高巍为此做了一个星座和中国人口出生量的统计
我看到一个人口构成数字是清议在《可预见的中国式灾难》中引用的田雪原《中国人口预测结果》(原始出处未找到)人口年龄统计:制成图表如下

中国人口年龄构成统计 2007 - 2100

原始数据表格列表如下(单位:万人):

年份	         总人口	0~14岁	15~64岁	65岁以上 新增劳动人口 抚养比	
2007年 132,129 25,633 95,794 10,702 2,142 37.9% 2007年实际值
2008年 132,978 24,911 96,938 11,129 2,119 37.2%
2009年 133,634 24,524 97,713 11,397 2,072 36.8%
2010年 134,279 24,289 98,301 11,688 2,076 36.6%
2011年 134,916 24,093 98,807 12,016 2,046 36.5% 抚养比谷底
2012年 135,543 23,994 99,152 12,397 1,949 36.7%
2013年 136,144 23,943 99,401 12,801 1,840 37.0%
2014年 136,706 23,941 99,465 13,300 1,776 37.4%
2015年 137,213 23,657 99,682 13,875 1,706 37.7%
2016年 137,652 23,305 99,918 14,430 1,650 37.8%
2017年 138,014 22,980 99,920 15,114 1,602 38.1% 劳动人口峰值
2018年 138,294 22,671 99,800 15,823 1,597 38.6%
2019年 138,491 22,365 99,534 16,592 1,619 39.1%
2020年 138,614 22,059 99,170 17,386 1,587 39.8%
2021年 138,668 21,735 98,852 18,080 1,597 40.3% 总人口峰值
2022年 138,658 21,390 98,466 18,803 1,608 40.8%
2023年 138,592 21,018 98,140 19,434 1,620 41.2%
2024年 138,471 20,617 98,107 19,748 1,626 41.1%
2025年 138,301 20,186 98,102 20,012 1,635 41.0%
2026年 138,082 19,722 98,349 20,011 1,641 40.4% 65岁以上超过14岁以下人口
2027年 137,813 19,228 98,220 20,365 1,648 40.3%
2028年 137,493 18,716 97,140 21,637 1,654 41.5% 抚养比之后每年上升一个百分点
2029年 137,123 18,202 96,157 22,764 1,658 42.6%
2030年 136,705 17,701 95,221 23,783 1,654 43.6%
2031年 136,239 17,228 94,226 24,786 1,654 44.6%
2032年 135,729 16,799 93,359 25,571 1,655 45.4%
2038年 131,793 15,175 85,651 30,967 1,383 53.9%
2048年 121,682 13,546 75,791 32,345 1,345 60.5%
2050年 119,163 13,116 73,701 32,346 1,331 61.7%
2060年 105,064 10,605 61,285 33,174 1,239 71.4%
2085年 71,256 7,065 40,042 24,149 898 78.0% 抚养比峰值
2100年 55,647 5,596 31,621 18,430 601 76.0%


^==Back Home: www.chedong.com

^==Back Digest Home: www.chedong.com/digest/

<== 2010-02-08
  二月 2010  
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
==> 2010-02-10