五、空气质量分析与结果展示

五、空气质量分析与结果展示五 空气质量分析与结果展示 5 1 实验背景 近年来随着城市化和工业化的发展 城市空气质量越来越差 从中央到地方各级政府对城市空气质量也越发重视 并对全国各个城市的空气质量进行了长期的采样 下面对全国空气质量进行分析 可以得出我国城市空气质量的大概规律 数据介绍 time 时间 city 城市 AQI 根据细颗粒物 可吸入颗粒物

大家好,我是讯享网,很高兴认识大家。

五、空气质量分析与结果展示

5.1 实验背景

近年来随着城市化和工业化的发展,城市空气质量越来越差,从中央到地方各级政府对城市空气质量也越发重视。并对全国各个城市的空气质量进行了长期的采样。下面对全国空气质量进行分析,可以得出我国城市空气质量的大概规律。

数据介绍

  • time 时间
  • city 城市
  • AQI 根据细颗粒物、可吸入颗粒物、二氧化硫、二氧化氮、臭氧、一氧化碳等六项参数综合得出的空气污染程度及空气质量状况的表述。
  • PM2.5 细颗粒物又称细粒、细颗粒、PM2.5。细颗粒物指环境空气中空气动力学当量直径小于等于 2.5微米的颗粒物。它能较长时间悬浮于空气中,其在空气中含量浓度越高,就代表空气污染越严重。
  • PM10 总悬浮颗粒物是指漂浮在空气中的固态和液态颗粒物的总称,[1]其粒径范围约为0.1-100 微米。有些颗粒物因粒径大或颜色黑可以为肉眼所见,比可吸入颗粒物如烟尘。
  • so2 二氧化硫
  • no2 二氧化氮
  • Co 一氧化碳
  • o3 臭氧
  • primary_pollutant 空气质量指数

5.2 导入支持库

5.2.1 导入支持库
import pandas as pd import numpy as np from pandas import Series, DataFrame import matplotlib as mpl import matplotlib.pyplot as plt 

讯享网
5.2.2 设置pandas列属性
讯享网pd.set_option('display.max_columns', None) 
5.2.3 设置中文显示
mpl.rcParams["font.sans-serif"]=["SimHei"] # 用来正常显示中文标签 mpl.rcParams["axes.unicode_minus"]=False # 用来正常显示负号,解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串 

5.3 数据探查和处理

5.3.1 读取数据源
讯享网data = pd.read_csv('../data/air.csv') 
5.3.2 简单查看数据特征
data.shape data.columns 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hxnNbmBd-17)(Matplotlib基础课程.assets/Matplotlib_08_1.png)]

讯享网data.dtypes 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-acIPR6tl-18)(Matplotlib基础课程.assets/Matplotlib_08_2.png)]

5.3.3 数据特征值初步分析
AQI_min = data.AQI.min() AQI_max = data.AQI.max() display(AQI_min, AQI_max) 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oWc1b0kh-19)(Matplotlib基础课程.assets/Matplotlib_08_3.png)]

讯享网AQI_cut = pd.cut(data.AQI, bins = [AQI_min, 50, 100, 150, 200, 300, AQI_max]) AQI_count = AQI_cut.value_counts() AQI_count 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XebU3dZp-20)(Matplotlib基础课程.assets/Matplotlib_08_4.png)]

5.4 绘图简单分析

5.4.1 绘制AQI分布的柱状图
def func1(): X = np.arange(len(AQI_count)) Y = AQI_count plt.figure(figsize=(8,6)) plt.bar(X,Y,color='steelblue',alpha=0.8) plt.title('AQI分布图') plt.xlabel('AQI区间') plt.ylabel('2014-2018年AQI天数') plt.xticks(np.arange(len(AQI_count)),AQI_count.index, rotation=30) plt.ylim([0,]) percents = [str(round(i*100,2)) + '%'for i in AQI_count / AQI_count.sum()] for x,y,z in zip(X,Y,percents): plt.text(x-0.2,y+5000,z) plt.savefig('1.png') func1() 

img
讯享网

