查看原文
其他

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

2017-03-03 kaolixin R语言中文社区

缘起:

猴子在《从零学会数据分析:简单数据处理》中留下作业:用日常工作中的数据,进行数据预处理,并分析出有价值的信息。为此,我找到了《深圳统计年鉴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、求变化情况


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


2、绘制变化曲线图 

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


3、试求各观测间的相关性 误打误撞中,我发现了cor()函数。

简单一句“DateCor <- cor(excelDate[-1,-1])”就把五个观测的相关数搞出来了,这就是R等数据分析软件的强大之处吧。如图:

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

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


代码:

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、各观测间的相关都是明显的,但这些相关是伪相关嘛?(偏相关系数法、平稳化法、剔除趋势法)


感谢:

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


kaolixin,天善智能社区专家。

Blog:https://ask.hellobi.com/blog/kaolixin


微信回复关键字即可学习

回复 R              R语言快速入门免费视频 
回复 统计          统计方法及其在R中的实现
回复 用户画像   民生银行客户画像搭建与应用 
回复 大数据      大数据系列免费视频教程
回复 可视化      利用R语言做数据可视化
回复 数据挖掘   数据挖掘算法原理解释与应用
回复 机器学习   R&Python机器学习入门 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存