Python统计实战:时间序列分析之绘制观测值图和按年折叠图

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。

(以下练习题来源于《统计学—基于Python》。请在Q群455547227下载原始数据。


练习题

下表是某地区2018-2023年各月份的社会消费品零售总额(单位:亿元)。

(1)绘制观测值图和按年折叠图,观察数据的变化特征和变化模式。

(2)使用Winters指数平滑法预测2024年各月份的社会消费品零售总额,并绘制预测图和预测的残差图,分析预测的效果。


本期我们完成(1)题,绘制观测值图和按年折叠图。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

plt.rcParams['font.sans-serif'] = ['Songti SC']
plt.rcParams['axes.unicode_minus'] = False

exercise11_2 = pd.read_csv('exercise11_2.csv')

df = pd.melt(exercise11_2, id_vars=['月份'], var_name='年份', value_name='零售总额')  # 融合数据
df['日期'] = df['年份'].astype(str) + '-' + df['月份'].astype(str)  # 添加带有年份和月份的日期列
df['日期'] = pd.to_datetime(df['日期'].map(lambda x: x.replace("年", "-").replace("月", "-01")))  # 创建时间序列

df.index = df['日期']

fig, axes = plt.subplots(1, 2, figsize=(11, 4.5))

# (a) 零售总额的折线图
axes[0].plot(df['零售总额'], marker='o', linewidth=1, markersize=4)
axes[0].set_xlabel('时间')
axes[0].set_ylabel('零售总额')
axes[0].set_title('(a)零售总额的折线图', size=15)
for i in range(2019, 2024):
    axes[0].vlines(pd.to_datetime(str(i) + '-01-01'), 50, 1800, linestyles='--', linewidth=0.6, color='grey')

# (b) 零售总额的按年折叠图
sns.lineplot(x='月份', y='零售总额', hue='年份', data=df, ax=axes[1], 
             marker='o', markersize=5, linewidth=1)
axes[1].set_title('(b)零售总额的按年折叠图', size=15)

plt.tight_layout()
plt.show()

分析:

左图显示,2018-2023年各年社会消费品零售总额的走势有明显的季节成分和线性趋势。

右图显示,各年社会消费品零售总额的折线没有交叉,形状大致相同,表明存在季节变化;零售总额的淡季为2月、3月、4月,旺季为10月、11月、12月;后面年份的零售总额明显高于前面年份的零售总额,表明存在线性上升趋势。


都读到这里了,不妨关注、点赞一下吧!

  • 23
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值