差分内容梳理及Python实现

在做时间序列分析时,经常会用到差分的分析方法,但之前都没有细想,今天对相关的内容做个梳理。

差分的概念

(1) 差分

差分是统计学里一个常用的概念,应该是源自更为基础的学科——数学,里的数列概念。

数列(sequence of number):
是以正整数集(或它的有限子集)为定义域的函数,是一列有序的数

所以我们通常所接触的时间序列,本质就是一个数列,只不过多了一个时间列,显式的告诉你这列数发生变化的时间点位。

差分(difference methods):
1. 统计学中的差分,就是指离散函数的后一项减去前一项的差
2. 数学中的差分,是一种微分方程数值方法,通过有限差分来近似导数,从而寻求微分方程的近似解。

(2) 一阶差分

一阶差分就是用原数列的后一项减去前一项得到的一组差数列。

(3) 二阶差分

二阶差分既是对远数列进行的第二次差分操作,也等于在一阶差分的基础上再做一次差分。

以下为手动计算一阶差分、二阶差分的数值。

原来数列项 一阶差分项 二阶差分项
166668.2
138248.7 -28419.5
140172.9 1924.2 30343.7
122368.2 -17804.7 -19728.9
163803.4 41435.2 59239.9
124775 -39028.4 -80463.6
131981.7 7206.7 46235.1
112752.6 -19229.1 -26435.8
162106 49353.4 68582.5
125792.2 -36313.8 -85667.2

差分的意义

特地举了个特殊的例子来说明,会看的比较清晰。

test = pd.Series([1,2,3,4,5,6,7,8,9,10])
test.plot()

上面这组数据一眼望去就是个等差数列,数列的d=1,n=10,即一共有10个数,差是1。刚才是用数学语言描述了这组数据。从数据分析的角度看,也不用那么专业,这就是一组线性相关的数据y=ax+b,并且这里a>0,数据是递增变化的。
这里写图片描述

一阶差分

test_diff1 = diff(a=test,n=1)
plot(test_diff1)

#或者可以调用Series对象的内置方法
test_diff1 = test.diff(1)
test_diff1.plot()

一阶差分的结果解释了数据变化幅度,这个幅度既是数值,某种程度上也是一种比率。根据下图可知,原数列的值变化的幅度值均为1。
这里写图片描述

二阶差分

二阶差分的值均为0,这以为这什么?二阶差分是一阶差分再求一次差分得到的,这表明一阶差分值不再发生变化,用一个线性函数即可以描述原始数据,并且残差是0。当然这只是一个特例,一般情况下做了二阶差分并不会直接为0,而是有可能近似趋近0。

test_diff2 = diff(a=test,n=2)
plot(test_diff2)

这里写图片描述


diff()方法使用注意点

series的diff()方法

这里写图片描述
这个方法默认参数是period=1,可以用来计算一阶差分。但要注意的是diff(2)不是用来计算二阶差分的,而是周期为2的差分。以上面的test为例:

test数据项 diff(1) diff(2)
1 NaN NaN
2 1 NaN
3 1 NaN
4 1 2
5 1 2
6 1 2
7 1 2
8 1 2
9 1 2
10 1 2

pandas的diff()方法

这个方法才是用来计算高阶差分的,这里a是指数列,n是差分的次数。diff(a=test,n=2)可用来计算test数列的二阶差分。
这里写图片描述

欢迎关注微信公众号“数据分析师手记”,一起成长进步!
这里写图片描述

猜你喜欢

转载自blog.csdn.net/fwj_ntu/article/details/80612392