当前位置: 首页 > news >正文

数据分析案例(2)

电商双11美妆数据分析

一、data.groupby('店名').sale_count.sum() 按店名对销售数量进行分组求和。

data.groupby('店名').sale_count.sum()[data.groupby('店名').sale_count.sum() == 0].index 筛选出总销量为0的店铺名称索引。

data[data['店名']].isin(...) 找出原始数据中店名在上述总销量为0的店铺名称列表中的行。

最后 data.drop(index = ...) 删除这些行,得到处理后的数据 data1。

库导入与图形初始化

import seaborn as sns:导入 seaborn 库,用于创建美观的统计图形。

plt.figure(figsize = (16,12)):创建一个 matplotlib 图形对象,设置图形大小为宽度16单位,高度12单位。

plt.subplot(2,1,1):创建一个2行1列的子图布局,并定位到第1个子图,后续在此子图绘制各店铺各大类销售量图。

plt.tick_params(labelsize = 10):设置子图刻度标签的字体大小为10。

绘制销售量柱状图

sns.barplot(x = '店名', y ='sale_count', hue ='main_type', estimator=np.sum, data = data1, ci = 0):

x = '店名':指定横坐标为店铺名称。

y ='sale_count':指定纵坐标为销售数量。

hue ='main_type':按商品大类区分柱子颜色。

estimator=np.sum:对每个 x(店名)和 hue(大类)组合下的 y(销售数量)进行求和计算。

data = data1:指定使用的数据为之前处理过的 data1。

ci = 0:不显示置信区间。

后续 plt.title、plt.ylabel 分别设置子图标题和纵轴标签及字体大小。

 绘制销售额柱状图

plt.subplot(2,1,2):定位到2行1列子图布局的第2个子图,用于绘制各店铺各大类销售额图。

下面的 plt.tick_params、sns.barplot、plt.title、plt.ylabel 与绘制销售量图类似,只是 y 轴数据变为 销售额 。

plt.tight_layout():自动调整子图间距,防止标签等重叠。

 图形初始化与子图设置

plt.figure(figsize = (16,12)):创建一个 matplotlib 图形对象,设置其大小为宽16单位、高12单位 ,为后续绘图提供空间。

plt.subplot(2,1,1):将图形划分为2行1列的子图布局,并定位到第1个子图位置,准备绘制各店铺中小类销售量的图表。

plt.tick_params(labelsize = 10):设置子图刻度标签的字体大小为10,使刻度标签显示更合适。

绘制各店铺中小类销售量柱状图

sns.barplot(x = '店名', y ='sale_count', hue ='sub_type', estimator=np.sum, data = data1, ci = 0):

x = '店名':指定横坐标为店铺名称,用于区分不同店铺。

y ='sale_count':指定纵坐标为销售数量,展示每个店铺下不同小类的销售数量情况。

hue ='sub_type':依据商品小类区分柱子颜色,便于直观区分同一店铺下不同小类商品的销售情况。

estimator=np.sum:表示针对每个 x(店名)和 hue(小类)组合,对 y(销售数量)进行求和计算,统计每个店铺下各小类的总销售数量。

data = data1:指定使用经过前期处理(去除总销量为0的店铺等操作)的数据 data1 进行绘图。

ci = 0:不显示置信区间,使图表更简洁。

plt.title('各店铺中各小类的销售量', fontsize = 20):设置子图标题为“各店铺中各小类的销售量”,字体大小为20,突出图表主题。

plt.ylabel('销量', fontsize = 15):设置纵轴标签为“销量”,字体大小为15,明确纵轴代表的含义。

绘制各店铺中小类销售额柱状图

plt.subplot(2,1,2):定位到2行1列子图布局中的第2个子图,为绘制销售额图表做准备。

后续的 plt.tick_params、sns.barplot、plt.title、plt.ylabel 操作与绘制销售量图表类似,只是 y 轴数据变为“销售额” ,用于展示各店铺下不同小类商品的销售金额情况。

plt.tight_layout():自动调整子图间距,防止子图之间的标签、标题等元素相互重叠,使整个图形展示更美观、清晰。

事实上可以看出相宜本草在面霜、乳液、精华、补水、化妆水、眼部护理以及防晒类中都是销量最高的。美宝莲在口红、眼部彩妆也都是卖的最好的。而妮维雅在清洁类中一骑绝尘。在这里我们就可以用上之前提取出的新特征-是否男性专用。因为清洁类显然是有男性市场的。

二、关于性别

  1. 设置图形大小

划分子图布局

子图绘制

男士的销量基本来自于清洁类,其次是补水类。而这两类正是总销量中占比最高的两类。

非男士专用中,补水类成为了销量最高的类别,清洁类降到了第二位。

男士专用的销量以及销售额占比都比较低。

