广州空气质量数据分析

  • 一、背景
  • 二、提出问题
  • 三、数据处理
    • 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.

广州空气质量数据分析相关推荐

  1. 【空气质量数据分析专题九】污染物浓度小时变化分析

    前言 对空气质量小时级别五年数据进行小时变化分析,可以看出污染物浓度在一天中逐小时变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各小时的平均浓度,最后进行可视化分析.处理方 ...

  2. 2014-2022年4月全国空气质量数据分析

    2014-2022年4月所有城市及站点空气质量数据集(更新中)更新时间不固定 时间范围:2014-2022年4月年 数据来源:中国环境监测总站的全国城市空气质量实时发布平台 数据格式说明距离: 全国城 ...

  3. 空气质量数据分析及web实现

    本次课程设计主要是针对大数据计算框架这门课程的总结,同时利用web进行展示,也是对自己之前学习前端的一次小检验.同时也是自己第一次和同学们进行分工合作完成的作业,自己主要负责对所有的内容整合,并进行w ...

  4. 【空气质量数据分析专题五】污染物浓度年际变化分析

    前言 大气空气质量污染物一般为SO2.NO2 .CO.PM10.PM2.5.O3六项污染物.日级别浓度中,除O3使用最大8小时滑动平均浓度外,其他五项污染物均采用日平均浓度. 除CO浓度单位为mg/m ...

  5. Matplotlib空气质量数据分析(附数据集下载)

    使用JupyterLab进行的数据分析 数据集下载 import pandas as pd import numpy as np from pandas import Series, DataFram ...

  6. 【空气质量数据分析专题八】污染物浓度日变化分析

    前言 对空气质量日级别五年数据进行日变化分析,可以看出污染物浓度逐日变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各日平均浓度,最后进行可视化分析.日变化分析方式有多种,这 ...

  7. 【空气质量数据分析专题七】污染物浓度月变化分析

    前言 对空气质量日级别五年数据进行月变化分析,可以看出污染物浓度随月份变化的特征. 分析流程 对数据进行专题二的预处理后,计算出各污染物全时段的各月平均浓度,最后进行可视化分析.月变化分析方式有多种, ...

  8. 机器学习KNN算法实践:预测城市空气质量

    出品:Python数据之道 作者:叶庭云 整理:Lemon 机器学习KNN算法实践 预测城市空气质量 「Python数据之道」导读: 之前在公众号上分享过 "图解KNN算法" 的内 ...

  9. 基于Python的2013-2018全国城市空气质量分析

    基于Python的2013-2018全国城市空气质量分析 项目摘要 本项目使用pandas/numpy工具包对557424条空气质量数据进行导入及清洗,并使用matplotlib/seaborn/py ...

  10. 机器学习算法手把手实战:KNN预测城市空气质量

    AI派在读学生小姐姐Beyonce Java实战项目练习群 长按识别下方二维码,按需求添加 扫码添加Beyonce小姐姐 扫码关注 进Java学习大礼包 机器学习KNN算法实践 预测城市空气质量 「P ...

最新文章

  1. linux 服务启动依赖,linux下的系统服务介绍——init、systemd
  2. zoj 3707 Calculate Prime S
  3. step 1 android-sdk-download
  4. JavaScript 面向对象的程序设计1
  5. 一起读懂传说中的经典:受限玻尔兹曼机
  6. 吴恩达深度学习笔记(八) —— ResNets残差网络
  7. linux 软件 runtime,Objective-C中runtime机制的应用
  8. syslog传到服务器日志文件,将supervisor产生的日志通过syslog上传到服务端
  9. 基于arm-linux的防火墙设计,基于ARM9的Linux驱动开发及防火墙设计
  10. 代码同步工具_构建现代化的命令行工具
  11. SpringBoot实战(十六):集成Skywalking调用链监控系统
  12. 大型网站架构之系列(4)——分布式中的异步通信
  13. c#多线程thread实例详解
  14. idea增强for循环
  15. OC_UISlider
  16. (转)巴菲特的投资智慧--1998年的演讲
  17. Activiti学习(二)之工作流的入门与流程实列
  18. 问卷分析SPSS+AMOS实证步骤
  19. LoadRunner教程06:录制测试脚本
  20. 电脑数据误删除了怎么恢复?误删除数据恢复操作教程

热门文章

  1. Linux CentOS 7 Apache Tomcat 7 安装与配置
  2. 三星note5 android9,【极光ROM】-【三星NOTE9 N960X-845】-【V16.0 Android-Q-TD5】
  3. 搜索在线设备的工具软件-SADPTool提供下载
  4. 无线通信技术-NB-IoT
  5. C语言指针函数和函数指针区别
  6. html表格自动变色,让考勤表实现自动变色
  7. 机械自动化算不算计算机相关专业,机械工程及自动化属于工程类或工程经济类专业吗?...
  8. 利用SPI编写类似sockscap的代理工具
  9. SCAN及相关SSCAN,HSCAN和ZSCAN命令解析
  10. 2003卡在应用计算机设置,计算机操作与应用(Windows XP+Office 2003)