本文是主要对某地2017年环境空气质量整体状况进行评价、分析。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
%matplotlib inline
plt.style.use("ggplot")
path="air_quality_2016_2017.csv"
data=pd.read_csv(path)
#将DateTime列转为日期格式
data['DateTime']=pd.to_datetime(data['DateTime'])
#将DateTime列设为索引
data=data.set_index('DateTime')
data.head()
SO2 NO2 CO O38 PM10 PM2.5
DateTime
2017-01-01 11.25 76.50 1.05825 96.25 92.50 54.00
2017-01-02 16.50 114.50 1.29700 157.00 132.25 72.00
2017-01-03 13.00 125.25 1.32525 80.25 129.50 85.25
2017-01-04 10.50 84.50 0.88750 106.00 90.75 46.75
2017-01-05 14.00 136.75 1.14225 101.25 153.75 81.50
#将2016年和2017年数据分开
data_2016=data['2016']
data_2017=data['2017']

1 总体情况

1.1 定义评价用函数

#AQI计算相关函数
def iaqi_SO2(a):'''计算SO2的分指数'''iaqi=0#iaqi分段n=[0,50,100,150,200,300,400,500]#24小时平均值分段c=[0,50,150,475,800,1600,2100,2620]if a>=c[0] and a<=c[1]:iaqi=n[0]+(a-c[0])*(n[1]-n[0])/(c[1]-c[0])return iaqielif a>=c[1] and a<=c[2]:iaqi=n[1]+(a-c[1])*(n[2]-n[1])/(c[2]-c[1])return iaqielif a>=c[2] and a<=c[3]:iaqi=n[2]+(a-c[2])*(n[3]-n[2])/(c[3]-c[2])return iaqielif a>=c[3] and a<=c[4]:iaqi=n[3]+(a-c[3])*(n[4]-n[3])/(c[4]-c[3])return iaqielif a>=c[4] and a<=c[5]:iaqi=n[4]+(a-c[4])*(n[5]-n[4])/(c[5]-c[4])return iaqielif a>=c[5] and a<=c[6]:iaqi=n[5]+(a-c[5])*(n[6]-n[5])/(c[6]-c[5])return iaqielif a>=c[6] and a<=c[7]:iaqi=n[6]+(a-c[6])*(n[7]-n[6])/(c[7]-c[6])return iaqidef iaqi_NO2(a):'''计算NO2的分指数'''iaqi=0#iaqi分段n=[0,50,100,150,200,300,400,500]#24小时平均值分段c=[0,40,80,180,280,565,750,940]if a>=c[0] and a<=c[1]:iaqi=n[0]+(a-c[0])*(n[1]-n[0])/(c[1]-c[0])return iaqielif a>=c[1] and a<=c[2]:iaqi=n[1]+(a-c[1])*(n[2]-n[1])/(c[2]-c[1])return iaqielif a>=c[2] and a<=c[3]:iaqi=n[2]+(a-c[2])*(n[3]-n[2])/(c[3]-c[2])return iaqielif a>=c[3] and a<=c[4]:iaqi=n[3]+(a-c[3])*(n[4]-n[3])/(c[4]-c[3])return iaqielif a>=c[4] and a<=c[5]:iaqi=n[4]+(a-c[4])*(n[5]-n[4])/(c[5]-c[4])return iaqielif a>=c[5] and a<=c[6]:iaqi=n[5]+(a-c[5])*(n[6]-n[5])/(c[6]-c[5])return iaqielif a>=c[6] and a<=c[7]:iaqi=n[6]+(a-c[6])*(n[7]-n[6])/(c[7]-c[6])def iaqi_PM10(a):'''计算PM10的分指数'''iaqi=0#iaqi分段n=[0,50,100,150,200,300,400,500]#24小时平均值分段c=[0,50,150,250,350,420,500,600]if a>=c[0] and a<=c[1]:iaqi=n[0]+(a-c[0])*(n[1]-n[0])/(c[1]-c[0])return iaqielif a>=c[1] and a<=c[2]:iaqi=n[1]+(a-c[1])*(n[2]-n[1])/(c[2]-c[1])return iaqielif a>=c[2] and a<=c[3]:iaqi=n[2]+(a-c[2])*(n[3]-n[2])/(c[3]-c[2])return iaqielif a>=c[3] and a<=c[4]:iaqi=n[3]+(a-c[3])*(n[4]-n[3])/(c[4]-c[3])return iaqielif a>=c[4] and a<=c[5]:iaqi=n[4]+(a-c[4])*(n[5]-n[4])/(c[5]-c[4])return iaqielif a>=c[5] and a<=c[6]:iaqi=n[5]+(a-c[5])*(n[6]-n[5])/(c[6]-c[5])return iaqielif a>=c[6] and a<=c[7]:iaqi=n[6]+(a-c[6])*(n[7]-n[6])/(c[7]-c[6])def iaqi_CO(a):'''计算CO的分指数'''iaqi=0#iaqi分段n=[0,50,100,150,200,300,400,500]#24小时平均值分段c=[0,2,4,14,24,36,48,60]if a>=c[0] and a<=c[1]:iaqi=n[0]+(a-c[0])*(n[1]-n[0])/(c[1]-c[0])return iaqielif a>=c[1] and a<=c[2]:iaqi=n[1]+(a-c[1])*(n[2]-n[1])/(c[2]-c[1])return iaqielif a>=c[2] and a<=c[3]:iaqi=n[2]+(a-c[2])*(n[3]-n[2])/(c[3]-c[2])return iaqielif a>=c[3] and a<=c[4]:iaqi=n[3]+(a-c[3])*(n[4]-n[3])/(c[4]-c[3])return iaqielif a>=c[4] and a<=c[5]:iaqi=n[4]+(a-c[4])*(n[5]-n[4])/(c[5]-c[4])return iaqielif a>=c[5] and a<=c[6]:iaqi=n[5]+(a-c[5])*(n[6]-n[5])/(c[6]-c[5])return iaqielif a>=c[6] and a<=c[7]:iaqi=n[6]+(a-c[6])*(n[7]-n[6])/(c[7]-c[6])def iaqi_O38(a):'''计算O38的分指数'''iaqi=0#iaqi分段n=[0,50,100,150,200,300]#21小时平均值分段c=[0,100,160,215,265,800]if a>=c[0] and a<=c[1]:iaqi=n[0]+(a-c[0])*(n[1]-n[0])/(c[1]-c[0])return iaqielif a>=c[1] and a<=c[2]:iaqi=n[1]+(a-c[1])*(n[2]-n[1])/(c[2]-c[1])return iaqielif a>=c[2] and a<=c[3]:iaqi=n[2]+(a-c[2])*(n[3]-n[2])/(c[3]-c[2])return iaqielif a>=c[3] and a<=c[4]:iaqi=n[3]+(a-c[3])*(n[4]-n[3])/(c[4]-c[3])return iaqielif a>=c[4] and a<=c[5]:iaqi=n[4]+(a-c[4])*(n[5]-n[4])/(c[5]-c[4])return iaqi  def iaqi_PM25(a):'''计算PM25的分指数'''iaqi=0#iaqi分段n=[0,50,100,150,200,300,400,500]#21小时平均值分段c=[0,35,75,115,150,250,350,500]if a>=c[0] and a<=c[1]:iaqi=n[0]+(a-c[0])*(n[1]-n[0])/(c[1]-c[0])return iaqielif a>=c[1] and a<=c[2]:iaqi=n[1]+(a-c[1])*(n[2]-n[1])/(c[2]-c[1])return iaqielif a>=c[2] and a<=c[3]:iaqi=n[2]+(a-c[2])*(n[3]-n[2])/(c[3]-c[2])return iaqielif a>=c[3] and a<=c[4]:iaqi=n[3]+(a-c[3])*(n[4]-n[3])/(c[4]-c[3])return iaqielif a>=c[4] and a<=c[5]:iaqi=n[4]+(a-c[4])*(n[5]-n[4])/(c[5]-c[4])return iaqielif a>=c[5] and a<=c[6]:iaqi=n[5]+(a-c[5])*(n[6]-n[5])/(c[6]-c[5])return iaqielif a>=c[6] and a<=c[7]:iaqi=n[6]+(a-c[6])*(n[7]-n[6])/(c[7]-c[6])return iaqidef quality_level(aqi):level=''if aqi>0 and aqi<=50:level='优'return levelelif aqi>50 and aqi<=100:level='良'return levelelif aqi>100 and aqi<=150:level='轻度污染'return levelelif aqi>150 and aqi<=200:level='中度污染'return levelelif aqi>200 and aqi<=300:level='重度污染'return levelelif aqi>300:level='严重污染'return level

