用Python的statsmodels库做STL分解:航空客流数据实战指南
当你面对一张密密麻麻的航空客流数据表时,是否曾好奇这些数字背后隐藏着怎样的规律?每个月客流量的起伏是纯属偶然,还是暗含着某种周期性模式?今天,我们将用Python中的statsmodels库,像拆解钟表一样剖析这些数据,揭示其中的季节规律、长期趋势和随机波动。
1. 准备工作与环境搭建
在开始STL分解之前,我们需要确保工具就位。假设你已经安装了Python 3.7或更高版本,接下来通过pip安装必要的库:
bash复制pip install statsmodels pandas matplotlib numpy
经典的航空乘客数据集(AirPassengers.csv)可以从多个数据源获取,这里我们使用statsmodels自带的示例数据集:
python复制import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.datasets import get_rdataset
# 获取航空乘客数据
data = get_rdataset("AirPassengers")
df = data.data
df['Month'] = pd.to_datetime(df['time'])
df.set_index('Month', inplace=True)
提示:如果你的网络环境无法直接获取该数据集,可以手动下载CSV文件并用pd.read_csv()加载。
让我们先看一眼原始数据的样貌:
python复制plt.figure(figsize=(12, 6))
plt.plot(df.index, df['value'], label='原始数据')
plt.title('1949-1960年国际航空乘客量')
plt.xlabel('日期')
plt.ylabel('乘客数(千)')
plt.grid(True)
plt.legend()
plt.show()
这段代码会输出一条明显呈上升趋势并带有周期性波动的曲线。仔细观察,你会发现每年夏季(6-8月)都会出现一个客流高峰,这正是我们要分解的季节性成分。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. STL分解核心参数详解
S
