广州空气质量数据分析
广州空气质量数据分析
- 一、背景
- 二、提出问题
- 三、数据处理
- 3.1数据获取
- 3.2数据集描述
- 3.3数据清洗
- 3.3.2 零值处理
- 3.3.3创建季节列
- 四、问题分析及求解
- 4.1问题一 广州市的空气质量总体情况如何?
- 4.2问题二 广州哪个季节的污染最严重?
- 4.3问题三 空气质量主要受哪些因素影响?
- 4.3.1分析方法
- 4.3.2实验步骤
- 4.3.3 结果分析
- 五、结论
- 六、参考文献
摘要
通过获取2017/01/01-2019/12/03三年来广州空气质量相关数据,使用python对数据进去数据清洗,使用python的pandas、 matplotlib和seaborn分析广州近三年空气质量变化趋势为2018年空气质量较2017年有所改善,2019年比2018年的AQI所降低;夏季空气质量最好,秋季最差;空气质量总体水平为良;利用SPSS和因子分析法分析影响广州空气质量的主要因素为PM10和O3。
一、背景
AQI(Air Quality Index),指空气质量指数,用来衡量空气清洁或污染的程度。值越小,表示空气质量越好。近年来,因为环境问题,空气质量也越来越受到人们的重视。空气质量的好坏反映了空气污染程度,它是依据空气中污染物浓度的高低来判断的。参与空气质量评价的主要污染物为细颗粒物、可吸入颗粒物、二氧化硫、二氧化氮、臭氧、一氧化碳等六项。
以2017-2019年广州市空气质量历史数据作为依据,查看广州近三年空气质量的变化趋势,同时探究影响空气质量的主要污染物。
二、提出问题
1.广州市的空气质量总体情况如何?
2.广州哪个季节的污染最严重?
3.空气质量主要受哪些因素影响?
三、数据处理
3.1数据获取
使用python爬取2017-2019年广州的空气质量数据,共1035条。代码如下:
# -*- coding:utf-8-*-
#可以利用 webdriver 打开一个浏览器
from selenium import webdriver
#使时间中止至指定时间
import time
import csvdef search(url):#利用get()方法获取网页信息并返回return driver.get(url)def parse_one_page(page):#查找出网页中全部的 tr 标签并赋给 tr_listtr_list =driver.find_elements_by_tag_name('tr')return tr_listdef write_header():with open(r'd:\data.csv','a',newline="",encoding='utf8') as csvfile:header = ['日期', 'AQI', '质量等级', 'PM2', 'PM10', 'SO2', 'CO', 'NO2', 'O3']csv.writer(csvfile).writerow(header)def save_to_mysql(tr_list):#在 D 盘创建一个 TXT 格式文件with open(r'd:\data.csv','a',newline="",encoding='utf8') as csvfile:for i in range(1, len(tr_list)):#找出 tr_list 中的全部 td 标签td_list =tr_list[i].find_elements_by_tag_name('td')data = td_list[0].textAQI = td_list[1].textsql = td_list[2].textPM2 = td_list[3].textPM10 = td_list[4].textSO2 = td_list[5].textCO = td_list[6].textNO2 = td_list[7].textO3 = td_list[8].text#将所得原始数据写入上面建立的 csv 文件csv.writer(csvfile).writerow([data, AQI, sql, PM2, PM10, SO2, CO, NO2, O3])
def main():#实现交互,输入城市和时间area = input('请输入一个城市(例如[长春]):')year = input('请输入一个年份(例如[2018]):')print('正在抓取'+ area + '市' + year + '年' + '空气质量每日历史数据:' )print('由于抓取数据较多,请您耐心等待:')#定义全局变量 driverglobal driver#打开 Chrome 浏览器driver = webdriver.Chrome()#利用循环获取一年的原始数据#write_header()for i in range(1,13):if i<10:url ='https://www.aqistudy.cn/historydata/daydata.php?city={}&month={}0{}'.format(area,year,i)else:url ='https://www.aqistudy.cn/historydata/daydata.php?city={}&month={}{}'.format(area,year,i)page = search(url)time.sleep(1)tr_list = parse_one_page(page)save_to_mysql(tr_list)print('抓取完毕')print('文件存储在D:\{}{}{}.csv'.format(area, year, '空气质量'))
if __name__ =='__main__':main()
3.2数据集描述
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.read_csv('D:\data.csv',encoding='gbk')
df.head() # 查看表格
图3.2-1 查看表格数据
由图3.2-1可知,数据集主要包括日期、AQI、空气质量等级和六项污染物质的浓度:PM2.5(粒径小于等于2.5μm的颗粒物,也称细颗粒物),PM10(粒径小于等于10μm的颗粒物,也称可吸入颗粒物),SO2(二氧化硫),NO2(二氧化氮)以及CO(一氧化碳)的浓度全部为24小时平均值,O3浓度值为8小时的滑动平均值。其中,空气质量指数标准如下图2所示。
图3.2-2 空气质量指数标准
3.3数据清洗
3.3.1.缺失值处理
df.shape # 查看数据数量
df.info()
图3.3.3-1 查看数据信息
由图3.3-1可知,获取的数据无缺失值
3.3.2 零值处理
日期,AQI,质量等级,PM2,PM10,SO2,CO,NO2,O3 目前存在0值,可理解为该部分数据缺失,可用广州市对应数据的平均值进行填充,代码如下:
df[['日期', 'AQI', '质量等级', 'PM2', 'PM10', 'SO2', 'CO', 'NO2', 'O3']] = df[['日期', 'AQI', '质量等级', 'PM2', 'PM10', 'SO2', 'CO', 'NO2', 'O3']].replace(0, np.NaN)
df.isnull().sum() # 将0值替换后缺失值的数量
图3.3.2-1 将0值替换后缺失值数量的结果截图
由图3.3.2-1可知,O3有12个缺失值,用其平均值替换,代码如下
for column in list(df.columns[df.isnull().sum() > 0]):mean_val = df[column].mean()#用均值代替空值df[column].fillna(mean_val, inplace=True)
df.isnull().sum() > 0#检查替换后是否还有空值
图3.3.2-2 检查替换后是否还有空值
3.3.3创建季节列
#时间数据格式需要进行转换,创建季节列;
df['日期'] = pd.to_datetime(df['日期'])
df.info() #查看time列的数据类型# 根据月份创建季节列
seasons = {12: 'Winter',1: 'Winter',2: 'Winter',3: 'Spring',4: 'Spring',5: 'Spring',6: 'Summer',7: 'Summer',8: 'Summer',9: 'Autumn',10: 'Autumn',11: 'Autumn'
}
df['season'] = df['日期'].apply(lambda x : seasons [x.month])
df.head()
3.3.3-1 由月份创建季节列截图
四、问题分析及求解
4.1问题一 广州市的空气质量总体情况如何?
df.describe()#对数据进行简单统计
图4.1-1 df. describe()结果截图
由图4.1-1可知,广州近三年平均空气质量指数为72.889855,其处于50~100间,推测其空气质量大致处于良好,其相关的六项污染物浓度的平均值和标准差中,PM10(mean=51.858937,std=26.208792)和O3(mean=94.326570,std=52.986327)的浓度较其他四项都偏高。
df_label=pd.pivot_table(df,index=['质量等级'],values=['AQI'],aggfunc=np.size,margins=True)
df_label.columns=['频数']
df_label['频率']=df_label['频数']/df_label.iloc[-1,0]
df_label.sort_values(by=['频数'])
图4.1-2 质量等级频数频率统计
由图4.1-2可知,广州市空气质量等级大多数为良,其次为优。
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.xlabel('AQI')
plt.ylabel('天数')
plt.hist(df['AQI'],bins=[i*10 for i in range (1,int(max(df['AQI'])/10))])
图4.1-3 AQI频数分布直方图
图4.1-3显示,近三年,广州有842天AQI处于20100之间。AQI在5060的天数最多。
df['Year']=[s[0:4] for s in df['日期']]
sns.FacetGrid(df,hue='Year',size=6).map(sns.kdeplot,'AQI').add_legend()
图4.1-4 各年份AQI密度曲线
# 提取年和月进一步分析整体AQI情况
times = df['日期'].shape[0]
a = []
for _ in range(times):month = df['日期'][_].montha.append(month)
df['month'] = a
b = []
for i in range(times):year = df['日期'][i].yearb.append(year)
df['year'] = b
plt.figure(figsize=(40,10))
sns.barplot(x='month', y='AQI', hue='year', data=df)
plt.style.use('dark_background')
plt.ylim(0)
plt.title('2017年~2109年广州空气质量1~12月对比')
plt.show()
图4.1-4 2017年~2109年广州空气质量1~12月对比
由图4.1-4可知,广州空气质量近三年中9~11月较其他月份污染较严重,且在这三个月份中,2019年的空气质量指数(AQI)比2017年和2018年的都高。2017年9月和2019年9、10月AQI>100,空气质量出现轻度污染的现象。
df.groupby('year').AQI.mean().plot.bar(figsize=(10 ,8))
plt.title('空气质量年变化')
plt.xticks(rotation=0)
plt.xlabel('年')
plt.ylabel('AQI')
plt.ylim(40)
plt.legend('AQI')
plt.grid(linestyle=':', color='w')
plt.show();
图4.2-3空气质量年变化
由图4.2-3可知,2017年的AQI最大,次之为2019年,最小为2018年,且三年的AQI都小于100,空气质量等级为良。
4.2问题二 广州哪个季节的污染最严重?
pd.DataFrame(df.groupby('season').AQI.mean().sort_values()).plot.barh(figsize=(15,10))
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title('不同季节空气质量情况')
plt.xlabel('AQI')
plt.ylabel('季节')
plt.xlim(60)
plt.legend('AQI')
plt.grid(linestyle=':', color='w')
plt.show()
df.groupby('season').AQI.mean().sort_values()
图4.2-1 不同季节空气质量情况
图4.2-2 不同季节空气质量的均值
由图4.2-1和图4.2-2可知,广州在秋季污染较严重,其AQI为82.142857,空气质量等级为良。
4.3问题三 空气质量主要受哪些因素影响?
4.3.1分析方法
采用主成分分析法对空气质量数据进行分析,主成分分析主要起到降维和简化数据结构的作用,可以将原有的多个指标转化成少数几个代表性。较好的综合指标,能够反映原来指标大部分的信息,且各个指标之间保持独立,避免出现重叠信息。主成分分析的基本步骤如下(1)原始数据标准化;(2)计算样本协方差阵和相关阵;(3)计算样本协方差阵和相关阵的特征值和特征向量;(4)计算贡献率和累积贡献率,确定选取主成分个数;(5)列出主成分方程并解释主成分意义。运用SPSS软件进行主成分分析。
4.3.2实验步骤
(1)选择菜单【分析→降维→因子分析】,出现如图4.3.2-1所示的窗口。
(2)把参与因子分析的变量选到【变量(V)】框中。
图4.3.2-1 因子分析窗口
(3)在图4.3.2-1所示的窗口单击【描述(D)】按钮指定输出结果,出现如图4.3.2-2所示的窗口,【统计量】选择【初始解】,【相关矩阵】选择【系数】和【KMO和Bartlett的球形度检验(K)】。
图4.3.2-2 因子分析描述窗口
(4)在图4.3.2-1所示的窗口单击【抽取】按钮,出现如图4.3.2-3所示的窗口,在【输出】框中选择碎石图,在【提取】框中选择【基于特征值(E)】
图4.3.2-3 因子分析的抽取窗口
(5)在图4.3.2-1所示的窗口单击【得分】按钮,出现如图4.3.2-4所示的窗口,选择【显示因子得分系数矩阵】。
4.3.2-4 因子分析的得分窗口
4.3.3 结果分析
4.3.3-1 原有变量的相关系数矩阵
图4.3.3-2 KMO 和巴特利特检验 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210315145942482.png#pic_center)
图4.3.3-1可以看到大部分相关系数较高,各变量呈较强的线性关系,能够从中提取公共因子,适合进行因子分析。图4.3.3-2的显著性接近0(<0.05),应拒绝原假设,认为相关系数矩阵与单位矩阵有显著差异,原有变量适合进行因子分析。
图4.3.3-3 因子分析的方差分析
图4.3.3-3显示PM10的提取率最大(达到0.914),次之为O3和PM2.5,提取率分别为0.896和0.891,说明这三个指标对广州市的空气污染起主导作用。
图4.3.3-4 主成分分析显示的总方差
图4.3.3-4反映了各个成分解释原始变量的总方差以及提取信息量的情况。因为成分1(方差贡献率63.850%)、成分2(方差贡献率19.096%)的初始特征根都大于1,而且它们已经包含了原始6个变量82.946%(>80%)的信息,所以选取成分1、成分2为主成分。
图4.3.3-5 因子的碎石图
图4.3.3-5,横坐标为因子编号,纵坐标为特征值,由图可知,第一个因子的特征值很高,对解释原有变量的贡献度最大;第三个以后的因子特征值都较小,对解释原有变量的贡献度很小,表明可以提取两个主成分。
图4.3.3-6 因子载荷矩阵
图4.3.3-6,在第一主成分中,PM10得分最高,为0.951,在第二主成分中,O3的分最高为0.893,可认为可认为 PM10和O3是广州空气质量的主要污染源。
图4.3.3-7成分得分系数矩阵
由图4.3.3-7可以得出成分得分方程组:
Y1 = 0.246X1+0.248X2+0.205X3+0.186X4-0.235X5+0.082X 6
Y 2 = -0.017X1+0.087X2-0.167X3-0.462X4-0.127X5+0.779X6
上式中X1 ~X6 表示对应污染物标准化后的样本数据;Y1 、Y2 表示对应成分得分。由上式可以看出,主成分1中PM10得分系数较高,主成分2中O3得分系数明显高于其他污染物,代表性显著。
五、结论
2017年~2019年广州市空气质量为良的等级出现的频率最高,占总天数的53.10%,其次为优,占25.41%,秋季空气质量差,夏季好,其主要污染物为PM10和O3。
六、参考文献
[1]张鑫童.滁州市空气质量影响因素的主成分分析[J].安徽农学通报,2018,24(13):122-124+139.
[2]王未来,李明艳,过伟军等.全国31个重点城市空气质量特征分析[J].浙江预防医学,2015,27(11):1110-1114.
[3]SPSS统计学分析方法及应用 薛薇编制
[4]姜新华,薛河儒,张存厚,张丽娜.基于主成分分析的呼和浩特市空气质量影响因素研究[J].安全与环境工程,2016,23(01):75-79.
[5]张鑫童,徐姗,金华星,龚年祖.滁州市空气质量指数(AQI)与气象条件的关系分析[J].安徽农学通报,2017,25(14):161-165.
广州空气质量数据分析相关推荐
- 【空气质量数据分析专题九】污染物浓度小时变化分析
前言 对空气质量小时级别五年数据进行小时变化分析,可以看出污染物浓度在一天中逐小时变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各小时的平均浓度,最后进行可视化分析.处理方 ...
- 2014-2022年4月全国空气质量数据分析
2014-2022年4月所有城市及站点空气质量数据集(更新中)更新时间不固定 时间范围:2014-2022年4月年 数据来源:中国环境监测总站的全国城市空气质量实时发布平台 数据格式说明距离: 全国城 ...
- 空气质量数据分析及web实现
本次课程设计主要是针对大数据计算框架这门课程的总结,同时利用web进行展示,也是对自己之前学习前端的一次小检验.同时也是自己第一次和同学们进行分工合作完成的作业,自己主要负责对所有的内容整合,并进行w ...
- 【空气质量数据分析专题五】污染物浓度年际变化分析
前言 大气空气质量污染物一般为SO2.NO2 .CO.PM10.PM2.5.O3六项污染物.日级别浓度中,除O3使用最大8小时滑动平均浓度外,其他五项污染物均采用日平均浓度. 除CO浓度单位为mg/m ...
- Matplotlib空气质量数据分析(附数据集下载)
使用JupyterLab进行的数据分析 数据集下载 import pandas as pd import numpy as np from pandas import Series, DataFram ...
- 【空气质量数据分析专题八】污染物浓度日变化分析
前言 对空气质量日级别五年数据进行日变化分析,可以看出污染物浓度逐日变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各日平均浓度,最后进行可视化分析.日变化分析方式有多种,这 ...
- 【空气质量数据分析专题七】污染物浓度月变化分析
前言 对空气质量日级别五年数据进行月变化分析,可以看出污染物浓度随月份变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各月平均浓度,最后进行可视化分析.月变化分析方式有多种, ...
- 机器学习KNN算法实践:预测城市空气质量
出品:Python数据之道 作者:叶庭云 整理:Lemon 机器学习KNN算法实践 预测城市空气质量 「Python数据之道」导读: 之前在公众号上分享过 "图解KNN算法" 的内 ...
- 基于Python的2013-2018全国城市空气质量分析
基于Python的2013-2018全国城市空气质量分析 项目摘要 本项目使用pandas/numpy工具包对557424条空气质量数据进行导入及清洗,并使用matplotlib/seaborn/py ...
- 机器学习算法手把手实战:KNN预测城市空气质量
AI派在读学生小姐姐Beyonce Java实战项目练习群 长按识别下方二维码,按需求添加 扫码添加Beyonce小姐姐 扫码关注 进Java学习大礼包 机器学习KNN算法实践 预测城市空气质量 「P ...
最新文章
- linux 服务启动依赖,linux下的系统服务介绍——init、systemd
- zoj 3707 Calculate Prime S
- step 1 android-sdk-download
- JavaScript 面向对象的程序设计1
- 一起读懂传说中的经典:受限玻尔兹曼机
- 吴恩达深度学习笔记(八) —— ResNets残差网络
- linux 软件 runtime,Objective-C中runtime机制的应用
- syslog传到服务器日志文件,将supervisor产生的日志通过syslog上传到服务端
- 基于arm-linux的防火墙设计,基于ARM9的Linux驱动开发及防火墙设计
- 代码同步工具_构建现代化的命令行工具
- SpringBoot实战(十六):集成Skywalking调用链监控系统
- 大型网站架构之系列(4)——分布式中的异步通信
- c#多线程thread实例详解
- idea增强for循环
- OC_UISlider
- (转)巴菲特的投资智慧--1998年的演讲
- Activiti学习(二)之工作流的入门与流程实列
- 问卷分析SPSS+AMOS实证步骤
- LoadRunner教程06:录制测试脚本
- 电脑数据误删除了怎么恢复?误删除数据恢复操作教程
热门文章
- Linux CentOS 7 Apache Tomcat 7 安装与配置
- 三星note5 android9,【极光ROM】-【三星NOTE9 N960X-845】-【V16.0 Android-Q-TD5】
- 搜索在线设备的工具软件-SADPTool提供下载
- 无线通信技术-NB-IoT
- C语言指针函数和函数指针区别
- html表格自动变色,让考勤表实现自动变色
- 机械自动化算不算计算机相关专业,机械工程及自动化属于工程类或工程经济类专业吗?...
- 利用SPI编写类似sockscap的代理工具
- SCAN及相关SSCAN,HSCAN和ZSCAN命令解析
- 2003卡在应用计算机设置,计算机操作与应用(Windows XP+Office 2003)