用圆周率和圆周率为佛蒙特州的房子供暖。第三部分:从NOAA获取数据

sgenzersgenzer 管理员,版主,员工,RapidMiner认证分析师,社区经理,成员,大学教授,PM版主职位:2959年社区经理
2018年11月编辑 知识库

的问候,

距离我上一篇关于“圆周率和圆周率”的博文已经过去三周了。为什么这么久?原因很简单:天气太热了,烧不了任何颗粒!上周我们的气温超过了80华氏度(27摄氏度)——这样的天气很难让我们额外取暖。幸运的是,随着季节的变化,天气又转凉了。树叶终于换了,野生火鸡决定在冬天之前觅食。

IMG_4085.JPG

在这段不燃烧颗粒的时间里,我决定用外部天气数据来丰富我的数据集。我有一种强烈的预感,我的优化模型至少会取决于外部温度。在美国,国家气象局向公众提供了堆积如山的数据在他们的网站更好的是,通过一系列的web服务.您所需要做的就是获得一个访问令牌,找到离您最近的气象站,然后获取数据。要是有那么简单就好了!长话短说,我最终找到了离我最近的NOAA气象站(联合村大坝,塞特福德,VT),它的站点ID号(USC00438556)和它提供的数据集(全球历史气候学网络-每日,简称CHCND)。看到在这里了解更多信息。更有趣的是,数据收集并不一致。你会得到不同的数据取决于一天…不知道为什么。以下是2017年9月的PDF导出:

ghcnd_usc00438556_2017 - 9 - 1. - png

因此,接下来的问题就是以JSON格式查询web服务(为了方便解析各种数据,一天一天地),转换为XML(因为RapidMiner还没有一个好的JSON数组解析器),然后存储数据。但有一个问题:这只是每天的最低和最高温度!我至少要每小时的温度。

截屏时间2017-10-06下午7:57.02 .png

如何将这些最小/最大值转换为近似小时值?我知道它是近似正弦的,春分/秋分的正弦几乎是完美的,而夏至/春至的正弦却远没有那么完美。我不需要一个完美的小时温度,但由于我在纬度43°,我需要考虑一点。在快速复习了一些数学知识和大量的谷歌搜索之后,我发现一篇不错的论文这样我就可以粗略地将每日最高/最低温度转换为每小时温度。

截屏时间2017-10-06下午8点04分14秒

最后,我可以将这些信息加入到我的感应器数据表中,以备将来使用:

截屏时间2017-10-06下午8.06.02 .png

我将该过程作为.rmp文件附加到这篇文章中,因为xml相当长。一些有趣的RapidMiner Studio作品,如果你感兴趣…

  • 我不得不在Execute Program操作符中使用cURL语句,而不是通常的通过Webservice操作符(在Web Mining扩展中)充实数据。由于缺乏更新的操作符,我有时需要使用shell命令。
  • 我需要重新创建1982年的“CIBSE指南”,如论文中所示,分享一天中最高/最低温度的典型时间作为一年中的月份的函数。
  • 您将在生成属性(14)中看到一个巨大的混乱。这是我对论文中所示公式的实现。可能有更优雅的方法来做到这一点,但我需要自己做,以便理解所涉及的数学。
  • 您将看到,我需要提取NOAA webservice元数据中给出的“count”。这是因为上面解释的问题,不同的日子有不同的数据(天知道为什么)。然后根据计数使用“Select Subprocess”提取各自的属性。我可以通过提取数据类型来做得更好…就是不喜欢!

这就是这篇博文的全部内容。希望你喜欢这次旅行!

Thomas_Ott CraigBostonUSA yyhuang Pavithra_Rao
    登录注册置评。