在Python中如何差分时间序列数据集
差分是一个广泛用于时间序列的数据变换。在本教程中,你将发现如何使用Python将差分操作应用于时间序列数据。
完成本教程后,你将学到:
- 关于差分运算,包括延迟差分的配置和差分序列。
- 如何开发手动实现的差分运算。
- 如何使用内置的Pandas差分函数。
让我们开始吧。
为什么差分时间序列数据?
差分是一种变换时间序列数据集的方法。它可以用于消除序列对时间性的依赖性,即所谓的时间性依赖。这包含趋势和周期性的结构。
不同的方法可以帮助稳定时间序列的均值,消除时间序列的变化,从而消除(或减少)趋势和周期性。
– Forecasting: principles and practice215页
通过从当前观察中减去先前观察值来实现差分。
difference(t)= observation(t)- observation(t-1)
这样可以计算出序列差分。
延迟差分
将连续观察值之间的差值称为延迟-1差分。
可以调整延迟差分来适应特定的时间结构。
对于有周期性成分的时间序列,延迟可能是周期性的周期(宽度)。
差分序列
执行差分操作后,如非线性趋势的情况下,时间结构可能仍然存在。
因此,差分过程可以一直重复,直到所有时间依赖性被消除。
执行差分的次数称为差分序列。
洗发水销售数据集
该数据集描述了3年内洗发水的月销量。这些单位是销售数量,有36个观察值。原始数据集记为Makridakis,Wheelwright和Hyndman(1998)。
在这里下载并了解有关数据集的更多信息。下面的例子加载并创建了加载数据集的图。
from pandasimport read_csv
from pandasimport datetime
from matplotlibimport pyplot
def parser(x):
return datetime.strptime('190'+x,'%Y-%m')
series= read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
series.plot()
pyplot.show()
运行该示例将创建显示数据中清晰的线性趋势图。
手动差分
我们可以手动差分数据集。这涉及开发一个创建差分数据集的新函数。该函数将通过你提供的序列循环,并以指定的间隔或延迟计算差分值。
我们用名为difference()的函数实现此过程。
# create a differenced series
def difference(dataset, interval=1):
diff= list()
for iin range(interval,len(dataset)):
value= dataset[i]- dataset[i- interval]
diff.append(value)
return Series(diff)
我们可以看到,在指定的时间间隔后,函数开始差分数据集,以确保实际上可以计算差分值。定义默认间隔或延迟的值为1。这是一个合理的默认值。另一个改进是能够指定执行差分操作的时间顺序或次数。
以下示例将手动difference()函数应用于洗发水销售数据集。
from pandasimport read_csv
from pandasimport datetime
from pandasimport Series
from matplotlibimport pyplot
def parser(x):
return datetime.strptime('190'+x,'%Y-%m')
# create a differenced series
def difference(dataset, interval=1):
diff= list()
for iin range(interval,len(dataset)):
value= dataset[i]- dataset[i- interval]
diff.append(value)
return Series(diff)
series= read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
X= series.values
diff= difference(X)
pyplot.plot(diff)
pyplot.show()
运行示例创建差分数据集并绘制结果。
自动差分
Pandas库提供了一种自动计算差分数据集的功能。这个diff()函数是由Series和DataFrame对象提供。就像前一节中手动定义的差分函数一样,它需要一个参数来指定间隔或延迟,在本例中称为周期(periods)。
下面的例子演示了如何在Pandas Series对象上使用内置的差分函数。
from pandasimport read_csv
from pandasimport datetime
from matplotlibimport pyplot
def parser(x):
return datetime.strptime('190'+x,'%Y-%m')
series= read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
diff= series.diff()
pyplot.plot(diff)
pyplot.show()
如上一节所述,运行该示例绘制了差分数据集。
使用Pandas函数的好处需要的代码较少,并且它保留差分序列中时间和日期的信息。
总结
在本教程中,你已经学会了在python中如何将差分操作应用于时间序列数据。
具体来说,你学到了:
- 关于差分运算,包括延迟差分的配置和差分序列。
- 如何开发手动实现的差分运算。
- 如何使用内置的Pandas差分函数。
原文:http://machinelearningmastery.com/difference-time-series-dataset-python/
- InstallShield 脚本语言学习笔记
- C++服务器开发之笔记三
- 分布式服务注册和发现consul 简要介绍
- ZooKeeper 笔记(3) 实战应用之【统一配置管理】
- 3D游戏开发之在UE4中创建非玩家角色(NPC)
- VMware Fusion DHCP方式下如何指定虚拟机IP地址
- Visual Studio 2015正式发布
- 科技巨头纷纷入局 医疗人工智能需要奋起直追?
- Windows PowerShell 工具
- 游戏开发之在UE4中编写C++代码控制角色
- Visual Studio 64位应用程序编译
- Windows 7 上安装Visual Studio 2015 失败解决方案
- Silverlight调用本机exe程序
- 游戏开发之UE4添加角色到场景中
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法