前几天在图书馆看书,打算找了统计类的书本补充统计学和数据分析的知识,无意中看到了这本书《菜鸟侦探跳帧数据分析》(我一向喜欢看基础和应用类的入门书籍)。一打开就爱不释手地看了一般,并借回家继续阅读。这是一本日本教授撰写的R语言统计应用小说,情节贴近生活,实在一本难道的好书。被书本介绍的R语言的功能吸引了,回家就装上了R语言,并正式成为R语言的菜鸟一枚
看了书本,装了R系统,尝试了一些功能,不禁被R语言的简洁和强大功能所折服,不愧是为数据分析而生的一门语言!以下跟大家分享我的R语言入门记录。
一、R语言系统安装
1、安装R:
官网:https://www.r-project.org/
2、安装R-studio,类似于R的IDE。
官网:https://rstudio.com/
实际下载地址:
https://rstudio.com/products/rstudio/download/?注意,如果是 32位系统,utm_source=downloadrstudio&utm_medium=Site&utm_campaign=home-hero-cta
注意,如果是32位的系统,这里下载:
https://support.rstudio.com/hc/en-us/articles/206569407-Older-Versions-of-RStudio
由于是免费软件,下载安装几乎一路绿灯,没有任何障碍。
二、R语言基础
使用时打开Rstudio即可, 不用打开R。Rstudio界面如下:
我的第一行代码是什么也忘了,估计是类似输入1:200,然后系统直接给出200个数字,如上图,看到了类似python 的界面功能了吧。
常用统计函数:
> sum(1:100)
[1] 5050
> mean(2:14)
[1] 8
> var(3:20)
[1] 28.5
> sd(2:70)
[1] 20.0624
这个案例很有意思,同时介绍了统计学的基本概念,以及R最简单常用的功能。
1、变量赋值
> choujiang <- c("未中奖?","一等奖")
2、模拟每天抽奖一次(1%的抽中概率),一周抽奖7次,重复抽奖1000周,统计每周抽中一等奖的数量,并赋值给res变量。代码如下,简洁吧:
res <- replicate(1000, sum(replicate (7, sample (choujiang, 100, prob = c(99,1), replace = TRUE) ) == "一等奖"))
结果如下:
> res
[1] 6 3 8 3 7 3 4 8 5 7 4 10 6 1 7 3 6 8 5 16 5 4 7 9 7 7 11 7 3 7 8 5 4 10 10 7 8 4
[39] 10 7 5 10 8 5 6 6 5 5 9 5 15 2 5 7 2 5 11 10 6 4 8 5 12 6 3 7 7 5 3 6 6 6 4 7 7 8
[77] 10 4 7 7 6 9 5 4 9 5 9 17 9 12 9 7 4 3 12 8 7 7 11 7 3 7 3 8 8 5 7 9 3 7 2 5 6 3
[115] 6 8 7 8 8 9 3 2 7 11 8 13 5 8 8 10 4 5 6 6 6 5 12 8 4 6 3 3 2 9 8 12 8 4 5 3 3 9
[153] 6 3 5 6 10 5 6 5 8 5 8 8 4 3 3 4 7 7 4 5 7 11 10 8 6 7 4 8 7 6 7 6 8 13 4 9 6 6
[191] 6 2 13 6 9 10 5 8 8 13 9 5 8 6 7 6 10 5 4 5 11 12 3 7 3 9 4 11 8 11 3 9 13 12 4 5 6 4
[229] 6 9 6 9 5 9 5 10 8 4 7 7 5 4 4 5 6 5 10 2 7 1 5 6 8 10 10 5 5 9 8 6 5 5 9 10 7 5
[267] 11 6 12 6 7 5 5 6 4 6 8 5 8 7 8 4 7 6 7 8 8 8 2 7 10 11 13 9 4 6 8 4 10 8 11 11 7 12
[305] 5 12 6 14 8 5 6 2 8 9 8 6 2 6 2 8 5 11 6 6 7 8 7 10 7 5 2 8 11 13 8 6 9 4 4 9 5 6
[343] 6 10 9 3 10 6 8 7 9 5 7 8 12 4 5 8 7 5 8 5 10 4 9 5 5 8 7 5 6 3 5 5 7 8 10 4 9 11
[381] 5 6 8 7 4 10 5 8 9 11 9 4 3 8 8 2 9 6 9 1 7 10 4 10 7 11 9 4 4 9 6 11 7 10 4 9 7 4
[419] 15 7 6 10 5 6 9 6 10 8 6 11 7 6 7 3 7 9 10 3 7 8 7 13 3 5 9 4 9 6 11 13 7 9 8 7 6 5
[457] 6 6 12 8 8 12 8 8 13 9 6 4 7 11 2 9 6 9 10 5 12 11 8 9 5 4 8 7 5 3 12 3 8 4 7 6 4 5
[495] 6 5 9 4 6 6 8 7 8 4 6 9 6 8 6 9 8 4 11 5 7 6 3 8 9 7 8 10 11 7 8 5 9 15 6 7 5 3
[533] 7 12 3 11 3 8 8 7 4 11 3 7 7 6 1 8 8 8 12 7 11 9 6 6 4 13 5 8 4 8 7 7 9 6 5 8 10 7
[571] 9 7 6 10 7 9 8 6 9 11 7 6 7 3 7 8 4 7 8 7 12 8 3 4 15 6 4 5 7 10 7 4 9 3 4 11 7 8
[609] 9 3 10 5 10 8 10 8 8 5 9 5 5 8 13 4 6 7 12 5 11 8 10 5 14 4 5 7 12 6 10 10 3 7 9 4 9 8
[647] 12 5 3 5 10 7 7 1 8 5 8 10 10 6 12 7 6 3 2 11 8 4 12 6 5 5 8 14 10 6 14 11 4 11 4 5 5 10
[685] 7 7 8 9 9 10 5 10 8 4 5 6 9 9 4 13 10 9 10 8 7 8 5 13 9 5 6 5 2 6 5 8 7 8 10 6 7 3
[723] 8 9 10 9 7 7 8 6 7 7 6 10 5 6 8 7 7 6 6 5 7 8 8 10 2 6 8 6 5 8 6 6 7 5 11 7 7 5
[761] 4 12 8 10 6 8 10 8 8 6 7 13 12 5 4 6 5 7 5 6 5 7 7 7 5 10 6 10 4 5 7 6 7 8 9 5 8 6
[799] 9 8 7 12 4 5 7 11 3 6 7 9 6 7 5 6 5 7 4 8 4 7 6 10 5 11 9 2 10 6 9 12 6 8 7 8 5 9
[837] 5 8 4 9 9 11 8 8 6 9 5 4 10 4 4 7 4 7 7 2 3 10 3 10 5 3 8 7 5 4 4 8 6 7 14 5 6 7
[875] 8 2 6 5 7 8 5 6 0 4 4 8 4 8 6 7 12 5 3 7 8 4 6 5 11 6 7 11 10 5 6 7 10 6 7 11 6 2
[913] 7 8 5 6 8 2 9 8 9 4 4 6 2 6 8 6 8 2 11 6 8 8 5 5 8 4 9 9 8 4 7 5 5 4 8 4 7 7
[951] 9 4 8 8 8 11 4 6 7 6 10 7 5 9 5 8 6 11 6 6 7 5 5 4 7 4 16 10 6 7 9 5 6 10 9 9 5 7
[989] 7 10 10 7 4 6 5 10 5 6 3 8
3、做直方图分布:代码还是很简洁
> hist(res, breaks = 0:18)
4.上图界面不美,那就借助制图软件包ggplot2的帮助吧。
首先安装,然后倒入包,非常简洁的命令:
> install.packages("ggplot2")
> library(ggplot2)
>> resD <- as.data.frame(table(res))
> ggplot(resD, aes(x = res)) + geom_histogram(binwidth = 1, color="red", fill = "steelblue") + xlab("该周中奖出现次数") + ylab ("周数") + ggtitle("直方图")
导入包并加载数据:
> library(dplyr)
> library(ggplot2)
> menus <- read.csv("menus.csv", stringsAsFactors = FALSE, colClasses = c("factor", "Date", "numeric"))
> menus %>% names
[1] "品名" "日期" "销售额"
> menus %>% head
品名 日期 销售额
1 关东煮 2015-03-01 4046
2 关东煮 2015-03-02 3437
3 关东煮 2015-03-03 3191
4 关东煮 2015-03-04 3499
5 关东煮 2015-03-05 3536
6 关东煮 2015-03-06 3841
筛选饭团销售并做时间序列图:
> fantuan <- menus %>% filter (品名 == "饭团")
> ggplot(fantuan, aes(日期,销售额)) + geom_line() + scale_x_date()+ggtitle("饭团销售额")
>noodles2 <- menus %>% filter (品名 %in% c("饭团", "味增汤", "咖喱", "茶泡饭", "意大利面", "酱汁炒面", "乌冬面", "什锦面", "拉面")) %>% select (品名,销售额,日期) %>% spread(品名,销售额)
查看筛选结果:
> head(noodles2)
日期 茶泡饭 饭团 酱汁炒面 咖喱 拉面 什锦面 乌冬面 意大利面
1 2015-03-01 12751 23698 8460 15594 17644 6245 8849 5947
2 2015-03-02 8881 19505 7412 10959 12756 4469 6063 5010
3 2015-03-03 10006 19974 7377 12073 13764 5159 6060 5263
4 2015-03-04 9480 18208 6959 12249 14670 4399 6283 5150
5 2015-03-05 9752 19624 6518 11690 13371 4791 7138 4883
6 2015-03-06 12534 23872 10249 16332 18845 6039 9264 6410
> noodles2[-1] %>% cor
茶泡饭 饭团 酱汁炒面 咖喱 拉面 什锦面 乌冬面 意大利面
茶泡饭 1.00000000 -0.00971532 0.6080210 0.81505643 0.6269526 0.5924683 0.6293278 0.6165647
饭团 -0.00971532 1.00000000 -0.5029012 -0.02819566 -0.5100147 -0.5041264 -0.4892078 -0.4866258
酱汁炒面 0.60802102 -0.50290122 1.0000000 0.62001363 0.9216830 0.9133528 0.8953787 0.9122944
咖喱 0.81505643 -0.02819566 0.6200136 1.00000000 0.6569293 0.6144427 0.6185421 0.6370305
拉面 0.62695258 -0.51001468 0.9216830 0.65692932 1.0000000 0.9220467 0.9129860 0.9188441
什锦面 0.59246831 -0.50412641 0.9133528 0.61444273 0.9220467 1.0000000 0.9099195 0.9101794
乌冬面 0.62932779 -0.48920782 0.8953787 0.61854210 0.9129860 0.9099195 1.0000000 0.8979937
意大利面 0.61656471 -0.48662582 0.9122944 0.63703048 0.9188441 0.9101794 0.8979937 1.0000000
3.散点图矩阵:
> noodles2[,-1]%>% pairs()
4.相关与回归析
> ice<-lm(formula=销售量~气温,data=icecream)
> ice
Call:
lm(formula = 销售量 ~ 气温, data = icecream)
Coefficients:
(Intercept) 气温
57.167 5.216
> summary(ice)
Call:
lm(formula = 销售量 ~ 气温, data = icecream)
Residuals:
Min 1Q Median 3Q Max
-93.841 -19.023 -0.118 16.703 100.156
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 57.1673 3.1086 18.39 <2e-16 ***
气温 5.2161 0.1738 30.01 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 28.07 on 363 degrees of freedom
Multiple R-squared: 0.7127, Adjusted R-squared: 0.7119
F-statistic: 900.5 on 1 and 363 DF, p-value: < 2.2e-16
icecream<-read.csv(‘icecream.csv’)
icecream%>% lm(销售量~气温,data=.) 或者: > lm(formula=销售量~气温,data=icecream)
结果均为:
Call:
lm(formula = 销售量 ~ 气温, data = .)
Coefficients:
(Intercept) 气温
57.167 5.216
即:冰激凌销售量与气温的满足回归模型: Y=5.2X+57.2
icecream%>%ggplot(aes(气温,销售量))+geom_point(size=2)+ggtitle(“冰激凌气温与销售量关系图”)
加上回归直线:
icecream%>%ggplot(aes(气温,销售量))+geom_point(size=2)+geom_smooth(method=‘lm’,se=FALSE)+ggtitle(“冰激凌气温与销售量关系图”)
R语言还是很强大的,尤其在统计分析应用上,本文只是列举了一部分功能。有兴趣的可以自行学习,这里向各位入门学习推荐这本书。它把理论和实际生活中的应用巧妙地结合在一起,读起来特别有趣,对于R语言入门和统计分析的学习有很好的帮助。日本人写的书有点欧美人的特色,生动有趣。跟我们大陆常见的技术类书籍是完全不同的风格。能把统计学分析的知识,包括各种分布、显著性检验等,解释地生动贴切,阅后会让你觉得统计学和数据分析也不再枯燥了!