1、分析背景及目的
随着生活水平的不断提高,越来越多的人更加注重自己外在的形象,美妆产品便成为人们保持外在形象的神器。根据艾瑞网《2021年中国美妆集合店行业研究报告》显示,2018年-2020年化妆品市场规模逐年升高并预测2021年-2023年化妆品市场规模也是保持逐年升高的状态,可见美妆市场存在着巨大潜力,加之电商行业的兴起越来越多的人喜欢在线上购买产品,随之衍生出了几个与购物相关重要的节日,例如双十一、双十二等。本文则是通过对双十一美妆销售数据的研究,从店铺和产品两个维度分析双十一期间的热销产品,产品销量、销售额等指标进而了解用户对美妆产品的需求,便于商家更好的服务用户,提高店铺收入
#导入数据集
import pandas as pd
import numpy as py
import matplotlib.pyplot as plt
df=pd.read_csv('D:\双十一淘宝美妆数据.csv')
#查看行列信息
df.info()
数据集总共包含7个字段:update_time(更新时间)、id(商品
id,具有唯一性)、title(产品名称详细信息)、price(销售价格)、sale_count(销量)、comment_count(评论数量)、店名,共计27598条数据,数据集时间范围是2016.11.5-2016.11.14
2、分析思路与提出问题
2.1 分析思路
2.2 提出问题
不同种类的销量、销售额情况如何?
不同种类下的不同产品销量、销售额、单价的关系?
销量随着时间的变化有什么规律?
不同商品id的评论数与销量的关系?
不同店铺的销售额和销量情况如何?
用户喜欢在销量TOP5的店铺购买产品TOP5是什么?
3、数据清洗
3.1 列名重命名
本数据集不需要对列名进行重命名
3.2 隐藏子集
本数据集不需要隐藏子集
3.3 删除重复值
本数据集不需要删除重复值
3.4 缺失值处理
# 查看缺失值
df.isnull().sum()
字段sale_count、comment_count各有2354处缺失,但由于不会对数据分析产生太大影响,故先不做处理
3.5 数据一致化
(1)将数据格式一致化
# 查看数据类型
df.dtypes
从查询结果看,update_time字段应该为日期格式
# update_time字段转换为日期格式
df['update_time']=pd.to_datetime(df['update_time'])
# 查看数据类型df.types
(2)数据提取字段title将产品类别以及产品提取出来,新增main_cagetory,product两个字段;对产品价格进行价格区间分类同时新增price_scale字段;新增total sales字段
#对price字段进行分类
def price_scale_transform(pricevalue):
price_scale_list=[]
for value in pricevalue :
if 0<=value <100 :
t=('[0-100)')
elif 100<=value<200:
t=('[100-200)')
elif 200<=value<300:
t=('[200-300)')
elif 300<=value<400:
t=('[300-400)')
elif 400<=value<500:
t=('[400-500)')
elif 500<=value<600:
t=('[500-600)')
elif 600<=value<700:
t=('[600-700)')
elif 700<=value<800:
t=('[700-800)')
elif 800<=value<900:
t=('[800-900)')
elif 900<=value<1000:
t=('[900-1000)')
elif 1000<=value<2500:
t=('[1000-2500)')
elif 2500<=value<5000:
t=('[2500-5000)')
else:
t=('5000以上')
price_scale_list.append(t)
price_scale=pd.Series(price_scale_list)
return price_scale
pricevalues=df['price']
s=price_scale_transform(pricevalues)
df['Price_scale']=s.values
# 对title字段提取产品类别以及产品
main_cagetory=[]
product=[]
for value in df.title:
if any(kw in value for kw in ['爽肤水','化妆水','柔肤水','柔肤液','精粹水','亮肤水','润肤水','保湿水','菁华水','凝露','补水露','修护露']):
t='化妆水'
s='护肤品'
elif any(kw in value for kw in ['美白乳','润肤乳','亮肤乳','菁华乳','修护乳','凝液','乳液','保湿精华乳']):
t='乳液'
s='护肤品'
elif any(kw in value for kw in ['眼部精华露']):
t='眼部精华'
s='护肤品'
elif any(kw in value for kw in ['眼霜']):
t='眼霜'
s='护肤品'
elif any(kw in value for kw in ['洗面','洁面','洁颜','洗颜','去角质','磨砂','卸妆']):
t='洁面产品'
s='护肤品'
elif any(kw in value for kw in ['眼膜']):
t='眼膜'
s='护肤品'
elif any(kw in value for kw in ['面膜']):
t='面膜'
s='护肤品'
elif any(kw in value for kw in ['舒缓喷雾','防晒喷雾','保湿喷雾','喷雾']):
t='喷雾'
s='护肤品'
elif any(kw in value for kw in ['面霜','日霜','晚霜','凝霜','滋润霜','柔肤霜','日间霜','保湿霜','修护霜','修护特润霜']):
t='面霜'
s='护肤品'
elif any(kw in value for kw in ['防晒霜','防晒乳']):
t='防晒霜'
s='护肤品'
elif any(kw in value for kw in ['精华液','精华水','精华露']):
t='精华'
s='护肤品'
elif any(kw in value for kw in ['口红','唇釉','唇彩','唇膏']):
t='口红'
s='彩妆'
elif any(kw in value for kw in ['粉底液','粉霜','粉底膏','粉底霜']):
t='粉底'
s='彩妆'
elif any(kw in value for kw in ['粉饼']):
t='粉饼'
s='彩妆'
elif any(kw in value for kw in ['散粉','蜜粉','定妆粉']):
t='定妆粉'
s='彩妆'
elif any(kw in value for kw in ['气垫']):
t='气垫'
s='彩妆'
elif any(kw in value for kw in ['眉粉']):
t='眉粉'
s='彩妆'
elif any(kw in value for kw in ['染眉膏']):
t='染眉膏'
s='彩妆'
elif any(kw in value for kw in ['眼线']):
t='眼线'
s='彩妆'
elif any(kw in value for kw in ['眼影']):
t='眼影'
s='彩妆'
elif any(kw in value for kw in ['睫毛膏']):
t='睫毛膏'
s='彩妆'
elif any(kw in value for kw in ['鼻影']):
t='鼻影'
s='彩妆'
elif any(kw in value for kw in ['高光']):
t='高光'
s='彩妆'
elif any(kw in value for kw in ['修容粉']):
t='修容粉'
s='彩妆'
elif any(kw in value for kw in ['腮红']):
t='腮红'
s='彩妆'
elif any(kw in value for kw in ['BB霜']):
t='BB霜'
s='彩妆'
else:
t='其它'
s='其它'
main_cagetory.append(s)
product.append(t)
df['main_cagetory']=main_cagetory
df['product']=product
#新增销售额字段total_sales
df['total_sales']=df['price']*df['sale_count']
3.6 异常值处理
可以采用Turkey's test方法识别异常值最小四分位Q1.最大四分位Q3.中位数Q2.异常值的范围为小于最小估计值Q1-K*(Q3-Q1)和大于最大估计值Q3+K*(Q3-Q1),本数据集则不需要进行异常值识别和处理
四、数据可视化
4.1产品
4.1.1 不同种类的销售额和销量
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
figure=plt.figure(figsize=(12.8))
data1=df.groupby(['main_cagetory'])['total_sales'].sum()
data2=df.groupby(['main_cagetory'])['sale_count'].sum()
ax1=figure.add_subplot(1.2.1)
ax1.pie(data1.autopct='%.2f%%',textprops=dict(size=8),labels=data1.index,colors=['gray','lightgreen','limegreen'])
ax1.set_title('不同类别的销售额',fontsize=12)
ax2=figure.add_subplot(1.2.2)
ax2.pie(data2.autopct='%.2f%%',textprops=dict(size=8),labels=data2.index,colors=['gray','lightgreen','limegreen'])
ax2.set_title('不同类别的销量',fontsize=12)
plt.show()
如图护肤品的销售额占比56.76%、销量占比60.34%均都远超彩妆的销售额和销量,可见护肤品在美妆中仍占有主导地位(备注:由于对产品分类不够详细,所以导致其它占比较高,这里主要分析护肤品以及彩妆类的产品)
4.1.2不同种类下的不同产品销量、销售额、单价的关系?
#护肤品销量、销售额、单价的关系
df1=df[df['main_cagetory']=='护肤品']
df1.groupby(['Price_scale']).agg(hfp_sale_count=('sale_count','sum'),hfp_total_sales=('total_sales','sum')).sort_values(by=['hfp_total_sales'],ascending=False)
从图表上看[100-200)的销售额最高但销量却不是最高,而[0-100)销量最高但销售额不是最高,进一步对价格区间为[0-100)的产品分析
#对护肤品价格区间在[0.100)的产品进一步分析
df8=df[(df['main_cagetory']=='护肤品')&(df['Price_scale']=='[0-100)')]
df8.groupby(['id'])['sale_count'].agg(sale_count8='sum').sort_values(by=['sale_count8'],ascending=False).iloc[0:5.0]
由图上可知,在区间[0.100)中,产品id A24304992630的销量最高,是否 可以考虑将该产品采取组合销售的方式从而将单价提高到[100.200)区间,进而提高销售额
#彩妆销量、单价、销售额之间的关系
df3=df[df['main_cagetory']=='彩妆']
df3.groupby(['Price_scale']).agg(cz_sale_count=('sale_count','sum'),cz_total_sales=('total_sales','sum')).sort_values(by=['cz_total_sales'],ascending=False)
从图表上看[100-200)的销售额最高但销量却不是最高,而[0-100)销量最高但销售额不是最高。进一步对价格区间在[0-100)的产品分析
#对彩妆价格区间[0-100)的产品进一步分析
df9=df[(df['main_cagetory']=='彩妆')&(df['Price_scale']=='[0-100)')]
df9.groupby(['id'])['sale_count'].agg(sale_count9='sum').sort_values(by=['sale_count9'],ascending=False).iloc[0:5.0]
由上可知,在区间[0.100)中,产品id A39876413435的销量最高,是否 可以考虑将该产品采取组合销售的方式从而将单价提高到[100.200)区间,进而提高销售额
4.1.3产品销量随时间的变化
figure1=plt.figure(figsize=(10.6))
ax3=figure1.add_subplot(1.1.1)
df5=df.groupby(['update_time'])['sale_count'].agg(sale_count='sum')
ax3.set_title('销量随时间的变化情况',fontsize=12)
df5.plot(marker='o',ax=ax3.markersize=4.color='limegreen')
ax3.set_ylabel('销量')
ax3.set_xlabel('日期')
ax3.set_ylim([0.40000000])
如图从11.5-11.10的销量基本保持稳定且都在3000万以上,而在11.11当天销量下降到11.5-11.14期间最低,从11.12开始销量逐渐上升。参考网上信息了解到11.5-11.10均为2016年双十一的预热期,用户在此期间购买产品,所以销量会增加。由于用户在预热期时已购买产品所以在双十一当天的销量减少,达到期间最低
4.1.4不同商品id的评论数与销量的关系
figure2=plt.figure(figsize=(12.6))
ax1=figure2.add_subplot(1.2.1)
df6=df.groupby(['id']).agg(comment_count1=('comment_count','sum'),sale_count2=('sale_count','sum'))
ax1.scatter(x=df6['comment_count1'],y=df6['sale_count2'],color=['limegreen'])
ax1.set_title('销量随商品id的评论数的变化',fontsize=12)
ax1.set_xlim(xmin=0.xmax=2500000)
ax1.set_xlabel('商品评论数')
ax1.set_ylabel('销量')
plt.show()
如图所示,商品id的评论数与销量之间是呈一定的正相关,进一步计算商品id的评论数与销量之间的相关系数
#计算商品id的评论数与销量的相关系数
df6=df.groupby(['id']).agg(comment_count1=('comment_count','sum'),sale_count2=('sale_count','sum'))
df6.corr()
如图所示,相关系数r约为0.87.由此可知,商品评论数与销量是呈高度正相关
4.2店铺
4.2.1 不同店铺的销售额和销量
figure3=plt.figure(figsize=(14.5))
ax1=figure3.add_subplot(1.2.1)
df6=df.groupby(['店名'])['total_sales'].agg(total_sale4='sum').sort_values(by=['total_sale4'],ascending=True)
df6.plot(width=0.8.kind='barh',ax=ax1.color='limegreen')
ax1.set_title('不同店铺的销售额',fontsize=12)
ax1.set_xlabel('销售额')
ax2=figure3.add_subplot(1.2.2)
df8=df.groupby(['店名'])['sale_count'].agg(sale_count5='sum').sort_values(by=['sale_count5'],ascending=True)
df8.plot(kind='barh',width=0.8.ax=ax2.color='darkorange')
ax2.set_title('不同店铺的销量',fontsize=12)
ax2.set_xlabel('销量')
plt.show()
如图所示销售额TOP5分别为相宜本草、欧莱雅、佰草集、美宝莲、悦诗风吟;销量TOP5分别为相宜本草、美宝莲、悦诗风吟、妮维雅、欧莱雅。值得注意的是佰草集的销量虽不是Top5但销售额却排在第3位
4.2.2热销店铺Top5的热销产品Top5
由4.2.1不同店铺的销量可了解热销店铺Top5分别是相宜本草、美宝莲、悦诗风吟、妮维雅、欧莱雅。进一步查看这5个店铺的热销产品Top5
figure5=plt.figure(figsize=(12.8))
ax1=figure5.add_subplot(2.2.1)
ax2=figure5.add_subplot(2.2.2)
df9=df[(df['店名']=='相宜本草')&(df['product']!='其它')]
df10=df[(df['店名']=='美宝莲')&(df['product']!='其它')]
df9.groupby(['product'])['sale_count'].agg(sale_count6='sum').sort_values(by=['sale_count6'],ascending=False).plot(kind='bar',width=0.8.ax=ax1.color='limegreen')
df10.groupby(['product'])['sale_count'].agg(sale_count7='sum').sort_values(by=['sale_count7'],ascending=False).plot(kind='bar',width=0.8.ax=ax2.color='lightgreen')
ax1.set_title('相宜本草品类销量',fontsize=10)
ax2.set_title('美宝莲品类销量',fontsize=10)
plt.show()
figure6=plt.figure(figsize=(12.8))
ax1=figure6.add_subplot(2.2.1)
ax2=figure6.add_subplot(2.2.2)
df11=df[(df['店名']=='悦诗风吟')&(df['product']!='其它')]
df12=df[(df['店名']=='妮维雅')&(df['product']!='其它')]
df11.groupby(['product'])['sale_count'].agg(sale_count8='sum').sort_values(by=['sale_count8'],ascending=False).plot(kind='bar',width=0.8.ax=ax1.color='orange')
df12.groupby(['product'])['sale_count'].agg(sale_count9='sum').sort_values(by=['sale_count9'],ascending=False).plot(kind='bar',width=0.8.ax=ax2.color='darkorange')
ax1.set_title('悦诗风吟品类销量',fontsize=10)
ax2.set_title('妮维雅品类销量',fontsize=10)
plt.show()
figure7=plt.figure(figsize=(12.8))
ax1=figure7add_subplot(2.2.1)
df13=df[(df['店名']=='欧莱雅')&(df['product']!='其它')]
df13.groupby(['product'])['sale_count'].agg(sale_count10='sum').sort_values(by=['sale_count10'],ascending=False).plot(kind='bar',width=0.8.ax=ax1.color='gray')
ax1.set_title('欧莱雅品类销量',fontsize=12)
plt.show()
如图所示,相宜本草top5产品是洁面、面膜、化妆水、面霜、乳液;美宝莲top5产品是口红、洁面、眼线、睫毛膏、眉粉;悦诗风吟top5产品是面膜、洁面、粉饼、化妆水、气垫;妮维雅top5产品是乳液、洁面、化妆水、口红、面霜;欧莱雅top5产品是洁面、化妆水、乳液、面霜、口红。
4、结论
护肤品的销售额占比56.76%、销量占比60.34%均都远超彩妆的销售额和销量,可见护肤品在美妆中仍占有主导地位
护肤品类和彩妆类产品都是在价格区间[100-200)的销售额最高但销量却不是最高,而在价格区间[0-100)销量最高但销售额不是最高,在价格区间[0-100)销量最高的护肤产品是产品id A24304992630、彩妆产品是产品id A39876413435
在11.5-11.10期间(预热期)销量基本保持稳定且均达到3000万以上,均高于11.11-11.14的销量,到11.11当天销量下降达到11.5-11.14期间的最低值,从11.12开始销量又开始逐渐上升
商品id的评论数与销量的相关系数约为0.87.达到高度正相关,说明评论数对销量存在一定影响
销售额Top5的店铺分别为相宜本草、欧莱雅、佰草集、美宝莲、悦诗风吟;销量TOP5的店铺分别为相宜本草、美宝莲、悦诗风吟、妮维雅、欧莱雅。值得注意的是佰草集的销量虽不是Top5但销售额却排在第3位
销量top5的店铺热销产品top5分别是相宜本草:洁面、面膜、化妆水、面霜、乳液;美宝莲:口红、洁面、眼线、睫毛膏、眉粉;悦诗风吟:面膜、洁面、粉饼、化妆水、气垫;妮维雅:乳液、洁面、化妆水、口红、面霜;欧莱雅:洁面、化妆水、乳液、面霜、口红
5、建议
由于彩妆类和护肤类的产品在价格区间[0.100)的销量都是最高的,在价格区间[100.200)的销售额最高,又通过进一步了解在价格区间[0.100)销量最高的彩妆类产品是产品id A39876413435、最高的护肤品类是产品id A24304992630.是否可以对这两种产品分别组合售出来提高产品的客单价从而提高产品的销售额
11.5-11.10双十一预热期的销量均都高于11.11-11.14.说明双十一的预热活动还是非常成功的,商家可以在预热期间加大优惠力度刺激用户消费
商品的评论数与销量呈高度正相关,说明评论数对销量有一定的影响,商家可以采取一些措施来提醒用户在购买后进行评论,例如短信提醒,消息提醒等
乐发网超市批发网提供超市货源信息,超市采购进货渠道。超市进货网提供成都食品批发,日用百货批发信息、微信淘宝网店超市采购信息和超市加盟信息.打造国内超市采购商与批发市场供应厂商搭建网上批发市场平台,是全国批发市场行业中电子商务权威性网站。
本文来源: 淘宝美妆销售数据分析