大数跨境
0
0

Python探秘:在成都需要戴口罩防霾吗?

Python探秘:在成都需要戴口罩防霾吗? 数据皮皮侠
2019-12-02
1
导读:成都的空气质量到底好不好,在成都需要戴口罩防霾吗?本文将用Python对成都的空气质量进行分析。

引言、成都的空气质量到底好不好

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)


本期作者:万婉馨

本期编辑:陈颖姝


【声明】内容源于网络
0
0
数据皮皮侠
社科数据综合服务中心,立志服务百千万社科学者
内容 2137
粉丝 0
数据皮皮侠 社科数据综合服务中心,立志服务百千万社科学者
总阅读2.3k
粉丝0
内容2.1k