《基于Python的空气质量分析与实践.doc》由会员分享,可在线阅读,更多相关《基于Python的空气质量分析与实践.doc(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、摘要本篇文章利用了Python爬虫技术对空气质量网站的数据进行获取,获取之后把数据生成CSV格式的文件,然后再存入数据库方便保存。再从之前24小时的AQI(空气质量指数)的平均值中进行分析,把数据取出来后,对数据进行数据清洗,最后将数据提取出来做可视化的分析。在对数据的获取的过程中,使用了Python的request去获取html的一个文本,然后利用正则表达式re库和beautifulSoup这两个库去对数据进行筛选,拿到自己需要的一些空气质量的数据,并且同时写入CSV文件。在对数据进行存储、分类时,利用了Python的sqlalchemy这个库,对写入CSV的数据去存进数据库,更简单直接的保
2、存大群数据,然后再使用pandas这个库去读取数据库里面的数据,并且读取的数据可以直接去清洗、分类。在数据可视化的步骤中,则用matplotlib和pyecharts这两个库去将想要分析的数据进行可视化,绘制成条形图,方便比较各个城市的空气质量差异,将当天空气最好的前十五个城市可视化出来,并且通过K-means聚类算法等去分析城市的一些空气质量受到影响的原因,以及对应的治理措施。关键词: Python;爬虫;数据分析;数据库;数据可视化目 录第1章 绪 论11.1 课题的研究背景及意义11.2 互联网数据及其分析的研究现状11.3 论文主要研究内容及框架结构2第2章 需求分析32.1 功能性需
3、求分析32.2 非功能性需求分析3第3章 介绍BeautifulSoup与爬虫的一些事项43.1 BeautifulSoup简介43.2 关于爬虫的一些注意事项以及对空气质量数据的搜集43.2.1 区分恶意爬虫和普通爬虫43.2.2 关于反爬虫的一些介绍53.2.3 对空气质量以及对应城市数据的爬取6第4章 数据处理工具与算法介绍94.1 Pandas 模块介绍94.2 SQLAlchemy模块简介及应用94.3 关于Pyecharts104.4 K-means算法介绍10第5章 数据的可视化介绍及数据分析115.1 空气质量最好的前15个城市排名展示125.2 空气质量最差的前15个城市展示
4、125.3 以地区分析城市空气质量好的特点135.4 以地区分析城市空气质量差的特点145.5 污染物占比的可视化155.6 通过K-means聚类算法的分析结果15第6章 总结与展望196.1 总结196.2 展望20参 考 文 献21致 谢22附 录23广东东软学院本科生毕业设计(论文)第1章 绪 论1.1 课题的研究背景及意义随着经济的高速发展,空气质量这一生存的大问题显得越来越重要,我们以前发展太多重工业的时候,已经牺牲了很多的空气环境,到现在由于空气质量引发的一系列问题比比皆是,所以我们现在要注重空气的质量去保护环境。特别是现在网络飞速发展的时代,我们可以随时随地就能获取到各地的空气
5、质量的信息,方便我们去了解各地的空气质量以及对空气质量进行及时的控制,让空气质量保持在一个比较良好的范围。大气污染状况是与我们每一个人的健康情况息息相关的,我们每一个人都有责任去保护我们的地球,因此普及一些空气污染的后果以及如何遏制这种提高空气质量具有重大意义。通过空气质量分析,可以使更多人了解大气污染重的地区以及原因,使大家增强环境保护意识,提高公众的科学素养,便于公众在线阅读及参与。收集全省各地市空气自动监测点位的实时发布数据,储存进空气质量搜集的数据库。这些数据不但可以呈现给用户们每个城市实时的一些空气质量信息,也可以把获取到的数据储存起来,方便以后去收集利用,还可以把这些数据给有关的保
6、护环境的部门,作为整治空气环境的理由。所以对空气质量的关注是很有必要的。1.2 互联网数据及其分析的研究现状随着互联网技术及应用的高速发展,我们也越来越容易的可以在网上获得我们所需要的一些数据,在每个行业都拥有着非常海量的数据。数据量的愈发增大而导致分析这些空气质量数据难度也会变得更大,因此出现了一方面不断地产生大量数据,另一方面有许多的原因导致了没有办法及时去利用刚刚收集到的海量的数据,然后对这些数据造成了浪费。数据的可视化技术可以说正好挽救了这种数据的浪费,高效率的从数据里面获取需要的东西,现代的数据可视化技术是把存进数据库里非常海量的数据提取出来,以非常直接、人们直接看明白的图像的形式展
7、示给使用者,以方便在广大的数据里去寻找人们自己需要的数据,而且数据能一眼看出来,不需要逐条的去分析,省时省力。图像处理、计算机辅助设计、计算机视觉及人机交互技术等多个领域。在2010年NASA发布了由加拿大达尔豪斯大学的研究人员Aaronvan Daniela和Randall Martin将两台卫星仪器监测仪器得到的气溶胶总量数据相加,并且与电脑模型计算出的气溶胶垂直分布量结合在一起。1.3 论文主要研究内容及框架结构本文主要分析了全国各个城市的空气质量,主要为号召大家对空气较差的城市进行一些改善,使大家的生活环境能够变好,而且分析一些城市空气质量好的原因以及地域分布,使用爬虫对每个城市的空气
8、质量数据进行获取。同时围绕城市空气质量的获取及其分析结果可视化,进行的一系列工作主要有如下:(1) 分析pm25.in这个天气网站,爬取此站一天的AQI值,然后写入CSV文件进行行列的数据整理,然后再将CSV文件写入数据库。(2) 对存储的数据进行结果分析,并将其可视化。可视化过程将利用目前较为流行Pandas与PyEcharts工具进行组合呈现数据分析结果,并在一定程度上验证数据的正确性,从多个角度分析一些空气质量好的城市的共同点以及原因,和一些空气质量差的城市的共同点及原因。本文的大概结构如下:第1章概述介绍了对空气质量分析的意义,以及对搜集数据到分析数据的一些简略介绍,还有介绍了如今数据
9、分析日渐提升的地位。第3章主要介绍Python爬虫的一些知识,介绍在本文使用的一些爬虫类库,以及对爬虫的一些科普,让大家认识到使用恶意爬虫的一些危害以及后果,对网络有着更深的法律意识,本文还讲到对空气质量爬取的一些做法,为下文可视化提供数据。第4章和第5章介绍了一些储存数据的工具、清洗数据的工具和可视化工具,以及聚类算法介绍。针对从网上获取的数据进行数据的保存、清洗并且可视化,并在可视化数据过程中讨论空气质量好的城市的分布情况以及空气质量差的城市的分布规律,并且将好的城市和空气质量差的城市排列出来,接着分析空气质量差的城市所受到的污染物的影响。第6章为设计的总结与展望。总结了本文关于空气质量分
10、析与可视化研究成果,并指出我这次数据分析过程中仍需解决的问题和可拓展的功能实现。第2章 需求分析本系统的目的是方便大家实时获取各个城市的一些空气质量情况,来决定是否合适出行。由于新冠肺炎疫情的影响,空气质量的问题也应该更加值得关注,若是空气好,对肺部的负担更少,让一些有肺部问题的人们拥有更好的环境。作为一种数据分析类的系统,它的要在内部条件与外部条件进行需求分析,下面将分为两个部分,一个部分为功能性需求,另一个部分为非功能性需求去分析,因为影响数据获取的不但是程序问题,还可能包括一些网络状态等原因。2.1 功能性需求分析(1)空气质量数据的获取。这个功能部分主要是使用Python的reques
11、ts库去获取pm25.in这个网站首页的整个网页代码,提取出首页的城市名字以及对应的子链接,子链接里面就是城市的详细AQI空气质量信息,通过爬虫再次爬取每个城市的链接,得到空气质量的数据,由于这个网站公布的是实时数据,所以需要爬取前24小时空气质量的AQI折线图,然后得到平均值就是这一天的空气质量的值。(2)数据存储。这个功能是利用SQLAlchemy去把从网页获取到的空气质量数据存进数据库中,方便保存,相比于写进CSV文件,存进数据库能更加的方便利用,而且也不会因为操作失误使数据丢失。(3)数据分析的结果。该功能主要是列出前十五个当天的空气质量好的城市排名以及空气质量差的城市,并结合一些地理
12、分布的情况与算法分析的结果去总结规律。2.2 非功能性需求分析(1)网络的稳定性。网络的好坏一定程度上会影响在线数据的获取,所以需要在一个相对稳定的网络环境下才方便对数据进行获取。(2)容错率要高。对于一些网站也暂时没有公布出来的城市空气数据,我们需要采取异常处理,不然会使得程序一直报错。第3章 介绍BeautifulSoup与爬虫的一些事项3.1 BeautifulSoup简介简单来说,Beautiful Soup是Python的一个对爬虫的数据筛选库,最主要的功能是把网页中下载下来的数据进行筛选,获得自己所需要的数据。官方解释如下:Beautiful Soup里面包含了非常Python方式
13、的简单的函数用来去标记所想找到的一些html节点,把他们全部搜集出来,类似于我们在查找文档中的关键字ctrl+F一样。它是一个查找的工具,通过解析整个的文档为使用者提供使用者所指定想要查找到的数据,非常的简单快捷,所以使用BeautifulSoup是一个非常简单的能够在爬取到的所有数据中筛选数据的一个模块,一般都是从html的标签中查找标签,然后去过滤一些不必要的标签,从需要的标签里选择数据。BeautifulSoup的一些特点是会将字符串变成Unicode编码写入自己函数内,输出到用户的电脑中则是会变成utf-8编码。所以我们不需要去考虑我们所写的程序的编码方式,除非在我们输出的字符串中没有
14、去指定编码方式。这时,Beautiful Soup就不能够去识别这个字符串的编码方式了。所以我们就需要自己去说明它的编码方式,让bs64去接收。Beautiful Soup如今作为一款出色的Python解释器,地位已经赶上了lxml、html6lib,有着非常强劲的处理速度和提供不同的解析策略。3.2 关于爬虫的一些注意事项以及对空气质量数据的搜集3.2.1 区分恶意爬虫和普通爬虫如果把互联网比作一个非常大的蜘蛛网,那么我们所使用的爬虫就相当于蜘蛛网上的蜘蛛,每天都有无数的蜘蛛(爬虫)在互联网这个大网中活动,获得这些网上的知识。所以网页爬虫就是一种按照制作者所指定的一些命令,去自动化的获取互联
15、网上的一些信息资源的一种程序。网络爬虫的功能是通过网络的链接去获取该链接的内容,并且可以对获取的网页内容做出一些处理。简单来说就是直接获取网页的前端显示的所有内容,比如html之类的前端页面,html包括一些文字内容、图片链接、其他网页的链接。网络爬虫就像一个蜘蛛一样,只要有url的地方,他就可以沿着url去获取这个网页的信息。这个过程与蜘蛛在自己的蜘蛛网上爬行非常相似,它又被称为网络爬虫系统或者网络蜘蛛系统。虽然网络爬虫对于一些研究数据,想要在网上搜集数据去做贡献的人提供了不小的帮助。但也因为爬虫的善恶程度是由使用者决定的,有的不法分子想要利用爬虫去获取网站的一些不公开的数据,盗取他人隐私,
16、给这些与爬取网站挂钩的公司和其他一些政府造成非常重大的损失,这是绝对恶劣的行为,甚至是违法行为,这种爬虫就称为恶意爬虫。与普通爬虫不同,普通爬虫是获取网络上公开的数据,而恶意爬虫就去专门搜集别人的隐私数据、未公开的数据,这样就让被人的网站遭受了重大损失。还有网站的不公开信息可能在短短的时间内就被恶意爬虫窃取并悄无声息的复制到别的网站。网站的一些关键内容被复制之后使一些网站的权重变低,然后偷取内容的网站权重变高,到时候影响了原网站在搜索引擎中的排行,这个时候不但会使用户访问量越来越低,还会让自己的广告收益、销量等等日渐低下。在网站注册过的用户若被找到信息,恶意使用者会利用这一逻辑漏洞,使用他们的
17、爬虫恶意通过各类社工库,还有一些社工的APP,当恶意的使用者拿到一部分手机号后可以在社工库去验证这些手机号与手机号号主的身份是否匹配,然后就有很多的骚扰电话打上门来。除了很明显的违法欺诈外,爬虫的恶意使用者可以将数据打包出售给一些黑心的公司,让他们做各种违法的事情,这就相当于黑产行为。值得注意的是,我们在平常使用非恶意的爬虫,也需要注意一些问题,比如别人网站的负载,不能为自己的效率而去强行提高线程,这样可能会使对方网站因为访问量太大而崩溃,到时候追究的是我们所使用爬虫的人的责任,2019年就有许多因为把别人网站爬取崩溃,从而造成别人运营的损失,然后构成了违法行为。3.2.2 关于反爬虫的一些介
18、绍反爬虫是针对爬虫所爬取网页所制定的一种防御策略,可以通过多种途径去防止爬虫去对网页收集数据,下面介绍部分反爬虫的类型:1. 通过UserAgentUserAgent是表示http协议浏览器的信息,若是使用的Python爬虫,UserAgent则会变成Python,所以禁止带Python头的一些数据可以遏制一部分的爬虫。2. 根据用户行为若是在一个IP内,用户对网页的访问过多,就会被认定为是使用了爬虫,所以可以判断短时间内对同一网页访问次数过多的“用户”判定为爬虫,所以可以封禁一些访问频率过高的ip。3. 基于验证码的反爬虫有些网站设置的验证码就是专门防止一些爬虫无障碍的获取到网页数据,所以设
19、立了需要验证码,这个时候就不得不手动去输入验证码让验证通过,这样就可以比较好的防止爬虫。4. 基于登陆的反爬虫有些网站只能登陆进去才能访问到里面的数据,而过于简单的Python爬虫并不能选择自动登陆,所以也可以拦截住一部分的爬虫。3.2.3 对空气质量以及对应城市数据的爬取考虑到上文提到的防止违法行为,我选择了一个比较有公开性的空气质量检测网站pm25.in,以及不提高其线程,防止对服务器造成太大负荷。查看了html的代码,数据来源就是pm25.in所提供的,下载手法是使用Python的requests模块对网页的html代码进行下载,而主要爬取思路如下:1.在主页爬取城市的pinyin,通过
20、这个网站发现,每个城市的页面就是主站+pinyin,如图2.1所示。2.拿到pinyin的列表之后,再通过循环去爬取每个城市的AQI(空气质量指数)以及污染物的数值,如图2.2所示。3.由于网站检测的AQI数值是每个小时的,所以需要去爬取24小时的空气质量数值,然后去除以一天的24小时,得出来的AQI平均值比较有代表性,如图2.3所示。4.还要去搜集一下空气质量较差的城市图2.1 页面前端的规律图2.2 网站的空气数据图2.3 广州24小时的空气质量数据爬取的效果如图2.4所示:图2.4 爬取数据效果第4章 数据处理工具与算法介绍4.1 Pandas 模块介绍Pandas是Python当中的一
21、个拓展的库,Pandas里面包含了大量的标准数据类型并且提供了高效操作大型数据的工具,对于数据的处理,pandas可以做到非常的高效,并且可以与多种类库共同使用,对编程者非常友好。同时Pandas也提供了集中数据结构供使用者使用:1. Series: 一维数组,类似于List列表的一种数据结构,但是Series与List有一些不同之处,就是Series只允许储存相同数据类型的数据,这样有利于内存分配同时提高运算效率。数据库中相同列的数据也是起着同样作用。2. DataFrame: 二维数组,是一种表格型的数据结构,简单来说就是行与列都有一层的Series的数组,这样组成新的二维数组。当用户将所
22、需要的数据写进Excel表格文件时,DataFrame这种数据结构可以很方便地利用CSV文件格式创建Excel表格,做到了与Excel表格基本没有任何的录入障碍。3. Panel: 三维数组,同理可以理解为DataFrame之间的嵌套。利用爬虫获取到空气质量的数据之后,可以同时将其写入已存在的CSV表格。同时还可以使用sqlalchemy去把CVS文件写入数据库,方便保存并且以防丢失。4.2 SQLAlchemy模块简介及应用SQLAlchemy是Python的一种SQL工具包和对象关系映射器,是Python的一种ORM(Object Relationship Mapping)框架,而ORM是
23、一种为了面向对象编程开发方法而产生的一种对象关系映射的工具,它的关系是指关系数据库,也就是数据可以保存在数据库当中。当生成一个对象时,对象可以从数据库当中获取持久化的数据,不像是我们运行一个程序,里面的变量参数只存在程序运行的时候,数据存储在数据库里是持久的,反过来,数据也可以存储在数据库当中。使用SQLAlchemy的时候,可以简化开发时候需要使用SQL语句这一步操作,可以直接思考他的代码逻辑,从而简化一些步骤,提高开发中的效率。SQLAlchemy提供了一种非常持久性的模式,用于数据库访问的时候,就显得非常的高效率。使用SQLAlchemy的优势是即使开发人员不熟悉数据库操作的语句,SQL
24、Alchemy可以让开发人员直接使用对象操作,从而跳过数据库语句的操作,不用开发人员去查找数据库语句,提高了开发的效率。而其中也有它的缺点,使用SQLAlchemy的缺点是跳过了数据库语句操作之后,不容易进行数据库查询的优化,从而可能带来一些性能上、运行方面的损失。下面是SQLAlchemy的一些常用的参数:1.create_engine:可以当作作为一个桥梁架起数据库与Python之间的沟通,使Python可以对数据库进行连接,里面的数据类型为字符串,用来表示连接的信息:数据库类型+数据库驱动名称:/用户名:密码需要连接主机的ip(如果是本机则是localhost或者127.0.0.1):端
25、口号/数据库名2.sessionmaker:生成一个数据库的会话类。这个类相当于一个数据库连接的session,向数据库申请一个会话,同时这个类还会记录一些查询的数据,并且可以控制执行SQL语句的时间。当用这个类拿到一个数据库返回的session之后,就可以用这个session对数据库进行增删改查。4.3 关于PyechartsPyecharts是Python与Echarts交接而成,用于生成Echarts图表的一个类库。而Echarts是由百度研发,一个可以生成生动,直观,可以交互并且可以高度个性化定制的web数据可视化图表的可视化库。简单来说Echarts有着超越许多同行的一些优势,可视化
26、出来的数据图十分的美观且炫酷。Pyecharts就是在Echarts的基础上的一个Python类库。值得注意的是,Pyecharts分为两个版本,一个v0.5x,另一个为v1,两个版本并不兼容,而且v0.5x仅仅支持Python2.7,Python3.4+,而v1的版本仅支持3.6+的版本,导入模块的方式也不完全相同,所以Python版本限制了Pyecharts的版本。Pyecharts的强大之处在于可以导入全国甚至全球的地图包,然后对其进行数据可视化,清楚的了解地区的特点。顺带一提,Pyecharts是Python的一个拓展库,需要用pip去自行下载。4.4 K-means算法介绍K-mea
27、ns算法是一种基于坐标与距离的一种聚类算法,聚类算法就是将数据中分散的样本分类,将每个特征相似的样本都分为一组,在K-means算法中,这种组称为“簇”。算法原理是先在样本中做k个随机点,作为“簇”的中心点,然后计算样本到这些“簇”的距离,对于样本点,距离哪个“簇”最近,就归类在这个“簇”内,分完样本点后。继续在这些“簇”中重新选一个中心点,继续计算离中心点的距离,继续划分“簇”,直到中心点的变化很小为止。第5章 数据的可视化介绍及数据分析数据可视化是指利用图形、动画等更加形象的一些表达方式对数据进行体现,在如今的大数据时代,每秒钟就有无数条数据,而一条条的去看这些数据,不但枯燥,而且又难以记
28、住,当使用了数据可视化,就能将数据以图形或者动画的方式呈现出来,到时候我们可以使用图形记忆去记住这些数据,而不是将数字去背下来,这样的数据更容易去使用和理解。现在数据可视化应用到许多方面,在新闻传播的行业中,数据可视化不但是一种非常合理的呈现方式,节省大家的理解,只需几秒钟就可以看懂图中的数据所想表达的意思,还是带有更强的互动性的一张信息图表,这就说明了数据可视化的化繁为简的一个优点,并且增加信息的可读性和趣味性。信息的表达形式和手中阅读信息时候的受欢迎度、记忆度和参与度存在一定的关系,可视化的叙事方式不仅降低了受众的获知知识的成本,而且提高了一些用户对于这些信息的记忆效率和给其他人分享的欲望
29、,这就为数据的传播提供了非常良好的途径。有科学研究表明,注视记录长度与喜爱度之间存在非常正相关的关系。用视觉元素去快速抓住观众们的眼球,营造不同的兴趣点,这样来实现自己所喜欢的“悦读”方式,进而延长信息消费的过程,已然成为当下各类媒体争取受众的制胜之策。一般地,在人们对空气质量查看的过程中,会着重关注一些空气质量好的城市所处的位置、空气质量差的城市污染物的排放量、以及空气质量好的城市的排行。而且有些人们打算去某些城市旅游的,自己又不幸带有过敏性鼻炎,这些空气质量对他们来说影响更加的大,使他们不得不关注自己意向去到的城市的空气质量情况,以防患上更严重的呼吸类疾病。对于数据的可视化,本着浅显易懂的
30、原则,本文对于以下若干问题做出了图标化处理,即进一步对所获取的数据进行可视化处理。1. 列出空气质量最好的前十五个城市2. 列出空气质量最坏的前十五个城市3. 以地区分析空气质量好的城市的一些分布特点4. 以地区分析空气质量差的城市的一些分布特点5. 将污染物占比进行可视化6. 使用K-means算法分析污染情况相似的城市5.1 空气质量最好的前15个城市排名展示根据从网上获取到24小时的空气质量数据的平均值,空气质量最好的前十五个城市如图5.1所示:图5.1 空气质量最好的前十五个城市图5.1中显示全国空气质量最好的前十五个城市,其中旅游胜地三亚高踞榜首,紧随其后的湛江、阳江两个城市也是旅游
31、的大城市,有着非常丰富的水资源,绿化方面做得非常好,从整张图的角度看来,这15个城市都处于AQI值35以下,在空气质量的判断条件当中属于非常优秀的水平。从省份分析,在空气质量最好的前十五个城市当中,广东省所占据的城市比例最多,有湛江、阳江、茂名、汕尾、韶关五个城市,共占这十五个城市的三分之一,由地理环境所知,广东的水资源非常丰富,降雨量也非常多,表明空气质量受到水的影响非常大。从城市的发达程度看来,以上十五个城市全部位列三线城市及以下,空气好的原因可能为经济发展比不上一二线城市的水平,所以工业污染较少,在城市街道的出行车比较少,排放的废气少,使得空气维持在了一个较好的水平,在一定程度上说明了经
32、济与环境的关系。5.2 空气质量最差的前15个城市展示根据从网上获取到24小时的空气质量数据的平均值,空气质量最差的前十五个城市如图5.2所示:图5.2 空气质量差的前十五个城市从区域角度分析,前五名空气差的城市都属于新疆维吾尔自治区,具体原因为沙尘暴的影响,因为新疆降雨量太少,导致沙尘容易扬起,到处都是颗粒物,并且在新疆有许多热电厂、煤化工厂、硅铁、石油化工厂、水泥厂等重污染的工厂,还有很多附属厂;加上其它燃煤锅炉、家里的燃煤炉子、在街边饭店的烤肉炉。数量惊人,外界环境的条件加上自己使用重污染的一些物资,导致了这些城市空气质量这么差。由数据可以知道,有三个属于新疆的城市达到了惊人的500AQ
33、I值,这个属于严重污染的范围,后面的几个城市污染程度也在150以上,都属于中度污染以上的级别。5.3 以地区分析城市空气质量好的特点由图5.3可知,空气质量好的地区大多数分布在空气湿度较高的地方比如:长江以南的城市和四川盆地,其中还有西部和东北部的丰水区。在长江以南的地方尤为密集。长江以南的地区主要以亚热带季风气候为主,降水量较多,空气湿润。主要发展轻工业,相对于重工业,轻工业的污染比较小。降水能够有效吸收、淋洗空气中的污染物。因此这些地区的空气的自我净化能力较强。图5.3 空气质量最好的城市分布图5.4 以地区分析城市空气质量差的特点如图5.4所示,空气质量不好的地方多数分布在华北地区和新疆
34、的荒漠地区。这些地区的主要特点是降水少,气候干燥。这些地区的气候是温带季风性气候和温带大陆性气候,降水少空气干燥,风沙比较多。因此这些地区的空气自我净化能力弱。由图所见,空气质量差的密集区在黄河中下游地区。这部分地区在冬天的时候燃煤供暖,会产生有害气体和粉尘,其次该地区是工业密集区,石油,煤化,冶金工业发达,人类活动和工业生产对空气质量影响大。图5.4 空气质量差的城市分布图5.5 污染物占比的可视化图5.5是对存在污染物的城市进行归纳,然后将这些污染物的占比可视化出来。由图中我们可以看到,存在污染物的城市中,收到PM10影响的城市是最多的,其次是PM2.5,这两种颗粒物加起来占污染物的90%
35、以上,说明当前要对空气质量的提高,仍需首要解决的还是颗粒物的问题。图5.5 空气质量与污染物图5.6 通过K-means聚类算法的分析结果要使用K-means算法分析,首先要对爬取到的数据进行标准化,同比例缩小,使得特征相似的城市落入一个小的特定区间内,消除奇异样本的影响。标准化之后,就是将这些数据进行聚类算法计算,是它们特点相似的归为一类。具体流程图如5.6所示图5.6 K-means计算的流程图下面将着重分析受到污染的城市的“簇”。根据样本的标准,我把这些城市分为5个“簇”,如图5.7所示,右边是每个簇包含的城市数量。 图5.7 “簇”内城市的数量由图5.7和5.8,第一聚类有73座城市,
36、代表城市有白银、包头等,群体特点为:所有污染物气体均大于城市平均水平,但是又不算高太多,可采取温和控制方法,对工业生产流程细节进行一些改良,减少排放。图5.8 第一聚类城市特点由图5.7和5.8,第二聚类有31座城市,代表城市有安阳、滨州、常熟等,群体特点为:二氧化氮、一氧化碳排放量明显大于其他城市群体,空气质量也偏差,这类城市可以减少氮氧化物的排放,建议使用清洁能源。图5.9 第二聚类城市特点由图5.7和图5.10,第四聚类有10座城市,代表城市有大同、和田地区等,所代表的群体特征为PM10、PM2.5的排放非常严重。可吸入颗粒物在环境空气中持续的时间很长,对人体健康和大气能见度影响都很大。
37、通常在汽车在沙地扬起的沙尘,被风卷起的尘土,还有一些重工业的污染。图5.10 第四聚类城市特点第6章 总结与展望6.1 总结主要实现了对pm25.in的城市空气质量和其污染物的搜集,并将其获取到的数据存储进入数据库。并且使用pandas模块去将这些数据从数据库中读取出来,然后使用matplolib和pyecharts进行可视化。在获取数据过程中,用了比较多的时间花在了获取整个网站的全部城市空气质量以及首要污染物的实时数据,并且在该网站的24小时的空气质量数据比较难以获取,难点主要在于对全天AQI的获取。我在这次项目中完成了以下的工作:(1)对空气质量网站的全部城市的空气质量进行了数据爬取,并且
38、配置了数据库与Python进行连接,在这个过程中遇到了一些配置上的错误,后来发现需要下载pymysql的类库去制造一个依赖环境。(2)对获取到的城市空气质量数据存放进数据库并使用pandas取出来,方便可视化处理。对于存放到数据库的数据可视化,本篇文章使用了数据可视化工具matplolib和pyecharts进行数据排名展示和对数据的空间分布展示,并结合各城市的一些气候情况,污染物排放量,对这些城市的空气质量进行一些可视化分析和数据上的分析。本次数据分析对多个城市进行分析后,在几个角度得到一些结论:(1)在展示的空气质量最好的15个城市中,广东的城市占了最大的一部分,而且这些城市大部分是水资源
39、多的地区,有的沿海地区空气环境更好,而且这15个城市都是三线城市及以下的城市,说明水资源同样丰富的情况下,经济不太发达的城市要比发达的城市空气质量好。(2)在展示的空气质量最差的15个城市中,前五名空气差的城市都属于新疆维吾尔自治区,具体原因为沙尘暴的影响,因为新疆降雨量太少,导致沙尘容易扬起,到处都是颗粒物,并且根据一些地方的资料介绍,在新疆有许多热电厂、煤化工厂、硅铁、石油化工厂、水泥厂等重污染的工厂,还有很多其他污染严重的附属厂;加上其他家里用户所使用的燃煤锅炉、家里的燃煤炉子、在街边饭店的烤肉炉,这样的排放加上自然环境就导致了空气质量的恶劣。(3)从地理位置分布规律看,空气质量好的地区
40、大多数分布在空气湿度较高的地方比如:长江以南的城市和四川盆地,其中还有西部和东北部的丰水区。在长江以南的地方尤为密集。长江以南的地区主要以亚热带季风气候为主,降水量较多,空气湿润。主要发展轻工业,相对于重工业,轻工业的污染比较小。降水能够有效吸收、淋洗空气中的污染物。因此这些地区的空气的自我净化能力较强。(4)从地里位置分布规律看,空气质量不好的地方多数分布在华北地区和新疆的荒漠地区。这些地区的主要特点是降水少,气候干燥。这些地区的气候是温带季风性气候和温带大陆性气候,降水少空气干燥,风沙比较多。因此这些地区的空气自我净化能力弱。由图所见,空气质量差的密集区在黄河中下游地区。这部分地区在冬天的
41、时候燃煤供暖,会产生有害气体和粉尘,其次该地区是工业密集区,石油,煤化,冶金工业发达,人类活动和工业生产对空气质量影响大。(5)在首要污染物占比角度看,存在污染物的城市中,收到PM10影响的城市是最多的,其次是PM2.5,这两种颗粒物加起来占污染物的90%以上,说明当前要对空气质量的提高,仍需首要解决的还是颗粒物的问题。(6)通过聚类分析算法的结果看,分成的五个聚类中,有三个聚类的空气质量是偏差的,而且这些聚类的污染物排放规律也不一样,可以通过聚类中存在的问题,对情况相似的城市进行污染物治理,增加治理的效率。6.2 展望通过本文的研究,可以实现对我国城市的空气质量的数据获取和数据可视化研究。对
42、理解Python爬虫、数据储存数据库、以及对数据处理方式的理解有了更为深刻的印象。Python作为一种脚本编程语言,在爬虫、数据分析上的优势确实比其他编程语言要好一些,获取数据的主要来源也是依靠于爬虫。但由于一些原因,本课题的研究还有许多不足的地方,主要体现在以下的方面:(1) 因为空气质量是和季节有着比较大的关系的,所以本次数据分析的分布规律仅限于在这个季度的天气当中,到了夏天说不定规律就有一定的偏差性。(2) 因为考虑到爬虫对服务器的影响,我并没有提高任何线程,怕给服务器带来压力,在爬取全国的375个城市中,数据的处理需要几分钟到十几分钟的时间,这个是比较慢的。参 考 文 献1周勇.空气质
43、量监测分析系统的设计与实现J.电子世界,2019(18):164-1652尹小妹,田国祥,王天一,耿辉,贺海蓉,张勇,吕军.Python爬虫获取天气数据与儿童肺部疾病门诊就诊率相关性分析J.中国循证心血管医学杂志,2019,11(09):1047-1049+1061.3张涛. 空气质量分析系统的设计与实现D.河北科技大学,2016致 谢本论文能顺利完成,首先应感谢的是我的导师谭康裕老师,是他给予我很大的帮助,给我指导了分析数据的方向和思路,然后还有我的一些同学,是他们在调试数据库的时候给了我很大的帮助,让我在错误中成功,对数据库进行连接,也帮助我找到了pyechart与Python版本不兼容的
44、问题。最后还要感谢我的父母,在这次论文中给了我很大的支持。最后再次谢谢帮助我的所有人,因为你们,我的论文才能顺利的完成!附 录具体的代码如下:爬取空气质量的信息import requestsfrom bs4 import BeautifulSoupimport csvimport redef get_city_aqi(city_list): 获取城市AQI url = http:/pm25.in/ + city_list r = requests.get(url, timeout=30) soup = BeautifulSoup(r.text, lxml) div_list = soup.fi
45、nd_all(div, class: span1) div_list2 = soup.find(div, class: primary_pollutant).text.strip() pollutant = div_list2.replace( , ) p2 = pollutant.replace(首要污染物:, ) p3 = p2.strip(n) if p3=: p3=无 data = rdata:(.*?),n dat = re.findall(data, r.text) datas = dat0 datass = datas.split(,) datass0 = datass0.rep
46、lace( ,) datass-1 = datass-1.replace(,) datas=int(i) for i in datass he = sum(datas) / 24 city_aqi = p3+he for i in range(8): div_content = div_listi caption = div_content.find(div, class: caption).text.strip() value = div_content.find(div, class: value).text.strip() city_aqi.append(value) return ci
47、ty_aqidef get_all_cities(): 获取所有城市的url url = http:/pm25.in/ city_list = r = requests.get(url, timeout=30) soup = BeautifulSoup(r.text, lxml) city_div = soup.find_all(div, class: bottom)1 city_link_list = city_div.find_all(a) for city_link in city_link_list: city_name = city_link.text city_pinyin = city_link