【《气象的数据挖掘的设计与实现》12000字(论文)】_第1页
【《气象的数据挖掘的设计与实现》12000字(论文)】_第2页
【《气象的数据挖掘的设计与实现》12000字(论文)】_第3页
【《气象的数据挖掘的设计与实现》12000字(论文)】_第4页
【《气象的数据挖掘的设计与实现》12000字(论文)】_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

气象的数据挖掘的设计与实现内容摘要随着大数据时代的来临,信息量呈指数级爆炸增长,气象工作单位收集到的数据也越来越多。庞大的气象数据背后隐藏许多有益信息,如何有效地利用这些的数据、探索其中的规律,就显得格外重要。面对如此大规模的数据,人工处理是非常不现实的,数据挖掘因此应运而生。本文选择数据挖掘中的热门程序语言Python,依靠其丰富的技术库和强大计算能力有效的去应对气象数据的多和繁杂。在基于PyCharm平台上,使用python语言编写网络爬虫,对“天气+”气象网站上天津市2017年1月份至2020年12月份的历史气象数据进行爬取并保存。再选取其中具有代表性的最高气温、最低气温、风力等级、每月平均空气质量四个数据,结合JupyterNotebook(Anaconda)平台进行数据预处理与数据分析、数据建模以及结论评估。探究这些数据随时间变化呈现出来的规律,以及前三者气象数据与空气质量之间的所隐含的关系。关键词:气象数据;网络爬虫;数据挖掘目录TOC\o"1-2"\h\u14378一、绪论 131087(一)研究背景 15827(二)研究内容与方法 17757(三)研究目的和意义 18273(四)论文整体结构 227338二、气象数据的获取 22688(一)相关技术 23150(二)实现过程 310284(三)本章小结 828312三、气象数据的分析 817500(一)相关技术 827390(二)数据的读取与预处理 96047(三)数据的可视化 126047(四)本章小结 1728454四、气象数据的建模 1726202(一)相关理论 172200(二)ARIMA模型的建立 1821354(三)结论评估 3516686(四)本章小结 383353五、总结与展望 3817508(一)总结 3832079(二)展望 38一、绪论(一)研究背景在当下大数据时代,现代气象观探技术迅速发展和通信传输能力不断加强,各级气象部门可获得的气象资料日益丰富,气象数据的容量也越来越大,如何从海量的历史气象数据中及时发现有用的信息、提高信息的利用率,并将这些有用的信息与我们的实际生活相结合成为一个函待解决的问题。数据挖掘正是在这样的需求背景下应运而生,它为从庞大复杂数据中寻找有用的信息提供了必要条件。本文以此为背景,基于PyCharm平台,使用python语言编写网络爬虫,对气象网站“天气+”中天津市2017年1月份至2020年12月份年中的历史气象数据进行数据爬取并保存。之后再结合JupyterNotebook(Anaconda)平台对气象数据中具有代表性的最高气温、最低气温、风力等级、每月平均空气质量进行数据预处理、数据分析、数据建模与结论评估。旨在探究这些气象数据随时间变化呈现出来的规律,以及前三者与每月平均空气质量指数之间的关系,以发现某些趋势,希望能对其他在该领域研究的专家或者学者有些许帮助。(二)研究内容与方法本文采用Python语言,依靠其丰富的技术库和强大计算能力,结合PyCharm平台与JupyterNotebook(Anaconda)平台有效的去应对气象数据的多和繁杂。研究的气象数据内容为2017年1月份至2020年12月份每日最高温度、最低温度、风力等级,以及每月的平均空气质量指数。首先在PyCharm平台上利用网络爬虫的方法,对气象网站“气象+”中的历史气象数据进行爬取并且保存。然后在JupyterNotebook(Anaconda)平台上使用数据分析、数据预处理、数据建模的方法进行数据挖掘,最后对结论评估,验证结论的准确性和适用性。(三)研究目的和意义近几十年来,气象工作单位积累了大量历史气象数据,而这些历史气象数据却鲜有用来挖掘有价值的知识但这些数据又是非常有价值的,并且涉及的因素非常之广。本文研究的目的是探究天津市2017年1月份-2020年12月份气象数据中具有代表性的最高气温、最低气温、风力等级、每月平均空气质量指数随时间变化背后所隐藏的规律,再立足于宏观角度,以月为单位,探索前三者与空气质量指数之间的关系,挖掘出有价值的信息,以便为今后他人的研究工作做出些许铺垫。(四)论文整体结构一个完整的数据挖掘项目的实施可抽象为五个步骤:数据获取、数据预处理、数据分析、数据建模以及检验评估。本文以此五步骤为行文顺序:第一章为绪论,大概的介绍了本文的研究背景、数据挖掘的对象和所使用方法,以及挖掘的目的和意义;第二章介绍了Python语言和网络爬虫,并且对如何在PyCharm平台上使用Python语言编写网络爬虫去收集数据以及保存数据进行了详细的介绍,同时注明了爬取过程中需要注意的问题;第三章介绍了数据分析的相关技术,然后对所爬取到的气象数据进行数据预处理,并在JupyterNotebook(Anaconda)平台上进行数据可视化,绘制时间序列图,以便更加清楚直观的发现其中的规律;第四章介绍了数据建模相关理论,分别对2017年1月份-2019年12月份最高气温、最低气温、风力等级和每月平均空气质量建立了ARIMA模型,并且探究了前三者与每月平均空气质量指数之间的关系,最后使用2020年1月份-2020年12月份的气象数据对结论进行了验证,以此提高的结论的准确性和可靠性。二、气象数据的获取相关技术Python语言Python是当下最流行的一种计算机编程语言,它的优势不仅具有一种动态语言,相比静态语言的优势,Python在使用变量前无需指定其类型,程序执行过程中动态指定,使编程更加自由和灵活;而且还具有使代码简洁的优势,完成同样的功能,Python所需的代码量只需其他语言的1/5-1/3;同时,具有丰富强大的类库,这使得Python在数据分析、数据挖掘、爬虫学习过程中能够方便快捷的调用现有的类库实现相关的功能。网络爬虫方面,网页的内容以及网站的信息可以利用Python自带的框架获得,然后利用正则的表达式等对需要的信息进行提取以及分析.数据分析方面,Python很容易就能实现可视化,能非常方便地创建海量类型的2D图表和一些基本的3D图表。借助matplotlib和seaborn这两个专属库,只需要编写简单的Python代码就可以输出可视化结果.PyCharm平台PyCharm是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发,同时支持GoogleAppEngine、IronPython。主要功能是编码协助、项目代码导航、代码分析、Python重构等,深受众多编程人员喜爱。网络爬虫网络爬虫又称为网页蜘蛛、蚂蚁、蠕虫,是一种按照一定的规则,自动地抓取万维网信息的\t"/item/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/_blank"程序或者\t"/item/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/_blank"脚本,它可以代替人们自动地在互联网中进行数据信息的采集与整理。在大数据时代,信息的采集是一项重要的工作,如果单纯靠人力进行信息采集,不仅低效繁琐,搜集的成本也会提高。随着大数据时代的来临,网络爬虫在互联网中的地位将越来越重要。互联网中的数据是海量的,如何自动高效地获取互联网中我们感兴趣的信息并为我们所用是一个重要的问题,而爬虫技术就是为了解决这些问题而生的。本文的网络爬虫使用Python语言编写,基于PyCharm平台实现对气象网站进行数据爬取。实现过程爬取对象本文网络爬虫所爬取的对象为“天气+”气象网站,“天气+”提供全国国内城市天气预报,旅游景点天气预报,国际城市天气预报以及历史天气预报查询,集天气、生活、新闻于一体。相比较其他气象网站,“天气+”的优势提供的历史气象数据覆盖的城市范围广、所跨的时间年份长,最早可以从2011年1月份开始,查询国内各个城市,这也是被选为本文爬取对象的主要原因之一。“天气+”网站的网址为:/。本文爬取的气象数据是2017年1月份到2020年12月份的日期、最高温度、最低温度、天气、风向以及平均每月的空气质量指数。2017年1月份天津的历史气象数据的网站页面如下图1所示:图1“气象+”网站2017年1月份天津市气象数据部分界面爬取过程通过浏览天津市的历史气象数据可以发现,该网站2017年1月份的历史气象数据的网址为:/tianjin/201701.html,而2018年1月该网站的网址为/tianjin/201801.html,从上面的链接中可以推断出每个地方的历史天气数据查询链接的构建方式为:/+城市拼音名+年月+.html,这样一来我们就可以基于程序来实现自动化的构建生成每个地方的URL。因为一个具体的URL就是一个爬虫具体的入口,想要实现爬虫自动化的采集数据,实现自动的URL构建是必不可少的。需要注意的是该时间组成部分是从01开始,01-09的九个月份中,0不可丢失。进入气象网站以后,借助Chrome开发者工具(F12)来分析网页,在Elements下找到需要的数据位置,该网站对应的数据位置如下图2所示:图2开发者模式下需要爬取数据对应的标签位置由于该网站设有反爬虫,因此我们需要获取User-Agent来伪装,躲避反爬虫机制。User-Agent在开发者工具中的Network中可以寻得,如下图3所示:图3气象网站User-Agent位置'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/91.0.4442.4Safari/537.36'之后在PyCharm进行编程,使用import引入相关的模块:requests、re、csv。其中request模块是一个用于访问网络的模块,一般通过该模块传递一个url,发送get请求;re为正则表达式模块,正则就是用一系列具有特殊含义的字符组成一套规则,该规则用来描述具有某一特征的字符串,去一个大的字符串中匹配出符合规则的子字符串;csv文件格式是一种通用的电子表格和数据库导入导出格式,Pythoncsv模块封装了常用的功能。为了防止乱码,需要配置UTF-8。在re.findall中填入开发者模式下所要爬取的气象数据所对应的标签,同发出请求响应获取气象数据,并且将数据以csv的格式保存下来。相比excel,csv所能保存的数据量更大,故一般选取csv格式。爬取过程的具体代码如下:importrequests

