专栏首页企鹅号快讯使用机器学习预测天气

使用机器学习预测天气

作者:笨熊

本章是使用机器学习预测天气系列教程的第一部分,使用Python和机器学习来构建模型,根据从Weather Underground收集的数据来预测天气温度。该教程将由三个不同的部分组成,涵盖的主题是:

数据收集和处理(本文)

线性回归模型(第2章)

神经网络模型(第3章)

本教程中使用的数据将从Weather Underground的免费层API服务中收集。我将使用python的requests库来调用API,得到从2015年起Lincoln, Nebraska的天气数据。 一旦收集完成,数据将需要进行处理并汇总转成合适的格式,然后进行清理。

第二篇文章将重点分析数据中的趋势,目标是选择合适的特性并使用python的statsmodels和scikit-learn库来构建线性回归模型。 我将讨论构建线性回归模型,必须进行必要的假设,并演示如何评估数据特征以构建一个健壮的模型。 并在最后完成模型的测试与验证。

最后的文章将着重于使用神经网络。 我将比较构建神经网络模型和构建线性回归模型的过程,结果,准确性。

Weather Underground介绍

Weather Underground是一家收集和分发全球各种天气测量数据的公司。 该公司提供了大量的API,可用于商业和非商业用途。 在本文中,我将介绍如何使用非商业API获取每日天气数据。所以,如果你跟随者本教程操作的话,您需要注册他们的免费开发者帐户。 此帐户提供了一个API密钥,这个密钥限制,每分钟10个,每天500个API请求。

获取历史数据的API如下:

API_KEY: 注册账户获取

YYYYMMDD: 你想要获取的天气数据的日期

STATE: 州名缩写

CITY: 你请求的城市名

调用API

本教程调用Weather Underground API获取历史数据时,用到如下的python库。

好,我们先导入这些库:

接下里,定义常量来保存APIKEY和BASEURL,注意,例子中的API_KEY不可用,你要自己注册获取。代码如下:

然后我们初始化一个变量,存储日期,然后定义一个list,指明要从API返回的内容里获取的数据。然后定义一个namedtuple类型的变量DailySummary来存储返回的数据。代码如下:

定义一个函数,调用API,获取指定target_date开始的days天的数据,代码如下:

首先,定义个list records,用来存放上述的DailySummary,使用for循环来遍历指定的所有日期。然后生成url,发起HTTP请求,获取返回的数据,使用返回的数据,初始化DailySummary,最后存放到records里。通过这个函数的出,就可以获取到指定日期开始的N天的历史天气数据,并返回。

获取500天的天气数据

由于API接口的限制,我们需要两天的时间才能获取到500天的数据。你也可以下载我的测试数据,来节约你的时间。

格式化数据为Pandas DataFrame格式

我们使用DailySummary列表来初始化Pandas DataFrame。DataFrame数据类型是机器学习领域经常会用到的数据结构。

特征提取

机器学习是带有实验性质的,所以,你可能遇到一些矛盾的数据或者行为。因此,你需要在你用机器学习处理问题是,你需要对处理的问题领域有一定的了解,这样可以更好的提取数据特征。

我将采用如下的数据字段,并且,使用过去三天的数据作为预测。

mean temperature

mean dewpoint

mean pressure

max humidity

min humidity

max dewpoint

min dewpoint

max pressure

min pressure

precipitation

首先我需要在DataFrame里增加一些字段来保存新的数据字段,为了方便测试,我创建了一个tmp变量,存储10个数据,这些数据都有meantempm和meandewptm属性。代码如下:

对于每一行的数据,我们分别获取他前一天、前两天、前三天对应的数据,存在本行,分别以属性_index来命名,代码如下:

我们现在把上面的处理过程封装成一个函数,方便调用。

好,我们现在对所有的特征,都取过去三天的数据,放在本行。

处理完后,我们现在的所有数据特征为:

数据清洗

数据清洗时机器学习过程中最重要的一步,而且非常的耗时、费力。本教程中,我们会去掉不需要的样本、数据不完整的样本,查看数据的一致性等。

首先去掉我不感兴趣的数据,来减少样本集。我们的目标是根据过去三天的天气数据预测天气温度,因此我们只保留min, max, mean三个字段的数据。

为了更好的观察数据,我们使用Pandas的一些内置函数来查看数据信息,首先我们使用info()函数,这个函数会输出DataFrame里存放的数据信息。

注意:每一行的数据类型都是object,我们需要把数据转成float。

现在得到我想要的数据了。接下来我们调用describe()函数,这个函数会返回一个DataFrame,这个返回值包含了总数、平均数、标准差、最小、25%、50%、75%、最大的数据信息。

接下来,使用四分位的方法,去掉25%数据里特别小的和75%数据里特别大的数据。