1.2 评价

#计算AQI,划分空气质量级别
data_2017['IAQI_SO2']=data_2017['SO2'].apply(iaqi_SO2)
data_2017['IAQI_NO2']=data_2017['NO2'].apply(iaqi_NO2)
data_2017['IAQI_PM10']=data_2017['PM10'].apply(iaqi_PM10)
data_2017['IAQI_CO']=data_2017['CO'].apply(iaqi_CO)
data_2017['IAQI_O38']=data_2017['O38'].apply(iaqi_O38)
data_2017['IAQI_PM2.5']=data_2017['PM2.5'].apply(iaqi_PM25)
data_2017['AQI']=data_2017.loc[:,'IAQI_SO2':'IAQI_PM2.5'].max(axis=1)
data_2017['AQ_level']=data_2017['AQI'].apply(quality_level)data_2016['IAQI_SO2']=data_2016['SO2'].apply(iaqi_SO2)
data_2016['IAQI_NO2']=data_2016['NO2'].apply(iaqi_NO2)
data_2016['IAQI_PM10']=data_2016['PM10'].apply(iaqi_PM10)
data_2016['IAQI_CO']=data_2016['CO'].apply(iaqi_CO)
data_2016['IAQI_O38']=data_2016['O38'].apply(iaqi_O38)
data_2016['IAQI_PM2.5']=data_2016['PM2.5'].apply(iaqi_PM25)
data_2016['AQI']=data_2016.loc[:,'IAQI_SO2':'IAQI_PM2.5'].max(axis=1)
data_2016['AQ_level']=data_2016['AQI'].apply(quality_level)#统计空气质量级别天数
aq_level_2016=pd.DataFrame(data_2016['AQ_level'].value_counts(),index=['优','良','轻度污染','中度污染']).rename(columns={'AQ_level':'2016年'})
aq_level_2017=pd.DataFrame(data_2017['AQ_level'].value_counts(),index=['优','良','轻度污染','中度污染']).rename(columns={'AQ_level':'2017年'})
aq_level_concat=pd.concat([aq_level_2016,aq_level_2017],axis=1)
aq_level_concat
2016年 2017年
124 119
195 188
轻度污染 39 46
中度污染 8 12
for i in aq_level_concat.columns:rate=(aq_level_concat.loc['优',i]+aq_level_concat.loc['良',i])/aq_level_concat.loc[:,i].sum()print("{}环境空气质量优良率为".format(i)+"{:.1%}。".format(rate))
2016年环境空气质量优良率为87.2%。
2017年环境空气质量优良率为84.1%。
fig,ax=plt.subplots(figsize=(8,6),dpi=100)
total_width=0.6
n=2
width=total_width/n
x=np.arange(len(aq_level_concat))
x=x-(total_width-width)/2
y1=aq_level_concat['2016年']
y2=aq_level_concat['2017年']
tick_label=aq_level_concat.indexax.bar(x,y1,width,label='2016年')
ax.bar(x+width,y2,width,label='2017年',tick_label=tick_label)
ax.set_title('2016-2017年环境空气质量级别天数对比',fontsize=15)
for x,y1,y2 in zip(x,y1,y2):ax.text(x,y1+2,y1,ha='center')ax.text(x+width,y2+2,y2,ha='center')
ax.legend()

