day 58 python打卡
作业:对太阳黑子数量数据集用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'] = Falsefrom 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()
@浙大疏锦行