打卡day57

发布于:2025-06-30 ⋅ 阅读:(20) ⋅ 点赞:(0)

洗发水销售数据集的性质分析

数据加载与初步观察

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# 加载数据
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/shampoo.csv"
data = pd.read_csv(url, header=0, parse_dates=[0], index_col=0,)
print(data.head())

数据可视化

plt.figure(figsize=(10, 4))
plt.plot(data, marker='o', linestyle='-', color='b')
plt.title("Shampoo Sales Time Series")
plt.xlabel("Month")
plt.ylabel("Sales")
plt.grid(True)
plt.show()

在这里插入图片描述

# 2. 诊断原始数据
plt.figure(figsize=(12, 6))

plt.plot(data)
plt.title('原始数据(有明显趋势)')

在这里插入图片描述

# ADF检验
adf_result_original = adfuller(data)
print(f'原始数据的ADF检验结果:')
print(f'  ADF Statistic: {adf_result_original[0]}')
print(f'  p-value: {adf_result_original[1]}') # p-value会非常大,说明是非平稳的
# 3. 进行一阶差分治疗
data_diff = data.diff().dropna() # .diff()进行差分, .dropna()移除第一个NaN值


plt.plot(data_diff)
plt.title('一阶差分后的数据')
plt.tight_layout()
plt.show()

# 4. 诊断“治疗后”的数据
adf_result_diff = adfuller(data_diff)
print(f'一阶差分后数据的ADF检验结果:')
print(f'  ADF Statistic: {adf_result_diff[0]}')
print(f'  p-value: {adf_result_diff[1]}') # p-value会变得非常小,说明数据变平稳了

在这里插入图片描述

# 3. 进行季节性差分(周期s=12)
seasonal_data_diff = data.diff(periods=12).dropna()

plt.subplot(212)
plt.plot(seasonal_data_diff)
plt.title('季节性差分后 (s=12) 的数据')
plt.tight_layout()
plt.show()

# 4. 检查差分后的平稳性
# 注意:原始数据因为有趋势,肯定不平稳。季节性差分通常也能消除一部分趋势。
adf_result_original = adfuller(data)
print(f'原始季节性数据的p-value: {adf_result_original[1]}')

adf_result_seasonal_diff = adfuller(seasonal_data_diff)
print(f'季节性差分后数据的p-value: {adf_result_seasonal_diff[1]}')

在这里插入图片描述
趋势成分:销售额的长期增长趋势明显。
季节性成分:存在轻微的周期性波动(如每年某些月份的销售高峰)。
残差:噪声较小,说明数据规律性较强。


网站公告

今日签到

点亮在社区的每一天
去签到