如何使用Python提取CSV指定列并基于门店维度绘制沃尔玛销售图表
门店维度销售图表实现方案
你现有的代码已经完成了按门店拆分数据集的逻辑,后续可以直接基于拆分后的数据集绘制趋势图,以下是两种常用的实现方式:
1. 基础代码修正
你现有代码开头的for weekly sales against Date是注释内容,需要添加#修正为合法注释,避免运行报错。
2. 单图多折线展示所有门店销售趋势
适合整体对比不同门店的销售额差异:
import matplotlib.pyplot as plt import numpy as np import pandas as pd %matplotlib inline # 可选配置:解决图表中文显示乱码问题 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 你已有的拆分逻辑 a = [] for stn in range(1,46): a.append(walmart[walmart.Store == stn]) # 绘图逻辑 plt.figure(figsize=(16,9)) for idx, store_data in enumerate(a): # 按日期排序避免折线错乱 sorted_data = store_data.sort_values('Date') plt.plot(sorted_data['Date'], sorted_data['Weekly_Sales'], label=f'门店{idx+1}') plt.title('各门店周销售额趋势对比') plt.xlabel('日期') plt.ylabel('周销售额') # 图例放在画布外避免遮挡数据 plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left') plt.tight_layout() plt.show()
3. 分面绘制单门店独立趋势图
适合查看单个门店的销售波动规律,避免多折线叠加过于拥挤:
# 用groupby替代手动循环拆分,代码更简洁 plt.figure(figsize=(25,30)) # 45家门店分为9行5列排布 for store_id, store_data in walmart.groupby('Store'): plt.subplot(9,5,store_id) sorted_data = store_data.sort_values('Date') plt.plot(sorted_data['Date'], sorted_data['Weekly_Sales'], color='#1f77b4') plt.title(f'门店{store_id}周销售额趋势') plt.xticks(rotation=45) plt.tight_layout() plt.show()
拓展优化建议
- 若需要突出节假日销售特征,可以基于
Holiday_Flag字段在对应日期位置添加高亮标记 - 若需要对比不同门店的销售额分布区间,可以改用箱线图绘制,更直观展示中位数、极值等统计特征
内容的提问来源于stack exchange,提问作者Alireza Ghaffarian
相关产品推荐
相关产品推荐

