本文将通过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