《Head First Data Analysis》
19/3/30-3/31
完结散花ヾ(๑╹◡╹)ノ"
(一)加载数据至R程序
- 由于不知名原因书上的source(“http://…/hfda.R”)没用。因而只能用read.csv函数代替。
- step one:employees <- read.csv(“path”, header=TRUE)将csv文件载入R
- step two:hist(employees$received, breaks=50)画出直方图,如下
- sd(employees$received):sd指令返回指定数据范围的标准偏差
- [注]hist中加入限制条件:hist(employees$received[employees$year == 2019], breaks = 50),仅选择2019年的数据
(二)回归
6. 问:什么时候使用散点图?答:散点图从多方面展现数据特点,只要数据涉及两种变量,就该考虑散点图。
7. step one:plot(employees$requested[employees$negotiated == TRUE], employees$received[employees$negotiated == TRUE]):画出散点图
8. step two:cor(employees$requested[employees$negotiated == TRUE], employees$received[employees$negotiated == TRUE]):求出相关系数(回归线的斜率)
9. step three:使用如下命令求出回归线方程:
myLm <- lm (received[negotiated == TRUE]~ requested[negotiated == TRUE], data=employees)
myLm$coefficient
10. 但是问题来了,如上图所示当requested大于9%左右时,误差太大。这会导致机会误差过大。(机会误差:实际结果与预测结果之间的偏差),所以我们需要定理地指定误差,以给用户一个可接受预测范围。这时候就需要一个统计值,通过它体现出典型的点相对于回归线的平均偏移量。
有了回归线的均方根误差Residual standard error,就能告诉用户实际结果与典型预测结果之间可能有多大差距。
首先在R中创建myLm对象,
myLm <- lm (received[negotiated == TRUE]~ requested[negotiated == TRUE], data=employees)
接着使用summary(myLm)$sigma命令查看均方根误差。(可以用summary(myLm)查出所以想要信息)
(三)关系数据库
11. 就像自然连接一样把所有需要的表导入至一个excel表中
12. 用COUNTIF()计数:e.g.:
=COUNTIF(hfda_articles.csv!B:B, hfda_issues.csv!A2)
13. 用SUMIF()求和:e.g.:
=SUMIF(hfda_sales.csv!B:B, hfda_issues.csv!A2, hfda_sales.csv!C:C)
第一个自变量读取期刊(取出issueID);第二个自变量读取你希望计算其销量的特定期刊;第三个自变量指向你希望汇总的实际销量;
(四)散点图集合
>library(lattice)
>xyplot(webHits~commentCount|authorName, data=articleHitsComments)
(五)整理数据
14. 例:将#号作为分隔符
step one:选择A列数据,在“数据”选项卡下选择“分列”按钮;
step two:
over(~ ̄▽ ̄)~
-
例:替换^字符(去掉它)
新建一列H(保护原始数据) ,函数
=SUBSTITUTE(B2,"^","")
overヽ( ̄▽ ̄)ノ -
例:排序,去重,去除异常字符
step one:运行正则表达式去除异常字符:
NewLastName <- sub("\\(.*\\)", “”, hfhh$LastName)
反斜杠为退出符,告诉R括号本身不是R表达式。句号代表任何字符。星号代表任何数目前面的字符。step two:排序
hfhhSorted <- hfhh[order(hfhh$PersonID),]step three:去重
(1)创建一个新框架,显示唯一出现的记录:
hfhhNameOnly <- hfhhSorted(2)删除CallID和Time域,这些域使名字重复出现,而客户不需要这些域:
hfhhNameOnly$CallID <- NULL
hfhhNameOnly$Time <- NULL(3) 使用unique函数删除重复的名称:
hfhhNameOnly <- unique(hfhhNameOnly)(4) 写入新csv文件:
write.csv(hfhhNameOnly, file="…csv")