显然,在没有区分性别的情况下,由于清洁类是男性女性通用,所以占得销量最高是理所应当的。而非男士专用中,女性消费者较多,所以补水类一跃成为最高销量。尽管就整个销量而言,男士专用的占比不高,但是这也说明男性市场是一个值得发展急需拓宽的点。如果增加更多关于男性护肤品的推广,有可能会吸引更多的男性消费者从而增加销量。所以进一步分析,各个店铺的男性专用商品的销量。

2.

数据筛选

male_data = data1.loc[data1['是否男士专用'] == '是']:从经过前期处理的数据 data1 中筛选出“是否男士专用” 这一列值为“是” 的数据,即只保留男士专用商品的数据,存储在 male_data 中。

图形绘制

plt.figure(figsize = (12,8)):创建一个 matplotlib 图形对象,设置图形大小为宽度12单位,高度8单位。

sns.barplot(x = '店名', y ='sale_count', hue ='main_type', estimator=np.sum, data = male_data, ci = 0):

x = '店名':指定横坐标为店铺名称,用于展示不同店铺的情况。

y ='sale_count':指定纵坐标为销售数量,体现各店铺男士专用商品的销售数量。

hue ='main_type':按商品大类区分柱子颜色,便于观察各店铺中不同大类男士专用商品的销售情况。

estimator=np.sum:对每个店铺和大类组合下的销售数量进行求和计算。

data = male_data:使用筛选出的男士专用商品数据 male_data 进行绘图。

ci = 0:不显示置信区间,使图表更简洁。

plt.title('各店男士专用商品销量', fontsize = 15):设置图表标题为“各店男士专用商品销量”,字体大小为15。

plt.ylabel('销量', fontsize = 10):设置纵轴标签为“销量”,字体大小为10。

plt.tight_layout():自动调整子图间距,防止图表元素重叠,使图表展示更美观。

图像初始化与子图设置

绘制男士专用销量图

绘制非男士专用销量图

  1. 关于时间

导入模块与图形初始化

from datetime import datetime:从 datetime 模块中导入 datetime 类,用于处理日期和时间相关操作。

plt.figure(figsize = (12,12)):创建一个 matplotlib 图形对象,设置图形大小为宽度12单位、高度12单位。

计算每日销量并绘图

数据聚合与日期格式转换

sale_day=data.groupby('update_time').sale_count.sum():按 update_time(可能是记录销售数据的时间字段 )对数据进行分组,并对每组的销售数量(sale_count)求和,得到每天的销售总量。

sale_day.index = [datetime.strptime(i, '%Y/%m/%d') for i in sale_day.index]:datetime.strptime() 函数用于将字符串类型的日期(原 update_time 字段值,格式为 %Y/%m/%d,即年/月/日 )转换为 datetime 对象,然后将其设置为 sale_day 数据的索引,方便后续绘图时按日期顺序展示。

绘图操作

plt.subplot(2,1,1):将图形划分为2行1列的子图布局,并定位到第1个子图,用于绘制每日销售量图。

plt.tick_params(labelsize = 15):设置子图刻度标签的字体大小为15。

sale_day.plot():绘制 sale_day 数据的折线图,展示每日销售量随时间的变化趋势。

plt.grid(linestyle = '-'):在图中添加网格线,linestyle = '-' 表示网格线为实线,方便观察数据点位置。

plt.title('每日销售量', fontsize = 15):设置子图标题为“每日销售量”,字体大小15。

plt.ylabel('销量', fontsize = 10):设置纵轴标签为“销量”,字体大小10。

计算每日销售额并绘图

数据聚合与日期格式转换

r_day=data.groupby('update_time')['销售额'].sum():按 update_time 对数据进行分组,并对每组的销售额(销售额 列 )求和,得到每天的销售总额。

r_day.index = [datetime.strptime(i, '%Y/%m/%d') for i in r_day.index]:同样将字符串日期转换为 datetime 对象并设置为索引。

绘图操作

plt.subplot(2,1,2):定位到2行1列子图布局的第2个子图,用于绘制每日销售额图。

plt.tick_params(labelsize = 15):设置刻度标签字体大小为15。

r_day.plot():绘制 r_day 数据的折线图,展示每日销售额随时间的变化。

plt.grid(linestyle = '-'):添加网格线

plt.title('每日销售额', fontsize = 15):设置子图标题为“每日销售额”,字体大小15。

plt.ylabel('销售额', fontsize = 15):设置纵轴标签为“销售额”,字体大小15。

调整子图布局

plt.tight_layout():自动调整子图间距,防止子图之间的标签、标题等元素相互重叠,使图形展示更美观、清晰。

观察两个折线图,其走势是相同的,因为整个销量与销售额应该是成正相关的。图形有如下特点:

在9日单日销售量达到峰值,而在11日达到最小

