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.說明雙十一的預熱活動還是非常成功的,商家可以在預熱期間加大優惠力度刺激用戶消費
商品的評論數與銷量呈高度正相關,說明評論數對銷量有一定的影響,商家可以采取一些措施來提醒用戶在購買后進行評論,例如短信提醒,消息提醒等
樂發網超市批發網提供超市貨源信息,超市采購進貨渠道。超市進貨網提供成都食品批發,日用百貨批發信息、微信淘寶網店超市采購信息和超市加盟信息.打造國內超市采購商與批發市場供應廠商搭建網上批發市場平臺,是全國批發市場行業中電子商務權威性網站。
本文來源: 淘寶美妝銷售數據分析