无锡及各分区天气相互关系探索

无锡的天气太反复无常了,一会是太阳高挂,一会是狂风大作、倾盆大雨。这不又被雨淋了,还感冒了,突然间有了想法。每个地级市都由不同城区组成,每个城区有着自己的天气预报,那么地级市的天气预报跟城区的天气预报有啥关系呢?是简单的线性相加,还是某个城区的天气就代表着该地级市之间的关系,以及各城区之间是不是有着某种联系,为此,我特意爬取了无锡天气及各个城区的九月份天气,试图探索它们之间的关系。

(1)数据获取

利用自己编写的爬虫代码,在天气网爬取了相关天气信息,代码如下:

#无锡天气爬取

library(rvest)
library(DT)
url_list<-c('http://lishi.tianqi.com/beitangqu/201709.html','http://lishi.tianqi.com/binhuqu/201709.html','http://lishi.tianqi.com/conganqu/201709.html',
'http://lishi.tianqi.com/huishanqu/201709.html','http://lishi.tianqi.com/jiangyin/201709.html','http://lishi.tianqi.com/nanchangqu/201709.html',
'http://lishi.tianqi.com/wuxi1/201709.html','http://lishi.tianqi.com/xishan/201709.html','http://lishi.tianqi.com/yixing/201709.html')
result<-data.frame(日期=1,最高气温=1,最低气温=1,天气=1,风向=1,风力=1,地区=1)
result<-result[-1,]
for(url in url_list) {
diqu1<-substr(url,regexpr('com/',url)+4,regexpr('/2017',url)-1)
diqu<-rep(diqu1,30)
web<-read_html(url)
ul_list<-web%>%html_nodes('div.tqtongji2')%>%html_children()%>%html_children()%>%html_text()
j=1
for(i in seq(7,length(ul_list),6)) {

riqi[j]<-ul_list[i]
HT[j]<-ul_list[i+1]
LT[j]<-ul_list[i+2]
TQ[j]<-ul_list[i+3]
fengxiang[j]<-ul_list[i+4]
fengli[j]<-ul_list[i+5]
j=j+1


}
result1<-data.frame(日期=riqi,最高气温=HT,最低气温=LT,天气=TQ,风向=fengxiang,风力=fengli,地区=diqu)
result<-data.frame(rbind(result,result1))

}
DT::datatable(result)
write.csv(result,'wuxiweather.csv')

结果如下所示:

《无锡及各分区天气相互关系探索》
《无锡及各分区天气相互关系探索》

(2)数据清洗与转化

首先我们来看看数据类型:

> str(result)
'data.frame': 270 obs. of 7 variables:
$ 日期 : Factor w/ 30 levels
"2017-09-01","2017-09-02",..: 1 2 3 4 5 6 7 8 9 10 ...
$ 最高气温: Factor
w/ 10 levels "23","24","25",..: 6 7 5 7 9 5 5 7 5
8 ...
$ 最低气温: Factor
w/ 9 levels "17","18","19",..: 5 6 7 8 9 7 5 6 8
7 ...
$ 天气 : Factor w/ 6 levels "多云","雷阵雨",..:
4 1 2 5 1 6 2 1 4 2 ...
$ 风向 : Factor w/ 9 levels "","北风","东北风",..:
4 3 4 4 7 8 5 6 4 9 ...
$ 风力 : Factor w/ 5 levels "1级","2级","3级",..: 2
2 2 1 1 2 1 2 2 2 ...
$ 地区 : Factor w/ 9 levels
"beitangqu","binhuqu",..: 1 1 1 1 1 1 1 1 1 1 ...

总共有270条记录,7个变量,且全部为因子类型,因此需要转换类型。

我们将数据写入到excel中进行处理,处理后结果如下所示:

其中天气进行了替换(0-晴、1-多云、2-阴、3-雷阵雨、4-阵雨、5-中雨)

《无锡及各分区天气相互关系探索》
《无锡及各分区天气相互关系探索》

再次将其导入到Rstudio中,观察整理后的结果

