一、差分

1. 差分的含义

        差分是统计学里常用的概念,统计学中的差分是指离散函数后的后一项减去前一项的差;

        数学中的差分是一种微分方程数值方法,通过有限差分来近似导数,从而寻求微分方程的近似解。

        由 Cramer 分解定理,时间序列 = 确定性影响 + 随机性影响。其中确定性影响可以由多项式决定,对多项式求 N 阶差分,就可以变成常数。

        (参考:[时间序列分析][5]--非平稳时间序列模型与差分

2. 差分的阶数

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

        (参考:如何用Python对数据进行差分

二、差分的作用

1. 在信号处理领域

        差分是一种信号输入的方式(比如模电中的差分放大器),信号输入需要两根信号线,使得这两个信号线的振幅相等,相位相反。

        差分的主要作用是提高信号精度,去掉共有的误差干扰,抗干扰能力强。

        (参考:差分信号的好处

        (参考:为什么差分信号抗干扰能力强

2. 在时间序列分析领域

        差分的目的主要是消除一些数据波动,消除数据对时间的依赖性,使数据趋于平稳,差分变化经常用来使得结果更加直观。

        一阶差分后的数据就是增量(增量亦称改变量,指的是在一段时间内,自变量取不同的值所对应的函数值之差),但有时一阶差分都未必能达到平稳,此时需要做二阶差分,这就很难解释其意义。

        (参考:杂谈时间序列对数据差分的意义

        (参考:如何用Python对数据进行差分

三、在 Python 中实现差分

1. 手撕

        原理:后一项减去前一项。

        注意:做完差分后,序列长度减一!

import numpy as np
import pandas as pd

# 函数功能:求序列的差分
# Input:原始序列,list 类型
# Output:输出序列的差分, list 类型
def fun_calDiff(data):
    data_diff = []
    for i in range(len(data)-1):
        data_diff.append(data[i+1]-data[i])

    return data_diff

    
a = list(range(1, 11))
print(fun_calDiff(a))

2. diff() 函数

        diff() 函数只适用于 Series 和 DataFrame 类型的数据!

(1)pandas 的 Series.diff() 方法

import numpy as np
import pandas as pd

a = pd.Series(list(range(1, 11)))

a_diff_1 = a.diff(periods=1)
a_diff_2 = a.diff(periods=2)

print(a_diff_1)
print(a_diff_2)

(2)pandas 的 DataFrame.diff() 方法

import numpy as np
import pandas as pd

b = pd.DataFrame(list(range(1, 11)))

b_diff_1 = b.diff(periods=1)
b_diff_2 = b.diff(periods=2)

print(b_diff_1)
print(b_diff_2)

        (参考:差分内容梳理及Python实现)         

        (参考:Python使用pandas对数据进行差分运算


知识点

1. Cramer 分解定理

        Cramer 分解定理:任何一个时间序列都可以分解为确定性趋势成分和平稳的零均值误差成分。

        其中,beta 为常熟系数,at 为一个零均值白噪声时间序列,B 为延迟算子。

        Cramer 分解说明任何一个序列的波动都可以视为受到了确定性影响和随机性影响的综合作用。

        (参考:cramer分解定理

        (参考:Cramer分解定理公式理解

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