R语言对苏州天气的分析及预测 天气篇

    坐标苏州,来这边刚好一年的时间,又到四月,梅雨季节(?)最能感受到烟雨江南的朦胧美,才怪!实际上的心情是,“清明时节雨纷纷,放假宅家欲断魂”,已经无力吐槽这春夏交战冬天突围的诡异天气变化了,正好有时间,所以想用高大上的技术语言来解读一下苏州的天气特点。

    历史天气数据来源:http://tianqi.2345.com/wea_history/54511.htm,这是北京的历史数据,采样城市北京、上海、苏州、长沙、广州、一共采集了2011-1-1到2015-4-2这四年三个月共1542(354+366+365+365+92)天的天气数据,其中2011-1-17到2011-1-25这十天的数据缺失,查了多个网站都发现这种情况,就没有把数据补齐了。另外,上海、苏州、广州这三个城市2012-1-15这天,长沙2015-2-10这天,五个城市2014-3-8这天的数据缺失,这里根据前后两天的温度取平均值,天气定为阴,风向后风级都根据前后天补齐。下面两个图是在两个不同的网站上查到的历史天气数据都是有缺失的。

技术分享

技术分享

    将数据做完清洗整理后,存做csv格式,数据输入R中,并查看数据基本结构如下:

beijing <-read.csv("BeiJing.csv",header=T,stringsAsFactors=FALSE)
changsha <-read.csv("Changsha.csv",header=T,stringsAsFactors=FALSE)
guangzhou <-read.csv("GuangZhou.csv",header=T,stringsAsFactors=FALSE)
shanghai <-read.csv("ShangHai.csv",header=T,stringsAsFactors=FALSE)
suzhou <-read.csv("SuZhou.csv",header=T,stringsAsFactors=FALSE)

head(suzhou,n=5)
技术分享

每一列分别是:date(日期)、highestTemp(最高温度)、lowest(最低温度)、weather(天气)、wind(风向)、windForce(风级)。

 

天气篇

 

统计的基本天气类型:雪、雨、晴、阴,优先级顺序也是这样,就是说如果是雨雪天气,记为雪,晴转多云记为晴,另外多云和阴都记为阴,这里有个链接说明了气象中阴和多云的差别,主要是云量大小的差异,http://www.guokr.com/question/252793/,这里我把它统一算作阴,还有雾、霾、浮尘天气都记做阴。

weatherStat <- function(x){
count <- numeric(0)
count[1:5] <- 0
for(i in 1:length(x[[4]])){
           if(length(grep("雪",x[[4]][i]))>0){
                    count[1] <- count[1]+1
           }else if(length(grep("雨",x[[4]][i]))>0){
                    count[2] <- count[2]+1
           }else if(length(grep("晴",x[[4]][i]))>0){
                    count[3] <- count[3]+1
           }else if((length(grep("阴",x[[4]][i]))>0)||(length(grep("多云",x[[4]][i]))>0)||(length(grep("雾",x[[4]][i]))>0)||(length(grep("霾",x[[4]][i]))>0)||(length(grep("浮尘",x[[4]][i]))>0)){
                    count[4] <- count[4]+1                       
           }else{
                    count[5] <- count[5]+1    
                    print(x[[4]][i])           
           }
}
count
}
 
statAll<-list(beijing=numeric(0),suzhou=numeric(0),shanghai=numeric(0),changsha=numeric(0),guangzhou=numeric(0))
statAll$suzhou<- weatherStat(suzhou)
statAll$beijing<- weatherStat(beijing)
statAll$shanghai<- weatherStat(shanghai)
statAll$changsha<- weatherStat(changsha)
statAll$guangzhou<- weatherStat(guangzhou)
 
statAll<- as.data.frame(statAll)
statAll<- statAll[-5,]#第五行,是统计除这四种天气外还是否有其他情况,五个城市都为0,所以删除这一行,前面雾、霾、浮尘都是在这个类别下发现然后整理到阴下面的
rownames(statAll)<- c("雪","雨","晴","阴")
colnames(statAll)<- c("北京","苏州","上海","长沙","广州")
statAll
statAll<- as.matrix(statAll)
barplot(statAll,legend=TRUE,col=c("snow3","lavender","khaki1","lemonchiffon"))
技术分享
技术分享

    这个简单的统计可以看出基本上越往南走,晴天越多,下雨天则是相比而言南方比北方更多,下雪天则是北方比南方多,不过这里北方就只取了北京一个城市。到这里我发现对苏州我似乎还有点误解,相比曾经呆过的长沙而言,这里的雨天还比较少,为什么我总有种这里一到放假就下雨的感觉呢?

    下面只看苏州的天气情况,看这几年的一个统计:

#2011年1:354,2012年355:720,2013年721:1085,2014年1086:1450,2015年1451:1542
statSuzhou<-list(one=numeric(0),two=numeric(0),three=numeric(0),four=numeric(0),five=numeric(0))
statSuzhou$one<- weatherStat(suzhou[1:354,])
statSuzhou$two<- weatherStat(suzhou[355:720,])
statSuzhou$three<- weatherStat(suzhou[721:1085,])
statSuzhou$four<- weatherStat(suzhou[1086:1450,])
statSuzhou$five<- weatherStat(suzhou[1451:1542,])
statSuzhou<- as.data.frame(statSuzhou)
statSuzhou<- statSuzhou[-5,]#第五行,是统计除这四种天气外还是否有其他情况,五个城市都为0,所以删除这一行
rownames(statSuzhou)<- c("雪","雨","晴","阴")
colnames(statSuzhou)<-c("2011","2012","2013","2014","2015")
statSuzhou
statSuzhou<- as.matrix(statSuzhou)
barplot(statSuzhou,legend=TRUE,col=c("snow3","lavender","khaki1","lemonchiffon"))
技术分享

    苏州天气,晴天的时间除了2013年都在30%以下,2013年天气都挺好的?后面可以看下气温在2013年有没有什么异常。

技术分享

技术分享

    那么不同月下雨有什么差异呢?能看出集中的降雨时间吗?接下来根据月份做一个天气的统计。

    ?查了一下正常的梅雨季节应该是六月到七月,我最前面的梅雨季节的说法不恰当,这里就不改了。

statMonthly<- data.frame()
statMonthly[1:5,1]
count<- 1
for(i in2011:2015){
if(i != 2015){
           for (j in 1:12) {
                    temp <-nrow(suzhou[grep(paste(i,"-",j,"-",sep=""),suzhou$date),])
                    statMonthly[1:5,((i-2011)*12+j)]<- weatherStat(suzhou[count:(count+temp-1),])
                    print(weatherStat(suzhou[count:(count+temp-1),]))
                    print(c(((i-2011)*12+j)))
                    count <- count + temp
           }
}else{
           for (j in 1:3) {
                    temp <-nrow(suzhou[grep(paste(i,"-",j,"-",sep=""),suzhou$date),])
                    statMonthly[1:5,((i-2011)*12+j)]<- weatherStat(suzhou[count:(count+temp-1),])
                    print(weatherStat(suzhou[count:(count+temp-1),]))
                    print(c(((i-2011)*12+j)))
                    count <- count + temp
           }
}
}
 
statMonthly<- statMonthly[-5,]
rownames(statMonthly)<- c("雪","雨","晴","阴")
colnames(statMonthly)<-c(paste(rep(2011,12),1:12,sep="-"),paste(rep(2012,12),1:12,sep="-"),paste(rep(2013,12),1:12,sep="-"),paste(rep(2014,12),1:12,sep="-"),paste(rep(2015,3),1:3,sep="-"))
statMonthly<- as.matrix(statMonthly)
barplot(statMonthly,legend=TRUE,col=c("snow3","lavender","khaki1","lemonchiffon"))
barplot(statMonthly,col=c("snow3","lavender","khaki1","lemonchiffon"),cex.names=.6)
lines(statMonthly[2,],type="l",col="red")
 
statMonthly
技术分享
技术分享


    上面是按月统计的天气结果图,可以看出,雨雪天气在4-8月会比较集中,上图中用红线标出来的部分是对应的每年的4-8月份。并且,2013年,雨雪天相比而言比较少。不过横轴太长,看起来很费力。

 

    下面不考虑2015年的数据,看2011-2015年,每个月的天气统计情况。

statMonthly2<- data.frame()
temp<- 1:51
for(i in1:12){
if(i==12){
           for(j in 1:4){
                    statMonthly2[j,12]<- sum(statMonthly[j,temp%%12==0&temp<49])          
           }
    }else{
    for(jin 1:4){
               statMonthly2[j,i]<- sum(statMonthly[j,temp%%12==i&temp<49])               
    }
    }
}
rownames(statMonthly2)<- c("雪","雨","晴","阴")
colnames(statMonthly2)<- 1:12
statMonthly2<- as.matrix(statMonthly2)
barplot(statMonthly2,col=c("snow3","lavender","khaki1","lemonchiffon"),cex.names=.8)
技术分享

    这里就能清楚看出来,降雨量比较多的月份从是6-8月,正是梅雨季,但是其他月份的降雨量相差的不是很大。比较明显的是北京,如下图:

技术分享

这里主要是对天气的一个统计分析,能看出苏州是一个很典型的江南城市,雨雪天气比较多,并且全年都有,6-8月稍多。分析的这四年中,2013年比较特别,雨天比较少天晴的时间比较多。而我比较关注的四月,从统计结果看起来,阴晴雨的时间看起来很平均。又刮风下雨时,请记住这里晴天的几率只有不到百分之三十,所以阴雨天,正常!

温度篇待续。

 

有任何问题建议欢迎指正,转载请注明来源,谢谢!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。