评估异常值的潜在影响是任何分析项目的难点。 一方面,您需要关注引入虚假数据样本的可能性,这些样本将严重影响您的模型。 另一方面,异常值对于预测在特殊情况下出现的结果是非常有意义的。 我们将讨论每一个包含特征的异常值,看看我们是否能够得出合理的结论来处理它们。

第一组特征看起来与最大湿度有关。 观察这些数据,我可以看出,这个特征类别的异常值是非常低的最小值。这数据看起来没价值,我想我想仔细看看它,最好是以图形方式。 要做到这一点,我会使用直方图。

查看maxhumidity字段的直方图,数据表现出相当多的负偏移。 在选择预测模型和评估最大湿度影响的强度时,我会牢记这一点。 许多基本的统计方法都假定数据是正态分布的。 现在我们暂时不管它,但是记住这个异常特性。

接下来我们看另外一个字段的直方图

要解决的最后一个数据质量问题是缺失值。 由于我构建DataFrame的时候,缺少的值由NaN表示。 您可能会记得,我通过推导代表前三天测量结果的特征,有意引入了收集数据前三天的缺失值。 直到第三天我们才能开始推导出这些特征,所以很明显我会想把这些头三天从数据集中排除出去。

再回头再看一下上面info()函数输出的信息,可以看到包含NaN值的数据特征非常的少,除了我提到的几个字段,基本就没有了。因为机器学习需要样本字段数据的完整性,因为如果我们因为降水量那个字段为空,就去掉样本,那么会造成大量的样本不可用,对于这种情况,我们可以给为空的降水量字段的样本填入一个值。根据经验和尽量减少由于填入的值对模型的影响,我决定给为空的降水量字段填入值0。

填入值后,我们就可以删掉字段值为空的样本了,只用调用dropna()函数。

总结

这篇文章主要介绍了数据的收集、处理、清洗的流程,本篇文章处理完的处理,将用于下篇文章的模型训练。

对你来说,这篇文章可能很枯燥,没啥干货,但好的样本数据,才能训练处好的模型,因此,样本数据的收集和处理能力,直接影响你后面的机器学习的效果。

英文原文:http://stackabuse.com/using-machine-learning-to-predict-the-weather-part-1/

觉得本文对你有帮助?请分享给更多人。

关注「程序员宝库」公众号,直接获取各种编程资料!

本文来自企鹅号 - 程序员宝库媒体

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 大数据时代渐行渐近,那时1加1还等于2吗

    1+1=2还正确吗 ? 网购时代 过了1111和1212的网购狂欢节,新一波的0101元旦已经在路上了。你还准备剁手吗?各式各样的APP已经成为买买买背后的助推...

    企鹅号小编
  • 行业研究:大数据(一)

    从今天开始,会不间断的写关于大数据的行业研究,由浅入深、由面到点、至上而下的写,最终目的就是帮助大家理清楚大数据接下来的投资脉络和投资方向。 今天主要是大体的介...

    企鹅号小编
  • 小白如何学好大数据?

    如何学好大数据?那么首先我们要想我们为什么会选择学习大数据?大数据发展前景怎么样?学完大数据后就业机会多不多?这些都是我们需要了解的,那么小编今天就跟大家简单的...

    企鹅号小编
  • FunData — 电竞大数据系统架构演进

    背景来源:FunData作为电竞数据平台,v1.0 beta版本主要提供由Valve公司出品的顶级MOBA类游戏DOTA2相关数据接口(详情:open.vare...

    IT大咖说
  • 创业者如何抓住大数据行业的风潮?

    对于大数据项目,投资人到底看什么?在写这篇文章之前,我们与多家投行的投资人曾经做过访谈,下面是我们根据访谈内容整理出来的内容。

    华章科技
  • 构造大数据时代国家安全战略

    随着新一代信息技术的迅速推广,以及大数据在多个领域的广泛运用,大数据已成为一种国家战略资源。中国作为经济大国,亟须提高自己的数据掌控能力,从国家层面,构建自己...

    腾讯研究院
  • CVPR 2019 | 西北工业大学开源拥挤人群数据集生成工具,大幅提升算法精度

    近年来,因为拥挤人群计数在视频监控、公共安全方面的应用广泛,引起了不少学者的关注。

    CV君
  • 中国的大数据优势:数据规模+数据传统

      《中国经济周刊》:大数据的真正价值是什么,它可以为中国带来什么?   舍恩伯格:大数据的价值并不仅仅局限于它初始被收集的目的,而在于它之后可以服务于其他目...

    CDA数据分析师
  • 个推CTO安森:我所理解的数据中台

    在前面两篇文章(《数据智能时代来临:本质及技术体系要求》和《多维度分析系统的选型方法》)之中,我们概括性地阐述了对于数据智能的理解,并根据工作中团队涉及到的多维...

    AI科技大本营
  • 大数据平台架构+ETL

    ETL,Extraction-Trasformation-Loading,即数据读取,转换,装载的过程,是构建数据仓库的重要环节。

    可爱见见

扫码关注云+社区

领取腾讯云代金券