对天气数据进行简单的数据分析

用到的数据是在某地级市政府网站获取的公开数据,现以天气数据为例进行简单的数据分析

初始数据以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)#补上十二月的数据

对月平均气温数据的分析结论与之前对全年气温的分析结果相符

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值