时间序列分解随笔

时间序列分解

对于时间序列来说,传统的时间序列预测模型对于不平稳的数据是不能进行处理的,需要对时间序列进行分解,使得时间序列区域平稳,才可以进行时间序列的模拟预测。本次采用python的seasonal_decompose分解来进行时间序列的分解。

工作环境

python3.6、statsmodels库、pandas库、matplotlib库。

时间序列分解

  1. 导入包
from statsmodels.tsa.seasonal import seasonal_decompose
import pandas as pd
from matplotlib import pyplot

比较简单,不再详解。

  1. 数据读取与预处理
# 如果数据中表示时间的字段类型不为时间,则可用以下代码
# dateparse = lambda dates: pd.datetime.strptime(dates, '%Y-%m')
# data1 = pd.read_excel("123.xlsx",sheet_name="Sheet4",parse_dates=['time'], index_col='time',date_parser=dateparse)

data1 = pd.read_excel("123.xlsx",sheet_name="Sheet4",parse_dates=['time'], index_col='time')
data1 = data1["test"]

如果数据中,表示时间的序列不是datetime类型的,可以运行前两段代码,解决问题。如果时间的序列是datetime类型的,就用最下面的代码就可以。parse_dates可以找到时间序列,index_col可以让时间序列成为index。我的示例数据如下:时间序列分解随笔_第1张图片
利用data1 = data1[“test”],可以拿出来【time,test】(其中Time为index)的2D序列。这就是statsmodels库支持的序列。

  1. 数据计算与显示
decomposition = seasonal_decompose(data1["test"])  #变量为pandas时间序列数据
decomposition.plot()
pyplot.show()

decomposition即为计算出的时间序列分解的集合。利用plot可以进行可视化。
时间序列分解随笔_第2张图片
4. 数据存储

trend = decomposition.trend
seasonal = decomposition.seasonal
residual = decomposition.resid

a = pd.DataFrame({
     
    'trend_2': decomposition.trend,
    'seasonal_2': decomposition.seasonal
})
a.to_excel("path")

最终利用方法把数据输出到path中。

你可能感兴趣的:(python,python,时间序列数据)