为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。
(以下练习题来源于《统计学—基于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月;后面年份的零售总额明显高于前面年份的零售总额,表明存在线性上升趋势。
都读到这里了,不妨关注、点赞一下吧!