用Python玩转时序数据

时间序列是日常生活中最常见的数据类型之一。股票价格、销售信息、气候数据、能源使用,甚至个人身高体重都是可以用来定期收集的数据样本。几乎每个数据科学家在工作中都会遇到时间序列,能够有效地处理这些数据是数据科学领域之中的一项非常重要的技能。

本文简要介绍了如何从零开始使用Python中的时间序列。这包括对时间序列的简单定义,以及对利用pandas访问伦敦市居民智能电表所获取数据的处理。可以点击此处获取本文中所使用的数据。还提供了一些我认为有用的代码。

让我们从基础开始,时间序列的定义是这样的:

时间序列是按时间的顺序进行索引、排列或者绘制的数据点的集合。最常见的定义是,一个时间序列是在连续的相同间隔的时间点上取得的序列,因此它是一个离散时间数据的序列。

时间序列数据是围绕相对确定的时间戳而组织的。因此,与随机样本相比,可能包含我们将要尝试提取的一些相关信息。

加载和控制时间序列

数据集

让我们使用一些关于能源消耗计费的数据作为例子,以kWh(每半小时)为单位, 在2011年11月至2014年2月期间,对参与英国电力网络领导的低碳伦敦项目的伦敦居民样本数据进行分析。我们可以从绘制一些图表开始,最好了解一下样本的结构和范围,这也将允许我们寻找最终需要纠正的缺失值。

对于本文的其余部分,我们只关注DateTime和kWh两列。

重采样

让我们从较简单的重采样技术开始。重采样涉及到更改时间序列观测的频率。特征工程可能是你对重新采样时间序列数据感兴趣的一个原因。实际上,它可以用来为监督学习模型提供额外的架构或者是对学习问题的领会角度。pandas中的重采样方法与GroupBy方法相似,因为你基本上是按照特定时间间隔进行分组的。然后指定一种方法来重新采样。让我们通过一些例子来把重采样技术描述的更具体些。我们从每周的总结开始:

·data.resample()方法将用于对DataFrame的kWh列数据重新取样;

·“W”表示我们要按每周重新取样;

·sum()方法用于表示在此时间段计算kWh列的总和;

我们可以对每日的数据也这么做处理,并且可以使用groupby和mean函数进行按小时处理:

为了进一步进行重新采样,pandas有许多内置的选项,你甚至还可以定义自己的方法。下面两个表分别显示了时间周期选项及其缩写别名和一些可能用于重采样的常用方法。

其它探索

这里还有一些你可以用于处理数据而进行的其它探索:

Prophet建模

Facebook Prophet于2017年发布的,可用于Python,而R.Prophet是设计用于分析在不同时间间隔上显示模式的日观测时间序列。Prophet对于数据丢失情况和趋势的变化具有很强的鲁棒性,并且通常能够很好地处理异常值。它还具有高级的功能,可以模拟假日在时间序列上产生的影响并执行自定义的变更点,但我将坚持使用基本规则来启动和运行模型。我认为Prophet可能是生产快速预测结果的一个好的选择,因为它有直观的参数,并且可以由有良好领域知识背景的但缺乏预测模型的技术技能的人来进行调整。有关Prophet的更多信息,大家可以点击这里查阅官方文档。

在使用Prophet之前,我们将数据里的列重新命名为正确的格式。Date列必须称为“ds”和要预测值的列为“y”。我们在下面的示例中使用了每日汇总的数据。

然后我们导入Prophet,创建一个模型并与数据相匹配。在Prophet中,changepoint_prior_scale参数用于控制趋势对变化的敏感度,越高的值会更敏感,越低的值则敏感度越低。在试验了一系列值之后,我将这个参数设置为0.10,而不是默认值0.05。

为了进行预测,我们需要创建一个称为未来数据框(future dataframe)的东西。我们需要指定要预测的未来时间段的数量(在我们的例子中是两个月)和预测频率(每天)。然后我们用之前创建的Prophet模型和未来数据框进行预测。

非常简单!未来数据框包含了未来两个月内的预估居民使用电量。我们可以用一个图表来进行可视化预测展示:

图中的黑点代表了实际值,蓝线则代表了预测值,而浅蓝色阴影区域代表不确定性。

如下图所示,不确定性区域随着我们在之后的进一步变化而扩大,因为初始的不确定性随着时间的推移而扩散和增多。

Prophet还可以允许我们轻松地对整体趋势和组件模式进行可视化展示:

每年的模式很有趣,因为它看起来表明了居民的电量使用在秋季和冬季会增加,而在春季和夏季则会减少。直观地说,这正是我们期望要看到的。从每周的趋势来看,周日的使用量似乎比一周中其它时间都要多。最后,总体的趋势表明,使用量增长了一年,然后才缓慢地下降。需要进行进一步的调查来解释这一趋势。在下一篇文章中,我们将尝试找出是否与天气有关。

LSTMLong Short-Term Memory,长短期记忆网络)预测

LSTM循环神经网络具有学习长序列观测值的前景。博客文章《了解LSTM网络》,在以一种易于理解的方式来解释底层复杂性方面做的非常出色。以下是一个描述LSTM内部单元体系结构的示意图:

LSTM似乎非常适合于对时间序列的预测。让我们再次使用一下每日汇总的数据。

LSTM对输入数据的大小很敏感,特别是当使用Sigmoid或Tanh这两个激活函数的时候。通常,将数据重新调整到[0,1]或[-1,1]这个范围是一个不错的实践,也称为规范化。我们可以使用scikit-learn库中的MinMaxScaler预处理类来轻松地规范化数据集。

现在我们可以将已排好序的数据集拆分为训练数据集和测试数据集。下面的代码计算出了分割点的索引,并将数据拆分为多个训练数据集,其中80%的观测值可用于训练模型,剩下的20%用于测试模型。

我们可以定义一个函数来创建一个新的数据集,并使用这个函数来准备用于建模的训练数据集和测试数据集。

LSTM网络要求输入的数据以如下的形式提供特定的数组结构:[样本、时间间隔、特征]。

数据目前都规范成了[样本,特征]的形式,我们正在为每个样本设计两个时间间隔。可以将准备好的分别用于训练和测试的输入数据转换为所期望的结构,如下所示:

就是这样,现在已经准备好为示例设计和设置LSTM网络了。

从下面的损失图可以看出,该模型在训练数据集和测试数据集上都具有可比较的表现。

在下图中,我们看到LSTM在拟合测试数据集方面做得非常好。