importre

importcsv

url='/tianjin/201701.html'

headers={#模拟浏览器头部信息

'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/91.0.4442.4Safari/537.36'#用户代理,告诉服务器是什么类型的浏览器

}

f1=open('天津市2017年-2020年每日气象数据.csv','w',encoding='utf-8-sig',newline='')

writer1=csv.writer(f1,delimiter=',')

foryearinrange(2017,2021):#使用嵌套循环遍历17到20年

formonthinrange(1,13):#rang为左闭右开区间

ifmonth<10:

month='0'+str(month)#个位数的月份前面需要加0

url='/tianjin/%s%s.html'%(year,month)

html=requests.get(url,headers=headers)

text=html.text

moban1=re.findall('<ulclass="thrui".*?>(.*?)</ul>',text,re.S)[0]

moban2=re.findall('<li.*?>(.*?)</li>',moban1,re.S)#正则表达式

forjinmoban2:

moban3=re.findall('<div.*?>(.*?)</div>',j,re.S)

writer1.writerow(moban3)

print(moban3)

f1.close()运行的结果与生成的csv文件分别如下图4和图5所示:图4PyCharm程序运行后的部分结果图5生成的csv表格部分数据同理也可以获得2017年1月份至2020年12月份每个月的平均空气质量指数,如下图5.1所示:图5.117年-20年每月平均空气质量字数部分结果本章小结本章主要对气象数据获取过程中所涉及到的技术进行了大概的分析,并对所爬取的气象网站和爬取过程进行了细致的描述,最后以csv形式保存下来,为下文的数据分析与数据建模提供了数据来源。三、气象数据的分析(一)相关技术1.数据分析数据分析是指用适当的\t"/item/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/_blank"统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数据的功能,发挥数据的作用。数据分析是为了提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。数据分析是把隐藏在一大批看来杂乱无章的数据中的信息集中和提炼出来,从而找出所研究对象的内在规律。在实际应用中,数据分析可帮助人们做出判断,以便采取适当行动。数据分析是有组织有目的地收集数据、分析数据,使之成为信息的过程。一般数据分析用的是EXCEL,高级数据分析采用的是SPSS以及本文使用的python。数据分析目的是揭示事物运动、变化、发展的规律,意义在于提高系统运行效率、优化系统作业流程、预测未来发展趋势。数据分析主要分为描述性分析和预测性分析。描述性分析是指使用几个关键数据来描述整体的情况,比如平均数,众数,用来描述目标行为,考虑关联规则、序列规则、聚类等模型;预测型分析指对已有数据在尽量少的先验假设下通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法。量化未来一段时间内,某个事件的发生概率,有分类预测和回归预测两大预测分析模型。本文采用的是预测性分析,预测气象数据随时间变化呈现出来的规律,以及最高气温、最低气温、风力等级与空气质量指数之间的关系。2.JupyterNotebookJupyterNotebook是基于网页的用于交互计算的应用程序,原名IpythonNotebook,是Ipython的加强网页版。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。简而言之,JupyterNotebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。由网页应用与文档组成,主要特点:①编程时具有语法高亮、缩进、tab补全的功能;②可直接通过浏览器运行代码,同时在代码块下方展示运行结果;③以富媒体格式展示计算结果。富媒体格式包括:HTML,LaTeX,PNG,SVG等;④对代码编写说明文档或语句时,支持Markdown语法;⑤支持使用LaTeX编写数学性说明。使用JupyterNotebook,具有画图和数据展示方面的优势。本地JupyterNotebook的默认URL为:http://localhost:8888,想让notebook打开指定目录,只要进入目录后执行命令即可。PyCharm与JupyterNotebook相结合,可以更加有效的对气象数据进行数据挖掘。数据的读取与预处理数据的读取本文数据读取是基于JupyterNotebook平台,使用数据科学库中能提供强大I/O接口的pandas来读取csv格式的数据文件,pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。天津市2017年1月-2020年12月每日气象数据读取与每月平均空气质量数据读取的前五行数据的代码分别如下,需要注意的是,读取的文件格式需要满足UTF-8。:#导入科学工具包importpandasaspddf_csv=pd.read_csv('./Desktop/天津市2017年-2020年每日气象数据.csv')#读取前五行数据#head()中不填数字,默认为5df_csv.head()运行结果如下图6.1所示:图6.1使用notebook对气象数据进行读取#导入科学工具包importpandasaspddf_csv=pd.read_csv('./Desktop/天津市2017年-2020年每日气象数据.csv')#读取前五行数据#head()中不填数字,默认为5df_csv.head()运行结果如下图6.2所示:图6.2使用notebook对进行读取数据的预处理成功读取数据以后,下面一步便是数据预处理。数据预处理就是指在主要的处理以前对数据进行的一些处理。首先查看数据是否有缺失值,实现代码如下:#读取数据df=pd.read_csv('./Desktop/天津市2017年-2020年每日气象数据.csv')#查看数据量、数据指标和数据维度print(df.shape)#查看数据的尺寸大小print(df.size)运行结果如下图7.1所示:图7.1数据的维度和总条数结果表明爬取的数据之中没有缺失值。通过()查看可知,时间、最高气温、最低气温、天气和风向皆为object类型,平均每月空气质量指数为int类型。这是由于爬取到的时间中含有星期一到星期天、最高气温和最低气温中分别含有℃符号。由于本文探究规律的前提是随着时间变化,因此时间需要转换成int类型。对csv文件进行操作,使用替换功能,将星期*替换成为空白。为了便于数据可视化,同样在csv文件中使用替换功能删除℃符号,并对风向进行处理,形成需要探究的风力等级,对天气进行删除处理。最后对上述数据进行重新读取,并转换格式,具体代码如下:#导入科学工具包importpandasaspddf_csv=pd.read_csv('./Desktop/天津市2017年-2020年每日气象数据.csv')#读取前五行数据df_csv.head()运行结果如下图7.2所示:图7.2天津市2017年-2020年每日气象数据部分(三)数据的可视化为了更加直观的显示出2017年1月份-2019年12月份之间,最低气温、最高气温、风力等级以及平均每月空气质量指数随时间变化的规律,以及前三者与空气质量之间的关系,需要对数据进行可视化。由于具有基于时间变化而变化的这个特征,为了更加清楚明了的探究其中的规律,将选择时间序列图对数据进行可视化分析。时间序列是由不同时问重复测量得到的值或事件组成,是一种普遍存在的海量数据类型。从经济到土程技术,从气象到天文地理,几乎所有领域都存在大量的时间序列数据,比如本文的气象数据和股票数据,另外还有心电图数据、商品销售数据等。由于任何事物之间都是相互联系的,事物的运动、变化和发展有其内在的必然性,因而已存在的历史时间序列数据与将来的时间序列数据之间也存在着其内在的联系。时间序列简单的说就是各时间点上形成的数值序列,时间序列分析就是通过观察历史数据预测未来的值。在这里需要强调一点的是,时间序列分析并不是关于时间的回归,它主要是研究自身的变化规律的。因此,通过研究和分析反映事物过去发展变化的历史时间序列数据,在很大程度上可以发现事物其发展变化的内在规律,从而可以为决策者制定决策提供重要的参考信息和知识。首先导入需要的绘图库:pandas、numpy、matplotlib.pyplot.其中NumPy(NumericalPython)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含:一个强大的N维数组对象ndarray、广播功能函数、整合C/C++/Fortran代码的工具、线性代数、傅里叶变换、随机数生成等功能;matplotlib.pyplot是一些命令行风格函数的集合,使matplotlib以类似于MATLAB的方式工作。每个pyplot函数对一幅图片(figure)做一些改动:比如创建新图片,在图片创建一个新的作图区域(plottingarea),在一个作图区域内画直线,给图添加标签(label)等。matplotlib.pyplot是有状态的,亦即它会保存当前图片和作图区域的状态,新的作图函数会作用在当前图片的状态基础之上。通过使用()查看数据,此时时间、最高气温、最低气温、风力等级和每月平均空气质量指数都是int类型,这些数据以文本的型存储在数据集之中,为了便于绘图,需要把这些数据转化为改成float类型。下面分别是对天津市2017年1月份-2019年12月份最高气温、最低气温、风力强度、平均每月空气质量指数可视化的具体代码:importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltdata=pd.read_csv('./Desktop/天津市2017年-2020年每日气象数据.csv',encoding='gbk')data=data.astype(float)#将数据处理成为时间序列数据datas=pd.to_datetime(data["时间"].values,format="%Y%m%d")#pd.to_datetime(df['date'])#设置索引shares_info=data.set_index(datas)#形成时间序列数据shares_info#2017年1月份-2019年12月份每日最高气温时间序列图shares_info["最高气温"].plot()#按周重采样shares_week=shares_info["最高气温"].resample(rule='W-MON').mean()#截取其中部分数据MaxT=shares_week['2017':'2019']plt.plot(MaxT)plt.title('AverageWeek')plt.show()#2017年1月份-2019年12月份每日最低气温时间序列图shares_info["最低气温"].plot()#按周重采样shares_week=shares_info["最低气温"].resample(rule='W-MON').mean()#截取其中部分数据MinT=shares_week['2017':'2019']plt.plot(MinT)plt.title('AverageWeek')plt.show()#2017年1月份-2019年12月份每日风力等级时间序列图shares_info["风力等级"].plot()#按周重采样shares_week=shares_info["风力等级"].resample(rule='W-MON').mean()#截取其中部分数据WindRating=shares_week['2017':'2019']plt.plot(WindRating)plt.title('AverageWeek')plt.show()#2017年1月份-2019年12月份平均每月空气质量指数时间序列图data=pd.read_csv('./Desktop/天津市2017年—2019年每月平均空气质量指数.csv',encoding='gbk')#将数据处理成为时间序列数据datas=pd.to_datetime(data["时间"].values,format="%Y%m")#设置索引shares_info=data.set_index(datas)#形成时间序列数据shares_info#平均每月空气质量指数shares_info["平均每月空气质量指数"].plot()plt.show()运行结果分别为下图8.1、8.2、8.3以及8.4所示:图8.1每日最高气温周重采样时间序列图图8.2每日最低气温周重采样时间序列图图8.3每日风力强度周重采样时间序列图图8.4平均每月空气质量指数时间序列图通过上述四个时间序列图可以清晰直观的发现最高气温、最低气温和每月平均空气质量具有明显的周期性变化,周期为1年。相比之下,风力等级的周期性不太明显,且每年之间数值上下波动比较大,年与年之间整体数值也相差比较大。而最低气温与最高气温以春夏秋冬四级为周期的波动较小,整体处于稳定状态。空气污染指数划分为0-50、51-100、101-150、151-200、201-300和大于300六个档,分别对应空气质量的六个级别,指数越大,级别越高,说明污染越严重,对人体健康的影响也越明显。从图8.4可知空气质量从2017年1月到8月持续好转,之后到2020年保持波动,范围在47-114之间,其中最好的情况是20年6月份,平均空气质量指数为39。(四)本章小结本章对所探究的气象数据进行的读取和预处理,剔除了数据中的缺失值。由于天气受一定原因的影响,所以会以较小的概率出现与周围日期相差比较大的数据,这是气象数据的正常现象,为了确保数据分析结果的普遍性,故不把此数据当作无效值处理。之后为了绘制时间序列图,把数据的类型转换成了float型,最后得到天津市2017年1月份-2019年12月份气象数据中具有代表性的最高气温、最低气温、风力等级、平均每月空气质量指数的时间序列图。四、气象数据的建模(一)相关理论1.数据建模定义数据建模指的是对现实世界各类数据的抽象组织,确定\t"/item/%E6%95%B0%E6%8D%AE%E5%BB%BA%E6%A8%A1/_blank"数据库需管辖的范围、数据的组织形式等直至转化成现实的数据库。将经过\t"/item/%E6%95%B0%E6%8D%AE%E5%BB%BA%E6%A8%A1/_blank"系统分析后抽象出来的\t"/item/%E6%95%B0%E6%8D%AE%E5%BB%BA%E6%A8%A1/_blank"概念模型转化为物理模型后,在visio或erwin等工具建立数据库实体以及各实体之间关系的过程。在软件工程中,数据建模是运用正式的数据建模技术,建立信息系统的数据模型的过程。模型的构建都是基于历史数据的,代表的是过去表现出来的规律,这个规律能否具有外延性这本身不是数据挖掘本身能解决的问题。为了避免犯“刻舟求剑”的错误,所以模型都需要在应用的过程中不断监控,例如设置测试组和对比组,看看模型的规律是否真的在未来有效。数据建模需要先明确业务需求,然后选择是描述型分析还是预测型分析。如果分析的目的是描述目标行为模式,就采用描述型数据分析,描述型分析就考虑关联规则、序列规则、聚类等模型。如果是预测型数据分析,就是量化未来一段时间内,某个事件的发生概率。有两大预测分析模型,分类预测和回归预测。2.数据建模的分类常见的数据建模分类有分类、回归、聚类、时序分析。分类:是通过已有的训练样本去训练得到一个最优模型,再利用这个模型将输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的,也就具有了对未知数据进行分类的能力。回归:是基于观测数据建立变量间适当的依赖关系,以分析数据内在的规律,得到响应的判断。并可用于预报、控制等问题。回归:用属性的历史数据预测未来趋势。算法首先假设一些已知类型的函数可以匹配目标数据,然后分析匹配后的误差,确定一个与目标数据匹配程度最好的函数。回归是对真实值的一种逼近预测。分类:将数据映射到预先定义的群组或类。算法要求基于数据特征值来定义类别,把具有某些特征的数据项映射到给定的某个类别上。分类并没有逼近的概念,最终正确结果只有一个。在机器学习方法里,分类属于监督学习。本文选择时间序列模型中的ARIMA模型,对2017年1月份-2019年12月份气象数据中具有代表性的最高气温、最低气温、风力强度和每月平均空气质量指数进行建模。ARIMA模型的建立 ARIMA模型,英语为Autoregressive

