• R语言
  • 【R语言训练营 解答】Razzil的答谢(A1)

上期题目:http://www.dataanalysis.cn/alchemist/alchemist.html

哈喽,大家好:

好几天不见了,这次我堂堂炼金术士Razzil Darkbrew要求得,自己写答谢。可能有朋友不太清楚,我上次获得的任务是QQ群聊天记录分析。你们都知道,我才来到人类世界,还不太熟络,因此那个问题对我来说太难了!幸亏有大家帮忙,我能顺利、及时的完成任务。首先,我不得不分享一下英雄榜和他们的炼金积分(炼金积分是Abbo给我的,他说以后可能有用,管他呢!):

这些都是帮助过我的英雄们,我Razzil衷心的感谢你们,下面,我要将你们贡献的知识转换为炼金武器——R的使用秘籍送予我的英雄们:

<br />
plyr包,拆分、合并数据的利器,是一个工具集合;<br />
包中ddply()函数可以实现类似于SQL中select group by功能<br />
stringr包,轻轻松松处理字符串<br />


好吧,可能其中有一些冗长代码的方法,融合了很多让我头晕的东西,比如循环+循环+循环+……我想那位侠士肯定也没有弄得太清楚上古神器R的使用技巧,我就不点名让您出丑了!</p>

挑一个我最喜欢的来分析一下吧:

--------------------------------------------------------------------------------

<br />
qq=read.csv("http://www.dataanalysis.cn/doc/a/1/qq.csv",header=T,sep=",",as.is=T)<br />
#发言次数TOP10<br />
rev(sort(table(qq$id)))[1:10]<br />
#发言天数TOP10<br />
rev(sort(tapply(as.Date(qq$time),qq$id,FUN=function(x){length(table(x))})))[1:10]<br />


---------------------------------------------------------------------------------</p>

读入数据,as.is=T将字符型 变量转换为因子(为后面铺垫哦!);

rev()倒序+sort()排序+table()创建按照id因子的汇总统计(table()函数用于创建交叉表,很强大!);

tapply()在多维数组中应用function(x),function(x)即{length(table(x))},按照as.Date(qq$time)因子的汇总统计,qq$id为索引变量;

嗯…看完这么多,你学习到了吗?如果你还对其中一些代码和方法有疑问的话,那就烦请自己下载包,并且使用help(function)来查查函数的帮助吧!

呃,这一次的任务就算是完成了!总而言之,非常感谢大家的帮助,下一期任务什么时候?卖糕的!我得问问Abbo,希望不要太难,但是我爱挑战,英雄们你们也是吧!

Yours

Razzil Darkbrew

所有代码下载:http://www.dataanalysis.cn/doc/a/1/a1.r

----------------------------------------------------------------------------------

囧,写惯了html,我说怎么一直写不出图片。。。

真的要用 table() sort() 这些吗 ... 简单问题复杂化了吧

https://gist.github.com/4285833

回复 第2楼 的 肖楠:哈哈,肖版主的这个factor summary精辟,学习了。

另外,俺对R中函数的复杂程度还不太了解!

但是这样游戏很好玩,我在下一期中加入了一些评估代码的方法,能否帮忙给一点建议!

http://www.dataanalysis.cn/alchemist/good-or-bad.html

膜拜。。。学习。。。[s:11]

试了肖版的方法,真是简洁啊!貌似还可以省略as.factor一句

回复 第4楼 的 jiangnping:

是的. 如果不在乎时区问题只做一次性计算, 参数 tz 也可以省略:

<br />
x = read.csv('http://www.dataanalysis.cn/doc/a/1/qq.csv')[, -1]<br />
x$time = as.POSIXct(x$time, format = '%Y/%m/%d %H:%M:%S')<br />
summary(x$id)[1:10]<br />
x$time = as.Date(x$time)<br />
summary(unique(x)$id)[1:10]<br />
</p>

这里有更全面的分析: http://xccds1977.blogspot.com/2012/12/qq.html

建议像我这样的新手别着急看,否则后面就不好玩了。

回复 第7楼 的 xvweirong:本来打算引导大家一步一步玩QQ数据的,被xccds老师一次性玩完了...只得出第二期了...

第一期的分析还可以更完善,大家可以先参考xccds老师的文章(记得先别看代码哦)...