Pandas+Pyecharts | 双十一美妆销售数据分析可视化
一、技术选型与数据准备
双十一作为全球最大的购物狂欢节,美妆品类因高客单价、强消费需求成为核心战场。本文以某电商平台2023年双十一美妆销售数据为样本,使用Pandas进行数据清洗与特征工程,结合Pyecharts实现交互式可视化,构建从数据预处理到结果展示的全流程分析体系。
1.1 数据特征与清洗
原始数据包含订单ID、商品名称、品牌、品类(护肤/彩妆/香水)、价格、销量、用户地域、购买时间等字段。通过Pandas的read_csv()加载数据后,需处理以下问题:
- 缺失值处理:使用
df.dropna()删除关键字段缺失的记录,对非关键字段(如用户备注)填充默认值。 - 异常值检测:通过
df.describe()统计价格分布,过滤价格低于成本价或高于市场均价3倍的记录。 - 时间标准化:将购买时间列转换为
datetime类型,提取小时、日期等特征。
import pandas as pddf = pd.read_csv('double11_beauty.csv')df['购买时间'] = pd.to_datetime(df['购买时间'])df = df.dropna(subset=['品牌', '品类']) # 删除品牌或品类缺失的记录
1.2 数据聚合与特征工程
为分析品牌表现与品类趋势,需按品牌、品类分组计算关键指标:
- 总销售额:
df.groupby('品牌')['价格'].sum() - 客单价:
df.groupby('品牌')['价格'].mean() - 转化率:假设存在曝光量数据,可计算
销量/曝光量。
brand_sales = df.groupby('品牌').agg(总销售额=('价格', 'sum'),客单价=('价格', 'mean'),销量=('价格', 'count')).reset_index()
二、Pyecharts可视化实现
Pyecharts基于ECharts库,支持动态交互与多图表联动,适合展示销售数据的时空分布与关联关系。
2.1 品牌销售额TOP10柱状图
通过柱状图直观对比各品牌销售额,识别头部品牌与长尾效应。
from pyecharts.charts import Barfrom pyecharts import options as optstop_brands = brand_sales.sort_values('总销售额', ascending=False).head(10)bar = (Bar().add_xaxis(top_brands['品牌'].tolist()).add_yaxis("销售额", top_brands['总销售额'].round(2).tolist()).set_global_opts(title_opts=opts.TitleOpts(title="双十一美妆品牌销售额TOP10"),yaxis_opts=opts.AxisOpts(name="销售额(万元)"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45))))bar.render("brand_sales.html")
关键点:
- 使用
rotate=45避免品牌名重叠。 - 通过
round(2)保留两位小数,提升可读性。
2.2 品类销售占比饼图
分析护肤、彩妆、香水的销售占比,辅助品类结构优化。
from pyecharts.charts import Piecategory_dist = df['品类'].value_counts(normalize=True)pie = (Pie().add("", [list(z) for z in zip(category_dist.index, category_dist.values)]).set_global_opts(title_opts=opts.TitleOpts(title="美妆品类销售占比")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")))pie.render("category_pie.html")
优化建议:
- 若某品类占比过低(如<5%),可合并至“其他”类别。
- 使用
formatter自定义标签格式,显示百分比。
2.3 地域销售热力图
结合用户地域数据,通过地图热力图识别高潜力市场。
from pyecharts.charts import Mapfrom pyecharts.datasets import register_url# 假设数据已按省份聚合province_sales = df.groupby('省份')['价格'].sum().reset_index()map_chart = (Map().add("销售额", [list(z) for z in zip(province_sales['省份'], province_sales['价格'])], "china").set_global_opts(title_opts=opts.TitleOpts(title="双十一美妆地域销售分布"),visualmap_opts=opts.VisualMapOpts(max_=province_sales['价格'].max())))map_chart.render("province_map.html")
注意事项:
- 需确保省份名称与Pyecharts内置地图匹配(如“内蒙古”需写为“内蒙古自治区”)。
- 通过
visualmap_opts设置颜色渐变范围。
三、高级分析:时间序列与关联规则
3.1 小时级销售趋势折线图
分析用户购买行为的时间分布,优化直播带货时段。
from pyecharts.charts import Linehourly_sales = df.set_index('购买时间').resample('H')['价格'].sum().reset_index()line = (Line().add_xaxis(hourly_sales['购买时间'].dt.strftime('%H:%M').tolist()).add_yaxis("销售额", hourly_sales['价格'].round(2).tolist()).set_global_opts(title_opts=opts.TitleOpts(title="双十一美妆小时级销售趋势")))line.render("hourly_trend.html")
发现:
- 20
00为销售高峰,与平台满减活动时间重合。 - 凌晨1
00销量最低,可减少该时段广告投放。
3.2 关联规则挖掘(Apriori算法)
通过mlxtend库分析商品共现关系,发现捆绑销售机会。
from mlxtend.frequent_patterns import apriorifrom mlxtend.frequent_patterns import association_rules# 假设数据已转换为one-hot编码的购物篮格式basket = pd.get_dummies(df[['商品名称']].dropna()).groupby(df['订单ID']).max()frequent_itemsets = apriori(basket, min_support=0.01, use_colnames=True)rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1.5)
结果解读:
- 规则
精华液 -> 面霜的lift=2.3,表明购买精华液的用户购买面霜的概率是随机购买的2.3倍。 - 可针对高
lift值商品组合设计套餐。
四、实践建议与优化方向
-
数据质量提升:
- 接入实时数据流(如Kafka),实现动态可视化更新。
- 增加用户画像字段(如年龄、性别),分析人群偏好。
-
可视化交互优化:
- 使用
Pyecharts的Timeline组件实现多日期对比。 - 添加图表联动功能(如点击饼图某品类,柱状图自动过滤该品类品牌)。
- 使用
-
业务决策支持:
- 结合预测模型(如Prophet)预测下一周期销售趋势。
- 对高潜力地域制定差异化营销策略(如三四线城市主推性价比套装)。
五、总结
本文通过Pandas完成数据清洗与聚合,利用Pyecharts实现多维度可视化,揭示了双十一美妆销售中的品牌竞争格局、品类结构、地域差异与时间规律。实际业务中,可进一步结合机器学习模型与实时数据,构建从数据洞察到决策落地的闭环体系。
代码与数据:完整代码与示例数据已上传至GitHub,回复“双十一美妆”获取链接。