> result2<-read.csv(file.choose())
> str(result2)
'data.frame': 270 obs. of 8 variables:
$
ID : int 1 31 61 91 121 151 182 212 242 2 ...
$ 日期 : Factor w/ 30 levels
"2017/9/1","2017/9/10",..: 1 1 1 1 1 1 1 1 1 12 ...
$ 最高气温:
num 28 28 28 28 28 28 28 28 28 29 ...
$ 最低气温:
num 21 21 21 21 21 21 21 21 21 22 ...
$ 天气 : int 2 2 2 2 2 2 2 2 2 1 ...
$ 风向 : Factor w/ 9 levels "","北风","东北风",..:
4 4 4 4 3 4 4 4 4 3 ...
$ 风力 : int 2 2 2 2 1 2 2 1 2 2 ...
$ 地区 : Factor w/ 9 levels "北塘","滨湖",..:
1 2 3 4 5 6 8 9 7 1 ...
我们首先来观察一下它们的特征,进行初步的分析:
> ggplot(data=result2,aes(x=result2$地区,y=wuxi$最高气温))+geom_boxplot()
>
p<-ggplot(data=result2,aes(x=result2$地区,y=result2$最高气温,color=result2$地区))+geom_boxplot()
> p1<p+ylab("最高气温")+xlab("地区")
> p1<-p+ylab("最高气温")+xlab("地区")
> p1
> p2<-p1+geom_jitter()
> p3<-p2+labs(title="无锡及分区9月最高气温分布")+theme(plot.title
= element_text(hjust = 0.5))
> p3

结果如下图所示:

我们发现宜兴的最高气温分布跟其它的有明显不同,其中位线明显高于其它组,表明宜兴9月份的平均最高气温明显高于其它组,因此,把宜兴先暂定为一组。

《无锡及各分区天气相互关系探索》
《无锡及各分区天气相互关系探索》

同理,我们也可以看看最低气温

《无锡及各分区天气相互关系探索》
《无锡及各分区天气相互关系探索》

从图中可以可看出宜兴的上四分之三线比其它地区高,表明宜兴的最低气温跟其它地区有所不同,故也暂且将其归为一类。

以上我们是从地区的维度去观察无锡跟各分区气温的不同,现在我们从时间的维度去看看

《无锡及各分区天气相互关系探索》
《无锡及各分区天气相互关系探索》

以上表示的是各个分区气温随着时间的漂移的变化趋势,最顶端对应着最高气温,最低端对应着最低气温,图中可以看见有些凸起,也有些凹陷,而这些正是宜兴和江阴地区,其它分区跟无锡吻合比较好,由此表明,在时间的维度上,江阴与宜兴的天气跟无锡的天气有差别,综上故将它们排除。

《无锡及各分区天气相互关系探索》
《无锡及各分区天气相互关系探索》

我们进一步考察天气、风向、风力,以地区作为颜色分组变量,在天气图中,只出现了一种颜色,表明无锡及各分区是高度重合的,即每天天气状况一致,故可去除该变量。

从风险和风力可知,它们之间存在着不一致,而这种不一致正是我们分类的关键。既之前的宜兴和江阴天气的不同,我们发现宜兴和江阴的风向跟风力也与其它分区存在一定的区别,更进一步表明宜兴和江阴的天气不能代表无锡低级市。

故后面分析去除宜兴和江阴的数据,以及天气变量。

《无锡及各分区天气相互关系探索》
《无锡及各分区天气相互关系探索》

从图中可以看出,除崇安外,其它跟无锡的天气均有差别。因此,最有可能是崇安区的天气代表着无锡的地级市天气。分析到这里,可以说基本上分析完了。

小编原先本来想用聚类和回归的,分析完之后,没想到完全没用到啊,小编我也是泪流满面。

小编冥思苦想,总觉得哪里不对劲。发现可以使用二分类、跟无锡天气相同时为1,不同时为0,最后求解矩阵的特征值,即为解。

在Excel中将其合并,如图所示

《无锡及各分区天气相互关系探索》
《无锡及各分区天气相互关系探索》

构造0-1矩阵

《无锡及各分区天气相互关系探索》
《无锡及各分区天气相互关系探索》
《无锡及各分区天气相互关系探索》
《无锡及各分区天气相互关系探索》

用R语言分类

《无锡及各分区天气相互关系探索》
《无锡及各分区天气相互关系探索》

第一组:北塘、滨湖、惠山、南长

第二组:无锡、崇安

第三组:宜兴

第四组:江阴

第五组:锡山

让我们再来看看无锡的地图

《无锡及各分区天气相互关系探索》

从地图上来看宜兴和江阴地处无锡边界,跟无锡不一样的天气符合客观情况,北塘、滨湖、惠山、南长相处比较近,且加起来的大小跟江阴和宜兴差不多,故属于一类也符合客观情况,而崇安区作为无锡的繁华地带,是最有可能代表着无锡的。因此,该分析得出的结论具有一定的理论基础。

    原文作者:紫丁香
    原文地址: https://zhuanlan.zhihu.com/p/30730897
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