差分内容梳理及Python实现

906 阅读5分钟

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

(1) 差分

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

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

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

差分(difference methods):

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

(2) 一阶差分

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

(3) 二阶差分

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

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

原来数列项一阶差分项二阶差分项
166668.2
138248.7-28419.5
140172.91924.230343.7
122368.2-17804.7-19728.9
163803.441435.259239.9
124775-39028.4-80463.6
131981.77206.746235.1
112752.6-19229.1-26435.8
16210649353.468582.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)
1NaNNaN
21NaN
31NaN
412
512
612
712
812
912
1012

pandas的diff()方法

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

👏👏👏再看看我们以前的文章😃😃😃
🌺 Excel中数据分析工具库-相关系数篇
🌺 干货,手把手教会你做相关性分析
🌺 5年数据分析路,小结。
🌺 用户细分及画像分析
🌺 K-近邻算法及实践

欢迎关注,微信公众号“数据分析师之家
扫描二维码 关注我们
💁提供职业规划、简历指导、面试辅导服务哦
QQ交流群:254674155
在这里插入图片描述