该地区2017年空气质量情况比2016年略差,优良天数307天,同比减少12天,其中优减少5天,良减少7天。优良率84.1%,同比下降2.9个百分点。

#按月统计超标天数
aq_level_month=data_2017[['AQI']]
aq_level_month['month']=aq_level_month.index.month
aq_level_month_count=aq_level_month[aq_level_month['AQI']>100].groupby('month').count().rename(columns=dict(AQI='超标天数'))
aq_level_month_count.loc[6]=0
aq_level_month_count=aq_level_month_count.sort_index()
fig,ax=plt.subplots(figsize=(8,5),dpi=100)
x=range(len(aq_level_month_count))
y=aq_level_month_count['超标天数'].values
labels=aq_level_month_count.index
ax.bar(x,y,width=0.6,tick_label=labels,color='#57c3c2')
ax.set_ylim(0,10)
ax.set_title('2017年各月空气质量超标天数')
ax.set_xticklabels(['{}月'.format(i) for i in range(1,13)])#设置x轴刻度标签
ax.set_ylabel('超标天数')
for x,y in enumerate(y):ax.text(x,y+0.15,'{}'.format(y),ha='center')

空气质量整体最好的是6月,超标天数为0。其次为3月和2月,分别超标1天和2天。超标天数最多的是5月和10月,超标9天。

