seasonal_decompose函数例子
时间: 2024-05-09 16:14:55 浏览: 181
好的,以下是一个使用`seasonal_decompose`函数进行时间序列分解的例子:
```python
import pandas as pd
import statsmodels.api as sm
# 创建一个时间序列
date_rng = pd.date_range(start='1/1/2020', end='12/31/2020', freq='D')
data = pd.Series(range(len(date_rng)), index=date_rng)
# 使用seasonal_decompose进行时间序列分解
decomposition = sm.tsa.seasonal_decompose(data, model='additive', period=7)
# 打印分解出来的三个部分
print(decomposition.trend)
print(decomposition.seasonal)
print(decomposition.resid)
```
上述代码将会分解出`data`这个时间序列的趋势、季节性和残差三个部分,并将它们分别打印出来。`seasonal_decompose`函数的第一个参数是要分解的时间序列,第二个参数`model`是指定分解模型,这里采用的是加法模型。第三个参数`period`是指定季节周期的长度,这里设为7表示一周。
相关问题
请帮我写一个季节性时间序列预测模型并对结果进行分析,举个简单例子
好的,我们以一个简单的例子来说明如何建立季节性时间序列预测模型,并对结果进行分析。假设我们有一份销售数据,包含了2015年1月至2020年12月每月的销售额数据。我们的目标是建立一个季节性时间序列预测模型,预测未来12个月(即2021年1月至2021年12月)的销售额。
首先,我们需要对数据进行可视化和探索性分析,以了解时间序列的基本特征和季节性。下面是一些常用的探索性分析方法:
1. 可视化时间序列数据,绘制时间序列图和季节图,观察时间序列是否具有明显的趋势和季节性;
2. 分析序列的自相关函数(ACF)和偏自相关函数(PACF),识别序列的自相关和季节性;
3. 进行序列的差分,识别序列的平稳性,并使用ADF检验确认序列是否平稳;
4. 根据探索性分析结果选择合适的季节性时间序列模型,如ARIMA、SARIMA等。
下面是一个简单的季节性时间序列预测模型的建立过程:
```python
import pandas as pd
import numpy as np
import statsmodels.api as sm
# 读取数据
data = pd.read_csv('sales.csv', parse_dates=['month'], index_col='month')
# 可视化时间序列数据
data.plot(figsize=(12, 6))
# 绘制季节图
from statsmodels.graphics.tsaplots import plot_seasonal_decompose
decomposition = sm.tsa.seasonal_decompose(data, model='additive')
fig = decomposition.plot()
fig.set_size_inches(12, 6)
# 分析序列的自相关函数(ACF)和偏自相关函数(PACF)
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
fig = plt.figure(figsize=(12, 8))
ax1 = fig.add_subplot(211)
fig = plot_acf(data, lags=40, ax=ax1)
ax2 = fig.add_subplot(212)
fig = plot_pacf(data, lags=40, ax=ax2)
# 进行序列的差分
diff = data.diff().dropna()
# 检验序列是否平稳
from statsmodels.tsa.stattools import adfuller
result = adfuller(diff)
print(result)
# 选择合适的季节性时间序列模型
model = sm.tsa.SARIMAX(data, order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
result = model.fit()
print(result.summary())
# 预测未来12个月的销售额
forecast = result.get_forecast(steps=12)
# 可视化预测结果
forecast_ci = forecast.conf_int()
ax = data.plot(label='observed')
forecast.predicted_mean.plot(ax=ax, label='Forecast', alpha=.7, figsize=(12, 6))
ax.fill_between(forecast_ci.index,
forecast_ci.iloc[:, 0],
forecast_ci.iloc[:, 1], color='k', alpha=.2)
ax.set_xlabel('Date')
ax.set_ylabel('Sales')
plt.legend()
plt.show()
```
上述代码中,我们使用了statsmodels库中的SARIMAX模型,选择了(1, 1, 1)和(1, 1, 1, 12)作为ARIMA模型和季节性参数,然后使用`result.get_forecast(steps=12)`进行未来12个月的销售额预测。最后,我们绘制了预测结果图,包括观测值、预测值和置信区间。
我们还可以对预测结果进行评价,如计算预测误差的均方误差(MSE)、均方根误差(RMSE)、平均绝对误差(MAE)等指标,并绘制误差图和残差图,以检验模型的拟合效果和预测准确性。
用python写一个季度性时间序列预测模型并对结果进行分析,举个简单例子,给出详细注释
好的,我可以为您解答。这是一个非常广泛的问题,因此我将简要介绍一些步骤,并提供一些示例代码和注释。
首先,我们需要导入一些必要的库,例如 pandas、numpy、matplotlib、statsmodels 和 sklearn:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from sklearn.metrics import mean_squared_error
```
接下来,我们需要准备好我们的数据,以便可以应用季节性时间序列分析。我们可以使用 pandas 来读取数据集,并将日期列设置为索引。
```python
# 读取数据集
df = pd.read_csv('data.csv')
# 将日期列设置为索引
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
```
现在,我们可以使用 pandas 中的 resample() 函数将数据从日级别转换为季度级别。这里的“Q”代表季度,可以使用不同的字母来表示不同的时间间隔。
```python
# 将数据从日级别转换为季度级别
df_q = df.resample('Q').sum()
```
然后,我们可以使用 pandas 中的 shift() 函数来创建滞后的版本(即历史数据)。
```python
# 创建滞后3次的版本
df_q['sales_lag3'] = df_q['sales'].shift(3)
```
接下来,我们可以使用 statsmodels 中的 seasonal_decompose() 函数来分解数据,以便查看趋势、季节性和残差成分。
```python
# 分解数据
decomposition = sm.tsa.seasonal_decompose(df_q['sales'], model='additive')
# 绘制分解图
fig, (ax1, ax2, ax3, ax4) = plt.subplots(4, 1, figsize=(10, 8))
ax1.plot(df_q['sales'], label='Original')
ax1.legend(loc='best')
ax2.plot(decomposition.trend, label='Trend')
ax2.legend(loc='best')
ax3.plot(decomposition.seasonal, label='Seasonality')
ax3.legend(loc='best')
ax4.plot(decomposition.resid, label='Residuals')
ax4.legend(loc='best')
plt.tight_layout()
```
现在,我们可以使用 statsmodels 中的 SARIMAX() 函数来训练季节性自回归移动平均模型,并使用 fit() 函数拟合模型。
```python
# 定义模型
model = sm.tsa.statespace.SARIMAX(df_q['sales'], order=(1, 1, 1), seasonal_order=(1, 1, 1, 4))
# 拟合模型
results = model.fit()
```
最后,我们可以使用模型进行预测,并使用 mean_squared_error() 函数计算预测和实际值之间的均方根误差。
```python
# 预测未来8个季度
forecast = results.predict(start=len(df_q), end=len(df_q)+7, dynamic=False)
# 绘制预测结果
plt.plot(df_q['sales'], label='Actual')
plt.plot(forecast, label='Forecast')
plt.legend(loc='best')
plt.show()
# 计算均方根误差
mse = mean_squared_error(df_q['sales'][-8:], forecast)
print('均方根误差: ', mse)
```
这就是一个简单的季节性时间序列预测模型的例子。请注意,这只是一个基础模型,您可以根据需要进行更复杂的调整和改进。
阅读全文