注:本文中部分功能的实现方法的纠正和改进记录于后续文章。
目的如题,使用到的资源如下:
1、python3开发环境
2、request库
3、numpy库
4、chrome浏览器
5、空气质量数据网站:https://aqicn.org/map/china/cn/
Ok, let's go!
步骤如下:
1、初始化
import requests
import numpy as np
import matplotlib.pyplot as plt
Ok!
2、爬数据
用chrome浏览器打开目标网站——》
右键—检查—network—查看Request URL——》
URL:https://api.waqi.info/mapq/bounds/?bounds=11.350796722383672,78.66210937500001,54.87660665410869,128.58398437500003&inc=placeholders&k=2Y2EvHR9IFVgcIydDSTJWXmpjeEc9AyNSFkYzYw==&=1543983476327
观察发现上面URL中bounds表示当前页面显示的坐标范围,经过测试将其改为——》
https://api.waqi.info/mapq/bounds/?bounds=-50,-160,74,180&inc=placeholders&k=2Y2EvHR9IFVgcIydDSTJWXmpjeEc9AyNSFkYzYw==&=1543983476327
注意只改bounds,其余不用动。
添加代码爬+简单清理——》
r=requests.get('https://api.waqi.info/mapq/bounds/?bounds=-50,-160,74,180&inc=placeholders&k=_2Y2EvHR9IFVgcIydDSTJWXmpjeEc9AyNSFkYzYw==&_=1543983476327')
len(r.json())
rr = r.json()
a = []
b = []
c = []
for i in rr:
lat = int(i['lat']) #纬度
lon = int(i['lon']) #经度
aqi = i['aqi'] #PM2.5空气质量指数
if (aqi < '0' or aqi > '998'): #清理无效数据
aqi = '0'
aqi=int(aqi)
a.append(lat)
b.append(lon)
c.append(aqi)
Ok!
3、绘制图形
添加代码——》
height = np.max(a) + 1
width = np.max(b) + 1
arr = np.zeros((height, width)) #构造矩阵
for i in range(len(a)):
arr[a[i], b[i]] = c[i]
plt.matshow(arr, cmap='hot') #或者使用plt.imshow(arr, cmap='hot')
plt.colorbar()
plt.show()
绘制出图形如下,显示颜色及空气质量指标AQI关系见右侧条形柱——》
Ok!
总结:
1、数据清理部分代码不够专业精简。
2、图形坐标轴与实际经纬度不符。
3、采样数量不足导致构造的矩阵中零值过多,整体偏暗。
4、绘制图形没有世界地图作为背景,可视化效果欠佳。