时间序列详解——以中美汇率为例
1.基本步骤 读数据 插补缺失值 ADF检验平稳性 绘制原始时间序列图 季节性分解时间序列
import pandas as pd
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.statespace.sarimax import SARIMAX
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.stats.diagnostic import acorr_ljungbox
from statsmodels.stats.stattools import jarque_bera
# 设置matplotlib的字体为支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 黑体
plt.rcParams['axes.unicode_minus'] = False # 正确显示负号
# 加载数据
file_path = r'C:\Users\28377\Desktop\2024-Python 张富\混沌与模糊\时间序列分析\美元兑人民币汇率.xlsx'
df = pd.read_excel(file_path)
# 设置日期索引
df['日期'] = pd.to_datetime(df['日期'])
df.set_index('日期', inplace=True)
# 重采样为日频率并填充缺失值
df = df.resample('D').mean().ffill()
# 进行ADF检验判断平稳性
result = adfuller(df['美元'])
print("ADF统计量:", result[0])
print("p值:", result[1])
if result[1] < 0.05:
print("数据是平稳的")
else:
print("数据不是平稳的")
# 绘制原始时间序列图
plt.figure(figsize=(10, 6))
plt.plot(df.index, df['美元'], color='#1f77b4', linewidth=1)
plt.title('美元兑人民币汇率')
plt.xlabel('日期')
plt.ylabel('汇率')
plt.grid(axis='y', alpha=0.75)
plt.tight_layout()
plt.show()
# 对时间序列进行季节性分解
res = seasonal_decompose(df['美元'], model='additive')
# 绘制季节性分解的各个分量
fig, axes = plt.subplots(4, 1, figsize=(10, 12))
res.observed.plot(ax=axes[0])
axes[0].set_title('原始时间序列')
res.trend.plot(ax=axes[1], color='red')
axes[1].set_title('趋势成分')
res.seasonal.plot(ax=axes[2], color='green')
axes[2].set_title('季节性成分')
res.resid.plot(ax=axes[3], color='blue')
axes[3].set_title('残差成分')
plt.subplots_adjust(hspace=0.7)
plt.tight_layout()
plt.show()
# 一阶差分
df_diff = df['美元'].diff().dropna()
# 对差分后的时间序列进行ADF检验
result_diff = adfuller(df_diff)
print("差分后的ADF统计量:", result_diff[0])
print("差分后的p值:", result_diff[1])
if result_diff[1] < 0.05:
print("差分后的数据是平稳的")
else:
print("差分后的数据不是平稳的")
# 可视化差分后的时间序列
plt.figure(figsize=(10, 6))
plt.plot(df_diff.index, df_diff, color='#1f77b4', linewidth=1)
plt.title('一阶差分后的人民币汇率中间价')
plt.xlabel('日期')
plt.ylabel('美元')
plt.grid(axis='y', alpha=0.75)
plt.show()
版权声明:
作者:夜阑
链接:http://yelan.xyz/index.php/2024/04/24/%e6%97%b6%e9%97%b4%e5%ba%8f%e5%88%97%e8%af%a6%e8%a7%a3-%e4%bb%a5%e4%b8%ad%e7%be%8e%e6%b1%87%e7%8e%87%e4%b8%ba%e4%be%8b/
来源:夜阑的小站
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
共有 0 条评论