本文经AI新媒体量子位(公众号 ID: QbitAI)授权转载,转载请联系出处
本文约1800字,建议阅读5分钟
如果你有朝一日碰到了时序数据,该怎么用Python搞定它呢?

时序数据,也就是时间序列的数据。

像股票价格、每日天气、体重变化这一类,都是时序数据,这类数据相当常见,也是所有数据科学家们的挑战。

所以,如果你有朝一日碰到了时序数据,该怎么用Python搞定它呢?

时序数据采样

数据集

这里用到的例子,是2011年11月到2014年2月期间伦敦家庭的用电量。

可以看出,这个数据集是按照每半小时统计一次的节奏,记下每家每户用了多少电。可以根据这些数据,生成一些图表分析。

当然,因为我们考虑的数据主要是时间和用电量两个维度,所以可以把其他的维度删掉。

重采样

我们先从重采样开始。重采样意味着改变时序数据中的时间频率,在特征工程中这个技能非常有用,给监督学习模型补充一些结构。

依靠pandas进行重采样的方法类似groupby,通过下面的例子,可以更方便的理解。

首先,需要把采样周期变成每周:

  • data.resample() 用来重采样数据帧里的电量(kWh)那一列。

  • The ‘W’ 表示我们要把采样周期变为每周(week)。

  • sum()用来求得这段时间里的电量之和。

当然,我们也可以依葫芦画瓢把采样周期变成每天。

pandas里内置了很多重采样的选项,比如不同的时间段:

还有不同的采样方式:

这些你可以直接用,也可以自己定义。

用Prophet建模

Facebook Prophet诞生于2017年,可以用Python和R语言操作。

Prophet天生就是分析时序数据的一把好手,适配任何时间尺度,还能很好的处理异常值和缺失数据,对趋势变化非常敏感,还考虑到了假期等特殊时间的影响,可以自定义变更点。

在使用Prophet之前,我们先重命名一下数据集中的每列。数据列为ds,我们要预测的值列为y。

下面的例子就是以每天为间隔的时序数列。

导入Prophet,创建模型,填充数据。

在Prophet里,changeprior prior scale这个参数可以控制对趋势变化的敏感程度,参数越高越敏感,设置为0.15比较合适

为了实现预测功能,我们创建未来数据帧,设置预测未来多少时间和频率,然后Prophet就可以开始预测了。

这里设置的是预测两周,以天为单位。

搞定了,可以预测未来两个月的家庭用电量了。

图中,黑点为实际值,蓝点为预测值,浅蓝色阴影区域表示不确定性。

当然,如果预测的时间很长,不确定性也会增大。

利用Prophet,我们还可以简单地看到可视化的趋势图。

看上面第二张图,以年份为单位,可以明显看出秋冬家庭耗电量增大,春夏则减少;周日耗电量要比一周里的其他六天多。

LSTM预测

LSTM-RNN可以进行长序列观察,这是LSTM内部单元的架构图:

LSTM似乎很适合时序数据预测,让它来处理一下我们按照一天为周期的数据:

LSTM对输入数据的规模很敏感,特别是在使用sigmoid或tanh激活函数时。

你也可以把数据标准化,也就是将数据重新调整到[0,1]或[-1,1]的范围,可以使用scikit-learn库中的MinMaxScaler预处理类轻松地标准化数据集。

现在,把数据集分成训练集和测试集。

下面的代码把80%的数据分成训练集,剩下的20%留着当测试集。

定义一个函数来创建新的数据集,用这个函数来准备建模。

LSTM网络的输入数据需要设置成特定的阵列结构:[样本,时间步长,特征]。

现在用的是[样本,特征],我们需要加上时间步长,通过下面的方法把训练集和测试集变成我们想要的样子

搞定,现在设计调试LSTM网络。

从损失图中,我们可以看到该模型在训练集和测试集上的表现相似。

看下图,LSTM在拟合测试集的时候表现的非常好。

聚类

最后,我们还要用我们例子中的数据集进行聚类。

聚类的方法很多,其中一种是分层聚类(clusters hierarchically)。

分层的方法有两种:从顶部开始分,和从底部开始分。我们这里选择从底部开始。

方法很简单,导入原始数据,然后为一年中的某一天和一天中的某一小时添加两列。

连接和树形图

连接函数将距离信息和分组对象根据相似性聚类,他们相互连接,创造更大的聚类。这个进程一直迭代,直到原始数据集中的所有对象都在分层树里相互连接在一起。

这样完成我们数据的聚类:

搞定,是不是很简单?

不过,代码里的ward是啥?

这是一种新的聚类方法,关键词ward让连接函数使用ward方差最小化算法。

现在,看一下聚类树形图:

x轴上就是标签,或者说是样本索引;

y轴上是距离;

竖线是聚类合并;

横线表示哪些集群/标签是合并的一部分,形成新聚类;

