现在福建整个省城市的空气质量都是很不错的,如下图2022年6月13日,在这边可以经常看到蓝天,空气也很清新,在这边生活还是美滋滋的。想看看福建省城市5年前和现在的空气质量是否有变化,因此以福建省福州市,泉州市,厦门市为代表,分析这三个代表城市近5年来空气质量。
首先收集近5年来三个城市的空气质量数据。详细操作见https://blog.csdn.net/qq_50626322/article/details/125250077?spm=1001.2014.3001.5502
1、2017-2022年福州厦门泉州空气质量指数(AQI)走势图如下(按月求平均)。可以看到三个城市的AQI的曲线较为一致,说明它们的空气质量相关性较大,这种相关性可能来源于三个城市距离较近,也可能是三个城市所受气候如空气湿度,风向等环境较为相似(可以去探索天气条件与空气质量的关系)。从曲线的高低及三个城市的AQI平均值,可以看出厦门的天气相比福州和泉州更好。三个城市近5年来的AQI平均值都低于50,总体空气质量为优。根据时间变化来看,2017-2019年的AQI大多在平均值以上,而2019-2021的AQI大多在平均值以下,可以看出,近5年3个城市的空气质量是越来越好的。
2、在近5年内的1785天里,三个城市空气质量为优分别占比66.72%、63.42%、73.73%,空气质量为良分别占比33%、36.08%、26.05%。轻度污染天数都不大于0.5%,无中度污染和更严重的污染的天气(AQI>150),不得不说这三个城市空气质量是真的好啊(相比北京,天津,简直是天天吸仙气啊)
3、'AQI'的计算主要和这六种空气污染物的浓度有关,'PM2_5','PM10','SO2','NO2','CO','O3'。因此以福州市为例,画出AQI和六种污染物浓度近5年的走势图。可以看到它们浓度的变化幅度。而PM2.5和PM10和AQI的波动较为一致,因此可知,影响福州空气质量的污染物主要是PM2.5和PM10。据此可以针对性减少这些污染物的浓度从而更好地提升城市空气质量(虽然已经很好了)。
本文只是简单分析福建省三个城市近5年的空气质量。要发现和分析更多信息可以做进一步的工作。
完整代码如下(分别对应三幅图):
1、图2
import numpy as np
import pandas as pd
from pyecharts import Line
citys = ['fuzhou', 'quanzhou', 'xiamen']
v = []
for i in range(3):
filename = 'Air_AQI_' + citys[i] + '.csv'
df = pd.read_csv(filename)
dom = df[['Date', 'AQI']]
list1 = []
list2 = []
for j in dom['Date']:
if citys[i] == 'fuzhou':#分支处理,福州的时间是/
# 注意点,一定要把这里的字符串类型转化为整型,不然后面排序会出现10在2前面的情况
list1.append(int(j.split('/')[0]))#年
list2.append(int(j.split('/')[1]))#月
else:
list1.append(int(j.split('-')[0])) # 年
list2.append(int(j.split('-')[1])) # 月
df['year'] = list1
df['month'] = list2
month_message = df.groupby(['year','month'])#按年月分组
month_com = month_message['AQI'].agg(['mean'])#组内求平均值
month_com.reset_index(inplace=True)
month_com_last = month_com.sort_index()
month_com.sort_values(["year", "month"], inplace=True) # 按时间排序
v1 = np.array(month_com_last['mean'])
v1 = ["{}".format(int(i)) for i in v1]
v.append(v1)
attr=[]
for i in range(2017,2022):
for j in range(1,13):
attr.append("{}".format(str(i)+'年'+str(j) + '月'))
line = Line("2017-2021年福州厦门泉州AQI全年走势图", title_pos='center', title_top='0', width=800, height=400)
line.add("福州", attr, v[0], line_color='red', legend_top='8%', is_label_show = True,mark_line=['average'],mark_point=["max", "min"],xaxis_rotate = 30,)
line.add("泉州", attr, v[1], line_color='purple', legend_top='8%',is_label_show = True,mark_line=['average'], mark_point=["max", "min"],xaxis_rotate = 30,)
line.add("厦门", attr, v[2], line_color='blue', legend_top='8%', is_label_show = True,mark_line=['average'],mark_point=["max", "min"],xaxis_rotate = 30,)
line.render("2017-2021年福州厦门泉州AQI全年走势图.html")
2、图3
import numpy as np
import pandas as pd
from pyecharts import Pie, Grid
citys = ['fuzhou', 'quanzhou', 'xiamen']
v = []
attrs = []
for i in range(3):
filename = 'Air_AQI_' + citys[i] + '.csv'
df = pd.read_csv(filename)
rank_message = df.groupby(['Quality_grade'])
rank_com = rank_message['Quality_grade'].agg(['count'])
rank_com.reset_index(inplace=True)
rank_com_last = rank_com.sort_values('count', ascending=False)
attr = rank_com_last['Quality_grade']
attr = np.array(rank_com_last['Quality_grade'])
attrs.append(attr)
v1 = rank_com_last['count']
v1 = np.array(rank_com_last['count'])
v.append(v1)
pie1 = Pie("福州", title_pos="28%", title_top="24%")
pie1.add("", attrs[0], v[0],is_label_show = True, radius=[25, 40], center=[30, 27], legend_pos="50%", legend_top="51%", legend_orient="horizontal",)
pie2 = Pie("泉州", title_pos="58%", title_top="24%")
pie2.add("", attrs[1], v[1],is_label_show = True, radius=[25, 40], center=[60, 27], is_legend_show=False)
pie3 = Pie("厦门", title_pos='88%', title_top='24%')
pie3.add("", attrs[2], v[2],is_label_show = True, radius=[25, 40], center=[90, 27], is_legend_show=False)
grid = Grid()#"2017-2021年福州厦门泉州全年空气质量情况", width=900
grid.add(pie1)
grid.add(pie2)
grid.add(pie3)
grid.render('2017-2021年福州厦门泉州全年空气质量情况.html')
3
、图4
import pandas as pd
from pyecharts import Line
df = pd.read_csv('Air_AQI_fuzhou.csv')
attr = df['Date']
line = Line("2017-2021年污染物全年走势图", title_pos='center', title_top='18', width=800, height=400)
line.add("AQI", attr, df['AQI'], mark_line=['average'], is_fill=False, area_color="#000", area_opacity=0.3, mark_point=["max", "min"], mark_point_symbol="circle", mark_point_symbolsize=25)
line.add("PM2_5", attr, df['PM2_5'], mark_line=['average'], is_fill=False, area_color="#000", area_opacity=0.3, mark_point=["max", "min"], mark_point_symbol="circle", mark_point_symbolsize=25)
line.add("PM10", attr, df['PM10'], mark_line=['average'], is_fill=False, area_color="#000", area_opacity=0.3, mark_point=["max", "min"], mark_point_symbol="circle", mark_point_symbolsize=25)
line.add("SO2", attr, df['SO2'], mark_line=['average'], is_fill=False, area_color="#000", area_opacity=0.3, mark_point=["max", "min"], mark_point_symbol="circle", mark_point_symbolsize=25)
line.add("NO2", attr, df['NO2'], mark_line=['average'], is_fill=False, area_color="#000", area_opacity=0.3, mark_point=["max", "min"], mark_point_symbol="circle", mark_point_symbolsize=25)
line.add("CO", attr, df['CO'], mark_line=['average'], is_fill=False, area_color="#000", area_opacity=0.3, mark_point=["max", "min"], mark_point_symbol="circle", mark_point_symbolsize=25)
line.add("O3", attr, df['O3'], mark_line=['average'], is_fill=False, area_color="#000", area_opacity=0.3, mark_point=["max", "min"], mark_point_symbol="circle", mark_point_symbolsize=25)
line.render("2017-2021年污染物全年走势图.html")
3



