版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要本篇文章利用了Python爬虫技术对空气质量网站的数据进行获取,获取之后把数据生成CSV格式的文件,然后再存入数据库方便保存。再从之前24小时的AQI(空气质量指数)的平均值中进行分析,把数据取出来后,对数据进行数据清洗,最后将数据提取出来做可视化的分析。在对数据的获取的过程中,使用了Python的request去获取html的一个文本,然后利用正则表达式re库和beautifulSoup这两个库去对数据进行筛选,拿到自己需要的一些空气质量的数据,并且同时写入CSV文件。在对数据进行存储、分类时,利用了Python的sqlalchemy这个库,对写入CSV的数据去存进数据库,更简单直接的保存大群数据,然后再使用pandas这个库去读取数据库里面的数据,并且读取的数据可以直接去清洗、分类。在数据可视化的步骤中,则用matplotlib和pyecharts这两个库去将想要分析的数据进行可视化,绘制成条形图,方便比较各个城市的空气质量差异,将当天空气最好的前十五个城市可视化出来,并且通过K-means聚类算法等去分析城市的一些空气质量受到影响的原因,以及对应的治理措施。关键词:Python;爬虫;数据分析;数据库;数据可视化
目录第1章绪论 第1章绪论1.1课题的研究背景及意义随着经济的高速发展,空气质量这一生存的大问题显得越来越重要,我们以前发展太多重工业的时候,已经牺牲了很多的空气环境,到现在由于空气质量引发的一系列问题比比皆是,所以我们现在要注重空气的质量去保护环境。特别是现在网络飞速发展的时代,我们可以随时随地就能获取到各地的空气质量的信息,方便我们去了解各地的空气质量以及对空气质量进行及时的控制,让空气质量保持在一个比较良好的范围。大气污染状况是与我们每一个人的健康情况息息相关的,我们每一个人都有责任去保护我们的地球,因此普及一些空气污染的后果以及如何遏制这种提高空气质量具有重大意义。通过空气质量分析,可以使更多人了解大气污染重的地区以及原因,使大家增强环境保护意识,提高公众的科学素养,便于公众在线阅读及参与。收集全省各地市空气自动监测点位的实时发布数据,储存进空气质量搜集的数据库。这些数据不但可以呈现给用户们每个城市实时的一些空气质量信息,也可以把获取到的数据储存起来,方便以后去收集利用,还可以把这些数据给有关的保护环境的部门,作为整治空气环境的理由。所以对空气质量的关注是很有必要的。1.2互联网数据及其分析的研究现状随着互联网技术及应用的高速发展,我们也越来越容易的可以在网上获得我们所需要的一些数据,在每个行业都拥有着非常海量的数据。数据量的愈发增大而导致分析这些空气质量数据难度也会变得更大,因此出现了一方面不断地产生大量数据,另一方面有许多的原因导致了没有办法及时去利用刚刚收集到的海量的数据,然后对这些数据造成了浪费。数据的可视化技术可以说正好挽救了这种数据的浪费,高效率的从数据里面获取需要的东西,现代的数据可视化技术是把存进数据库里非常海量的数据提取出来,以非常直接、人们直接看明白的图像的形式展示给使用者,以方便在广大的数据里去寻找人们自己需要的数据,而且数据能一眼看出来,不需要逐条的去分析,省时省力。图像处理、计算机辅助设计、计算机视觉及人机交互技术等多个领域。在2010年NASA发布了由加拿大达尔豪斯大学的研究人员AaronvanDaniela和RandallMartin将两台卫星仪器监测仪器得到的气溶胶总量数据相加,并且与电脑模型计算出的气溶胶垂直分布量结合在一起。1.3论文主要研究内容及框架结构本文主要分析了全国各个城市的空气质量,主要为号召大家对空气较差的城市进行一些改善,使大家的生活环境能够变好,而且分析一些城市空气质量好的原因以及地域分布,使用爬虫对每个城市的空气质量数据进行获取。同时围绕城市空气质量的获取及其分析结果可视化,进行的一系列工作主要有如下:分析pm25.in这个天气网站,爬取此站一天的AQI值,然后写入CSV文件进行行列的数据整理,然后再将CSV文件写入数据库。对存储的数据进行结果分析,并将其可视化。可视化过程将利用目前较为流行Pandas与PyEcharts工具进行组合呈现数据分析结果,并在一定程度上验证数据的正确性,从多个角度分析一些空气质量好的城市的共同点以及原因,和一些空气质量差的城市的共同点及原因。本文的大概结构如下:第1章概述介绍了对空气质量分析的意义,以及对搜集数据到分析数据的一些简略介绍,还有介绍了如今数据分析日渐提升的地位。第3章主要介绍Python爬虫的一些知识,介绍在本文使用的一些爬虫类库,以及对爬虫的一些科普,让大家认识到使用恶意爬虫的一些危害以及后果,对网络有着更深的法律意识,本文还讲到对空气质量爬取的一些做法,为下文可视化提供数据。第4章和第5章介绍了一些储存数据的工具、清洗数据的工具和可视化工具,以及聚类算法介绍。针对从网上获取的数据进行数据的保存、清洗并且可视化,并在可视化数据过程中讨论空气质量好的城市的分布情况以及空气质量差的城市的分布规律,并且将好的城市和空气质量差的城市排列出来,接着分析空气质量差的城市所受到的污染物的影响。第6章为设计的总结与展望。总结了本文关于空气质量分析与可视化研究成果,并指出我这次数据分析过程中仍需解决的问题和可拓展的功能实现。
第2章需求分析本系统的目的是方便大家实时获取各个城市的一些空气质量情况,来决定是否合适出行。由于新冠肺炎疫情的影响,空气质量的问题也应该更加值得关注,若是空气好,对肺部的负担更少,让一些有肺部问题的人们拥有更好的环境。作为一种数据分析类的系统,它的要在内部条件与外部条件进行需求分析,下面将分为两个部分,一个部分为功能性需求,另一个部分为非功能性需求去分析,因为影响数据获取的不但是程序问题,还可能包括一些网络状态等原因。2.1功能性需求分析(1)空气质量数据的获取。这个功能部分主要是使用Python的requests库去获取pm25.in这个网站首页的整个网页代码,提取出首页的城市名字以及对应的子链接,子链接里面就是城市的详细AQI空气质量信息,通过爬虫再次爬取每个城市的链接,得到空气质量的数据,由于这个网站公布的是实时数据,所以需要爬取前24小时空气质量的AQI折线图,然后得到平均值就是这一天的空气质量的值。(2)数据存储。这个功能是利用SQLAlchemy去把从网页获取到的空气质量数据存进数据库中,方便保存,相比于写进CSV文件,存进数据库能更加的方便利用,而且也不会因为操作失误使数据丢失。(3)数据分析的结果。该功能主要是列出前十五个当天的空气质量好的城市排名以及空气质量差的城市,并结合一些地理分布的情况与算法分析的结果去总结规律。2.2非功能性需求分析(1)网络的稳定性。网络的好坏一定程度上会影响在线数据的获取,所以需要在一个相对稳定的网络环境下才方便对数据进行获取。(2)容错率要高。对于一些网站也暂时没有公布出来的城市空气数据,我们需要采取异常处理,不然会使得程序一直报错。第3章介绍BeautifulSoup与爬虫的一些事项3.1BeautifulSoup简介简单来说,BeautifulSoup是Python的一个对爬虫的数据筛选库,最主要的功能是把网页中下载下来的数据进行筛选,获得自己所需要的数据。官方解释如下:BeautifulSoup里面包含了非常Python方式的简单的函数用来去标记所想找到的一些html节点,把他们全部搜集出来,类似于我们在查找文档中的关键字ctrl+F一样。它是一个查找的工具,通过解析整个的文档为使用者提供使用者所指定想要查找到的数据,非常的简单快捷,所以使用BeautifulSoup是一个非常简单的能够在爬取到的所有数据中筛选数据的一个模块,一般都是从html的标签中查找标签,然后去过滤一些不必要的标签,从需要的标签里选择数据。BeautifulSoup的一些特点是会将字符串变成Unicode编码写入自己函数内,输出到用户的电脑中则是会变成utf-8编码。所以我们不需要去考虑我们所写的程序的编码方式,除非在我们输出的字符串中没有去指定编码方式。这时,BeautifulSoup就不能够去识别这个字符串的编码方式了。所以我们就需要自己去说明它的编码方式,让bs64去接收。BeautifulSoup如今作为一款出色的Python解释器,地位已经赶上了lxml、html6lib,有着非常强劲的处理速度和提供不同的解析策略。3.2关于爬虫的一些注意事项以及对空气质量数据的搜集3.2.1区分恶意爬虫和普通爬虫如果把互联网比作一个非常大的蜘蛛网,那么我们所使用的爬虫就相当于蜘蛛网上的蜘蛛,每天都有无数的蜘蛛(爬虫)在互联网这个大网中活动,获得这些网上的知识。所以网页爬虫就是一种按照制作者所指定的一些命令,去自动化的获取互联网上的一些信息资源的一种程序。网络爬虫的功能是通过网络的链接去获取该链接的内容,并且可以对获取的网页内容做出一些处理。简单来说就是直接获取网页的前端显示的所有内容,比如html之类的前端页面,html包括一些文字内容、图片链接、其他网页的链接。网络爬虫就像一个蜘蛛一样,只要有url的地方,他就可以沿着url去获取这个网页的信息。这个过程与蜘蛛在自己的蜘蛛网上爬行非常相似,它又被称为网络爬虫系统或者网络蜘蛛系统。虽然网络爬虫对于一些研究数据,想要在网上搜集数据去做贡献的人提供了不小的帮助。但也因为爬虫的善恶程度是由使用者决定的,有的不法分子想要利用爬虫去获取网站的一些不公开的数据,盗取他人隐私,给这些与爬取网站挂钩的公司和其他一些政府造成非常重大的损失,这是绝对恶劣的行为,甚至是违法行为,这种爬虫就称为恶意爬虫。与普通爬虫不同,普通爬虫是获取网络上公开的数据,而恶意爬虫就去专门搜集别人的隐私数据、未公开的数据,这样就让被人的网站遭受了重大损失。还有网站的不公开信息可能在短短的时间内就被恶意爬虫窃取并悄无声息的复制到别的网站。网站的一些关键内容被复制之后使一些网站的权重变低,然后偷取内容的网站权重变高,到时候影响了原网站在搜索引擎中的排行,这个时候不但会使用户访问量越来越低,还会让自己的广告收益、销量等等日渐低下。
在网站注册过的用户若被找到信息,恶意使用者会利用这一逻辑漏洞,使用他们的爬虫恶意通过各类社工库,还有一些社工的APP,当恶意的使用者拿到一部分手机号后可以在社工库去验证这些手机号与手机号号主的身份是否匹配,然后就有很多的骚扰电话打上门来。除了很明显的违法欺诈外,爬虫的恶意使用者可以将数据打包出售给一些黑心的公司,让他们做各种违法的事情,这就相当于黑产行为。值得注意的是,我们在平常使用非恶意的爬虫,也需要注意一些问题,比如别人网站的负载,不能为自己的效率而去强行提高线程,这样可能会使对方网站因为访问量太大而崩溃,到时候追究的是我们所使用爬虫的人的责任,2019年就有许多因为把别人网站爬取崩溃,从而造成别人运营的损失,然后构成了违法行为。3.2.2关于反爬虫的一些介绍反爬虫是针对爬虫所爬取网页所制定的一种防御策略,可以通过多种途径去防止爬虫去对网页收集数据,下面介绍部分反爬虫的类型:通过UserAgentUserAgent是表示http协议浏览器的信息,若是使用的Python爬虫,UserAgent则会变成Python,所以禁止带Python头的一些数据可以遏制一部分的爬虫。根据用户行为若是在一个IP内,用户对网页的访问过多,就会被认定为是使用了爬虫,所以可以判断短时间内对同一网页访问次数过多的“用户”判定为爬虫,所以可以封禁一些访问频率过高的ip。基于验证码的反爬虫有些网站设置的验证码就是专门防止一些爬虫无障碍的获取到网页数据,所以设立了需要验证码,这个时候就不得不手动去输入验证码让验证通过,这样就可以比较好的防止爬虫。基于登陆的反爬虫有些网站只能登陆进去才能访问到里面的数据,而过于简单的Python爬虫并不能选择自动登陆,所以也可以拦截住一部分的爬虫。3.2.3对空气质量以及对应城市数据的爬取考虑到上文提到的防止违法行为,我选择了一个比较有公开性的空气质量检测网站pm25.in,以及不提高其线程,防止对服务器造成太大负荷。查看了html的代码,数据来源就是pm25.in所提供的,下载手法是使用Python的requests模块对网页的html代码进行下载,而主要爬取思路如下:1.在主页爬取城市的pinyin,通过这个网站发现,每个城市的页面就是主站+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.1Pandas模块介绍Pandas是Python当中的一个拓展的库,Pandas里面包含了大量的标准数据类型并且提供了高效操作大型数据的工具,对于数据的处理,pandas可以做到非常的高效,并且可以与多种类库共同使用,对编程者非常友好。同时Pandas也提供了集中数据结构供使用者使用: 1.Series:一维数组,类似于List列表的一种数据结构,但是Series与List有一些不同之处,就是Series只允许储存相同数据类型的数据,这样有利于内存分配同时提高运算效率。数据库中相同列的数据也是起着同样作用。 2.DataFrame:二维数组,是一种表格型的数据结构,简单来说就是行与列都有一层的Series的数组,这样组成新的二维数组。当用户将所需要的数据写进Excel表格文件时,DataFrame这种数据结构可以很方便地利用CSV文件格式创建Excel表格,做到了与Excel表格基本没有任何的录入障碍。3.Panel:三维数组,同理可以理解为DataFrame之间的嵌套。利用爬虫获取到空气质量的数据之后,可以同时将其写入已存在的CSV表格。同时还可以使用sqlalchemy去把CVS文件写入数据库,方便保存并且以防丢失。4.2SQLAlchemy模块简介及应用SQLAlchemy是Python的一种SQL工具包和对象关系映射器,是Python的一种ORM(ObjectRelationshipMapping)框架,而ORM是一种为了面向对象编程开发方法而产生的一种对象关系映射的工具,它的关系是指关系数据库,也就是数据可以保存在数据库当中。当生成一个对象时,对象可以从数据库当中获取持久化的数据,不像是我们运行一个程序,里面的变量参数只存在程序运行的时候,数据存储在数据库里是持久的,反过来,数据也可以存储在数据库当中。使用SQLAlchemy的时候,可以简化开发时候需要使用SQL语句这一步操作,可以直接思考他的代码逻辑,从而简化一些步骤,提高开发中的效率。SQLAlchemy提供了一种非常持久性的模式,用于数据库访问的时候,就显得非常的高效率。使用SQLAlchemy的优势是即使开发人员不熟悉数据库操作的语句,SQLAlchemy可以让开发人员直接使用对象操作,从而跳过数据库语句的操作,不用开发人员去查找数据库语句,提高了开发的效率。而其中也有它的缺点,使用SQLAlchemy的缺点是跳过了数据库语句操作之后,不容易进行数据库查询的优化,从而可能带来一些性能上、运行方面的损失。下面是SQLAlchemy的一些常用的参数:1.create_engine:可以当作作为一个桥梁架起数据库与Python之间的沟通,使Python可以对数据库进行连接,里面的数据类型为字符串,用来表示连接的信息:’数据库类型+数据库驱动名称://用户名:密码@需要连接主机的ip(如果是本机则是localhost或者):端口号/数据库名’2.sessionmaker:生成一个数据库的会话类。这个类相当于一个数据库连接的session,向数据库申请一个会话,同时这个类还会记录一些查询的数据,并且可以控制执行SQL语句的时间。当用这个类拿到一个数据库返回的session之后,就可以用这个session对数据库进行增删改查。4.3关于PyechartsPyecharts是Python与Echarts交接而成,用于生成Echarts图表的一个类库。而Echarts是由百度研发,一个可以生成生动,直观,可以交互并且可以高度个性化定制的web数据可视化图表的可视化库。简单来说Echarts有着超越许多同行的一些优势,可视化出来的数据图十分的美观且炫酷。Pyecharts就是在Echarts的基础上的一个Python类库。值得注意的是,Pyecharts分为两个版本,一个v0.5x,另一个为v1,两个版本并不兼容,而且v0.5x仅仅支持Python2.7,Python3.4+,而v1的版本仅支持3.6+的版本,导入模块的方式也不完全相同,所以Python版本限制了Pyecharts的版本。Pyecharts的强大之处在于可以导入全国甚至全球的地图包,然后对其进行数据可视化,清楚的了解地区的特点。顺带一提,Pyecharts是Python的一个拓展库,需要用pip去自行下载。4.4K-means算法介绍K-means算法是一种基于坐标与距离的一种聚类算法,聚类算法就是将数据中分散的样本分类,将每个特征相似的样本都分为一组,在K-means算法中,这种组称为“簇”。算法原理是先在样本中做k个随机点,作为“簇”的中心点,然后计算样本到这些“簇”的距离,对于样本点,距离哪个“簇”最近,就归类在这个“簇”内,分完样本点后。继续在这些“簇”中重新选一个中心点,继续计算离中心点的距离,继续划分“簇”,直到中心点的变化很小为止。第5章数据的可视化介绍及数据分析数据可视化是指利用图形、动画等更加形象的一些表达方式对数据进行体现,在如今的大数据时代,每秒钟就有无数条数据,而一条条的去看这些数据,不但枯燥,而且又难以记住,当使用了数据可视化,就能将数据以图形或者动画的方式呈现出来,到时候我们可以使用图形记忆去记住这些数据,而不是将数字去背下来,这样的数据更容易去使用和理解。现在数据可视化应用到许多方面,在新闻传播的行业中,数据可视化不但是一种非常合理的呈现方式,节省大家的理解,只需几秒钟就可以看懂图中的数据所想表达的意思,还是带有更强的互动性的一张信息图表,这就说明了数据可视化的化繁为简的一个优点,并且增加信息的可读性和趣味性。信息的表达形式和手中阅读信息时候的受欢迎度、记忆度和参与度存在一定的关系,可视化的叙事方式不仅降低了受众的获知知识的成本,而且提高了一些用户对于这些信息的记忆效率和给其他人分享的欲望,这就为数据的传播提供了非常良好的途径。有科学研究表明,注视记录长度与喜爱度之间存在非常正相关的关系。用视觉元素去快速抓住观众们的眼球,营造不同的兴趣点,这样来实现自己所喜欢的“悦读”方式,进而延长信息消费的过程,已然成为当下各类媒体争取受众的制胜之策。一般地,在人们对空气质量查看的过程中,会着重关注一些空气质量好的城市所处的位置、空气质量差的城市污染物的排放量、以及空气质量好的城市的排行。而且有些人们打算去某些城市旅游的,自己又不幸带有过敏性鼻炎,这些空气质量对他们来说影响更加的大,使他们不得不关注自己意向去到的城市的空气质量情况,以防患上更严重的呼吸类疾病。对于数据的可视化,本着浅显易懂的原则,本文对于以下若干问题做出了图标化处理,即进一步对所获取的数据进行可视化处理。列出空气质量最好的前十五个城市列出空气质量最坏的前十五个城市以地区分析空气质量好的城市的一些分布特点以地区分析空气质量差的城市的一些分布特点将污染物占比进行可视化使用K-means算法分析污染情况相似的城市5.1空气质量最好的前15个城市排名展示根据从网上获取到24小时的空气质量数据的平均值,空气质量最好的前十五个城市如图5.1所示:图5.1空气质量最好的前十五个城市图5.1中显示全国空气质量最好的前十五个城市,其中旅游胜地三亚高踞榜首,紧随其后的湛江、阳江两个城市也是旅游的大城市,有着非常丰富的水资源,绿化方面做得非常好,从整张图的角度看来,这15个城市都处于AQI值35以下,在空气质量的判断条件当中属于非常优秀的水平。从省份分析,在空气质量最好的前十五个城市当中,广东省所占据的城市比例最多,有湛江、阳江、茂名、汕尾、韶关五个城市,共占这十五个城市的三分之一,由地理环境所知,广东的水资源非常丰富,降雨量也非常多,表明空气质量受到水的影响非常大。从城市的发达程度看来,以上十五个城市全部位列三线城市及以下,空气好的原因可能为经济发展比不上一二线城市的水平,所以工业污染较少,在城市街道的出行车比较少,排放的废气少,使得空气维持在了一个较好的水平,在一定程度上说明了经济与环境的关系。5.2空气质量最差的前15个城市展示根据从网上获取到24小时的空气质量数据的平均值,空气质量最差的前十五个城市如图5.2所示:图5.2空气质量差的前十五个城市从区域角度分析,前五名空气差的城市都属于新疆维吾尔自治区,具体原因为沙尘暴的影响,因为新疆降雨量太少,导致沙尘容易扬起,到处都是颗粒物,并且在新疆有许多热电厂、煤化工厂、硅铁、石油化工厂、水泥厂等重污染的工厂,还有很多附属厂;加上其它燃煤锅炉、家里的燃煤炉子、在街边饭店的烤肉炉。数量惊人,外界环境的条件加上自己使用重污染的一些物资,导致了这些城市空气质量这么差。由数据可以知道,有三个属于新疆的城市达到了惊人的500AQI值,这个属于严重污染的范围,后面的几个城市污染程度也在150以上,都属于中度污染以上的级别。5.3以地区分析城市空气质量好的特点由图5.3可知,空气质量好的地区大多数分布在空气湿度较高的地方比如:长江以南的城市和四川盆地,其中还有西部和东北部的丰水区。在长江以南的地方尤为密集。长江以南的地区主要以亚热带季风气候为主,降水量较多,空气湿润。主要发展轻工业,相对于重工业,轻工业的污染比较小。降水能够有效吸收、淋洗空气中的污染物。因此这些地区的空气的自我净化能力较强。图5.3空气质量最好的城市分布图5.4以地区分析城市空气质量差的特点如图5.4所示,空气质量不好的地方多数分布在华北地区和新疆的荒漠地区。这些地区的主要特点是降水少,气候干燥。这些地区的气候是温带季风性气候和温带大陆性气候,降水少空气干燥,风沙比较多。因此这些地区的空气自我净化能力弱。由图所见,空气质量差的密集区在黄河中下游地区。这部分地区在冬天的时候燃煤供暖,会产生有害气体和粉尘,其次该地区是工业密集区,石油,煤化,冶金工业发达,人类活动和工业生产对空气质量影响大。图5.4空气质量差的城市分布图5.5污染物占比的可视化图5.5是对存在污染物的城市进行归纳,然后将这些污染物的占比可视化出来。由图中我们可以看到,存在污染物的城市中,收到PM10影响的城市是最多的,其次是PM2.5,这两种颗粒物加起来占污染物的90%以上,说明当前要对空气质量的提高,仍需首要解决的还是颗粒物的问题。图5.5空气质量与污染物图5.6通过K-means聚类算法的分析结果要使用K-means算法分析,首先要对爬取到的数据进行标准化,同比例缩小,使得特征相似的城市落入一个小的特定区间内,消除奇异样本的影响。标准化之后,就是将这些数据进行聚类算法计算,是它们特点相似的归为一类。具体流程图如5.6所示图5.6K-means计算的流程图下面将着重分析受到污染的城市的“簇”。根据样本的标准,我把这些城市分为5个“簇”,如图5.7所示,右边是每个簇包含的城市数量。图5.7“簇”内城市的数量由图5.7和5.8,第一聚类有73座城市,代表城市有白银、包头等,群体特点为:所有污染物气体均大于城市平均水平,但是又不算高太多,可采取温和控制方法,对工业生产流程细节进行一些改良,减少排放。图5.8第一聚类城市特点由图5.7和5.8,第二聚类有31座城市,代表城市有安阳、滨州、常熟等,群体特点为:二氧化氮、一氧化碳排放量明显大于其他城市群体,空气质量也偏差,这类城市可以减少氮氧化物的排放,建议使用清洁能源。图5.9第二聚类城市特点由图5.7和图5.10,第四聚类有10座城市,代表城市有大同、和田地区等,所代表的群体特征为PM10、PM2.5的排放非常严重。可吸入颗粒物在环境空气中持续的时间很长,对人体健康和大气能见度影响都很大。通常在汽车在沙地扬起的沙尘,被风卷起的尘土,还有一些重工业的污染。图5.10第四聚类城市特点第6章总结与展望6.1总结主要实现了对pm25.in的城市空气质量和其污染物的搜集,并将其获取到的数据存储进入数据库。并且使用pandas模块去将这些数据从数据库中读取出来,然后使用matplolib和pyecharts进行可视化。在获取数据过程中,用了比较多的时间花在了获取整个网站的全部城市空气质量以及首要污染物的实时数据,并且在该网站的24小时的空气质量数据比较难以获取,难点主要在于对全天AQI的获取。我在这次项目中完成了以下的工作:(1) 对空气质量网站的全部城市的空气质量进行了数据爬取,并且配置了数据库与Python进行连接,在这个过程中遇到了一些配置上的错误,后来发现需要下载pymysql的类库去制造一个依赖环境。(2) 对获取到的城市空气质量数据存放进数据库并使用pandas取出来,方便可视化处理。对于存放到数据库的数据可视化,本篇文章使用了数据可视化工具matplolib和pyecharts进行数据排名展示和对数据的空间分布展示,并结合各城市的一些气候情况,污染物排放量,对这些城市的空气质量进行一些可视化分析和数据上的分析。本次数据分析对多个城市进行分析后,在几个角度得到一些结论:(1) 在展示的空气质量最好的15个城市中,广东的城市占了最大的一部分,而且这些城市大部分是水资源多的地区,有的沿海地区空气环境更好,而且这15个城市都是三线城市及以下的城市,说明水资源同样丰富的情况下,经济不太发达的城市要比发达的城市空气质量好。(2) 在展示的空气质量最差的15个城市中,前五名空气差的城市都属于新疆维吾尔自治区,具体原因为沙尘暴的影响,因为新疆降雨量太少,导致沙尘容易扬起,到处都是颗粒物,并且根据一些地方的资料介绍,在新疆有许多热电厂、煤化工厂、硅铁、石油化工厂、水泥厂等重污染的工厂,还有很多其他污染严重的附属厂;加上其他家里用户所使用的燃煤锅炉、家里的燃煤炉子、在街边饭店的烤肉炉,这样的排放加上自然环境就导致了空气质量的恶劣。(3) 从地理位置分布规律看,空气质量好的地区大多数分布在空气湿度较高的地方比如:长江以南的城市和四川盆地,其中还有西部和东北部的丰水区。在长江以南的地方尤为密集。长江以南的地区主要以亚热带季风气候为主,降水量较多,空气湿润。主要发展轻工业,相对于重工业,轻工业的污染比较小。降水能够有效吸收、淋洗空气中的污染物。因此这些地区的空气的自我净化能力较强。(4) 从地里位置分布规律看,空气质量不好的地方多数分布在华北地区和新疆的荒漠地区。这些地区的主要特点是降水少,气候干燥。这些地区的气候是温带季风性气候和温带大陆性气候,降水少空气干燥,风沙比较多。因此这些地区的空气自我净化能力弱。由图所见,空气质量差的密集区在黄河中下游地区。这部分地区在冬天的时候燃煤供暖,会产生有害气体和粉尘,其次该地区是工业密集区,石油,煤化,冶金工业发达,人类活动和工业生产对空气质量影响大。(5) 在首要污染物占比角度看,存在污染物的城市中,收到PM10影响的城市是最多的,其次是PM2.5,这两种颗粒物加起来占污染物的90%以上,说明当前要对空气质量的提高,仍需首要解决的还是颗粒物的问题。(6)通过聚类分析算法的结果看,分成的五个聚类中,有三个聚类的空气质量是偏差的,而且这些聚类的污染物排放规律也不一样,可以通过聚类中存在的问题,对情况相似的城市进行污染物治理,增加治理的效率。6.2展望通过本文的研究,可以实现对我国城市的空气质量的数据获取和数据可视化研究。对理解Python爬虫、数据储存数据库、以及对数据处理方式的理解有了更为深刻的印象。Python作为一种脚本编程语言,在爬虫、数据分析上的优势确实比其他编程语言要好一些,获取数据的主要来源也是依靠于爬虫。但由于一些原因,本课题的研究还有许多不足的地方,主要体现在以下的方面:因为空气质量是和季节有着比较大的关系的,所以本次数据分析的分布规律仅限于在这个季度的天气当中,到了夏天说不定规律就有一定的偏差性。因为考虑到爬虫对服务器的影响,我并没有提高任何线程,怕给服务器带来压力,在爬取全国的375个城市中,数据的处理需要几分钟到十几分钟的时间,这个是比较慢的。参考文献[1] 周勇.空气质量监测分析系统的设计与实现[J].电子世界,2019(18):164-165[2] 尹小妹,田国祥,王天一,耿辉,贺海蓉,张勇,吕军.Python爬虫获取天气数据与儿童肺部疾病门诊就诊率相关性分析[J].中国循证心血管医学杂志,2019,11(09):1047-1049+1061.[3] 张涛.空气质量分析系统的设计与实现[D].河北科技大学,2016
致谢 本论文能顺利完成,首先应感谢的是我的导师谭康裕老师,是他给予我很大的帮助,给我指导了分析数据的方向和思路,然后还有我的一些同学,是他们在调试数据库的时候给了我很大的帮助,让我在错误中成功,对数据库进行连接,也帮助我找到了pyechart与Python版本不兼容的问题。最后还要感谢我的父母,在这次论文中给了我很大的支持。 最后再次谢谢帮助我的所有人,因为你们,我的论文才能顺利的完成!
附录具体的代码如下:爬取空气质量的信息importrequests
frombs4importBeautifulSoup
importcsv
importre
defget_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.find_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")
ifp3=='':
p3='无'
data=r"data:(.*?),\n"
dat=re.findall(data,r.text)
datas=dat[0]
datass=datas.split(",")
datass[0]=datass[0].replace('[','')
datass[-1]=datass[-1].replace(']','')
datas=[int(i)foriindatass]
he=sum(datas)/24
city_aqi=[p3]+[he]
foriinrange(8):
div_content=div_list[i]
caption=div_content.find('div',{'class':'caption'}).text.strip()
value=div_content.find('div',{'class':'value'}).text.strip()
city_aqi.append(value)
returncity_aqi
defget_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')
forcity_linkincity_link_list:
city_name=city_link.text
city_pinyin=city_link['href'][1:]
city_list.append((city_name,city_pinyin))
returncity_list
defmain():
city_list=get_all_cities()
header=['City','首要污染物','AQI/24h','AQI','PM2.5/1h','PM10/1h','C0/1h','NO2/1h','03/1h','03/8h','SO2/1h']
withopen('aqi327.csv','w',encoding='utf-8',newline='')asf:
writer=csv.writer(f)
writer.writerow(header)
fori,cityinenumerate(city_list):
try:
if(i+1)%10==0:
print('已处理{}条记录.(共{}条记录)'.format(i+1,len(city_list)))
city_name=city[0]
city_pinyin=city[1]
city_aqi=get_city_aqi(city_pinyin)
#print(city_name,city_aqi)
row=[city_name]+city_aqi
print(row)
writer.writerow(row)
except:
print()
if__name__=='__main__':
main()收集到的数据写入数据库:importtornadoastornado
fromsqlalchemyimportcreate_engine
fromsqlalchemy.ormimportsessionmaker
importpandasaspd
DB_CONNECT_STRING='mysql+pymysql://root:123456@localhost/mysql'
engine=create_engine(DB_CONNECT_STRING,echo=True)
DB_Session=sessionmaker(bind=engine)
print(engine)
df=pd.read_csv("aqi327.csv",sep=',')
df.to_sql('327day',engine,index=False)
print('成功!')对空气质量城市的前十五名展示:
fromsqlalchemyimportcreate_engine
fromsqlalchemy.ormimportsessionmaker
importpandasaspd
importmatplotlib.pyplotasplt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
DB_CONNECT_STRING='mysql+pymysql://root:123456@localhost/mysql'
engine=create_engine(DB_CONNECT_STRING,echo=True)
DB_Session=sessionmaker(bind=engine)
print(engine)
sql="select*from327day"
df=pd.read_sql_query(sql,engine)
clean_aqi_data=df[df['AQI/24h']>0]
top50_cities=clean_aqi_data.sort_values(by=['AQI/24h']).head(15)
print('空气质量最好的15个城市:')
print(top50_cities)
bad10_cities=clean_aqi_data.sort_values(by=['AQI/24h'],ascending=False).head(15)
print('空气质量最差的15个城市:')
print(bad10_cities)
top50_cities.plot(kind='bar',x='City',y='AQI/24h',title='空气质量最好的50个城市',figsize=(20,10))
plt.savefig('top50_aqi.png')
plt.show()对空气质量好的城市的地域分布:fromimpimportreload
fromsqlalchemyimportcreate_engine
fromsqlalchemy.ormimportsessionmaker
importpandasaspd
importmatplotlib.pyplotasplt
frompyechartsimportGeo
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
DB_CONNECT_STRING='mysql+pymysql://root:123456@localhost/mysql'
engine=create_engine(DB_CONNECT_STRING,echo=True)
DB_Session=sessionmaker(bind=engine)
sql="select*from327day"
df=pd.read_sql_query(sql,engine)
clean_aqi_data=df[df['AQI/24h']>0]
bad50_cities=clean_aqi_data.sort_values(by=['AQI/24h'],ascending=False).head(50)
city=bad50_cities["City"]
aqi=bad50_cities["AQI/24h"]
geo=Geo("空气质量",title_color="#fff",title_pos="center",width=800,height=600,background_color="#404a59")
geo.add(
"",
city,
aqi,
visua_range=[0,200],
visua_text_color="#fff",
symbol_size=15,
is_visualmap=True,
)
geo.show_config()
geo.render(path="b327.html")
饼图:fromimpimportreload
fromsqlalchemyimportcreate_engine
fromsqlalchemy.ormimportsessionmaker
importpandasaspd
importmatplotlib.pyplotasplt
frompyechartsimportPie
DB_CONNECT_STRING='mysql+pymysql://root:123456@localhost/mysql'
engine=create_engine(DB_CONNECT_STRING,echo=True)
DB_Session=sessionmaker(bind=engine)
#print(engine)
#session=DB_Session()
sql="select*from517day"
df=pd.read_sql_query(sql,engine)
#print(df)
df1=df[df['首要污染物']!='无']
df=df1[df1['AQI/24h']>0]
p=df['首要污染物'].value_counts()
p_list=['颗粒物(PM10)','颗粒物(PM2.5)','臭氧8小时','颗粒物(PM2.5),颗粒物(PM10)']
#print(p)
#num=[p]
wu_list=[]
ci_list=[]
'''
city=df['City']
city_list=list(city.values)
#print(city_list)
aqi=df['AQI/24h']
aqi_list=list(aqi.values)
#print(aqi_list)
data=[]
foriinrange(len(aqi_list)):
data.append((city_list[i],aqi_list[i]))
#print(data)
data=pd.DataFrame(data)
data.columns=['city','aqi']
#print(data)
city=data['city']
aqi=data['aqi']
'''
z=[list(z)forzinzip(p.index,p)]
print(z)
foriinz:
wu=i[0]
ci=i[1]
wu_list.append(wu)
ci_list.append(ci)
pie=Pie("污染物占比可视化")
pie.add("",wu_list,ci_list,is_label_show=True)
pie.render('pie1.html')聚类分析:fromsklearnimportpreprocessing
fromsqlalchemyimportcreate_engine
fromsqlalchemy.ormimportsessionmaker
importpandasaspd
fromsklearn.clusterimportKMeans
DB_CONNECT_STRING='mysql+pymysql://root:123456@localhost/mysql'
engine=create_engine(DB_CONNECT_STRING,echo=True)
DB_Session=sessionmaker(bind=engine)
#print(engine)
#session=DB_Session()
sql="select*from516day"
data=pd.read_sql_query(sql,engine)
#设置最大显示
#读取数据
head=data.head(5)
print(head)#查看前五行
#选取要标准化的列
filtered_columns=["AQI/24h","AQI","PM2.5/1h","PM10/1h","C0/1h","NO2/1h","03/1h","03/8h","SO2/1h"]
#对选取的列进行标准化,并转换称一个数据框
air_zscore=pd.DataFrame(preprocessing.scale(data[filtered_columns]),columns=data[filtered_columns].columns)
#查看前五行
ah=air_zscore.head(5)
print(ah)
#设置数据框的索引为城市
air_zscore=air_zscore.set_index(data['City'])
#查看设置后的前五行
print(air_zscore.head())
#构建KMeans模型
est=KMeans(n_clusters=5,random_state=4)
#带入数据进行训练
est.fit(air_zscore)
#提取聚类标签
kmeans_clustering_labels=pd.DataFrame(est.labels_,columns=['cluster'])
#将聚类标签进行整理,转换称数据框形式
kmeans_clustering_labels=kmeans_clustering_labels.set_index(air_zscore.index)
#查看整理后的前五行
print(kmeans_clustering_labels.head())
#统计每个类的城市个数
air_clusters=pd.Series(est.labels_)
print(air_clusters.value_counts().sort_index())
#取出每个类的聚类中心
centers=pd.DataFrame(est.cluster_centers_,columns=air_zscore.columns)
print(centers)
#取出对第一个聚类中心,并对特征按照数值大小进行排序
centers_t=centers.T
centers_t.columns=["cluster_0","cluster_1","cluster_2","cluster_3","cluster_4"]
C0=centers_t["cluster_0"].sort_values(ascending=False,inplace=False).head(10)
print(C0)
#取出第一类的10个城市
cities0=kmeans_clustering_labels[kmeans_clustering_labels['cluster']==0].head(10)
print(cities0)
#取出对第二个聚类中心,并对特征按照数值大小进行排序
C1=centers_t["cluster_1"].sort_values(ascending=False,inplace=False).head(10)
print(C1)
#取出第二类的10个城市
cities1=kmeans_clustering_labels[kmeans_clustering_labels['cluster']==1].head(10)
print(cities1)
#取出对第二个聚类中心,并对特征按照数值大小进行排序
C2=centers_t["cluster_2"].sort_values(ascending=False,inplace=False).head(10)
print(C2)
#取出第二类的10个城市
cities2=kmeans_clustering_labels[kmeans_clustering_labels['cluster']==2].head(10)
print(cities2)
#取出对第二个聚类中心,并对特征按照数值大小进行排序
C3=centers_t["cluster_3"].sort_values(ascending=False,inplace=False).head(10)
print(C3)
#取出第二类的10个城市
cities3=kmeans_clustering_labels[kmeans_clustering_labels['cluster']==3].head(10)
print(cities3)
#取出对第二个聚类中心,并对特征按照数值大小进行排序
C4=centers_t["cluster_4"].sort_values(ascending=False,inplace=False).head(10)
print(C4)
#取出第二类的10个城市
cities4=kmeans_clustering_labels[kmeans_clustering_labels['cluster']==4].head(10)
print(cities4)
HYPERLINK电脑快捷知识大全编辑本段一、常见用法F1显示当前程序或者windows的帮助内容。F2当你选中一个文件的话,这意味着“重命名”F3当你在桌面上的时候是打开“查找:所有文件”对话框F10或ALT激活当前程序的菜单栏windows键或CTRL+ESC打开开始菜单CTRL+ALT+DELETE在win9x中打开关闭程序对话框DELETE删除被选择的选择项目,如果是文件,将被放入回收站SHIFT+DELETE删除被选择的选择项目,如果是文件,将被直接删除而不是放入回收站CTRL+N新建一个新的文件CTRL+O打开“打开文件”对话框CTRL+P打开“打印”对话框CTRL+S保存当前操作的文件CTRL+X剪切被选择的项目到剪贴板CTRL+INSERT或CTRL+C复制被选择的项目到剪贴板SHIFT+INSERT或CTRL+V粘贴剪贴板中的内容到当前位置ALT+BACKSPACE或CTRL+Z撤销上一步的操作ALT+SHIFT+BACKSPACE重做上一步被撤销的操作Windows键+L锁屏键Windows键+M最小化所有被打开的窗口。Windows键+SHIFT+M重新将恢复上一项操作前窗口的大小和位置Windows键+E打开资源管理器Windows键+F打开“查找:所有文件”对话框Windows键+R打开“运行”对话框Windows键+BREAK打开“系统属性”对话框Windows键+CTRL+F打开“查找:计算机”对话框SHIFT+F10或鼠标右击打开当前活动项目的快捷菜单SHIFT在放入CD的时候按下不放,可以跳过自动播放CD。在打开word的时候按下不放,可以跳过自启动的宏ALT+F4关闭当前应用程序ALT+SPACEBAR打开程序最左上角的菜单ALT+TAB切换当前程序ALT+ESC切换当前程序ALT+ENTER将windows下运行的MSDOS窗口在窗口和全屏幕状态间切换PRINTSCREEN将当前屏幕以图象方式拷贝到剪贴板ALT+PRINTSCREEN将当前活动程序窗口以图象方式拷贝到剪贴板CTRL+F4关闭当前应用程序中的当前文本(如word中)CTRL+F6切换到当前应用程序中的下一个文本(加shift可以跳到前一个窗口)在IE中:ALT+RIGHTARROW显示前一页(前进键)ALT+LEFTARROW显示后一页(后退键)CTRL+TAB在页面上的各框架中切换(加shift反向)F5刷新CTRL+F5强行刷新目的快捷键激活程序中的菜单栏F10执行菜单上相应的命令ALT+菜单上带下划线的字母关闭多文档界面程序中的当前窗口CTRL+F4关闭当前窗口或退出程序ALT+F4复制CTRL+C剪切CTRL+X删除DELETE显示所选对话框项目的帮助F1显示当前窗口的系统菜单ALT+空格键显示所选项目的快捷菜单SHIFT+F10显示“开始”菜单CTRL+ESC显示多文档界面程序的系统菜单ALT+连字号(-)粘贴CTRL+V切换到上次使用的窗口或者按住ALT然后重复按TAB,切换到另一个窗口ALT+TAB撤消CTRL+Z编辑本段二、使用“Windows资源管理器”的快捷键目的快捷键如果当前选择展开了,要折叠或者选择父文件夹左箭头折叠所选的文件夹NUMLOCK+负号(-)如果当前选择折叠了,要展开或者选择第一个子文件夹右箭头展开当前选择下的所有文件夹NUMLOCK+*展开所选的文件夹NUMLOCK+加号(+)在左右窗格间切换F6编辑本段三、使用WINDOWS键可以使用Microsoft自然键盘或含有Windows徽标键的其他任何兼容键盘的以下快捷键。目的快捷键在任务栏上的按钮间循环WINDOWS+TAB显示“查找:所有文件”WINDOWS+F显示“查找:计算机”CTRL+WINDOWS+F显示“帮助”WINDOWS+F1显示“运行”命令WINDOWS+R显示“开始”菜单WINDOWS显示“系统属性”对话框WINDOWS+BREAK显示“Windows资源管理器”WINDOWS+E最小化或还原所有窗口WINDOWS+D撤消最小化所有窗口SHIFT+WINDOWS+M编辑本段四、“我的电脑”和“资源管理器”的快捷键目的快捷键关闭所选文件夹及其所有父文件夹按住SHIFT键再单击“关闭按钮(仅适用于“我的电脑”)向后移动到上一个视图ALT+左箭头向前移动到上一个视图ALT+右箭头查看上一级文件夹BACKSPACE编辑本段五、使用对话框中的快捷键目的快捷键取消当前任务ESC如果当前控件是个按钮,要单击该按钮或者如果当前控件是个复选框,要选择或清除该复选框或者如果当前控件是个选项按钮,要单击该选项空格键单击相应的命令ALT+带下划线的字母单击所选按钮ENTER在选项上向后移动SHIFT+TAB在选项卡上向后移动CTRL+SHIFT+TAB在选项上向前移动TAB在选项卡上向前移动CTRL+TAB如果在“另存为”或“打开”对话框中选择了某文件夹,要打开上一级文件夹BACKSPACE在“另存为”或“打开”对话框中打开“保存到”或“查阅”F4刷新“另存为”或“打开”对话框F5编辑本段六、桌面、我的电脑和“资源管理器”快捷键选择项目时,可以使用以下快捷键。目的快捷键插入光盘时不用“自动播放”功能按住SHIFT插入CD-ROM复制文件按住CTRL拖动文件创建快捷方式按住CTRL+SHIFT拖动文件立即删除某项目而不将其放入SHIFT+DELETE“回收站”显示“查找:所有文件”F3显示项目的快捷菜单APPLICATION键刷新窗口的内容F5重命名项目F2选择所有项目CTRL+A查看项目的属性ALT+ENTER或ALT+双击可将APPLICATION键用于Microsoft自然键盘或含有APPLICATION键的其他兼容键编辑本段七、Microsoft放大程序的快捷键这里运用Windows徽标键和其他键的组合。快捷键目的Windows徽标+PRINTSCREEN将屏幕复制到剪贴板(包括鼠标光标)Windows徽标+SCROLLLOCK将屏幕复制到剪贴板(不包括鼠标光标)Windows徽标+PAGEUP切换反色。Windows徽标+PAGEDOWN切换跟随鼠标光标Windows徽标+向上箭头增加放大率Windows徽标+向下箭头减小放大率编辑本段八、使用辅助选项快捷键目的快捷键切换筛选键开关右SHIFT八秒切换高对比度开关左ALT+左SHIFT+PRINTSCREEN切换鼠标键开关左ALT+左SHIFT+NUMLOCK切换粘滞键开关SHIFT键五次切换切换键开关NUMLOCK五秒QQ快捷键,玩QQ更方便Alt+S快速回复Alt+C关闭当前窗口Alt+H打开聊天记录Alt+T更改消息模式Ait+J打开聊天纪录Ctrl+A全选当前对话框里的内容Ctrl+FQQ里直接显示字体设置工具条Ctrl+J输入框里回车(跟回车一个效果)Ctrl+M输入框里回车(跟回车一个效果)Ctrl+L对输入框里当前行的文字左对齐Ctrl+R对输入框里当前行的文字右对齐Ctrl+E对输入框里当前行的文字居中Ctrl+V在qq对话框里实行粘贴Ctrl+Z清空/恢复输入框里的文字Ctrl+回车快速回复这个可能是聊QQ时最常用到的了Ctrl+Alt+Z快速提取消息Ctrl+Alt+A捕捉屏幕最常用的快捷键F5刷新DELETE删除TAB改变焦点CTRL+C复制CTRL+X剪切CTRL+V粘贴CTRL+A全选CTRL+Z撤销CTRL+S保存ALT+F4关闭CTRL+Y恢复ALT+TAB切换CTRL+F5强制刷新CTRL+W关闭CTRL+F查找SHIFT+DELETE永久删除CTRL+ALT+DEL任务管理SHIFT+TAB-反向切换CTRL+空格--中英文输入切换CTRL+Shift输入法切换CTRL+ESC--开始菜单CTRL+ALT+ZQQ快速提取消息CTRL+ALT+AQQ截图工具CTRL+ENTERQQ发消息Alt+1保存当前表单Alt+2保存为通用表单Alt+A展开收藏夹列表资源管理器END显示当前窗口的底端HOME显示当前窗口的顶端NUMLO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年低空感知数据质量评估与清洗规范
- 2026年飞秒激光直写技术应用手册
- 2026届吉林省长春二道区七校联考初三1月联考化学试题试卷含解析
- 2026年钢铁流程数字孪生工厂工艺模拟应用
- 2026年浙江省宁波市南三县初三毕业班第一次模拟考试化学试题含解析
- 四川省达州市渠县2026年初三适应性监测考试生物试题含解析
- 2026年全球生物类似药市场规模与竞争格局分析
- 浙江省慈溪育才中学2026届统一招生5月调研化学试题试卷含解析
- 2026年硫化物厚度探测系统精细勘探作业指南
- 2026年老人数据采集最小必要原则落地与知情同意机制
- 物业小区控烟监督制度
- 2026年郑州市检验检测有限公司公开招聘19人笔试备考题库及答案解析
- 2026年春季安全教育班会记录表(19周):开学安全第一课-启航安全守护新学期
- 多模式镇痛临床实践与应用
- 2026吉林农业大学三江实验室办公室招聘工作人员笔试备考试题及答案解析
- 脑中风科普知识讲座
- 历史试题-汕头市2025-2026学年度普通高中毕业班教学质量监测(含解析)
- 部队食堂制度规范标准
- 妇产科学精准医学:围产期多组学监测与管理
- 二十届中纪委五次全会知识测试题及答案解析
- 2026年沈阳艺考乐理真题及答案
评论
0/150
提交评论