2 主要污染物

2.1 确定主要污染物

环境空气质量分指数IAQI大于100,则当天该污染物超标。统计各污染物的超标天数。

exceeding_count_2017=data_2017.loc[:,'IAQI_SO2':'IAQI_PM2.5'][data_2017.loc[:,'IAQI_SO2':'IAQI_PM2.5']>100].count().sort_values(ascending=False)
exceeding_count_2017.rename(index={'IAQI_SO2':'SO2','IAQI_NO2':'NO2','IAQI_PM10':'PM10','IAQI_CO':'CO','IAQI_O38':'O38','IAQI_PM2.5':'PM2.5'},inplace=True)
exceeding_count_2017=pd.DataFrame(exceeding_count_2017,columns=['2017年'])
exceeding_count_2016=data_2016.loc[:,'IAQI_SO2':'IAQI_PM2.5'][data_2016.loc[:,'IAQI_SO2':'IAQI_PM2.5']>100].count().sort_values(ascending=False)
exceeding_count_2016.rename(index={'IAQI_SO2':'SO2','IAQI_NO2':'NO2','IAQI_PM10':'PM10','IAQI_CO':'CO','IAQI_O38':'O38','IAQI_PM2.5':'PM2.5'},inplace=True)
exceeding_count_2016=pd.DataFrame(exceeding_count_2016,columns=['2016年'])
exceeding_count=pd.concat([exceeding_count_2016,exceeding_count_2017],axis=1)
exceeding_count
2016年 2017年
O38 24 45
NO2 20 17
PM2.5 12 13
PM10 3 5
CO 0 0
SO2 0 0
fig,ax=plt.subplots(figsize=(8,5),dpi=100)
width=0.5
#只对超标天数大于0的污染物作图
x=np.arange(len(exceeding_count['2016年'][exceeding_count['2016年']>0]))
y1=exceeding_count['2016年'][exceeding_count['2016年']>0]
y2=exceeding_count['2017年'][exceeding_count['2017年']>0]
tick_label=exceeding_count['2016年'][exceeding_count['2016年']>0].indexax.barh(x,-y1,width,label='2016年')
ax.barh(x,y2,width,label='2017年',tick_label=tick_label)
ax.set_title('2016-2017年污染物超标天数对比',fontsize=15)
for x,y1,y2 in zip(x,y1,y2):ax.text(-y1-2,x,y1,ha='center',va='center')ax.text(y2+2,x,y2,ha='center',va='center')
ax.legend()
#ax.set_xticks([])
#ax.get_xaxis().set_visible(False)
ax.set_xlim(-50,50)
ax.set_xticklabels([60,40, 20, 0, 20, 40])

exceeding_prec=exceeding_count['2017年'][exceeding_count['2017年']>0]/58
fig,ax=plt.subplots(dpi=100)
x=range(len(exceeding_prec))
y=exceeding_prec.values
labels=exceeding_prec.index
ax.bar(x,y,width=0.6,tick_label=labels)
ax.set_ylim(0,0.9)
ax.set_title('污染物天数占总超标天数比例情况')
for x,y in enumerate(y):ax.text(x,y+0.02,'{:.1%}'.format(y),ha='center')