10日之前的波动趋势相对稳定,在11日有一个急剧的下降

11日过后又开始缓慢的增长。由于统计的日期有限,无法判断这种趋势是长期的还是短期的。

那么,双11活动反而在双11当天的销量有剧烈的下滑,其原因大概率是双11的预热、预售活动等等。在临近双11时,9日销量达到最高,因为更临近了,所以关注的人更多,购买的人更多。但是在10日有所下降,和双11下降有相同的理由,是人们都主观的认为双11当天的购买人数太多,可能会有网络、平台卡顿导致无法成功下单的忧虑,所以反而造成了双11当天销量急剧下滑。而双11过后又开始有了销量增长,有可能是店铺持续优惠,比如赠送满减卷,让许多已经消费过的消费者再次消费。

3对评论数进行分析

图形初始化与子图设置

◦ plt.figure(figsize = (16,6)):创建一个 matplotlib 图形对象,设置图形大小为宽度16单位、高度6单位,为后续绘制子图提供空间。

◦ plt.subplot(1,2,1):将图形划分为1行2列的子图布局,并定位到第1个子图,用于绘制每个店铺总评论数的图表。

◦ plt.subplot(1,2,2):定位到1行2列子图布局的第2个子图,用于绘制每个店铺平均多少单一条评论的图表。

绘制每个店铺总评论数图表

◦ data.groupby('店名').comment_count.sum().sort_values().plot.bar():

◦ data.groupby('店名').comment_count.sum():按店铺名称(店名)对数据进行分组,然后对每组的评论数量(comment_count)求和,统计出每个店铺的总评论数。

◦ .sort_values():将上述求和结果按升序排列(默认升序 )。

◦ .plot.bar():绘制柱状图,展示各店铺总评论数的多少,柱子高度代表评论数。

◦ plt.title('每个店铺总评论数'):设置该子图的标题为“每个店铺总评论数”,明确图表主题。

绘制每个店铺平均多少单一条评论图表

(data1.groupby('店名').sale_count.sum()/data1.groupby('店名').comment_count.sum()).sort_values().plot.bar():

◦ data1.groupby('店名').sale_count.sum():按店铺名称对销售数量(sale_count)分组求和,得到每个店铺的总销售数量。

◦ data1.groupby('店名').comment_count.sum():按店铺名称对评论数量分组求和,得到每个店铺的总评论数。

◦ data1.groupby('店名').sale_count.sum()/data1.groupby('店名').comment_count.sum():计算每个店铺的销售单数与评论数的比值,即平均多少单会产生一条评论。

◦ .sort_values().plot.bar():将上述比值结果按升序排列后绘制柱状图,展示各店铺平均评论产生的情况。

◦ plt.title('每个店铺平均多少单一条评论'):设置该子图的标题为“每个店铺平均多少单一条评论”,突出图表展示内容。

调整子图布局

◦ plt.tight_layout():自动调整子图间距,防止子图的标题、坐标轴标签等元素相互重叠,使整个图形展示更美观、协调。

相关文章:

  • [量化交易Backtrader] - 如何规避过拟合
  • 无网络环境下配置并运行 word2vec复现.py
  • 大模型系列(四)--- GPT2: Language Models are Unsupervised Multitask Learners​
  • 南京市出台工作方案深化“智改数转网联”,物联网集成商从“困局”到“蓝海”!
  • Vue 项目中长按保存图片功能实现指南
  • Unity_JK框架【4】MonoSystem 和 协程工具类 的剖析与实践
  • Czkawka:跨平台重复文件清理
  • 滑动窗口——无重复字符最长的字串
  • 蓝桥杯国赛备赛——字符串
  • Redis持久化存储介质评估:NFS与Ceph的适用性分析
  • 数据中心 第十五次CCF-CSP计算机软件能力认证
  • 护照阅读器简介
  • Spring MVC Controller 方法的返回类型有哪些?
  • Android Car Input HAL
  • MCP学习
  • C++初阶 —— 类和对象
  • 如何使用UGUI的EventTrigger
  • 南京大学OpenHarmony技术俱乐部正式揭牌 仓颉编程语言引领生态创新
  • 汽车免拆诊断案例|车辆行驶中急加速车身抖动故障排除 2 例
  • 台州智惠自动化签约智橙PLM,让创新持续发生
  • 10名“鬼火少年”凌晨结队在城区飙车,警方:涉非法改装,正处理
  • 印巴战火LIVE丨“快速接近战争状态”:印度袭击巴军事基地,巴启动反制军事行动
  • 告别户口本!今天起婚姻登记实现全国通办
  • “80后”赵亮出任上海普陀区委副书记
  • 陕西澄城樱桃在上海推介,向长三角消费者发出“甜蜜之邀”
  • 司法部:持续规范行政执法行为,加快制定行政执法监督条例