Integrated

Moving

Averagemodel,中文为差分整合移动平均自回归模型,又称整合移动平均自回归模型,是\t"/item/ARIMA%E6%A8%A1%E5%9E%8B/_blank"时间序列预测分析方法之一。本文现依次对天津市2017年1月份-2019年12月份最高气温、最低气温、每月平均空气质量进行ARIMA建模,代码过程如下:importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltdata=pd.read_csv('./Desktop/天津市2017年-2020年每日气象数据.csv',encoding='gbk')data=data.astype(float)#将数据处理成为时间序列数据datas=pd.to_datetime(data["时间"].values,format="%Y%m%d")#设置索引shares_info=data.set_index(datas)#形成时间序列数据shares_info#2017年1月份-2019年12月份每日最高气温ARIMA模型shares_info["最高气温"].plot()#按周重采样shares_week=shares_info["最高气温"].resample(rule='W-MON').mean()#截取其中部分数据MaxT=shares_week['2017':'2019']plt.plot(MaxT)plt.title('AverageWeek')#获取最高气温的回归系数#导入时间序列模型fromstatsmodels.tsa.arima_modelimportARIMA#导入相关d额系数计算方法fromstatsmodels.graphics.tsaplotsimportplot_acf,plot_pacf#分析ACF系数acf=plot_acf(MaxT,lags=20)plt.title('ACF-MaxT')plt.show()#分析PACFpacf=plot_pacf(MaxT,lags=20)plt.title('PACF-MaxT')plt.show()#一阶差分MaxT_diff=MaxT.diff()#缺失值diff=MaxT_diff.dropna()plt.figure(figsize=(20,3))plt.plot(diff)plt.title('FirstOrderDifference')plt.show()#一阶差分ACF的显示acf_diff=plot_acf(diff,lags=20)plt.title('ACF-FirstOrderDifference')plt.show()#一阶差分PACF的显示pacf_diff=plot_pacf(diff,lags=20)plt.title('PACF-FirstOrderDifference')plt.show()#创建ARIMA时序模型model=ARIMA(MaxT,order=(1,1,1),freq='W-MON')#拟合模型arima_result=model.fit()arima_result.summary()#预测得到的结果predict=arima_result.predict('20200101','20201231',dynamic=True,typ="levels")forcast=pd.concat([shares_week,predict],axis=1,keys=["original",'predicted'])#创建画布plt.figure(figsize=(20,8))plt.plot(forcast)plt.title('real&forcasst')plt.show()运行结果如下图9.1-9.7所示:图9.12017年1月份-2019年12月份每日最高气温ACF图9.22017年1月份-2019年12月份每日最高气温PACF图9.32017年1月份-2019年12月份每日最高气温一阶差分图9.42017年1月份-2019年12月份每日最高气温ACF一阶差分图9.52017年1月份-2019年12月份每日最高气温PACF一阶差分图9.62017年1月份-2019年12月份每日最高气温ARIMA结果图9.72017年1月份-2019年12月份每日最高气温预测结果#2017年1月份-2019年12月份每日最低气温ARIMA模型#使用最低气温shares_info["最低气温"].plot()#按周重采样shares_week=shares_info["最低气温"].resample(rule='W-MON').mean()#截取其中部分数据MinT=shares_week['2017':'2019']plt.plot(MinT)plt.title('AverageWeek')#获取最低气温的回归系数#导入时间序列模型fromstatsmodels.tsa.arima_modelimportARIMA#导入相关的系数计算方法fromstatsmodels.graphics.tsaplotsimportplot_acf,plot_pacf#分析ACF系数acf=plot_acf(MinT,lags=20)plt.title('ACF-MinT')plt.show()#分析PACFpacf=plot_pacf(MinT,lags=20)plt.title('PACF-MinT')plt.show()#一阶差分MinT_diff=MinT.diff()#缺失值diff=MinT_diff.dropna()plt.figure(figsize=(20,3))plt.plot(diff)plt.title('FirstOrderDifference')plt.show()#一阶差分ACF的显示acf_diff=plot_acf(diff,lags=20)plt.title('ACF-FirstOrderDifference')plt.show()#一阶差分PACF的显示pacf_diff=plot_pacf(diff,lags=20)plt.title('PACF-FirstOrderDifference')plt.show()#创建ARIMA时序模型model=ARIMA(MinT,order=(1,1,1),freq='W-MON')#拟合模型arima_result=model.fit()arima_result.summary()#预测得到的结果predict=arima_result.predict('20200101','20201231',dynamic=True,typ="levels")forcast=pd.concat([shares_week,predict],axis=1,keys=["original",'predicted'])#创建画布plt.figure(figsize=(20,8))plt.plot(forcast)plt.title('real&forcasst')plt.show()运行结果如下图10.1-10.7所示:图10.12017年1月份-2019年12月份每日最低气温ACF图10.22017年1月份-2019年12月份每日最低气温PACF图10.32017年1月份-2019年12月份每日最低气温一阶差分图10.42017年1月份-2019年12月份每日最低气温ACF一阶差分图10.52017年1月份-2019年12月份每日最低气温PACF一阶差分图10.62017年1月份-2019年12月份每日最低气温ARIMA模型结果图10.72017年1月份-2019年12月份每日最低气温预测结果#2017年1月份-2019年12月份平均每月空气质量指数ARIMA模型data=pd.read_csv('./Desktop/天津市2017年—2019年每月平均空气质量指数.csv',encoding='gbk')#将数据处理成为时间序列数据datas=pd.to_datetime(data["时间"].values,format="%Y%m")#设置索引shares_info=data.set_index(datas)#形成时间序列数据shares_info#平均每月空气质量指数shares_info["平均每月空气质量指数"].plot()shares_month=shares_info["平均每月空气质量指数"]AverageMonAQ=shares_monthplt.plot(AverageMonAQ)plt.title('AverageMonth')#获取平均每月空气质量指数的回归系数#导入时间序列模型fromstatsmodels.tsa.arima_modelimportARIMA#导入相关的系数计算方法fromstatsmodels.graphics.tsaplotsimportplot_acf,plot_pacf#分析ACF系数acf=plot_acf(AverageMonAQ,lags=17)plt.title('ACF-AverageMonAQ')plt.show()#分析PACFpacf=plot_pacf(AverageMonAQ,lags=17)plt.title('PACF-AverageMonAQ')plt.show()#一阶差分AverageMonAQ_diff=AverageMonAQdiff()#缺失值diff=AverageMonAQ_diff.dropna()plt.figure(figsize=(17,3))plt.plot(diff)plt.title('FirstOrderDifference')plt.show()#一阶差分ACF的显示acf_diff=plot_acf(diff,lags=17)plt.title('ACF-FirstOrderDifference')plt.show()#一阶差分PACF的显示pacf_diff=plot_pacf(diff,lags=17)plt.title('PACF-FirstOrderDifference')plt.show()#创建ARIMA时序模型model=ARIMA(AverageMonAQ,order=(1,1,1))#拟合模型arima_result=model.fit()arima_result.summary()#预测得到的结果predict=arima_result.predict('20200101','20201231',dynamic=True,typ="levels")forcast=pd.concat([shares_week,predict],axis=1,keys=["original",'predicted'])#创建画布plt.figure(figsize=(15,55))plt.plot(forcast)plt.title('real&forcasst')plt.show()运行结果分别如下图11.1-11.7所示:图11.12017年1月份-2019年12月份平均每月空气质量指数ACF图11.22017年1月份-2019年12月份平均每月空气质量指数PACF图11.32017年1月份-2019年12月份平均每月空气质量指数一阶差分图11.42017年1月份-2019年12月份平均每月空气质量指数ACF一阶差分图11.52017年1月份-2019年12月份平均每月空气质量指数PACF一阶差分图11.62017年1月份-2019年12月份平均每月空气质量指数ARIMA模型结果图11.72017年1月份-2019年12月份平均每月空气质量指数预测结果通过ARIMA模型预测可以得出,最高气温与最低气温、平均每月空气质量指数在2020年1月份-2020年12月份与2017年-2019年这三年变化情况相似,以一年为周期有规律性的变化。但是最高气温、最低气温的峰值对应每月平均空气质量指数的谷值,其谷值对应每月平均空气质量指数的峰值。因此最终可以得出结论:最高气温、最低气温和每月平均空气质量指数随时间变化呈周期性变化,周期为1年;其中最高气温、最低气温两者之间正相关,两者与空气质量为负相关;风力等级存在以1年为周期的变化趋势,但是并不明显,且每年波动较大,故认为风力等级与最高气温、最低气温、空气质量无明显关系。(三)结论评估为了客观的评价预测结论的准确性与真实性,本文利用2020年1月份-12月份的真实气象数据与本文模型评估预测的气象数据进行对比,其中最高气温、最低气温、每月平均空气质量指数分别对应下图12.1-12.2、图13.1-13.2和图14.1-14.2:图12.1最高气温2017年-2020年真实数据图12.2最高气温2017年-2019年真实数据与2020年预测数据图13.1最低气温2017-2020年真实数据图13.2最低气温2017年-2019年真实数据与2020年预测数据图14.1平均每月空气质量指数2017-2020年真实数据图14.2平均每月空气质量指数2017年-2019年真实数据与2020年预测数据通过对比可以发现预测结果与真实数据结果相似度较高,故结论“最高气温、最低气温和每月平均空气质量指数随时间变化呈周期性变化,周期为1年;其中最高气温、最低气温两者之间正相关,两者与空气质量为负相关;风力等级存在以1年为周期的变化趋势,但是并不明显,且每年波动较大,故认为风力等级与最高气温、最低气温、空气质量无明显关系”的结论正确。(四)本章小结本章大概的介绍了ARIMA模型,并且对最高气温、最低气温以及每月平均空气质量指数分别进行了ARIMA建模预测,挖掘出了天津市2017年1月份-2020年12月份气象数据随时间变化呈现出来的规律,并且得到了最高气温、最低气温两者之间的关系,以及该两者与空气质量之间存在的关系。最后用天津市2020年1月份-12月份的数据对模型预测的准确性和适用性进行验证,最终发现预测准确,结论可靠。五、总结与展望(一)总结数据挖掘是从数据中发现隐含有用的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论