存在超标的污染物有O3、NO2、PM2.5、PM10。与2016年相比,O3、PM2.5和PM10的超标天数增加,分别增加21天、1天和2天;NO2的超标天数减少3天。
O3超标天数最多,达45天,占总超标天数的77.6%,是引起空气质量超标的主要原因。

2.2 主要污染物同比分析

fig=plt.figure(figsize=(16,12),dpi=100)
ax1=fig.add_subplot(221)
O38_2016=data_2016['O38']
O38_2017=data_2017['O38']
ax1=sns.distplot(O38_2016,rug=True,label='2016年')
ax1=sns.distplot(O38_2017,rug=True,label='2017年')
ax1.set_title('臭氧8小时滑动平均浓度分布')
ax1.legend()ax2=fig.add_subplot(222)
NO2_2016=data_2016['NO2']
NO2_2017=data_2017['NO2']
ax2=sns.distplot(NO2_2016,rug=True,label='2016年')
ax2=sns.distplot(NO2_2017,rug=True,label='2017年')
ax2.set_title('NO2浓度分布')
ax2.legend()ax3=fig.add_subplot(223)
PM10_2016=data_2016['PM10']
PM10_2017=data_2017['PM10']
ax3=sns.distplot(PM10_2016,rug=True,label='2016年')
ax3=sns.distplot(PM10_2017,rug=True,label='2017年')
ax3.set_title('PM10浓度分布')
ax3.legend()ax4=fig.add_subplot(224)
PM25_2016=data_2016['PM2.5']
PM25_2017=data_2017['PM2.5']
ax4=sns.distplot(PM25_2016,rug=True,label='2016年')
ax4=sns.distplot(PM25_2017,rug=True,label='2017年')
ax4.set_title('PM2.5浓度分布')
ax4.legend()

污染物浓度分布均为正偏,低浓度天数居多。2017年NO2浓度分布与2016年十分接近。其他三种污染物均是在中低浓度的频率有所降低,中高浓度频率有所增加。

fig=plt.figure(figsize=(12,10),dpi=100)
ax1=fig.add_subplot(221)
O38=pd.DataFrame([data_2016['O38'].values,data_2017['O38'].values]).T.rename(columns={0:2016,1:2017})
ax1=sns.boxplot(data=O38,showmeans=True)
ax1.set_title('臭氧八小时滑动平均')ax2=fig.add_subplot(222)
NO2=pd.DataFrame([data_2016['NO2'].values,data_2017['NO2'].values]).T.rename(columns={0:2016,1:2017})
ax2=sns.boxplot(data=NO2,showmeans=True)
ax2.set_title('NO2')ax3=fig.add_subplot(223)
PM10=pd.DataFrame([data_2016['PM10'].values,data_2017['PM10'].values]).T.rename(columns={0:2016,1:2017})
ax3=sns.boxplot(data=PM10,showmeans=True)
ax3.set_title('PM10')ax4=fig.add_subplot(224)
PM25=pd.DataFrame([data_2016['PM2.5'].values,data_2017['PM2.5'].values]).T.rename(columns={0:2016,1:2017})
ax4=sns.boxplot(data=PM25,showmeans=True)
ax4.set_title('PM2.5')

从箱线图也可以看出,2016年和2017年的NO2浓度分布十分接近。其他三种污染物在2017年的浓度分布的四分位距、内限与2016年相比存在不同程度变大。

2.3 年内分布特征

2.3.1 日变化曲线

