作业:对太阳黑子数量数据集用arima完成流程
1.导入原始数据,并可视化
# 导入必要的库
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima.model import ARIMA
# 设置matplotlib以正确显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
from statsmodels.datasets import sunspots
df_sun = sunspots.load_pandas().data['SUNACTIVITY']
print("--- 原始数据预览 ---")
print(df_sun.head())
# 绘制时序图
plt.figure(figsize=(14, 7))
plt.plot(df_sun)
plt.title('太阳黑子数量数量')
plt.xlabel('日期')
plt.ylabel('数量')
plt.show()
2.ADF检验,判断平稳性
# ADF检验,判断平稳性
def adf_test(timeseries):
print('--- ADF检验结果 ---')
# H0: 序列非平稳; H1: 序列平稳
result = adfuller(timeseries)
print(f'ADF Statistic: {result[0]}')
print(f'p-value: {result[1]}') # 重点关注这个值
if result[1] <= 0.05:
print("结论: 成功拒绝原假设,序列是平稳的。")
else:
print("结论: 未能拒绝原假设,序列是非平稳的。")
adf_test(df_sun)
3.绘制ACF和PCAF
# 因为数据是平稳的,我们直接对原始数据绘制ACF和PACF
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8))
plot_acf(ts_data, ax=ax1, lags=40)
ax1.set_title('自相关函数 (ACF)')
plot_pacf(ts_data, ax=ax2, lags=40)
ax2.set_title('偏自相关函数 (PACF)')
plt.tight_layout()
plt.show()