课程网址看这里。
20140603
做了quiz1。
- quiz1中需要需要xlsx等库,使用
install.package()
来下载,之后用library()
来加载。 - 载入rJava出错参考这个连接解决。
- 处理xml需要用到
xmlParser
(记得设置useInternalNodes
为TRUE),之后的提取数据用xpathSApply
,具体用法参考课件和文档。 data.table
的处理能力确实强大,而且很精简。比如DT[,mean(pwgtp15),by=SEX]
这样就是根据SEX分组,然后计算pwgtp15这个column的均值了。
20140606
做了quiz2.没有看视频,也不一定是按照课件上的方式来做的,选择了最快完成的方式来做。
- 直接用浏览器打开https://api.github.com/users/jtleek/repos,然后Ctrl+F搜索"data sharing”,然后找”created_at”的那一行。
- 根据学的数据库知识可以盲选,最后还是用题目提供的方法验证了一下
- 同上题,可以盲选。
- 用
url()
和readLines()
,之后nchar(lines[c(10, 20, 30, 100)])
- 用
file()
和readLines()
,之后sum(as.numeric(substr(lines[5:length(lines)], 29, 32)))
20140608
做了quiz3.
which(dt$ACR==3 & dt$AGS==6)
,对subtitle进行逻辑操作,然后which- 对图片进行
download.file()
要设置mode='wb'
(因为图片是二进制文件),然后用readJPEG
进行读取,之后quantile
进行统计即可。 - 这题卡了很久,主要还是操作上不熟悉
- 首先第一个csv的处理,
readcsv
时候记得要设置StringsAsFactor=F
,因为后面处理GDP时候需要用到原始的字符串,用dt1[5:194]
提取出有意义的190行数据 - 之后merge两个表格,用
dt3<-merge(dt1, dt2, by.x="X", by.y="CountryCode")
- 然后就是根据GDP排序,即X.3这个列,最后用的是
dt4=dt3[order(as.numeric(gsub("([, ])", "", dt3$X.3))),]
这个复杂的命令。于是GDP的形式是形如“ 123.456 “的不规则字串,所以as.numeric
之前需要处理一下,这里我的方法比较暴力,直接是gsub("([, ])", "", dt3$X.3)
,也就是直接将空格和逗号替换成空串,这样“ 123.456 ”换成“123456”就可以用as.numeric
来转换了
- 首先第一个csv的处理,
tapply(as.numeric(dt3$Gross.domestic.product.2012), dt3$Income.Group, mean)
,用到了tapply。sum(as.numeric(split(dt3$Gross.domestic.product.2012, dt3$Income.Group)[["Lower middle income"]]) <= 38)
又一个复杂命令。。大概是先用split根据income将GPA分开,然后转成数字,之后统计小于38的个数。
20140609
做quiz4.
strsplit(names(dt), 'wgtp')[123]
即可。- 这个是quiz3的3题的数据集,操作第三题中也需要做,而且比这里更复杂。(这门课的设置略微不科学。。。)
- read.csv时候加上
stringsAsFactor=F
,之后mean(as.numeric(gsub('([ ,])', '', dt2$X.3[5:194])))
, - 另外一个可行的做法是read.csv时候再加上
strip.white
,那么gsub时候只需要处理逗号即可。 - 去字符串两边空格的方法也知道了,是stringr库里面的
str_trim
(竟然还要导入库)
- read.csv时候加上
dt2$X.2[grep('^United', dt2$X.2)]
,当是复习了下正则表达式。- 跟quiz3第三题的数据一样,用同样的方法merge数据后,
sum(substr(dt3$Special.Notes,18,21)=="June")
这样就可以得到结果。 - 一个关于股票的问题。。。R真是什么包都有。
nrow(amzn['2012'])
weekdays(index(amzn['2012']))=='星期一'
20140624
今天做Course Project的review,顺便也整理下自己的不足。
review的4份代码:
https://github.com/voegelas/datasciencecoursera/blob/master/getting-and-cleaning-data/course-project/run_analysis.R
https://github.com/AsiaLu/GettingAndCleaningDataProject/blob/master/run_analysis.R
https://github.com/egrossman/DataCleaningProject/blob/master/run_analysis.R
https://github.com/defenderb/CleaningDataCP/blob/master/run_analysis.R
自己的代码:
https://github.com/zhangliliang/project_for_getdata_coursera/blob/master/run_analysis.R
不足:
- 题意理解错了,最后tidydata的输出的要求是:“Creates a second, independent tidy data set with the average of each variable for each activity and each subject. ”,而我只针对了每个activity进行输出。(所以正确的data应该是180行,而不是我的6行)
- 对比起别人的代码,我的代码写得比较ugly。具体看下面的收获的总结。
收获:
如何实现“Creates a second, independent tidy data set with the average of each variable for each activity and each subject.”?
ugly的做法是(也就是我的做法):1
2
3
4
5
6
7
8
9
10simple=data.frame();
parts = split(total[2:67], total$activity);
for (i in c(1:66)){
for (j in c(1:length(parts))){
simple[j, i] = mean(parts[[j]][,i]);
}
}
colnames(simple) = features[cols, 2];
simple=cbind(names(parts), simple);
names(simple)[1] = "acitivity";
漂亮的做法是用melt和dcast:1
2dataMelt <- melt(data, id=c("activity", "subject"))
tidyData <- dcast(dataMelt, subject + activity ~ variable, mean)
后来才发现,melt和dcast的应用都是如此广泛:
[转载] R语言进阶之:数据整形(reshape)
探索R包reshape2:揉数据的最佳伴侣
简单来说:
- melt的作用是拉成一个长的数据框。
比如上面data原来是10299*68的,根据activity和subject拉开后,会变成679734*4.(其中679734=10299*(68-2),4=2+1variable+1value) - dcast是将melt之后的数据“揉”成另外一个想要的格式。
比如上面对dataMelt,实际上是做了“根据subject和activity进行归并后,计算variable的均值”。