fig=plt.figure(figsize=(12,18),dpi=100)
x=data_2017.indexax1=fig.add_subplot(411)
y11=data_2017['O38']
y12=[160]*365
ax1.plot(x,y11,linewidth=1.5,marker='.',color='green',label='臭氧8小时滑动平均浓度')
ax1.plot(x,y12,linewidth=1.5,linestyle='--',color='red',label='二级标准')
ax1.set_ylabel('臭氧8小时滑动平均浓度(微克/立方米)')
ax1.set_title('2017年臭氧8小时滑动平均浓度日变化曲线')
ax1.legend(loc=0)ax2=fig.add_subplot(412)
y21=data_2017['NO2']
y22=[80]*365
ax2.plot(x,y21,linewidth=1.5,marker='.',color='green',label='NO2浓度')
ax2.plot(x,y22,linewidth=1.5,linestyle='--',color='red',label='二级标准')
ax2.set_ylabel('NO2浓度(微克/立方米)')
ax2.set_title('2017年NO2浓度日变化曲线')
ax2.legend(loc=0)ax3=fig.add_subplot(413)
y31=data_2017['PM10']
y32=[150]*365
ax3.plot(x,y31,linewidth=1.5,marker='.',color='green',label='PM10浓度')
ax3.plot(x,y32,linewidth=1.5,linestyle='--',color='red',label='二级标准')
ax3.set_ylabel('PM10浓度(微克/立方米)')
ax3.set_title('2017年PM10浓度日变化曲线')
ax3.legend(loc=0)ax4=fig.add_subplot(414)
y41=data_2017['PM2.5']
y42=[75]*365
ax4.plot(x,y41,linewidth=1.5,marker='.',color='green',label='PM2.5浓度')
ax4.plot(x,y42,linewidth=1.5,linestyle='--',color='red',label='二级标准')
ax4.set_ylabel('PM2.5浓度(微克/立方米)')
ax4.set_title('2017年PM2.5浓度日变化曲线')
ax4.legend(loc=0)

整体来看,NO2、PM10、PM2.5三种污染物的日变化曲线较为类似,大体呈现年初和年末较高、6-8月浓度较低且波动较小的规律,超标也大多发生在年初和年末。
O3则是年中浓度较低、波动较小,其余月份波动均较大,超标多发生在5月和9月前后。

2.3.2 月均浓度

#采用重采样的方法获得污染物月均浓度
data_2017_month=data_2017.loc[:,'SO2':'PM2.5'].resample('M').mean()fig=plt.figure(figsize=(16,12),dpi=100)
label=['{}月'.format(i) for i in range(1,13)]#一次性生成12个月的列表ax1=fig.add_subplot(221)
x1=np.arange(len(data_2017_month))
y1=data_2017_month['O38']
ax1.bar(x1,y1,tick_label=label,width=0.6,color='#36ADA4',alpha=0.8)
ax1.set_ylim(0,135)
ax1.set_title('2017年臭氧八小时滑动平均月均浓度',fontsize=15)
ax1.set_ylabel('臭氧八小时滑动平均浓度(微克/立方米)')
for a,b in zip(x1,y1):ax1.text(a,b+1.5,'{:.2f}'.format(b),ha='center')ax2=fig.add_subplot(222)
x2=np.arange(len(data_2017_month))
y2=data_2017_month['NO2']
ax2.bar(x2,y2,tick_label=label,width=0.6,color='#36ADA4',alpha=0.8)
ax2.set_ylim(0,60)
ax2.set_title('2017年NO2月均浓度',fontsize=15)
ax2.set_ylabel('NO2浓度(微克/立方米)')
for a,b in zip(x2,y2):ax2.text(a,b+1,'{:.2f}'.format(b),ha='center')    ax3=fig.add_subplot(223)
x3=np.arange(len(data_2017_month))
y3=data_2017_month['PM10']
ax3.bar(x3,y3,tick_label=label,width=0.6,color='#36ADA4',alpha=0.8)
ax3.set_ylim(0,110)
ax3.set_title('2017年PM10月均浓度',fontsize=15)
ax3.set_ylabel('PM10浓度(微克/立方米)')
for a,b in zip(x3,y3):ax3.text(a,b+1.5,'{:.2f}'.format(b),ha='center')ax4=fig.add_subplot(224)
x4=np.arange(len(data_2017_month))
y4=data_2017_month['PM2.5']
ax4.bar(x4,y4,tick_label=label,width=0.6,color='#36ADA4',alpha=0.8)
ax4.set_ylim(0,60)
ax4.set_title('2017年PM2.5月均浓度',fontsize=15)
ax4.set_ylabel('PM2.5浓度(微克/立方米)')
for a,b in zip(x4,y4):ax4.text(a,b+1.5,'{:.2f}'.format(b),ha='center')