5.4.2 绘制全国污染程度饼图
讯享网# 全国污染程度饼图 def func2(): labels = ['良(50,100]','优(0,50]','轻度污染(100,150]','中度污染(150,200]','重度污染(200,300]','严重污染(300,1210]'] x = [i for i in AQI_count / AQI_count.sum()] colors= ['#32CD32','#FFDAB9','#8A2BE2','#2442aa','#dd5555','#FFFF00'] explode = [0,0.1,0,0,0,0] plt.pie(x=x,#绘图的数据 labels=labels,#数据标签 colors=colors,#饼图颜色 autopct='%.1f%%',#设置百分比 startangle=180,#设置初始角度 #frame=1, #center=(2,2) explode=explode,#设置突出显示 radius=2#设置饼的半径 ) plt.savefig('2.png') func2() 

img

5.4.3 空气指数和pm2.5的关系
# AQI与PM2.5的关系 def func3(pollutant,num1,num2): data2 = data[data[pollutant] < num1] #利用drop方法将含有特定数值的列删除 data2 = data2[data2[pollutant] != 0] data2 = data2[data2['AQI'] < num2] data2 = data2[data2['AQI'] != 0] plt.scatter(data2.AQI, data2[pollutant],s=5) plt.xlabel('AQI') plt.ylabel(pollutant) plt.title('AQI与%s的关系' % pollutant) plt.savefig('%s.png' % pollutant) func3('PM2.5',700,500) 

img

5.4.4 AQI与PM10的关系
讯享网# AQI与PM10的关系 func3('PM10',1000,500) 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FZG2Jezy-24)(Matplotlib基础课程.assets/Matplotlib_08_8.png)]

5.4.5 AQI与SO2的关系
# AQI与SO2的关系 func3('SO2',800,500) 

img

5.4.6 AQI与NO2的关系
讯享网# AQI与NO2的关系 func3('NO2',300,500) 

img

5.4.7 AQI与CO的关系
# AQI与CO的关系 func3('CO',25,500) 

img

5.5 复杂绘图分析

5.5.1 全国一线及新一线AQI平均值排名
讯享网def func4(): yixian_city = data[(data.city=='北京')|(data.city=='上海')|(data.city=='广州')|(data.city=='深圳')|(data.city=='成都')|(data.city=='杭州')|(data.city=='重庆')|(data.city=='武汉')| (data.city=='苏州')|(data.city=='西安')|(data.city=='天津')|(data.city=='南京')|(data.city=='郑州')|(data.city=='长沙')|(data.city=='沈阳')|(data.city=='青岛')| (data.city=='宁波')|(data.city=='东莞')|(data.city=='无锡')].groupby("city")["AQI"].mean().sort_values(ascending=False) plt.figure(figsize=(12,8)) plt.barh(np.arange(len(yixian_city)), yixian_city,color='#FF0000') plt.yticks(np.arange(len(yixian_city)), yixian_city.index) plt.xlabel('AQI') plt.ylabel('城市') plt.title('全国一线城市及新一线城市AQI平均值排名') plt.savefig('3.png') func4() 

img

5.5.2 数据时间处理
data['year'] = pd.to_datetime(data['time']).dt.year data['month'] = pd.to_datetime(data['time']).dt.month data 

img

5.5.3 全国按月份污染物平均值走势
讯享网# 全国按月份污染物平均值走势 def func5(): country_city = data.groupby('month').mean().sort_index() country_city2 = country_city[["AQI","PM2.5","PM10","SO2","NO2","CO"]] plt.figure(figsize=(12,8)) plt.plot(country_city2,label=country_city2.columns,marker = "o" ,mec = "k" , mfc = "w" , mew = 0.5) plt.legend(country_city2) plt.xticks(np.arange(1,13)) plt.xlim([1,12]) plt.xlabel('月份') plt.ylabel('污染物') plt.title('全国污染物平均值走势') plt.savefig('4.png') func5() 

img

5.5.4 沿海代表城市与内地代表城市
# 沿海代表城市与内地代表城市 def func6(): yanhai = data[(data.city=='天津')|(data.city=='深圳')|(data.city=='广州')|(data.city=='上海')].groupby("month")["AQI"].mean() neidi = data[(data.city=='洛阳')|(data.city=='成都')|(data.city=='西安')|(data.city=='贵阳')].groupby("month")["AQI"].mean() plt.figure(figsize=(12,8)) plt.plot(yanhai,label='沿海',marker = "o" ,mec = "k" , mfc = "w" , mew = 0.5) plt.plot(neidi,label='内地',marker = "o" ,mec = "k" , mfc = "w" , mew = 0.5) plt.legend(['沿海代表城市','内地代表城市']) plt.xticks(np.arange(1,13)) plt.xlim([1,12]) plt.xlabel('月份') plt.ylabel('AQI平均值') plt.title('沿海代表城市与内地代表城市AQI平均值走势') plt.savefig('5.png') func6() 