竖线的长度是形成新聚类的距离。

简化一下,更清楚:

传送门

https://towardsdatascience.com/playing-with-time-series-data-in-python-959e2485bff8

编辑:王菁

校对:林亦霖

手把手教你用Python玩转时序数据,从采样、预测到聚类相关推荐

  1. python数据预测代码_手把手教你用Python玩转时序数据,从采样、预测到聚类丨代码...

    原标题:手把手教你用Python玩转时序数据,从采样.预测到聚类丨代码 原作 Arnaud Zinflou 郭一璞 编译 时序数据,也就是时间序列的数据. 像股票价格.每日天气.体重变化这一类,都是时 ...

  2. 用Python玩转时序数据

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

  3. 实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化

    来源 | 早起Python 大家好,在之前我们讲过如何用Python构建一个带有GUI的爬虫小程序,很多本文将迎合热点,延续上次的NBA爬虫GUI,探讨如何爬取虎扑NBA官网数据,并且将数据写入Exc ...

  4. python玩转大数据_【小旭学长】大数据博士教你用python玩转时空大数据

    好消息!好消息!手把手教你用python玩大数据 小旭学长的python大数据教程完结撒花,共26P录制完毕,总时长4小时.每10分钟的视频的录制加剪辑时间加起来都要两小时以上,讲得很细但是节奏也很快 ...

  5. python爬虫爬取房源_手把手教你用Python网络爬虫爬取新房数据

    项目背景 大家好,我是J哥. 新房数据,对于房地产置业者来说是买房的重要参考依据,对于房地产开发商来说,也是分析竞争对手项目的绝佳途径,对于房地产代理来说,是踩盘前的重要准备. 今天J哥以「惠民之家」 ...

  6. 实战|手把手教你利用Python网络爬虫获取新房数据

    一.项目背景 大家好,我是J哥. 新房数据,对于房地产置业者来说是买房的重要参考依据,对于房地产开发商来说,也是分析竞争对手项目的绝佳途径,对于房地产代理来说,是踩盘前的重要准备. 今天J哥以惠民之家 ...

  7. garch预测 python_【2019年度合辑】手把手教你用Python做股票量化分析

    引言 不知不觉,2019年已接近尾声,Python金融量化公众号也有一年零两个月.公众号自设立以来,专注于分享Python在金融量化领域的应用,发布了四十余篇原创文章,超过两万人关注.这一路走来,有过 ...

  8. python新手入门代码-新手必看:手把手教你入门 Python

    原标题:新手必看:手把手教你入门 Python 本文为 AI 研习社编译的技术博客,原标题 : Learning Python: From Zero to Hero 翻译 |永恒如新的日常校对 | 酱 ...

  9. python 儿童 游戏_少儿编程分享:手把手教你用Python编写战斗机游戏(完)

    原标题:少儿编程分享:手把手教你用Python编写战斗机游戏(完) 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑 .接下来,我们要把单调的白色矩形换成好看的图片. 在前面的代码中,我们用 ...

最新文章

  1. SAP S/4 HANA新变化-主数据:物料主数据
  2. JAVA学习篇--JSP实现原理
  3. android 弹出对话框时显示键盘
  4. 如何在 ASP.NET Core 中 使用 功能开关
  5. php7 php5.6 array,[转]php5.6 升级到php7及变化
  6. go为什么比php性能好,刚学 GO,撸了个支付宝发券的程序,为什么性能还比不上 PHP ?...
  7. js在wap端获取定位_iPhone 定位服务,没用的都关掉
  8. 2017.3.19 约数个数和 失败总结
  9. Python实现小球游戏
  10. layui如何获取父节点的父节点_区块链如何运用merkle tree验证交易真实性
  11. 转:Git: 对象原理
  12. 基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)
  13. Cisco Packet Tracer 命令大全 【思科交换机模拟器命令大全】
  14. 数字孪生城市,智慧城市可视化技术解决方案案例
  15. SAP 发票校验统驭科目替代解决方案
  16. 树莓派Python教程:如何安装树莓派系统
  17. form 表单 发送到邮箱
  18. nas 软件 性能测试,理论读写性能测试
  19. Redis实现分布式限流(学习笔记
  20. 学会如何管理和保护布线系统

热门文章

  1. es的分片和副本_Elasticsearch 集群分配多少分片合理
  2. pandas 数据分析 相关性_探索 COVID-19 新冠数据来学习 Pandas
  3. 5.java String对象
  4. Linux内存管理学习3 —— head.S中的段页表的建立
  5. VMware猛涨vSphere价格 并减少版本数量
  6. Nginx反向代理和负载均衡部署指南
  7. 《Pro/ENGINEER野火版5.0从入门到精通》——1.3 体验Pro/E野火版5.0
  8. java中浅层克隆和深层克隆
  9. iOS 提示更新 业务逻辑
  10. windowns 8.1 缺少.net3.5解决方案