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年比较特别,雨天比较少天晴的时间比较多。而我比较关注的四月,从统计结果看起来,阴晴雨的时间看起来很平均。又刮风下雨时,请记住这里晴天的几率只有不到百分之三十,所以阴雨天,正常!

温度篇待续。

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

时间: 2024-10-29 19:08:28

R语言对苏州天气的分析及预测 天气篇的相关文章

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

温度篇     前面已经讲了苏州的天气特点,还是用相同的数据,做接下来的苏州气温特点的分析预测,是的预测在这里! 首先看下2011年到2015年苏州整体的温度表现是什么样的. plot(suzhou$highestTemp,type="l",col="red",main="苏州2011-2015年气温图",xlab="时间轴",ylab="温度℃") lines(suzhou$lowestTemp,type

【R实践】时间序列分析之ARIMA模型预测___R篇

时间序列分析之ARIMA模型预测__R篇 之前一直用SAS做ARIMA模型预测,今天尝试用了一下R,发现灵活度更高,结果输出也更直观.现在记录一下如何用R分析ARIMA模型. 1. 处理数据 1.1. 导入forecast包 forecast包是一个封装的ARIMA统计软件包,在默认情况下,R没有预装forecast包,因此需要先安装该包 > install.packages("forecast') 导入依赖包zoo,再导入forecast包 > library("zoo&

R语言做地图上的分析

R和ggplot可视化功能非常强大,了解了一下其中的地图做法,发现R做世界地图.美国地图非常容易,但做中国地图就太麻烦了,需要自己DIY. DIY也有多种方式,但网络上各种帖子教程的出图效果都不太理想,达不到工作用要求.下面是我的摸索过程,记录如下备忘,也请教于R老师们. 参考书目:ggplot2,R graphics cookbook,参考贴:http://site.douban.com/182577/widget/notes/10568279/note/257898418/ 0.引子 R里有

R语言之描述性和探索性分析

探索性分析简称EDA 一.基本描述性统计量1.summary函数可以得到最大值.最小值.中位数和均值 2.四分位数四分位数可以通过quantile函数得到,diff得到各分位数的之差> library(RSADBE)> data("TheWALL")> quantile(TheWALL$Score)> diff(quantile(TheWALL$Score)) 3.极值range返回最大值和最小值 4.极差diff(range())返回极差 5.四分位间距IQR

R语言画全基因组关联分析中的曼哈顿图(manhattan plot)

1.在linux中安装好R 2.准备好画曼哈顿图的R脚本即manhattan.r,manhattan.r内容如下: #!/usr/bin/Rscript #example : Rscript plot_manhatom.r XXX.assoc XXX.pdf argv <- commandArgs() #define the function to plot the manhatton and quantitle-quantitle plot plot_manhatton<-function(

吴裕雄--天生自然 R语言开发学习:功效分析

#----------------------------------------# # R in Action (2nd ed): Chapter 10 # # Power analysis # # requires packages pwr to be installed # # install.packages("pwr") # #----------------------------------------# par(ask=TRUE) library(pwr) # t te

吴裕雄--天生自然 R语言开发学习:功效分析(续一)

#----------------------------------------# # R in Action (2nd ed): Chapter 10 # # Power analysis # # requires packages pwr to be installed # # install.packages("pwr") # #----------------------------------------# par(ask=TRUE) library(pwr) # t te

R语言重要数据集分析研究——需要整理分析阐明理念

1.R语言重要数据集分析研究需要整理分析阐明理念? 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候如何下手分析,数据分析的第一步,探索性数据分析. 统计量,即统计学里面关注的数据集的几个指标,常用的如下:最小值,最大值,四分位数,均值,中位数,众数,方差,标准差,极差,偏度,峰度 先来解释一下各个量得含义,浅显就不说了,这里主要说一下不常见的 众数:出现次数最多的 方差:每个样本值与均值的差得平方和的平均数 标准差:又称均方差,是方差的二次方根,用来衡量一个数据集的集中性 极差:最大值

R语言-处理异常值或报错的三个示例

Tuesday, March 31, 2015 之前用rvest帮人写了一个定期抓取amazon价格库存,并与之前价格比较的小程序,算是近期写过的第一个完整的程序了.里面涉及了一些报错的处理. 这里主要参考了stackoverflow上的以下问答: How to skip an error in a loop skip to next value of loop upon error in R tryCatch部分,后续查找资料,发现以下博文: 1. R语言使用tryCatch进行简单的错误处理