如何用Python对数据进行差分

Python013

如何用Python对数据进行差分,第1张

处理过与时间有关的数据的人都知道,差分变化经常用来使得结果更加直观。在这篇文章里将会教你如何用Python来实现这一目的,读完这篇文章,你将会掌握以下技能:

1、知道什么是差分变换以及滞后差分和差分阶数的设置

2、如何手动计算差分

3、怎样使用Pandas内置的差分函数

所以,让我们赶紧开始吧!

为什么要对时间序列数据进行差分?

首先来看下为什么要对数据进行差分变化,差分变化可以消除数据对时间的依赖性,也就是降低时间对数据的影响,这些影响通常包括数据的变化趋势以及数据周期性变化的规律。进行差分操作时,一般用现在的观测值减去上个时刻的值就得到差分结果,就是这么简单,按照这种定义可以计算一系列的差分变换。

滞后差分

连续观测值之间的差分变换叫做一阶滞后差分。滞后差分的步长需要根据数据的时间结构做调整,例如对于周期性变化的数据,这个时间步长就是数据变化的周期。

差分阶数

在进行一次差分之后,时间项的作用并没有完全去掉,将会继续对差分结果进行差分变化,直到完全消除时间项的影响因素为止,这个过程中进行的差分操作次数就称为差分阶数。

洗发水销售数据

这份数据是三年来每月洗发水的销售情况,总共有36个数据记录,原始数据来自Makridakis, Wheelwright和 Hyndman (1998).,可以从下面的地址下到数据:

下面的代码将会导入数据并将结果画成折线图,如下所示:

手动差分

在这一部分中,我们将会自定义一个函数来实现差分变换,这个函数将会对提供的数据进行遍历并根据指定的时间间隔进行差分变换。具体代码如下:

从上面的代码中可以看到该函数将会根据指定的时间间隔来对数据进行变换,一般来说,通常会计算间隔一个数据的差分,这样的结果比较可靠。当然,我们也可以将上面的函数进行一定的改进,加入差分阶数的指定。

下面将这函数应用到上面洗发水销售的数据中去,运行之后绘出下面的图,具体如下:

自动差分

Pandas库里提供了一个函数可以自动计算数据的差分,这个函数是diff(),输入的数据是“series'或”DataFrame'类型的,像前面自定义函数那样,我们也可以指定差分的时间间隔,不过在这里这个参数叫做周期。

下面的例子是用Pandas内置函数来计算差分的,数据类型是series的,使用Pandas内置函数的好处是代码工作量减少了不少,而且绘出的图中包含更详细的信息,具体效果如下:

总结

读完本文想必你已经学会用python来实现对数据的差分了,尤其是对差分的概念,手动差分,以及使用Pandas内置函数进行差分都有所了解了。如果有什么好的想法欢迎在评论栏里留下。

差分是一种变换时间序列数据集的方法。

它可以用于消除序列对时间性的依赖性,即所谓的时间性依赖。这包含趋势和周期性的结构。

不同的方法可以帮助稳定时间序列的均值,消除时间序列的变化,从而消除(或减少)趋势和周期性。

dta=np.array(dta,dtype=np.float) //这里要转下数据类型,不然运行会报错

dta=pd.Series(dta)

dta.index = pd.Index(sm.tsa.datetools.dates_from_range('2001','2090')) //应该是2090,不是2100

dta.plot(figsize=(12,8))

plt.show() // 在Scala IDE要输入这个命令才能显示图!