污染物月均浓度分布大体呈U型,PM10和PM2.5最为明显。
月均浓度最低的均为6月,且从5月到6月均出现“跳水式”下降。可能原因为6月起雨水频繁,大气污染物随着雨水共同沉降。
浓度最高月份不一致,O3为5月,NO2为3月,PM10和PM2.5均为12月。可能原因是不同污染物的来源和影响因素存在差别。

2.4 主要污染物之间相关性分析

main_pollution_2017=data_2017.loc[:,'NO2':'PM2.5']
del main_pollution_2017['CO']
corr=main_pollution_2017.corr()
corr
NO2 O38 PM10 PM2.5
NO2 1.000000 0.374063 0.723303 0.721505
O38 0.374063 1.000000 0.651855 0.622847
PM10 0.723303 0.651855 1.000000 0.944356
PM2.5 0.721505 0.622847 0.944356 1.000000
sns.pairplot(main_pollution_2017,diag_kind="hist",dropna=True)

不同污染物之间存在一定相关性。
PM10和PM2.5是不同粒径的颗粒物,因此相关性很强。
颗粒物与O3、NO2的相关系数在0.6-0.73之间,具较强的相关性。可能原因是颗粒物具有吸附能力,是多种污染物的载体。
O3和NO2的相关性较弱。

3 小结

(1)该地区2017年空气质量优良天数为数307天,同比减少12天,其中优减少5天,良减少7天。优良率84.1%,同比下降2.9个百分点。

(2)6月是一年之中空气质量较好的时候,无污染物超标,各种污染物浓度均较低。

(3)存在超标的污染物为O3、NO2、PM2.5、PM10,其中O3超标天数最多,占比最高,是造成空气质量超标的主要污染物。

(4)污染物大体呈现两头高中间低的规律。但O3是个例外,除6月外其余月份波动均较大,5月和10月浓度较高。

(5)不同污染物之间存在一定的相关性。两种颗粒物与其他污染物的相关系数均较高,原因可能是颗粒物具有较强的吸附能力,能作为污染物的载体。

(6)空气污染的影响因素众多,工业废气、汽车尾气、气象条件、区域大气传输乃至污染物之间的相互作用都有可能影响空气环境质量。需要比较深入分析环境空气质量还需要扩充收集较多数据资料。

