时间序列是最流行的数据类型之一。视频,图像,像素,信号,任何有时间成分的东西都可以转化为时间序列。
在本文中将在分析时间序列时使用的常见的处理方法。这些方法可以帮助你获得有关数据本身的见解,为建模做好准备并且可以得出一些初步结论。
我们将分析一个气象时间序列。利用逐时ERA5 Land[1]研究2023年西伯利亚东南部点的2 m气温、总降水量、地表净太阳辐射和地表压力。
首先我们导入相关的库:
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
import xarray as xr
import statsmodels.api as sm
from statsmodels.graphics.tsaplots import plot_ACF, plot_pacf
from scipy import stats
matplotlib是可以设置不同的风格的,这里我们使用 opinionated和 ambivalent来进行风格的设置
from ambivalent import STYLES
import opinionated
plt.style.use(STYLES['ambivalent'])
plt.style.use("dark_background")
折线图
要观察一个时间序列,最简单的方法就是折线图。为了处理地理空间多维数组,我们将使用xarray库。
data = xr.open_dataset('Medium_data.nc')
data
现在我们需要针对所选位置对数据进行切片,并将其转换为pandas DF,并创建一个线形图:
df = data.sel(latitude=52.53, longitude=101.63, method='pad').to_pandas().drop(['latitude', 'longitude'], axis=1)
fig, ax = plt.subplots(ncols = 2, nrows = 2, figsize=(16,9))
df['t2m'].plot(ax=ax[0,0])
ax[0,0].set_title('Air Temperature')
df['ssr'].plot(ax=ax[0,1])
ax[0,1].set_title('Surface Net Solar Radiation')
df['sp'].plot(ax=ax[1,0])
ax[1,0].set_title('Surface Pressure')
df['tp'].plot(ax=ax[1,1])
ax[1,1].set_title('Total Precipitation')
plt.tight_layout()
plt.show()
从线形图中可以清楚地看出,所有四个时间序列都有不同的特征,下面让我们使用数学工具来研究它们。
分解与平稳性任何时间序列都有三个重要属性需要考虑:
1、趋势是时间序列中平稳的长期变化;
2、季节性指的是一个时间序列的平均值有规律的周期性变化;
3、噪声(残差),它是均值为零的信号的随机成分。
为了分别得到这些成分,可以使用经典分解(加性或乘法)。该操作是通过应用卷积滤波器产生的,因此每个时间序列分量被定义为