星期三, 二月 29, 2012

R语言编程入门之五:向量化运算


和matlab一样,R语言以向量为基本运算对象。也就是说,当输入的对象为向量时,对其中的每个元素分别进行处理,然后以向量的形式输出。R语言中基本上所有的数据运算均能允许向量操作。不仅如此,R还包含了许多高效的向量运算函数,这也是它不同于其它软件的一个显著特征。向量化运算的好处在于避免使用循环,使代码更为简洁、高效和易于理解。本文来对apply族函数作一个简单的归纳,以便于大家理解其中的区别所在。

所谓apply族函数包括了apply,sapply,lappy,tapply等函数,这些函数在不同的情况下能高效的完成复杂的数据处理任务,但角色定位又有所不同。

星期二, 二月 28, 2012

R语言编程入门之四:字符串处理


尽管R语言的主要处理对象是数字,而字符串有时候也会在数据分析中占到相当大的份量。特别是在文本数据挖掘日趋重要的背景下,在数据预处理阶段你需要熟练的操作字符串对象。当然如果你擅长其它的处理软件,比如Python,可以让它来负责前期的脏活。

获取字符串长度:nchar()能够获取字符串的长度,它也支持字符串向量操作。注意它和length()的结果是有区别的。

字符串粘合:paste()负责将若干个字符串相连结,返回成单独的字符串。其优点在于,就算有的处理对象不是字符型也能自动转为字符型。

星期一, 二月 27, 2012

R语言编程入门之三:输入与输出


如同ATM机一样,你首先得输入银行卡,才能输出得到钞票。数据分析也是如此,输入输出数据在分析工作中有重要的地位。下面对R语言中一些重要的输入输出函数进行小结,而其它的函数请参考官方指南。

1 读取键盘输入
如果只有很少的数据量,你可以直接用变量赋值输入数据。若要用交互方式则可以使用readline()函数输入单个数据,但要注意其默认输入格为字符型。scan()函数中如果不加参数则也可以用来手动输入数据。如果加上文件名则是从文件中读取数据。

2 读取表格文件
读取本地表格文件的主要函数是read.table(),其中的file参数设定了文件路径,注意路径中斜杠的正确用法(如"C:/data/sample.txt"),header参数设定是否带有表头。sep参数设定了列之间的间隔方式。该函数读取数据后将存为data.frame格式,而且所有的字符将被转为因子格式,如果你不想这么做需要记得将参数stringsAsFactors设为FALSE。与之类似的函数是read.csv()专门用来读取csv格式。

星期六, 二月 25, 2012

在Twitter上你应该关注谁?

社交媒体中的数据挖掘是当今比较热门的领域之一。各平台公司都想从用户的数据中寻找其偏好特征,提供个性化的服务。其中一种服务就是在微博平台中向用户推荐值得关注的对象名单。如果用户已经使用了一段时间的服务并关注了一些对象,那么有一种简单思路可以为其提供更多的关注对象。

俗语说:人以群分,物以类聚。朋友之间基本上是臭味相投的,再进一步延伸,朋友的朋友也应该能成为新的朋友。那么进行推荐服务的方法可以这样来实现:先找出用户已经关注朋友的名单,再进一步找出每个朋友所关注的对象,再根据频数作为推荐的权重。下面我们用Twitter为例用R语言来实现这种思路。

星期五, 二月 24, 2012

用R实现生命游戏(Game of Life)


生命游戏是英国数学家John Horton Conway在1970年发明的细胞自动机(cellular automaton)。它最初于1970年10月在《科学美国人》杂志中出现。生命游戏是在一个二维矩形世界中,这个世界中的每个方格居住着一个细胞。细胞的生命状态只有活着或死亡两种。细胞在下一个时刻的生死取决于相邻八个方格中活着细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。

其中一种较为丰富的设定有如下四条:
  • 若相邻的存活细胞数少于2,则细胞死于寂寞
  • 若相邻的存活细胞数多于3,则细胞死于拥挤
  • 若相邻的存活细胞数为2或3,则细胞继续存活
  • 若相邻的存活细胞数正好为3,死亡的细胞得到复活