引言、成都的空气质量到底好不好
11月21日,成污防“三大战役”办发布了通知“决定于2019年11月23日零时启动重污染天气蓝色预警”。
来源:成都市政府信息公开网站
被这个文件吓到的我立马去查查了成都的空气质量实况。
来源:中国天气网站
11月30号这天的空气质量等级暂时还是绿的一片。那么问题来了,成都的空气质量究竟是好还是不好?
一、近一年(2018.11~2019.10)成都每月空气质量情况
“中国空气质量在线监测分析平台”收录了各大城市的空气质量历史数据,我们爬取该网站上收录的成都空气质量统计历史数据。
首先我们来用Python分析成都近一年的月空气质量情况。
#导入包import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns#导入数据data_cd = pd.read_excel(r'成都空气质量.xlsx')#查看数据data_cd.head()
data_cd.tail()
数据处理
data_cd=data_cd.iloc[59:71] #只取2018-11到2019-10的数据data_cd.drop('时间_链接',1) #删除“时间_链接”列data_cd_aqi=data_cd[['时间_文本','AQI']] #只取“时间_文本”和“AQI”列绘制折线图# matplotlib字体的默认设置中没有中文字体,运行如下代码添加中文字体的名称from pylab import *mpl.rcParams['font.sans-serif'] = ['SimHei']plt.figure(figsize=(2, 2)) #图片长宽plt.rcParams['savefig.dpi'] = 500 #图片像素plt.rcParams['figure.dpi'] = 300 #分辨率data_cd_aqi_plot=data_cd_aqi.plot(kind="line",title="成都市近一年月平均空气质量指数(截止2019年10月)",ylim=50,color='limegreen')data_cd_aqi_plot.set_ylabel('AQI')data_cd_aqi_plot.set_xlabel('月份')#设置x轴x_ticks=[]for i in range(59,71):x_ticks.append(data_cd_aqi['时间_文本'][i])x = range(59,71,1)plt.xticks(x, x_ticks,rotation=-60)#在图中区分季节winter_end=62.5plt.axvline(x=winter_end,color="powderblue",ls="--",lw=0.5)plt.text(data_cd_aqi[data_cd_aqi["时间_文本"]=="2019-01"].index[0], 90,"冬",fontsize=12,color="powderblue")spring_end=65.6plt.axvline(x=spring_end,color="palegreen",ls="--",lw=0.5)plt.text(data_cd_aqi[data_cd_aqi["时间_文本"]=="2019-04"].index[0], 90,"春",fontsize=12,color="palegreen")summer_end=68.5plt.axvline(x=summer_end,color="lightcoral",ls="--",lw=0.5)plt.text(data_cd_aqi[data_cd_aqi["时间_文本"]=="2019-07"].index[0], 90,"夏",fontsize=12,color="lightcoral")autumn_end=59.5plt.axvline(x=autumn_end,color="bisque",ls="--",lw=0.5)plt.text(69.5, 90,"秋",fontsize=12,color="bisque")plt.savefig('成都近一年月空气质量指数.jpg', dpi=500,bbox_inches = 'tight')plt.show()
通过这幅图我们可以发现,成都近一年的月平均空气质量指数波动较大,冬季的空气质量最差。我们再用Python来具体看一下成都近一年每一天的空气质量情况。
二、近一年(2018.11.1~2019.10.31)成都每日空气质量情况
#导入包import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns#导入数据data_cd_day = pd.read_excel(r'成都日空气质量.xlsx')查看数据data_cd_day.head()
data_cd_day.tail()
处理数据
data_cd_day=data_cd_day.iloc[1795:2160] #只取2018-11-01到2019-10-31的数据#处理缺失值data_cd_day[data_cd_day["空气质量等级"]=="无"] #查找缺失值
#删除缺失值data_cd_day=data_cd_day.drop(index=data_cd_day[data_cd_day['空气质量等级']=='无'].index)data_cd_day[data_cd_day["空气质量等级"]=="无"]data_cd_day_aqi=data_cd_day[['日期','AQI']] #只取“日期”和“AQI”列data_cd_day_aqi=data_cd_day_aqi.reset_index(drop=True)#reset_index:重新设置索引,drop=True:删除原索引绘制折线图plt.figure(figsize=(2, 1))plt.rcParams['savefig.dpi'] = 500plt.rcParams['figure.dpi'] = 300data_cd_day_aqi_plot=data_cd_day_aqi.plot(kind="line",title="成都市近一年日平均空气质量指数(截止2019年10月31日)",ylim=0,color="cornflowerblue")data_cd_day_aqi_plot.set_ylabel('AQI')data_cd_day_aqi_plot.set_xlabel('日期')#设置x轴x_ticks=[]for i in range(0,365,30):x_ticks.append(data_cd_day_aqi['日期'][i])x = range(0,365,30)plt.xticks(x, x_ticks,rotation=-70)#在图中标记AQI均值aqi_ave=np.mean(data_cd_day_aqi["AQI"])plt.axhline(y=aqi_ave,color="lightsteelblue",ls="--")#在图中标记最值点max_x=data_cd_day_aqi[data_cd_day_aqi["AQI"]==data_cd_day_aqi["AQI"].max()].index[0]max_y=data_cd_day_aqi["AQI"].max()plot(max_x, max_y,'.',color="coral")plt.text(max_x, max_y, max_y,fontsize=9,color="coral")min_x=data_cd_day_aqi[data_cd_day_aqi["AQI"]==data_cd_day_aqi["AQI"].min()].index[0]min_y=data_cd_day_aqi["AQI"].min()plot(min_x, min_y,'.',color="seagreen")plt.text(min_x, min_y, min_y,fontsize=9,color="seagreen")#在图中区分季节winter_end=data_cd_day_aqi[data_cd_day_aqi["日期"]=="2019-02-28"].index[0]plt.axvline(x=winter_end,color="powderblue",ls="--",lw=0.5)plt.text(data_cd_day_aqi[data_cd_day_aqi["日期"]=="2019-01-07"].index[0], 190,"冬",fontsize=12,color="powderblue")spring_end=data_cd_day_aqi[data_cd_day_aqi["日期"]=="2019-05-31"].index[0]plt.axvline(x=spring_end,color="palegreen",ls="--",lw=0.5)plt.text(data_cd_day_aqi[data_cd_day_aqi["日期"]=="2019-04-07"].index[0], 190,"春",fontsize=12,color="palegreen")summer_end=data_cd_day_aqi[data_cd_day_aqi["日期"]=="2019-08-31"].index[0]plt.axvline(x=summer_end,color="lightcoral",ls="--",lw=0.5)plt.text(data_cd_day_aqi[data_cd_day_aqi["日期"]=="2019-07-07"].index[0], 190,"夏",fontsize=12,color="lightcoral")autumn_end=data_cd_day_aqi[data_cd_day_aqi["日期"]=="2018-11-30"].index[0]plt.axvline(x=autumn_end,color="bisque",ls="--",lw=0.5)plt.text(data_cd_day_aqi[data_cd_day_aqi["日期"]=="2019-10-07"].index[0], 190,"秋",fontsize=12,color="bisque")plt.show()
通过折线图我们可以看出,虽然空气质量指数最高的一天出现在冬季,但其他季节都有AQI超过100达到污染的情况。
我们再用Python来看一下具体每一天的空气质量等级。
绘制热力图
aqi_list=[]for i in range(0,data_cd_day_aqi.shape[0]):aqi_list.append(data_cd_day_aqi["AQI"][i])aqi_array=np.array(aqi_list) #列表转数组aqi_array.resize(18,20)import matplotlib.colors as colcpool = [ '#3EE48B', '#FBFB9A', '#FDA43B', '#FD433B', '#972E70', '#972E70' ]cmap_c = col.ListedColormap(cpool[0:6], 'indexed')fig, ax = plt.subplots(figsize = (9,9))sns.heatmap(aqi_array,cmap=cmap_c,vmax=300,vmin=0,xticklabels=False,yticklabels=False,)ax.set_title('成都近一年(截止到2019年10月底)空气质量等级热力图', fontsize = 15)
绘制环形图
#分组统计不同空气质量等级对应的天数data_aqi_rank=data_cd_day.groupby('空气质量等级').count()
# 生成环形图数据a=data_aqi_rank.iloc[1,0]b=data_aqi_rank.iloc[2,0]c=data_aqi_rank.iloc[3,0]d=data_aqi_rank.iloc[0,0]e=data_aqi_rank.iloc[4,0]plt.figure(figsize = (10, 8))labels = ['优(0≤AQI≤50)','良(51≤AQI≤100)','轻度污染(101≤AQI≤150)','中毒污染(151≤AQI≤200)','重度污染(201≤AQI≤300)']data_rank_count = [a,b,c,d,e]colors = ['limegreen', 'gold', 'orange', 'red', 'mediumvioletred','maroon']# 画环形图wedges1, texts1, autotexts1 = plt.pie(data_rank_count,autopct = '%3.1f%%',radius = 1,pctdistance = 0.85,colors = colors,startangle = 180,textprops = {'color': 'w'},wedgeprops = {'width': 0.55, 'edgecolor': 'w'})# 图例plt.legend(wedges1,labels,fontsize = 12,title = '空气质量等级',loc = 'lower right',bbox_to_anchor = (1, 0.6))# 设置文本样式plt.setp(autotexts1, size=20, weight='bold')# 标题plt.title('成都近一年空气质量等级情况(截止2019年10月底)', fontsize=20)plt.show()
结合热力图和环形图我们可以看出,成都近一年超过一半的天数的空气质量等级是“良”,不到1/4的天数空气达到了污染等级。
三、结论
综合以上的数据分析,我们可以发现,从2018年11月到2019年10月这一年时间里,成都一年四季里都有空气质量等级达到轻度污染及以上的情况。所以即使是在暴雨晴天交替的夏季,也应该关注空气质量情况,做好应对措施。雾霾天佩戴口罩有一定道理,合格的口罩能够过滤掉一部分颗粒物,除了戴口罩,也要做好其他方面的防护。
(在这里分享一下本文所用到的数据:https://pan.baidu.com/s/1dzuKx_S0Tg1qEtwSBosgNw 提取码:gzuk)
本期作者:万婉馨
本期编辑:陈颖姝

