上个月我们使用request和pandas爬取了全国空气质量指数数据并保存到本地。数据拿到后我们可以进一步来做分析。这是我本地保存的一份2019年除夕前后的全国空气质量的数据,下面我们就以这个数据来进行分析我们过年放的烟花爆竹是怎样影响空气质量的。
如图所示,是该数据的格式及部分内容显示。表头分别为city,AQI、PM2.5、PM10、SO2、NO2、CO、O3、main_pollution、time代表各种指标,如"CO"代表空气中一氧化塔含量,main_pollution代表空气主要污染物。知道了表头每一列的内容后,接下来我们就使用pandas、matplotlib和pycharts进行分析、画图。
首先引入我们所需要的库,并进行读取数据,代码及效果如图所示。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv('./AQI_Data.csv') #读取数据
print(data.head(5)) #读取前5行数据
由于数据中存在一些重复值和空值,我们在进行数据分析前需要进一步对数据进行清洗操作,代码及效果如图所示。
data['time'].unique() #对时间进行去重操作
data['time'] = pd.to_datetime(data['time'])
data = data[data['time']<=pd.to_datetime('2019-02-11 23:59:59')] # 选取2月4日——2月12日的数据
data.set_index(data["time"], inplace=True) #把time列数据设置为索引,inplace为True代表新的Dateframe对象
data = data.replace('—', np.nan) #使用“-”代替nan值
for col in ['AQI', 'PM2.5', 'PM10', 'SO2', 'NO2', 'CO', 'O3']:
data[col] = data[col].astype(float) #更改每一列的数值类型为float型
data.head() #查看前5行数据
data.to_csv('data_clean.csv', index=False) #对清晰的数据进行保存
数据清洗完后,我们便可以进行数据分析。首先我们分析烟花爆竹对空气是否真的有影响,代码如下:
from pyecharts import Line
line = Line("全国春节期间空气质量指数总体趋势", "2019年除夕到初二", width=800)
line.add("", AQI_total_mean.index, np.round(AQI_total_mean.values,0), is_smooth=True,
legend_text_size=18,xaxis_label_textsize=14,yaxis_label_textsize=18,
xaxis_rotate=20, yaxis_min=8, mark_point=["max"])
line.render()
结果:
紧接着再看下烟花爆竹对空气质量的影响具体体现在哪些指标上:
'''烟花爆竹对空气质量的影响具体体现在哪些指标上'''
from pyecharts import Line #绘制折线图
data_total_idx = data[data['time']<=pd.to_datetime('2019-02-06 23:59:59')].groupby(['time']).mean() #选择时间'2019-02-06 23:59:59'的数据,并以time列进行分组求平均值
line = Line("全国春节期间空气质量各指标(2019年除夕到初二)", "单位:μg/m3(CO为mg/m3)", width=800)
for idx in data_total_idx.columns[1:]:
line.add(idx, data_total_idx.index, np.round(data_total_idx[idx].values,0), is_smooth=True,
legend_text_size=18,xaxis_label_textsize=14,yaxis_label_textsize=18,
xaxis_rotate=20, yaxis_min=8, legend_top=30)
line.render()
效果如图,图中可以看到烟花爆竹主要影响物是PM10,PM2.5
分析“全国除夕和春节期间空气质量最高最低比Top10城市”,结果如下:
'''烟花爆竹对空气质量的污染程度有多大'''
data2 = data[data['time']<=pd.to_datetime('2019-02-05 23:59:59')]
data_AQI_min = data2.groupby('city')['AQI'].min()
#print(data_AQI_min)
data_AQI_max = data2.groupby('city')['AQI'].max()
#print(data_AQI_max)
data_AQI_times = np.round(data_AQI_max/data_AQI_min, 1)
#print(data_AQI_times)
data_AQI_times_top10 = data_AQI_times.nlargest(10)
#print(data_AQI_times_top10)
#
from pyecharts import Bar #绘制条形图
bar = Bar("全国除夕和春节期间空气质量最高最低比Top10城市", "时间:2019年除夕至初一", width=600)
bar.add("", data_AQI_times_top10.index, data_AQI_times_top10.values, is_stack=True,
is_label_show=True,bar_category_gap='40%', label_color = ['#130f40'], label_text_size=18,
legend_text_size=18,xaxis_label_textsize=14,yaxis_label_textsize=18, xaxis_rotate=30)
print(bar.render())
哪些区域污染最严重:
'''哪些区域污染最严重'''
start_time = pd.to_datetime('2019-02-04 20:00:00')
#print(start_time)
end_time = pd.to_datetime('2019-02-05 04:00:00')
#print(end_time)
AQI_by_city = data[(data['time']>=start_time)&(data['time']<=end_time)].groupby('city')['AQI'].mean()
#print(AQI_by_city)
print(AQI_by_city.nlargest(10)) #选取污染严重的前10名
从以上数据可知,烟花爆竹还是会影响环境的,但是过年不放炮是不是少了些乐趣呢,啊哈哈!