img

5.5.5 每年污染物柱状图
讯享网# 每年污染物柱状图 def func7_1(year): return [data[data.year==year]['AQI'].mean(),data[data.year==year]['PM2.5'].mean(),data[data.year==year]['PM10'].mean(),data[data.year==year]['SO2'].mean(),data[data.year==year]['NO2'].mean()] def func7(): plt.figure(figsize=(12,8)) labels = ["AQI","PM2.5","PM10","SO2","NO2"] #设定每个柱子的宽度 bar_width = 0.15 x=0 for i in [2014,2015,2016,2017,2018]: plt.bar(np.arange(5)+x*bar_width,func7_1(i),label=i,alpha=0.8,width=bar_width) x+=1 plt.legend() plt.ylim([0,110]) plt.xticks([0.295,1.295,2.295,3.295,4.295],labels) plt.savefig('6.png') func7() 

img

5.5.6 北京污染程度饼图
# 北京污染程度饼图 def func8(city): #查看不同价格区间的AQI,在当前数据集中的占比情况 AQI_max = data[data.city==city].AQI.max() AQI_cut = pd.cut(data[data.city==city].AQI, bins = [0, 50, 100, 150, 200, 300, AQI_max]) AQI_count = AQI_cut.value_counts() labels = ['良(50,100]','优(0,50]','轻度污染(100,150]','中度污染(150,200]','重度污染(200,300]','严重污染(300,%s]' % AQI_max] x = [i for i in AQI_count / AQI_count.sum()] colors= ['#32CD32','#FFDAB9','#8A2BE2','#2442aa','#dd5555','#FFFF00'] explode = [0,0.1,0,0,0,0] plt.pie(x=x,#绘图的数据 labels=labels,#数据标签 colors=colors,#饼图颜色 autopct='%.1f%%',#设置百分比 startangle=180,#设置初始角度 explode=explode,#设置突出显示 radius=1.5#设置饼的半径 ) plt.savefig('%s.png' % city) func8('北京') 

img

5.5.7 广州污染程度饼图
讯享网# 广州污染程度饼图 def func9(): #查看不同价格区间的AQI,在当前数据集中的占比情况 AQI_min = data[data.city=='广州'].AQI.min() AQI_max = data[data.city=='广州'].AQI.max() display(AQI_min, AQI_max) AQI_cut = pd.cut(data[data.city=='广州'].AQI, bins = [AQI_min, 50, 100, 150, 200, 207]) AQI_count = AQI_cut.value_counts() labels = ['良(50,100]','优12,50]','轻度污染(100,150]','中度污染(150,200]','重度污染(200,207]'] x = [i for i in AQI_count / AQI_count.sum()] colors= ['#32CD32','#FFDAB9','#8A2BE2','#2442aa','#dd5555'] explode = [0,0.1,0,0,0] plt.pie(x=x,#绘图的数据 labels=labels,#数据标签 colors=colors,#饼图颜色 autopct='%.1f%%',#设置百分比 startangle=180,#设置初始角度 explode=explode,#设置突出显示 radius=1.5#设置饼的半径 ) plt.savefig('7.png') func9() 

img

5.5.8 广州市2017年AQI走势
def func11(): result1 = data[(data.city=='广州')&(data.year==2017)]["AQI"] result2 = data[(data.city=='广州')&(data.year==2017)]["time"] fig = plt.figure(figsize=(12,8)) ax = fig.add_subplot(111)#图片对象 ax.plot(result2,result1,"-") ax.legend() ax.axis([0,144,0,400]) #画轴的范围 month = [0,1,2,3,4,5,6,7,8,9,10,11,12] plt.xticks(np.arange(0,144,11.999),month) #重新设置x轴间隔和刻度值 plt.xlabel('月份') plt.ylabel('AQI') plt.title('广州市2017年AQI走势') plt.savefig('9.png') func11() 

img

小讯
上一篇 2025-01-06 22:51
下一篇 2025-02-18 18:16

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/29507.html