我们要做如下两张图。
空气质量指数AQI的分布图。
PM2.5的分布图。
一、获取空气质量指数AQI和PM2.5浓度数据
刚开始想找这个网站,可网页打开的速度太慢,导致代码执行一度停滞。
网站提供的实时数据排行榜,已经有快半年没有更新了。
我就重新选择这个作为Python爬取的数据来源。
打开Anaconda的Jupyter Notebook,新建New一个Python文件。这次使用的库有点多,后几个是为了坐标转换用的,此次没有转换,因为区域广,影响不大。
把网页实例化。
现在显示的是358,上午我尝试的时候是350。
我们通过xpath解析出所有的城市名,但有重复的,正好多了一倍。716是最后一个,正好显示排行榜的最后一名,也就是说,要从中间截一半。
得到城市名,从358开始,到715结束。
类似的,通过xpath解析出所有的空气质量状况。
通过xpath解析出所有的省份。
得到空气质量状况和省份,从358开始,到715结束。
通过xpath解析出所有的空气质量指数AQI。
通过xpath解析出所有的PM2.5浓度。
得到空气质量指数AQI和PM2.5浓度,后者从359开始,到716结束,因为解析出来的数量是717,第一个是标题。
把所有的内容都输出下,看看是否显示完整。
把所有内容转换为DataFrame结构,并导出为csv保存,因为一个小时会更新一次,下面操作以今天下午15点的数据为例。
二、获取城市坐标
获取城市坐标的url,key记得用(高德开放平台)Web服务的。
还是放在这里看吧,结构清晰多了,我们主要需要城市名city和坐标loaction。有的同学会有疑问,前面我们不是已经有了城市名了,怎么还获取呢?用ArcGIS作图的时候就有影响了。
获取城市坐标的函数。
把城市名作为参数依次调用city函数,并把获取的坐标拆分出来,添加到DataFrame结构中。
导出为csv文件格式。
三、ArcGIS制图
打开ArcGIS中的ArcMap,把刚才产生的cvs文件和城市shp文件拖到中间。
在csv文件上,右键,点击显示XY数据。
在打开的对话框中,设置X、Y字段分别为lng和lat。
在cities图层,右键,点击连接和关联—>连接。
设置本图层NAME和csv文件中的city连接。
接着往下操作时,会出现大片的空白。右键打开属性表,你会发现,大部分的值都是空值。为什么?因为csv文件里的city字段,没有市(或其他),连接不到一起。
我们回到Jupyter Notebook,把从city函数中获取的城市名赋值给DataFrame结构中的city列,导出csv文件。
把刚才在ArcMap中的操作再进行一次,然后右键cities,点击属性,符号系统—>显示—>数量—>分级色彩—>字段—>值,选AQI。
在最后带事件的图层(显示XY数据产生的),右键,点击标注要素,就能把城市名显示出来;在cities点击也可以,有少许区别。
最后的成图,点击菜单文件—>导出地图可以产生。
结尾
PM2.5的需要重新加载一个新的cities图层。
空白的地方,就是数据为空,没数据或数据未清洗造成的。