某地环境空气质量分析(1)相关推荐

  1. 【原创】博物馆库房环境空气质量无线温湿度监控技术性方案

    ​博物馆文物保护环境空气质量综合监控系统 北京盛世宏博科技有限公司 ​ 现代化博物馆空气质量一体化3D可视化管控平台 博物馆温湿度在线监控系统 博物馆光照在线监控系统 博物馆二氧化碳在线监控系统 博物 ...

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

    五.空气质量分析与结果展示 5.1 实验背景 近年来随着城市化和工业化的发展,城市空气质量越来越差,从中央到地方各级政府对城市空气质量也越发重视.并对全国各个城市的空气质量进行了长期的采样.下面对全国 ...

  3. DataCleaner 3.1.1 发布,数据质量分析管理

    DataCleaner 3.1.1 扩展了日期和时间相关的分析:增加周.月.年的分布分析:数值分析和日期时间分析增加了描述统计的选项:新增用于生成 UUID 和时间戳的转换器等等. DataClean ...

  4. 《Python数据分析与挖掘实战》一3.1 数据质量分析

    本节书摘来自华章出版社<Python数据分析与挖掘实战>一书中的第3章,第3.1节,作者 张良均 王路 谭立云 苏剑林,更多章节内容可以访问云栖社区"华章计算机"公众号 ...

  5. python如何读dat数据_如何用Python进行数据质量分析

    概述 数据挖掘的第一步工作是数据准备,而数据准备的第一步就是数据质量分析了.本篇文章着重介绍如何使用Python进行数据质量分析的初步工作,属于比较基础的入门教程. 为什么要进行数据质量分析 根据百度 ...

  6. 【代码审计】使用SonarQube进行代码质量分析管理

    2019独角兽企业重金招聘Python工程师标准>>> 在之前的开发中,代码的工作量化和质量化都是一个问题,随着近几年互联网行业的快速发展,代码已经可以来工作量化和质量化,今天我们来 ...

  7. python空气质量分析报告_Python数据可视化:2018年北上广深空气质量分析

    原标题:Python数据可视化:2018年北上广深空气质量分析 作者:法纳斯特,Python爱好者,专注爬虫,数据分析及可视化 就在这周偶然看到一个学弟吐槽天津的空气,不禁想起那段厚德载雾,自强不吸的 ...

  8. 四年级计算机期末质量分析,信息技术四年级(下)质量分析——刘千慧

    信息技术四年级(下)质量分析 刘千慧 2018.6 这个学期我负责的是三.四年级的信息技术课,本次的期末质量分析重点对象是四年级的学生.小学信息技术旨在培养学生的兴趣和信息素养以及简单的计算机操作,期 ...

  9. 七年级计算机教学质量分析,七年级数学期末教学质量分析报告

    七年级数学期末教学质量分析报告 提高教育教学质量是学校工作的重中之重,扎实进行课堂教学改革是提高质量的有力保证,是前提条件.下面是小编为大家整理的七年级数学期末教学质量分析报告,欢迎阅读. 七年级数学 ...

  10. 大学英语期末考计算机上答卷,英语期末考试质量分析

    英语期末考试质量分析 一.关于试卷分析 1.创设试卷的策略思想 本次命题体现素质教育要求,加强考试内容与学生生活实际的联系,重视对学生运用所学的基础知识和技能的考查.试卷中把学生必须掌握的基础知识作为 ...

最新文章

  1. Bzoj1051 受欢迎的牛
  2. mysql硬盘安装方法_Mysql安装教程
  3. 想为 iPhone X 做交互设计?你需要读这篇文章
  4. .NET高性能编程 - C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。
  5. memcached—向memcached中保存Java实体需注意的问题
  6. Linux下线程同步对象(3)——条件变量
  7. 维吾尔语小程序开发个人中心插件
  8. 解决:3Dmax 渲染后任意点击就卡住不能点击,UI界面冻结
  9. 如何成为一名优秀的程序员
  10. Egret引擎游戏内存优化指南
  11. vue首次赋值不触发watch
  12. 一个屌丝程序猿的人生(二十二)
  13. vue3运行npm run serve报错ERROR Error: Cannot find module ‘babel-plugin-import‘ Require stack:
  14. JGG | EVenn: 3分钟在线轻松绘制5种Venn图和Venn网络
  15. 计算机用通讯电压多少,电脑ATX电源改13.8V通信用电源!
  16. echarts的常用案例
  17. 浅谈STM32的三种Boot模式
  18. mysql between and 日期
  19. 【vue】手动实现vue的v-model语法糖,以及控制在输入法完成之后才更新model
  20. 高仿Android QQ2012登陆界面和注册界面

热门文章

  1. 荐书一本-----《天才在左,疯子在右》
  2. jQuery插件应用之--- 选项卡插件的使用(10级学员 韩晓爽课堂笔记)
  3. 天文相关词汇的英语翻译
  4. [深度学习]卷积神经网络CNN - 一张图理解滤波器/层数/深度
  5. 运维审计新形势下CIO的管理职责
  6. 如何把自家孩子培养成一个顶尖人才(转自微信公众号——紫竹张先生)
  7. QQ邮箱如何快速批量删除所有的垃圾邮件
  8. 计算机上那里可以看产品密钥,使用Windows Key Viewer一键轻松查看当前计算机的产品密钥...
  9. 电脑小知识:如何选择合适的内存条?如何查看自己电脑内存条的内存大小和主频呢?
  10. 信通方恒资产评估快讯 -《中国矿业》矿业综述 - 2021年国内外油气资源形势分析及展望