原文: https://machinelearningmastery.com/difference-time-series-dataset-python/
差分是时间序列中流行且广泛使用的数据变换。
在本教程中,您将了解如何使用 Python 将差异操作应用于时间序列数据。
完成本教程后,您将了解:
- 关于差分运算,包括滞后差和差分顺序的配置。
- 如何开发差分操作的手动实现。
- 如何使用内置的 Pandas 差分功能。
让我们开始吧。
如何区分时间序列数据集与 Python 照片由 Marcus ,保留一些权利。
差分是一种转换时间序列数据集的方法。
它可用于消除序列对时间的依赖性,即所谓的时间依赖性。这包括趋势和季节性等结构。
差异可以通过消除时间序列水平的变化来帮助稳定时间序列的均值,从而消除(或减少)趋势和季节性。
- 第 215 页,预测:原则与实践
通过从当前观察中减去先前的观察来执行差分。
difference(t) = observation(t) - observation(t-1)
以这种方式,可以计算一系列差异。
将连续观察之间的差异称为滞后-1 差异。
可以调整滞后差异以适应特定的时间结构。
对于具有季节性成分的时间序列,滞后可以预期为季节性的周期(宽度)。
在执行差分运算之后,例如在非线性趋势的情况下,时间结构可能仍然存在。
这样,差分过程可以重复多次,直到所有时间依赖性都被消除。
执行差分的次数称为差分顺序。
该数据集描述了 3 年期间每月洗发水的销售数量。
单位是销售计数,有 36 个观察。原始数据集归功于 Makridakis,Wheelwright 和 Hyndman(1998)。
下面的示例加载并创建已加载数据集的图。
from pandas import read_csv
from pandas import datetime
from matplotlib import 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 i in range(interval, len(dataset)):
value = dataset[i] - dataset[i - interval]
diff.append(value)
return Series(diff)
我们可以看到该函数在指定的时间间隔后小心地开始差异数据集,以确保实际上可以计算差值。定义默认间隔或滞后值 1。这是一个合理的默认值。
进一步的改进是还能够指定执行差分操作的次序或次数。
以下示例将手动 _ 差异()_ 功能应用于 Shampoo Sales 数据集。
from pandas import read_csv
from pandas import datetime
from pandas import Series
from matplotlib import pyplot
def parser(x):
return datetime.strptime('190'+x, '%Y-%m')
# create a differenced series
def difference(dataset, interval=1):
diff = list()
for i in 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 库提供了自动计算数据集差异的功能。
在系列和 DataFrame 对象上都提供了diff()
功能。
与上一节中手动定义的差异函数一样,它需要一个参数来指定间隔或滞后,在本例中称为 _ 周期 _。
下面的示例演示了如何在 Pandas Series 对象上使用内置差异函数。
from pandas import read_csv
from pandas import datetime
from matplotlib import 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 实现差分变换。
您对差异或此帖有任何疑问吗? 在下面的评论中提出您的问题。