1. 引言
2. 理解时间序列数据
3. 数据准备
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 创建日期范围
date_rng = pd.date_range(start='2022-01-01', end='2023-12-31', freq='D')
# 创建销售数据
sales_data = np.sin(np.arange(len(date_rng))) * 100 + 200 + np.random.normal(0, 10, len(date_rng))
# 构建数据框
sales_df = pd.DataFrame(index=date_rng, data={'销售额': sales_data})
# 可视化销售数据
plt.figure(figsize=(10, 6))
plt.plot(sales_df.index, sales_df['销售额'], label='销售额')
plt.title('销售数据示例')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.legend()
plt.show()
4. 趋势分解
可以使用STL分解(Seasonal and Trend decomposition using Loess)。Statsmodels库提供了STL分解的实现。
from statsmodels.tsa.seasonal import STL
# 进行STL分解
stl = STL(sales_df['销售额'], seasonal=7)
result = stl.fit()
# 调整趋势分解图表的大小
fig = result.plot()
fig.set_size_inches(12, 8) # 调整图表大小
plt.show()
5. 季节性分析
# 可视化季节性分量
seasonal_component = result.seasonal
plt.figure(figsize=(10, 4))
plt.plot(seasonal_component.index, seasonal_component.values, label='季节性分量')
plt.title('季节性分量')
plt.xlabel('日期')
plt.ylabel('季节性分量')
plt.legend()
plt.show()
6. 实际应用
7. 使用分解数据进行预测
from statsmodels.tsa.arima.model import ARIMA
# 拟合ARIMA模型
model = ARIMA(sales_df['销售额'], order=(2, 1, 2)) # 这里的参数是经验值,需要根据具体数据进行调整
model_fit = model.fit()
# 进行未来一个月的销售额预测
forecast = model_fit.forecast(steps=30) # 预测未来30天的销售额
# 可视化预测结果
plt.figure(figsize=(10, 6))
plt.plot(sales_df.index, sales_df['销售额'], label='历史销售额')
plt.plot(pd.date_range(start='2023-12-31', periods=30, freq='D'), forecast, label='预测销售额')
plt.title('未来一个月销售额预测')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.legend()
plt.show()