摘要
深度挖掘天猫双十一时刻的美妆产品销售数据,分析各品牌之间的销量、热度、价格等~
项目描述
项目名称 :天猫双十一美妆产品销售数据分析
数据来源 :数据来源于网络,为2016年双十一美妆产品天猫数据的采集和整理,原始数据为.xlsx格式。
字段说明 :
update_time : 更新时间
id : 商品id(唯一标识)
title : 商品标题
price : 价格
店名 : 即品牌名
项目目的 :
通过对数据集进行清理整合,并进行以下几个方面的分析:
双十一期间各品牌的销量以及销售额对比
各大品牌热度
各品牌价格分析
关于男性护肤品销量分析
消费高峰期分析
环境解释 :基于jupyter notebook,可视化工具包:matplotlib、seaborn
数据导入
1 2 3 4 5 6 7 8 9 10 11 12 13 import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as ssimport warnings%matplotlib inline import osos.chdir("/home/min/data" ) warnings.filterwarnings("ignore" )
1 2 3 4 5 6 7 data = pd.read_csv('双十一淘宝美妆数据.csv' ) data.head()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 27598 entries, 0 to 27597
Data columns (total 7 columns):
update_time 27598 non-null object
id 27598 non-null object
title 27598 non-null object
price 27598 non-null float64
sale_count 25244 non-null float64
comment_count 25244 non-null float64
店名 27598 non-null object
dtypes: float64(3), object(4)
memory usage: 1.5+ MB
1 2 3 data['店名' ].value_counts()
悦诗风吟 3021
佰草集 2265
欧莱雅 1974
雅诗兰黛 1810
倩碧 1704
美加净 1678
欧珀莱 1359
妮维雅 1329
相宜本草 1313
兰蔻 1285
娇兰 1193
自然堂 1190
玉兰油 1135
兰芝 1091
美宝莲 825
资生堂 821
植村秀 750
薇姿 746
雅漾 663
雪花秀 543
SKII 469
蜜丝佛陀 434
Name: 店名, dtype: int64
数据清洗
清除重复数据
1 2 3 4 data = data.drop_duplicates(inplace=False ) data.shape
(27512, 7)
索引重构
1 2 3 4 data.reset_index(inplace=True ,drop = True ) data.head()
日期处理
1 2 3 4 5 6 data['date' ] = pd.to_datetime(data['update_time' ]) data['month' ] = data['date' ].dt.month data['day' ] = data['date' ].dt.day data.head()
1 2 3 data.apply(lambda x:sum (x.isnull()))
update_time 0
id 0
title 0
price 0
sale_count 2350
comment_count 2350
店名 0
date 0
month 0
day 0
dtype: int64
update_time False
id False
title False
price False
sale_count True
comment_count True
店名 False
date False
month False
day False
dtype: bool
缺失值处理
1 2 3 4 data['sale_count' ].mode() data['comment_count' ].mode()
0 0.0
dtype: float64
1 2 data['sale_count' ] = data['sale_count' ].fillna(0 ) data['comment_count' ] = data['comment_count' ].fillna(0 )
1 2 3 data.apply(lambda x : sum (x.isnull()))
update_time 0
id 0
title 0
price 0
sale_count 0
comment_count 0
店名 0
date 0
month 0
day 0
dtype: int64
1 data.duplicated().value_counts()
False 27512
dtype: int64
信息提取
表格信息提取
1 2 3 4 title_cut = [] for i in data.title: j = jieba.lcut(i) title_cut.append(j)
Building prefix dict from the default dictionary ...
Loading model from cache /tmp/jieba.cache
Loading model cost 1.520 seconds.
Prefix dict has been built successfully.
1 2 data['item_name_cut' ] = title_cut data[['title' ,'item_name_cut' ]].head()
添加商品类别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 sub_type = [] main_type = [] basic_config_data = """护肤品 套装 套装 护肤品 乳液类 乳液 美白乳 润肤乳 凝乳 柔肤液' 亮肤乳 菁华乳 修护乳 护肤品 眼部护理 眼霜 眼部精华 眼膜 护肤品 面膜类 面膜 护肤品 清洁类 洗面 洁面 清洁 卸妆 洁颜 洗颜 去角质 磨砂 护肤品 化妆水 化妆水 爽肤水 柔肤水 补水露 凝露 柔肤液 精粹水 亮肤水 润肤水 保湿水 菁华水 保湿喷雾 舒缓喷雾 护肤品 面霜类 面霜 日霜 晚霜 柔肤霜 滋润霜 保湿霜 凝霜 日间霜 晚间霜 乳霜 修护霜 亮肤霜 底霜 菁华霜 护肤品 精华类 精华液 精华水 精华露 精华素 护肤品 防晒类 防晒霜 防晒喷雾 化妆品 口红类 唇釉 口红 唇彩 化妆品 底妆类 散粉 蜜粉 粉底液 定妆粉 气垫 粉饼 BB CC 遮瑕 粉霜 粉底膏 粉底霜 化妆品 眼部彩妆 眉粉 染眉膏 眼线 眼影 睫毛膏 化妆品 修容类 鼻影 修容粉 高光 腮红 其他 其他 其他"""
1 2 3 4 5 6 7 8 9 category_config_map = {} for config_line in basic_config_data.split('\n' ): basic_category_list = config_line.strip().strip('\n' ).strip('\t' ).split('\t' ) main_category = basic_category_list[0 ] sub_category = basic_category_list[1 ] unit_category_list = basic_category_list[2 :-1 ] for unit_category in unit_category_list: if unit_category and unit_category.strip().strip('\t' ): category_config_map[unit_category] = (main_category,sub_category)
{'乳液': ('护肤品', '乳液类'),
'美白乳': ('护肤品', '乳液类'),
'润肤乳': ('护肤品', '乳液类'),
'凝乳': ('护肤品', '乳液类'),
"柔肤液'": ('护肤品', '乳液类'),
'亮肤乳': ('护肤品', '乳液类'),
'菁华乳': ('护肤品', '乳液类'),
'眼霜': ('护肤品', '眼部护理'),
'眼部精华': ('护肤品', '眼部护理'),
'洗面': ('护肤品', '清洁类'),
'洁面': ('护肤品', '清洁类'),
'清洁': ('护肤品', '清洁类'),
'卸妆': ('护肤品', '清洁类'),
'洁颜': ('护肤品', '清洁类'),
'洗颜': ('护肤品', '清洁类'),
'去角质': ('护肤品', '清洁类'),
'化妆水': ('护肤品', '化妆水'),
'爽肤水': ('护肤品', '化妆水'),
'柔肤水': ('护肤品', '化妆水'),
'补水露': ('护肤品', '化妆水'),
'凝露': ('护肤品', '化妆水'),
'柔肤液': ('护肤品', '化妆水'),
'精粹水': ('护肤品', '化妆水'),
'亮肤水': ('护肤品', '化妆水'),
'润肤水': ('护肤品', '化妆水'),
'保湿水': ('护肤品', '化妆水'),
'菁华水': ('护肤品', '化妆水'),
'保湿喷雾': ('护肤品', '化妆水'),
'面霜': ('护肤品', '面霜类'),
'日霜': ('护肤品', '面霜类'),
'晚霜': ('护肤品', '面霜类'),
'柔肤霜': ('护肤品', '面霜类'),
'滋润霜': ('护肤品', '面霜类'),
'保湿霜': ('护肤品', '面霜类'),
'凝霜': ('护肤品', '面霜类'),
'日间霜': ('护肤品', '面霜类'),
'晚间霜': ('护肤品', '面霜类'),
'乳霜': ('护肤品', '面霜类'),
'修护霜': ('护肤品', '面霜类'),
'亮肤霜': ('护肤品', '面霜类'),
'底霜': ('护肤品', '面霜类'),
'精华液': ('护肤品', '精华类'),
'精华水': ('护肤品', '精华类'),
'精华露': ('护肤品', '精华类'),
'防晒霜': ('护肤品', '防晒类'),
'唇釉': ('化妆品', '口红类'),
'口红': ('化妆品', '口红类'),
'散粉': ('化妆品', '底妆类'),
'蜜粉': ('化妆品', '底妆类'),
'粉底液': ('化妆品', '底妆类'),
'定妆粉 ': ('化妆品', '底妆类'),
'气垫': ('化妆品', '底妆类'),
'粉饼': ('化妆品', '底妆类'),
'BB': ('化妆品', '底妆类'),
'CC': ('化妆品', '底妆类'),
'遮瑕': ('化妆品', '底妆类'),
'粉霜': ('化妆品', '底妆类'),
'粉底膏': ('化妆品', '底妆类'),
'眉粉': ('化妆品', '眼部彩妆'),
'染眉膏': ('化妆品', '眼部彩妆'),
'眼线': ('化妆品', '眼部彩妆'),
'眼影': ('化妆品', '眼部彩妆'),
'鼻影': ('化妆品', '修容类'),
'修容粉': ('化妆品', '修容类'),
'高光': ('化妆品', '修容类')}
1 2 3 4 5 6 7 8 9 10 11 12 13 for i in range (len (data)): exist = False for temp in data.item_name_cut[i]: if temp in category_config_map: sub_type.append(category_config_map.get(temp)[1 ]) main_type.append(category_config_map.get(temp)[0 ]) exist = True break if not exist: sub_type.append('其他' ) main_type.append('其他' )
新增主类别 & 子类别
1 2 3 4 data['sub_type' ] = sub_type data['main_type' ] = main_type
1 2 3 data['sub_type' ].value_counts()
其他 13100
清洁类 2922
面霜类 2675
化妆水 1955
底妆类 1790
乳液类 1352
眼部护理 1114
精华类 727
口红类 715
眼部彩妆 604
防晒类 494
修容类 64
Name: sub_type, dtype: int64
1 2 3 data['main_type' ].value_counts()
其他 13100
护肤品 11239
化妆品 3173
Name: main_type, dtype: int64
新增 “是否为男士专用” 类别
1 2 3 4 5 6 7 8 9 10 11 12 gender = [] for i in range (len (data)): if '男' in data.item_name_cut[i]: gender.append('是' ) elif '男士' in data.item_name_cut[i]: gender.append('是' ) elif '男生' in data.item_name_cut[i]: gender.append('是' ) else : gender.append('否' )
1 2 data['是否男士专用' ] = gender data['是否男士专用' ].value_counts()
否 25310
是 2202
Name: 是否男士专用, dtype: int64
新增销售额 & 购买日期
1 2 3 4 data['销售额' ] = data.sale_count * data.price
1 2 3 4 data['update_time' ] = pd.to_datetime(data['update_time' ]) data['update_time' ]
0 2016-11-14
1 2016-11-14
2 2016-11-14
3 2016-11-14
4 2016-11-14
...
27507 2016-11-05
27508 2016-11-05
27509 2016-11-05
27510 2016-11-05
27511 2016-11-05
Name: update_time, Length: 27512, dtype: datetime64[ns]
时间列类型装换 & 新增以天为单位时间列
1 2 3 4 data = data.set_index('update_time' ) data['day' ] = data.index.day
1 del data['item_name_cut' ]
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 27512 entries, 2016-11-14 to 2016-11-05
Data columns (total 13 columns):
id 27512 non-null object
title 27512 non-null object
price 27512 non-null float64
sale_count 27512 non-null float64
comment_count 27512 non-null float64
店名 27512 non-null object
date 27512 non-null datetime64[ns]
month 27512 non-null int64
day 27512 non-null int64
sub_type 27512 non-null object
main_type 27512 non-null object
是否男士专用 27512 non-null object
销售额 27512 non-null float64
dtypes: datetime64[ns](1), float64(4), int64(2), object(6)
memory usage: 2.9+ MB
分析及可视化
各品牌SKU数
SKU : Stock Keeping Unit。SKU是库存量单位,区分单品。
在电商领域,通常每一个商品详情页对应一个独立的SKU编码。
1 2 3 plt.style.use('ggplot' )
1 2 3 4 5 6 7 8 9 10 11 plt.figure(figsize=(16 ,10 )) colors = ['r' ,'b' ,'g' ,'yellow' ,'pink' ,'c' ,'orange' ,'violet' ,'slateblue' ,'gray' ] df['店名' ].value_counts().sort_values(ascending = False ).plot.bar(width = 0.8 , alpha = 0.6 , color = colors) plt.title('各品牌SKU数' ,fontsize = 18 ) plt.xticks(rotation = 60 ) plt.ylabel('商品数量' ,fontsize = 14 ) plt.grid(axis='x' ) plt.show()
图表解析:由图可知,仅悦诗风吟与佰草集的商品数量超过两千,且悦诗风吟商品数量达到了3000+,稳居榜首。
各品牌销量&销售额
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 fig,axes = plt.subplots(1 ,2 ,figsize=(24 ,12 )) colors = ['r' ,'b' ,'g' ,'yellow' ,'pink' ,'c' ,'orange' ,'violet' ,'slateblue' ,'gray' ] ax1 = data.groupby('店名' ).sale_count.sum ().sort_values(ascending=True ).plot(kind='barh' , ax=axes[0 ], width=0.6 , color = colors) ax1.set_title('品牌总销售量' ,fontsize=18 ) ax1.set_xlabel('总销售量' ) ax2 = data.groupby('店名' )['销售额' ].sum ().sort_values(ascending=True ).plot(kind='barh' , ax=axes[1 ], width=0.6 , color = colors) ax2.set_title('品牌总销售额' ,fontsize=18 ) ax2.set_xlabel('总销售额' ) plt.subplots_adjust(wspace=0.4 ) paraments = {'ytick.labelsize' :16 ,'axes.labelsize' :15 } plt.rcParams.update(paraments) plt.show()
图表解析:相宜本草的销售量和销售额都是最高的。销量第二至第五,分别为美宝莲、悦诗风吟、妮维雅和欧莱雅;而销售额第二至第五,分别为欧莱雅、佰草集、美宝莲、悦诗风吟。其中,美宝莲、悦诗风吟和欧莱雅都在销量&销售额前五内。
各类别销售量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 fig,axes = plt.subplots(1 ,2 ,figsize = (18 ,10 )) df1 = df.groupby('main_type' )['sale_count' ].sum () ax1 = df1.plot(kind = 'pie' ,ax = axes[0 ],autopct = '%.1f%%' , pctdistance = 0.8 ,labels = df1.index, labeldistance = 1.05 , startangle = 60 , radius = 1.1 ,counterclock = False , wedgeprops = {'linewidth' :1.2 ,'edgecolor' :'k' }, textprops = {'fontsize' :10 ,'color' :'k' }) ax1.set_title('主类别销售量占比' ,fontsize = 15 ) df2 = df.groupby('sub_type' )['sale_count' ].sum () ax2 = df2.plot(kind = 'pie' ,ax = axes[1 ],autopct = '%.1f%%' , pctdistance = 0.8 ,labels = df2.index, labeldistance = 1.05 , startangle = 60 , radius = 1.1 ,counterclock = False , wedgeprops = {'linewidth' :1.2 ,'edgecolor' :'k' }, textprops = {'fontsize' :12 ,'color' :'k' }) ax2.set_title('子类别销售量占比' ,fontsize = 15 ) plt.subplots_adjust(wspace=0.4 ) plt.show()
图表解析:
从主类别销售量占比情况来看,护肤品的销量远大于化妆品销量
从子类别销售量占比情况来看,底妆类、口红类在化妆品中销量最多,清洁类、化妆水、面霜在护肤品中销量最多。
各品牌销量 - 主类别
1 2 3 4 5 6 7 8 9 10 plt.figure(figsize=(20 ,10 )) ss.barplot(x='店名' ,y='sale_count' ,hue='main_type' ,data=df,saturation=0.75 ,ci=0 ) plt.title('各品牌各总类的总销售量' ) plt.ylabel('销量' ) plt.text(0 ,78000 ,horizontalalignment = 'left' ,color = 'gray' ,fontsize = 15 ) plt.show()
各品牌销售额 - 主类别
1 2 3 4 5 6 7 8 plt.figure(figsize=(20 ,10 )) ss.barplot(x = '店名' ,y = '销售额' ,hue = 'main_type' ,data = df, saturation=0.75 ,ci = 0 ) plt.title('各品牌各总类的总销售额' ) plt.ylabel('销售额' ) plt.show()
图表解析:各品牌的化妆品、护肤品销量以及销售情况均不一样,可能与品牌的定位有关。有的品牌主打化妆品,化妆品销量、销售额表现会相对好很多,例如蜜丝佛陀等;而主打护肤品的品牌,护肤品的销量、销售额会表现较好,如欧莱雅、佰草集等;也有部分品牌如美宝莲、兰蔻、悦诗风吟,化妆品和护肤品的销量、销售额都还不错。
各品牌销量 - 子类别
1 2 3 4 5 6 7 8 plt.figure(figsize=(26 ,12 )) ss.barplot(x = '店名' ,y = 'sale_count' ,hue = 'sub_type' ,data = df , saturation=0.75 ,ci=0 ) plt.title('各品牌各子类别的总销量' ) plt.ylabel('销量' ) plt.show()
各品牌销售额 - 子类别
1 2 3 4 5 6 plt.figure(figsize=(26 ,15 )) ss.barplot(x = '店名' ,y = '销售额' ,hue = 'sub_type' ,data = df,saturation=0.75 ,ci = 0 ) plt.title('各品牌各子类别的总销售额' ) plt.legend(loc = 'upper right' ,fontsize = 13 ) plt.ylabel('销售额' ) plt.show()
图表解析:由于子类别较多,图表大致上能呈现出与主类别数据分析结果一致,其中比较突出的是自然堂的化妆水的销售额在自然堂总销售额中占据极大份额。
品牌热度
根据数据源分析,本次品牌热度呈现主要根据各品牌商品的平均评论数多少来展现。
1 2 3 4 5 6 7 8 9 10 11 12 plt.figure(figsize=(24 ,10 )) prop_iter = iter (plt.rcParams['axes.prop_cycle' ]) colors = ['r' ,'b' ,'g' ,'yellow' ,'pink' ,'c' ,'orange' ,'violet' ,'slateblue' ,'gray' ] df.groupby('店名' ).comment_count.mean().sort_values(ascending = False ).plot(kind = 'bar' , width = 0.8 , color=colors) plt.title('各品牌商品的平均评论数' ,fontsize = 18 ) plt.xticks(rotation = 60 ,fontsize = 18 ) plt.ylabel('评论数' ,fontsize =18 ) plt.show()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 plt.figure(figsize = (18 ,10 )) x = df.groupby('店名' )['sale_count' ].mean() y = df.groupby('店名' )['comment_count' ].mean() s = df.groupby('店名' )['price' ].mean() txt = df.groupby('店名' ).id .count().index ss.scatterplot(x,y,size = s,hue = s,sizes=(100 ,1500 ),data = df) for i in range (len (txt)): plt.annotate(txt[i],xy = (x[i],y[i])) plt.ylabel('热度' ,fontsize = 18 ) plt.xlabel('销量' ,fontsize = 18 ) plt.legend(loc = 'upper left' ,fontsize = 15 ) plt.show()
图表解析:
热度越高的品牌越靠上,销量越高的品牌越靠右,价格越高的品牌颜色越深圈越大
热度与销量呈一定的正相关
美宝莲热度第一,销量第二;妮维雅热度第二,销量第四;且二者价格均相对较低
图中显示,价格低的品牌热度和销量相对较高,价格高的品牌热度和销量相对较低;说明价格在热度和销量中有一定影响,也反映出人们较关注性价比问题。
各品牌价格分析
1 2 3 4 5 6 7 plt.figure(figsize = (18 ,10 )) ss.boxplot(x = '店名' ,y = 'price' ,data = df) plt.ylim(0 ,4000 ) plt.xticks(fontsize = 13 ) plt.show()
1 2 3 4 5 avg_price = df.groupby('店名' ).price.sum () / df.groupby('店名' ).price.count() avg_price
店名
SKII 1011.727079
佰草集 289.823171
倩碧 346.092190
兰芝 356.615809
兰蔻 756.400778
妮维雅 73.789053
娇兰 1361.043588
悦诗风吟 121.245945
植村秀 311.786667
欧珀莱 276.218543
欧莱雅 167.282698
玉兰油 329.657294
相宜本草 122.958446
美加净 44.694619
美宝莲 148.757576
自然堂 180.130213
薇姿 281.085791
蜜丝佛陀 142.118894
资生堂 577.438490
雅漾 212.618401
雅诗兰黛 872.470718
雪花秀 901.082873
Name: price, dtype: float64
1 2 3 4 5 6 7 8 9 10 11 fig = plt.figure(figsize=(19 ,10 )) avg_price.sort_values(ascending=False ).plot(kind = 'bar' ,width = 0.8 ,alpha = 0.6 , color = 'lightgreen' , label = '各品牌平均价格' ) y = df.price.mean() plt.axhline(y,0 ,5 ,color = 'yellow' ,label = '全品牌平均价格' ) plt.ylabel('各品牌平均价格' ,fontsize = 16 ) plt.title('各品牌产品的平均价格' ,fontsize = 24 ) plt.xticks(rotation = 60 ,fontsize = 16 ) plt.legend(loc = 'best' ) plt.show()
图表解析:
娇兰、SKII、雪花秀、雅诗兰黛、兰蔻、资生堂均是国际大牌,产品平均价格都在500以上,属于一线大牌;
兰芝、倩碧、玉兰油、植村秀、佰草集、薇姿、雅漾的平均价格在300~400之间,其中佰草集是最贵的国货品牌;
美加净作为国货品牌,平均价格最低,性价比高,而妮维雅平均价格第二低;
全品牌的平均价格低于400元,而除了前六个国际大牌外的其他品牌的平均价格都低于全品牌的平均价格
平均销量&平均销售额
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 plt.figure(figsize=(20 ,12 )) x = df.groupby('店名' )['sale_count' ].mean() y = df.groupby('店名' )['销售额' ].mean() s = avg_price txt = df.groupby('店名' ).id .count().index ss.scatterplot(x,y,size = s,sizes=(100 ,1500 ),marker='v' ,alpha=0.5 ,color = 'b' , data=df) for i in range (len (txt)): plt.annotate(txt[i],xy = (x[i],y[i]),xytext = (x[i]+0.2 ,y[i]+0.2 ),fontsize = 14 ) plt.ylabel('销售额' ,fontsize = 17 ) plt.xlabel('销量' ,fontsize = 17 ) plt.legend(loc = 'upper left' ,fontsize = 18 ) plt.show()
图表解析:
销售额越高越靠图像上方,销量越高越靠图像右方,图形越大代表平均价格越高
销量与销售额呈正相关
相宜本草、美宝莲、蜜丝佛陀销量与销售额在所有品牌中位列前三,而且平均价格较低
男性护肤品销量分析
1 2 3 4 5 6 7 8 gender_data = df[df['是否男士专用' ] == '是' ] gender_data_1 = gender_data[(gender_data.main_type == '护肤品' ) | (gender_data.main_type == '化妆品' )] plt.figure(figsize=(19 ,9 )) ss.barplot(x = '店名' ,y = 'sale_count' ,hue = 'main_type' ,data=gender_data_1, saturation = 0.75 ,ci = 0 ) plt.show()
图表分析:男用大多购买的是护肤品
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 f,[ax1,ax2] = plt.subplots(1 ,2 ,figsize=(19 ,9 )) colors = ['r' ,'b' ,'g' ,'yellow' ,'pink' ,'c' ,'orange' ,'violet' ,'slateblue' ,'gray' ] gender_data.groupby('店名' ).sale_count.sum ().sort_values(ascending = True ).plot(kind='barh' , width = 0.8 , ax = ax1, color=colors) ax1.set_title('男士护肤品销量排名' ,fontsize = 20 ) gender_data.groupby('店名' )['销售额' ].sum ().sort_values(ascending = True ).plot(kind='barh' , width = 0.8 , ax = ax2, color = colors) ax2.set_title('男士护肤品销量额排名' ,fontsize = 20 ) plt.subplots_adjust(wspace= 0.4 ) plt.show()
图表分析:
妮维雅是男士护肤品中购买首选,销量遥遥领先
欧莱雅、相宜本草、倩碧分别位于男士护肤品销量的二三四位
购买时间与销量分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 from matplotlib.pyplot import MultipleLocatorplt.figure(figsize=(19 ,9 )) day_sale = df.groupby('day' )['sale_count' ].sum () day_sale.plot() plt.grid(linestyle = '-.' ,color = 'gray' ,axis = 'x' ,alpha = 0.5 ) x_major_locator = MultipleLocator(1 ) ax = plt.gca() ax.xaxis.set_major_locator(x_major_locator) plt.xlabel('日期(11月)' ,fontsize = 18 ) plt.ylabel('销量' ,fontsize = 18 ) plt.show()
图表解析:
化妆品的购买高峰期在11号的前几天,猜测原因为双十一前商家为提前预热给出了较大优惠,导致了消费者的购买欲望加强
双十一当天销量最低
双十一后3天,销量较于11当天稳步上涨,可能是消费余热导致,也有可能是商家给出了新的优惠或是持续打折导致
总结
基于上方分析,做出以下总结整理:
美妆类别中护肤品销量远大于化妆品,而护肤品中又以清洁类、化妆水以及面霜等基础护肤类产品销量最高
男士使用的美妆产品集中在护肤品类别,在众多品牌中妮维雅是最受男士喜爱的品牌
价格和热度对销量有极大关联,平价的基础产品是大多数消费者的首选,也说明了消费者对性价比高的产品的热衷
可能是商家在双十一的提前预热,亦或是给出了巨大的优惠和为了避免11当天的消费高峰,不少消费者选择了提前消费,导致了销量高峰出现在双十一的前几天,而非11日当天
双十一后3天,消费者还留有购物余热,但销量远不如双十一之前
写在最后
以上为双十一天猫美妆产品销售数据分析以及可视化。有错误及不足之处,恳请指正,感谢阅读。