R下“Hello World级”数据分析--数据探索之旅

浏览: 2459

缘起:猴子在《从零学会数据分析:简单数据处理》中留下作业:用日常工作中的数据,进行数据预处理,并分析出有价值的信息。为此,我找到了《深圳统计年鉴2016》(PS:点击前年的蓝色字可以下载哦)从中选择了2003年至2013年间,出生人口数(Population of Birth,简写成:POB)、年平均工资(Average Yearly Wages ,简写成:AYW)、小学招生数(New Students Enrollment By Primary Schools,简写成:NSEBPS)、医院病床数(HospitalBeds

简写成:HB)及年末常住人口数(Year-end Resident Population,简写成:YERP)等五个变量数据分析。

分析过程:

1、求变化情况

image.png

如上图,这五个观测由于计量单位、数量级等的不同,无法进行直接画图--即使画出图来也不容易看出他们的关系。为方便比较,我使用For()函数和算术运算把它们转化成变化率(单位:%)(如下图)。
image.png

2、绘制变化曲线图 利用plot()、lines()、abline()、legend()等函数把各观测的变化情况展现出来。如下图所示,除了出生人口数在个别年份变化比较特殊外,其他几个观测的变化情况还是比较集中的。所以很好奇“这些观测相关性如何呢?”image.png

3、试求各观测间的相关性 误打误撞中,我发现了cor()函数。简单一句“DateCor <- cor(excelDate[-1,-1])”就把五个观测的相关数搞出来了,这就是R等数据分析软件的强大之处吧。如图:
image.png

这结果感觉还是太复杂了,还需要直观一点。我的方法是:求平均数,mean()上场!
image.png

医院病床数与其他各项的相关性最高,这又是一个“尿布”和“啤酒”的故事嘛?

代码:

library(openxlsx)
library(Hmisc)
path <- "C:/日常工作数据.xlsx"
excelDate<- read.xlsx(path,"Sheet1")
#求各指标变化率
YEAR<-c(2004:2013)
POBrate<-c(1:10)
for(i in 2:11)(POBrate[i-1]<-(excelDate$POB[i]/excelDate$POB[i-1]-1)*100)
AYWrate<-c(1:10)
for(i in 2:11)(AYWrate[i-1]<-(excelDate$AYW[i]/excelDate$AYW[i-1]-1)*100)
NSEBPSrate<-c(1:10)
for(i in 2:11)(NSEBPSrate[i-1]<-(excelDate$NSEBPS[i]/excelDate$NSEBPS[i-1]-1)*100)
HBrate<-c(1:10)
for(i in 2:11)(HBrate[i-1]<-(excelDate$HB[i]/excelDate$HB[i-1]-1)*100)
YERPrate<-c(1:10)
for(i in 2:11)(YERPrate[i-1]<-(excelDate$YERP[i]/excelDate$YERP[i-1]-1)*100)
excelRate<-data.frame(YEAR,POBrate,AYWrate,NSEBPSrate,HBrate,YERPrate)
#变化情况展示
#attach(excelRate)
opar <- par(no.readonly = T)
par(mar=c(6.1,4.1,3.1,2.1))
plot(YEAR,POBrate,
main = "2004-2013年度深圳市部分统计指标变化情况",
sub="数据来源于深圳市2016年度统计年鉴",
col.main="red",col.sub="blue",
lty=1,ylim=c(-10,70),
col="red",type="b",lwd=0.5,
pch=12,cex=0.6,xlab="年 份",
ylab="百分率",
cex.main=1.8)
lines(YEAR,AYWrate,type="b", col="blue",lty=1,pch=13)
lines(YEAR,NSEBPSrate,type="b", col="yellow",lty=1,pch=14)
lines(YEAR,HBrate,type="b", col="salmon",lty=1,pch=15)
lines(YEAR,YERPrate,type="b", col="pink",lty=1,pch=16)

minor.tick(nx=2,ny=10,tick.ratio = 0.5)
abline(v=c(2004:2012),lty=3,col="green")
legend("topleft",inset=.05,lty=1,legend = c( "出生人口数变化率","年平均工资变化率","小学招生数变化率","医院病床变化率","年末常住人口数变化率"),col=c("red","blue","yellow","salmon","pink"),pch=c(12:16))
par(opar)

#求各数据关联性
DateCor <- cor(excelDate[-1,-1])
DateCor
MeanPOP <- mean(DateCor[1,])
MeanAYW <- mean(DateCor[2,])
MeanNSEBPS <- mean(DateCor[3,])
MeanHB <- mean(DateCor[4,])
MeanYERP <- mean(DateCor[5,])

MEAN <- data.frame(MeanPOP,MeanAYW,MeanNSEBPS,MeanHB,MeanYERP)
MEAN
contents<- read.xlsx(path,"Sheet3")
contents

收获:

1、for()函数:我最喜欢的函数,因为它在几乎不增加代码的情况下,实现代码效益最大化;

2、cor()函数:用google我找到的是cor.test(),但它的反回结果并不理想。还是出于好奇,尝试了cor()。

3、伪相关:“相关分析仅为数据计算结果,计算结果可能高度相关,但实际可能无关系,一般这种称之为伪相关。”

4、相关 correlation,关联association不是一会事。啤酒与尿布是关联分析,而非相关分析。

疑惑:

1、既然相关分析有强大的cor()函数,那么求增长率是不是特定的函数?

2、如何解决医院病床数与其他各项的高相关呢?是说经济增长了有钱就去建医院,还是说医院提高 了社会的健康水平从而促进 了经济的发展?

3、各观测间的相关都是明显的,但这些相关是伪相关嘛?(偏相关系数法、平稳化法、剔除趋势法)

感谢:

谢谢您花时间读到这里,尤其是作出评论的亲。数据分析学习之路,有您真好!

推荐 2
本文由 kaolixin 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册