聚类(Clustering

最后,我们还可以使用示例的数据进行聚类。执行聚类有很多不同的方式,但一种方式是按结构层次来形成聚类。你可以通过两种方式形成一个层次结构:从顶部开始来拆分,或从底部开始来合并。我决定先看看后者。

让我们从数据开始,只需简单地导入原始数据,并为某年中的某日和某日中的某一小时添加两列。

 

LinkageDendrograms

linkage函数根据对象的相似性,将距离信息和对象对分组放入聚类中。这些新形成的聚类随后相互连接,以创建更大的聚类。这个过程将会进行迭代,直到在原始数据集中的所有对象在层次树中都连接在了一起。

对数据进行聚类:

完成了!!!这难道不是很简单吗?

当然很简单了,但是上面代码中的“ward”在那里意味着什么呢?这实际上是如何执行的?正如scipy linkage文档上告诉我们的那样,“ward”是可以用来计算新形成的聚类之间距离的一个方法。关键字“ward”让linkage函数使用Ward方差最小化算法。其它常见的linkage方法,如single、complete、average,还有不同的距离度量标准,如euclidean、manhattan、hamming、cosine,如果你想玩玩的话也可以使用一下。

现在让我们来看看这个称为dendogram的分层聚类图。dendogram图是聚类的层次图,其中那些条形的长度表示到下一个聚类中心的距离。

如果这是你第一次看到dendrogram图,那看起来挺复杂的,但是别担心,让我们把它分解来看:

·在x轴上可以看到一些标签,如果你没有指定任何其它内容,那么这些标签就是X上样本的索引;

·在y轴上,你可以看到那些距离长度(在我们的例子中是ward方法);

·水平线是聚类的合并;

·那些垂线告诉你哪些聚类或者标签是合并的一部分,从而形成了新的聚类;

·水平线的高度是用来表示需要被“桥接”以形成新聚类的距离;

即使有解释说明,之前的dendogram图看起来仍然不明显。我们可以减少一点,以便能更好地查看数据。

建议查找聚类文档以便能了解更多内容,并尝试使用不同的参数。

 


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php找不到phpmyadmin,phpMyAdmin 安装配置方法和问题解决

phpMyAdmin 安装配置方法和问题解决更新时间:2009年06月08日 01:32:39 作者:今天在自己的本本上装好了PHP的环境,于是就下载了个phpadmin来管理数据库。安装过程中却发现了很多问题。现作个简单回顾:基本上应该遇到的问题都遇到…

对话阿里云叔同:释放云价值,让容器成为“普适”技术

戳蓝字“CSDN云计算”关注我们哦!作者 | 刘丹受访者 | 丁宇出品 | CSDN云计算(ID:CSDNcloud)云改变了IT业态和市场格局,催生了应用大发展的时代,企业可以更加专注于构建符合其愿景的、更具生命力的业务创新…

菜鸟数据科学家五大误区

你准备好要成为一名数据科学家,积极的参加Kaggle比赛和Coursera的讲座。虽然这一切都准备好了,但是一名数据科学家的实际工作与你所期望的却是大相径庭的。 本文研究了作为数据科学家新手的5个常见错误。这是由我在塞巴斯蒂安福卡德(Dr. Sbas…

Linux关闭服务器80端口,Linux配置防火墙,开启80端口、3306端口

vi /etc/sysconfig/iptables-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允许80端口通过防火墙)-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(允许3306端口通过防火墙)特别提示:很多网友把这两条规则添加到防火墙配…

深度 | 线下场景的客流数字化探索与应用

数字化的时代,无论是商场里的大小专柜,还是小区门口的便利店,大多仍处于“数据荒漠”中。店家不知道店内多少商品被人浏览,多少衣服被试穿了,作为顾客的我们也不知道哪些商品是最受同龄人喜爱的畅销好物。 在新零售场…

IT公司刻板印象合集:程序员都秃头,商务个个是人精

戳蓝字“CSDN云计算”关注我们哦!作者 | 吓行责编 | 阿秃互联网公司,可能是存在刻板印象最多的地方;不管是来自外部的,还是内部的。人们对互联网公司里的每个工种都有自己“心里的那个模样”;而实际上,很多…

JMeter实现web接口测试实践举例

https://blog.csdn.net/qq_41117947/article/details/79884726

用最新NLP库Flair做文本分类

介绍 文本分类是一种监督机器学习方法,用于将句子或文本文档归类为一个或多个已定义好的类别。它是一个被广泛应用的自然语言处理方法,在垃圾邮件过滤、情感分析、新闻稿件分类以及与许多其它业务相关的问题中发挥着重要作用。 目前绝大多数最先进的方…

配置无密码登录linux,linux ssh无密码登录配置

第一步:首先我们得先准备一个虚拟机集群并且能通过 虚拟机名称ping成功本人已经准备了test01 和test02两个虚拟机如果不会创建集群可以参考我之前写的此篇博客,地址如下:https://mp.csdn.net/mdeditor/102669331#第二步:关闭防火墙和seliunx (如果已经关闭了,可以直接跳过)1.关…

Mars——基于矩阵的统一分布式计算框架

背景 Python Python 是一门相当古老的语言了,如今,在数据科学计算、机器学习、以及深度学习领域,Python 越来越受欢迎。 大数据领域,由于 hadoop 和 spark 等,Java 等还是占据着比较核心的位置,但是在 s…

云计算管理工具:根植热土

戳蓝字“CSDN云计算”关注我们哦!作者 | 老姜出品 | CSDN云计算(ID:CSDNcloud)有机构曾预计2020年全球云计算市场空间,会增至1435亿美元,年复合增长率超过20%。相关资料显示:2018年,…

linux modbus工具,基于ARM-Linux的Modbus串口服务器设计

随着互联网的迅猛发展,在使用计算机进行网络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集和控制设备也在逐步地走向网络化,以便共享网络资源。所以,在电子设备日趋网络化的今天,利用串口服务器来实现网…

win10右键没有新建选项,无法新建文件夹

按下winr打开运行窗口,输入 regedit回车,如下图所示: 定位到HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers,如下图所示 鼠标右键ContextMenuHandlers,新建-》项(K)-》…

Service Mesh 是新瓶装旧酒吗?

戳蓝字“CSDN云计算”关注我们哦!文章来源:阿里巴巴云原生,点击查看原文。Service Mesh 是新瓶装旧酒吗?新技术出现时所主张的价值一定会引发相应的探讨,Service Mesh 也不例外。以往,怀疑 Service Mesh 价…

Mars 算法实践——人脸识别

Mars 是一个基于矩阵的统一分布式计算框架,在之前的文章中已经介绍了 Mars 是什么, 以及 Mars 分布式执行 ,而且 Mars 已经在 GitHub 中开源。当你看完 Mars 的介绍可能会问它能做什么,这几乎取决于你想做什么,因为 Ma…

电脑中linux系统在哪里设置密码,linux添加一个root级别账户并设置密码linux操作系统 -电脑资料...

在linux中我们增加用户会用到useradd了,但这个过程个人感觉比较复杂很用户再加权限,我这里介绍的useradd只要一条命令可以快速增加一个root超级管理员并设置密码命令,希望对大家有帮助,内网机器提权添加账户,无回显&am…

主机ssh升级到6.7以上版本后,使用jsch jar包ssh连接不上报Algorithm negotiation fail问题的解决办法

文章目录一. 解决方案1. 添加加密算法2. 升级版本3. 回退版本4. j2ssh.jar方式替代jsch5. jsch版本下载列表一. 解决方案 1. 添加加密算法 ssh连接问题是由于主机ssh中缺少与jsch jar包匹配的加密算法导致,jsch jar包的默认加密算法貌似是diffie-hellman-group-ex…

2018年自然语言处理最值得关注的研究、论文和代码

2018年对于自然语言处理(NPL)是很有意义的一年,见证了许多新的研究方向和尖端成果。Elvis Saravia 是计算语言学专家,也是2019 计算语言学会年度大会北美分部的项目委员之一。他总结了2018年 NLP 的重要进展,包括增强学…

【惊天】京东任命周伯文担任京东云与AI事业部负责人 全面负责AI、云计算、IoT三大技术领域!

昨日,京东集团爆出大消息,宣布设立京东云与AI事业部,整合原京东云、人工智能、IoT三大事业部的架构与职责,由京东集团副总裁周伯文博士担任负责人,直接向京东集团董事局主席兼CEO刘强东先生汇报。 对此周伯文博士表示…

如何基于OceanBase构建应用和数据库的异地多活

如何基于OceanBase构建应用和数据库的异地多活 前言 OceanBase是一个通用的分布式的关系型数据库,有很多独特的特点。比如数据库的多租户、高可用、极致弹性伸缩能力。如果把OceanBase当作单库使用,就没有把OceanBase的分布式优势发挥到极致。 本文主要…