用到的数据是在某地级市政府网站获取的公开数据,现以天气数据为例进行简单的数据分析
初始数据以xlsx格式储存:
初始的数据格式对于后续分析来说不太友好,我希望数据能够具有原子性,所以接下来利用excel自带的功能对数据进行整理,利用分列和替换等功能使数据具有原子性:
最终数据形式:
其中tH代表当日最高气温,tL代表当日最低气温,wd1代表风向1,wd2代表风向2,wf11代表风向1的最小风力,后续类推
但是在这个csv文件中仍然有没有处理的数据:w1和w2,先不管它们
将csv文件导入到Rstudio当中:
weather<-read.csv('weather.csv',header=T,stringsAsFactors = T)
这个数据框包含2011年到2018年某地级市的气象数据,首先将每一年的数据单独提取出来(以2011年为例)
weather2011<-weather[weather$year==2011,]
可以利用table()函数求名义型变量的频数,以w1为例:
table(weather2011$w1)
从结果中可以得出一个初步结论:该城市多云天气较多,雨天较多,晴天只占全年时间的五分之一,很典型的南方气候。而实际上该城市也位于我国南方。
利用直方图更直观地观测一下天气状况
w1t<-table(weather2011$w1)
w1b<-barplot(w1t,ylim=c(0,140))
text(w1b,w1t+5,labels=w1t)
在简单的柱状图上方添加了频数数据
这个简单的方法可以用在名义型变量上来查看和比较频数数据
接下来针对2011年的气象数据中的气温部分进行分析:
plot(weather2011$tH,type='l',col='red',ylim=c(-5,35),main='Daily Temperature Info of Year2011',xlab='days',ylab='Temperature')
lines(weather2011$tL,type='l',col='blue')
lines(weather2011$tH-weather2011$tL,type='l',col='black')
lines((weather2011$tH+weather2011$tL)/2,type='l',col='green')
legend(300,35,c('High','Low','Diff','Aver'),col=c('red','blue','black','green'),lty=1,cex=0.5)
这幅折线图同时展示了四项数据:最高气温、最低气温、气温差值和平均气温,分别用红蓝黑绿四种颜色的线条代表。
在这幅图中可以大致看出该城市的气温走势规律:几乎全年的平均气温都在0度以上,最高气温达到了35度,最低气温在零下4度左右,从全年的角度来看,气温差值的波动并不大,但是在年初几个月(冬春)的气温差要高于年中(夏秋)的气温差;这一点同样体现在平均气温的波动上,200天附近的平均气温波动程度要明显低于100天附近的波动程度,这说明夏天虽然热,但是温度还是相对稳定的,与春天相比,很显然是春天更容易伤风感冒。
下面以月份为单位,求2011年每月的平均温度:
avertH2011<-aggregate(tH~month,weather2011,mean)
avertL2011<-aggregate(tL~month,weather2011,mean)
得到了两个数据框,然后用merge()函数将其整合:
avert2011<-merge(avertH2011,avertL2011)
使用apply()函数添加一列平均值:
avert2011$tM<-apply(avert2011[,2:3],1,mean)
再使用apply()函数添加一列差值,首先要定义一个函数求差值:
Dif<-function(data){
tH-tL
}
avert2011$tD<-apply(avert2011,1,Dif)
在avert2011的df里添加了一列名为tD的变量,代表气温差值(tH-tL)
保留一位小数
avert2011[,2:5]<-round(avert2011[,2:5],digits=1)
接下来可以利用整理出的2011年的气温数据进行可视化处理:绘制折线图
attach(avert2011)
平均差值
plot(month,tD,xaxt='n',yaxt='n',ylim=c(6,11),type='b',main='Monthly Average Temperature Difference \n of Year2011')
axis(1,at=seq(1,12,1))
axis(2,at=seq(6,11,0.5))
在折线图中添加数值标注
text(month,tD+0.2,labels=tD)
从图中可以看到温差最大的月份是四月(10.6℃),而且整个春季的月平均温差要高于其他三季。
平均气温
plot(month,tM,xaxt='n',yaxt='n',ylim=c(0,30),type='b',main='Monthly Average Temperature \n of Year2011')
axis(1,at=seq(1,12,1))
axis(2,at=seq(0,30,2))
text(month+1,tM,labels=tM)
text(11.2,5,labels=5.2)#补上十二月的数据
对月平均气温数据的分析结论与之前对全年气温的分析结果相符