本文将通过Python实现一个完整的蔬菜销售数据分析项目,涵盖数据生成、清洗、分析及可视化全流程。我们将利用模拟数据生成技术创建90天的销售记录,通过Pandas进行数据处理,结合Matplotlib和Seaborn实现多样化的可视化图表,并最终生成动态交互报告。
一、数据生成:模拟真实销售场景
为了模拟真实的蔬菜销售数据,我们设计了包含10种蔬菜(白菜、土豆、西红柿等)的90天销售记录。数据生成逻辑包含以下关键要素:
1、 价格波动模型
base_price = {'白菜': 2、5, 、、、}
price_fluctuation = 1 + (np、random、random() * 0、3 - 0、15)
price = round(base_price * price_fluctuation, 2)
-
基础价格基于市场均价设定
-
添加±15%的随机波动模拟市场变化
2、 销量生成机制
weekday = date、weekday()
day_factor = 1、3 if weekday >=5 else 1、0 # 周末销量提升30%
seasonal_factor = {'黄瓜':1、3, 、、、} # 夏季蔬菜销量加成
quantity = int(base_quantity * day_factor * seasonal_factor)
-
结合周内波动和季节性因素
-
使用正态分布生成基础销量(μ=50, σ=10)
3、 利润计算逻辑
sales = price * quantity
cost_rate = np、random、uniform(0、6, 0、7)
profit = sales * (1 - cost_rate)
-
成本率设置为60%-70%的随机值
-
包含销售额、成本、利润等完整财务指标
最终生成的DataFrame包含以下字段:
字段名 | 类型 | 说明 |
---|---|---|
日期 | datetime | 销售日期 |
蔬菜 | string | 品种名称 |
价格(元/kg) | float | 当日售价 |
销量(kg) | int | 销售重量 |
销售额(元) | float | 当日总销售额 |
成本(元) | float | 销售成本 |
利润(元) | float | 销售利润 |
利润率 | float | 利润占销售额的百分比 |
二、数据分析:挖掘关键业务指标
1、 基础数据检查
print(df、info())
print(df、describe())
-
数据完整性检查:90天×10种蔬菜=900条记录
-
数值型字段统计:价格均值3、9元,销量均值50kg
2、 品类销售分析
vegetable_summary = df、groupby('蔬菜')、agg({
'销量(kg)': 'sum',
'销售额(元)': 'sum',
'利润(元)': 'sum',
'价格(元/kg)': 'mean'
})、sort_values('销售额(元)', ascending=False)
-
发现TOP3品类:西红柿(15、8%)、黄瓜(14、2%)、土豆(13、5%)
-
利润率排名:青椒(38、7%)、生菜(36、2%)、茄子(35、5%)
3、 时间序列分析
date_summary = df、groupby('日期')、agg({
'销量(kg)': 'sum',
'销售额(元)': 'sum',
'利润(元)': 'sum'
})
-
周度分析显示周末销量提升20-30%
-
8月中旬(第33周)出现销售高峰
4、 利润构成分析
df['利润率'] = df['利润(元)'] / df['销售额(元)'] * 100
-
整体平均利润率:32、4%
-
发现成本敏感型品类:胡萝卜(利润率28、3%)
三、可视化设计:多维度数据呈现
我们设计了9种可视化图表,覆盖静态分析与动态交互:
1、 动态热力图(每周销售额)
def animate_heatmap(i):
pivot_df = df、pivot_table(index='周', columns='蔬菜', values='销售额(元)')、iloc[:i+1, :]
sns、heatmap(pivot_df, cmap='plasma')
-
使用plasma色阶突出数据变化
-
动态展示销售趋势演变(周度累计)
2、 3D关系图(价格-销量-利润)
ax = fig、add_subplot(111, projection='3d')
for veg in df['蔬菜']、unique():
ax、scatter(avg_price, avg_quantity, avg_profit)
-
发现高利润区:高价格×高销量(如青椒)
-
识别价格敏感品类(如白菜)
3、 动态条形图(周销量排名)
def update_bar_rank(frame):
week_data = df[df['周'] == frame]、groupby('蔬菜')['销量(kg)']、sum()
plt、barh(week_data、index, week_data、values)
-
展示品类排名的动态变化
-
发现黄瓜在第32周销量激增现象
4、 雷达图(综合指标评价)
categories = ['销量', '销售额', '利润', '利润率']
angles = [n / len(categories) * 2 * np、pi for n in range(len(categories))]
-
标准化处理各指标(0-1)
-
综合评分显示:西红柿综合表现最佳
5、 瀑布图(利润构成)
values = [avg_price, -avg_cost, avg_profit]
colors = ['#72B7B2', '#F67E4B', '#54A24B']
plt、bar(indices, values, color=colors)
-
清晰展示售价→成本→利润的转化路径
-
发现西红柿的成本占比达68、5%
四、动态报告生成:自动化文档输出
我们使用python-docx库生成结构化报告,包含: 1、 数据字典:字段说明表格 2、 关键指标:总销售额、利润率等核心数据 3、 可视化嵌入:自动插入静态图表 4、 动态图表指引:说明GIF动画文件位置
doc、add_picture('sales_pie_chart、png', width=Inches(6))
doc、add_paragraph("图4、1: 各蔬菜销售额占比饼图")、alignment = WD_ALIGN_PARAGRAPH、CENTER
五、技术实现要点
1、 中文支持
matplotlib、rcParams['font、sans-serif'] = ['SimHei']
matplotlib、rcParams['axes、unicode_minus'] = False
-
解决中文字符显示问题
-
正确显示负号
2、 性能优化
-
数据生成使用列表推导式而非循环
-
动态图表限制帧数(min(30, len(dates)))
-
使用Pandas的groupby进行高效聚合
3、 颜色管理
vegetable_colors = dict(zip(
df['蔬菜']、unique(),
plt、cm、tab10(np、linspace(0, 1, len(df['蔬菜']、unique())))
))
-
为每个品类分配唯一颜色
-
使用tab10色盘保证可读性
六、业务价值与扩展方向
1、 运营建议
-
重点推广高利润品类(青椒、生菜)
-
优化周末库存配置(增加30%)
-
建立价格弹性模型(如黄瓜降价测试)
2、 技术扩展
-
增加实时数据接口
-
引入机器学习预测销量
-
开发交互式仪表盘(Plotly Dash)
3、 数据应用场景
-
供应链优化
-
定价策略制定
-
库存管理
-
促销活动规划
-
七、源代码
代码见在这个文章的末尾:源码篇:python生成《蔬菜店销售数据分析报告》案例
链接地址:
https://mp.weixin.qq.com/s/Sce3B8L96mLs_xd4HQL4gg