一年一度的双十一购物狂欢节悄然落下帷幕,天猫今年总成交额(GMV)又创新高,达4982亿元。节日过后更重要的是复盘分析,这里选用天猫双十一美妆类产品销售数据进行分析。
网上公开只找到2016年双十一数据,已此数据集进行分析,时间区间为:2016.11.05-2016.11.14。字段信息包括:update_time(更新时间)、id(商品id)、title(商品名称信息)、price(价格)、sale_count(销售数)、comment_count(评论数)、店名等。
1.美妆类产品中什么产品最受欢迎,是护肤品类、还是化妆品类?那护肤品类和化妆品类中又是什么产品销量最高?
2.哪个品牌的产品最受欢迎,销量最高?销售量高的品牌,销售额一定高嘛?
3.各品牌的产品是在什么价格区间?哪些品牌的价格整体偏高?
进行数据分析前,还是首先对原数据进行清洗处理。
1.1数据导入
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#忽略警告信息
import warnings
warnings.filterwarnings('ignore')
#导入数据集
df= pd.read_csv('C:/Users/dwhyx/Downloads/data/双十一淘宝美妆数据.csv')
#查看数据
df.head()
1.2查看数据类型
df.info()
1.3缺失值处理
df.isnull().sum() #查看缺失值
发现sale_count,comment_count,存在缺失值,数据类型为float,用众数填充。
#缺失项补足
filter_mode=['sale_count','comment_count']
for i in df.columns:
if i in filter_mode:
df[i].fillna(df[i].mode(),inplace=True)
2.1美妆类别分析
2.1.1jieba分词
由于本数据集给出的数据信息有限,没有类别字段,我们需要自己根据现有title字段信息进行提取,这里还是用到我们之前常用的jieba分词方法。
#调用jieba包
import jieba
#定义函数
title_cut = []
for i in df.title:
j = jieba.lcut(i)
title_cut.append(j)
#把分词后的标题生成新的一列
df['item_name_cut'] = title_cut
#查看表数据
df[['id','title','item_name_cut']].head()
2.1.2提取商品类别信息
美妆商品主类别可以大概分为护肤品和化妆品两大类,护肤品类可以细分为乳液类、面膜类、清洁类等,化妆品可以细分为眼部类、口红类、修容类等。
# 对商品进行分类
main_type = [] #主类别
sub_type = [] #子类别
basic_config_data =
"""护肤品 乳液类 乳液 美白乳 润肤乳 凝乳 亮肤乳 菁华乳 修护乳 柔肤液
护肤品 眼部类 眼霜 眼部精华 眼膜
护肤品 面膜类 面膜
护肤品 清洁类 洗面 洁面 清洁 卸妆 洁颜 洗颜 去角质 磨砂
护肤品 化妆水 化妆水 爽肤水 柔肤水 柔肤液 精粹水 亮肤水 润肤水 保湿水 菁华水 保湿喷雾 舒缓喷雾 补水露 凝露
护肤品 面霜类 面霜 日霜 晚霜 柔肤霜 滋润霜 保湿霜 凝霜 日间霜 晚间霜 乳霜 修护霜 亮肤霜 底霜 菁华霜
护肤品 精华类 精华液 精华水 精华露 精华素
护肤品 防晒类 防晒霜 防晒喷雾
化妆品 口红类 唇釉 口红 唇彩
化妆品 底妆类 散粉 蜜粉 粉底液 定妆粉 气垫 粉饼 粉霜 粉底膏 粉底霜 BB CC 遮瑕
化妆品 眼部类 眉粉 染眉膏 眼线 眼影 睫毛膏
化妆品 修容类 鼻影 修容粉 腮红 高光
其他 其他 其他"""
#定义提取函数
category_config_map = {}
for config_line in basic_config_data.split('\n'):
basic_cateogry_list = config_line.strip().strip('\n').strip('\t').split('\t')
main_category = basic_cateogry_list[0]
sub_category = basic_cateogry_list[1]
unit_category_list = basic_cateogry_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)
#把主类别、子类别添加到表中
for i in range(len(df)):
exist = False
for temp in df.item_name_cut[i]:
if temp in category_config_map:
main_type.append(category_config_map.get(temp)[0])
sub_type.append(category_config_map.get(temp)[1])
exist = True
break
if not exist:
main_type.append('其他')
sub_type.append('其他')
df['main_type'] = main_type
df['sub_type'] = sub_type
#查看表数据
df[['id','title','item_name_cut','main_type','sub_type']].head()
2.1.3可视化分析
#主类别
df['main_type'].value_counts()
#子类别
df['sub_type'].value_counts()
#可视化分析
fig,axes = plt.subplots(1,2,figsize=(16,8))
explode1=[0.05,0.05,0.05]
data1 = df.groupby('main_type')['sale_count'].sum() #对sale_count进行汇总求和
ax1 = data1.plot(kind='pie',ax=axes[0],autopct='%.2f%%',explode=explode1,wedgeprops={'linewidth':0.5,'edgecolor':'black'},
textprops={'fontsize':12,'color':'black'}, # 设置文本标签的属性值
)
ax1.set_title('主类别销售量占比',fontsize=12)
data2 = df.groupby('sub_type')['sale_count'].sum()
ax2 = data2.plot(kind='pie',ax=axes[1],autopct='%.2f%%',wedgeprops={'linewidth':0.5,'edgecolor':'black'},
)
ax2.set_title('子类别销售量占比',fontsize=12)
plt.subplots_adjust(wspace=0.5)
plt.show()
通过饼形图看出,美妆类中护肤品销量远大于化妆品,其中清洁类在护肤品中销量最好。(注:因为这里是利用穷举法对商品就行分类,会存在分类不完整,所以其他会占比较高。)
2.2品牌销售量和销售额分析
各品牌的销售量和销售额
# 销售额=销售量*价格
df['销售额'] = df.sale_count*df.price
#绘图
fig,axes = plt.subplots(1,2,figsize=(12,10))
ax1 = df.groupby('店名').sale_count.sum().sort_values(ascending=True).plot(kind='barh',ax=axes[0],width=0.6)
ax1.set_title('品牌总销售量',fontsize=12)
ax1.set_xlabel('总销售量')
ax2 = df.groupby('店名')['销售额'].sum().sort_values(ascending=True).plot(kind='barh',ax=axes[1],width=0.6)
ax2.set_title('品牌总销售额',fontsize=12)
ax2.set_xlabel('总销售额')
plt.show()
通过柱状图图看出,销量前三的分别是相宜本草、美宝莲和悦诗风吟;销售额前三的分别是相宜本草、欧莱雅和佰草集;对比发现,相宜本草都是两者榜首,二三名的位置则有所变化,侧面说明美宝莲和悦诗风吟定价相对较低,欧莱雅和佰草集产品价格相对较高。价格是影响销售总额的一个重要因子,接下来查看各品牌价格分布。
2.3价格分析
2.3.1各品牌商品价格分布
#查看各品牌价格分布
plt.figure(figsize=(14,6))
sns.boxplot(x='店名',y='price',data=df)
plt.ylim(0,4000) #通过ylim适当调整y轴范围大小
plt.show()
通过箱型图可以直观看出,雪花秀、娇兰和SKⅡ整体商品价格偏高;悦诗风吟、妮维雅和美加净整体商品价格偏低。
2.3.2各品牌商品平均价格分布
#计算平均价格
df.groupby('店名').price.sum()
avg_price=df.groupby('店名').price.sum()/df.groupby('店名').price.count()
#绘图
fig = plt.figure(figsize=(12,6))
avg_price.sort_values(ascending=False).plot(kind='bar',width=0.8,alpha=0.6,color='g',label='各品牌平均价格')
y = df['price'].mean()
plt.axhline(y,0,5,color='r',label='全品牌平均价格')
plt.ylabel('各品牌商品平均价格')
plt.title('各品牌商品的平均价格',fontsize=24)
plt.legend(loc='best')
plt.show()
从上图看出,美妆类商品平均价格最高的是娇兰,最低是美加净;整体平均价格在350元左右。
这里只是对商品进行简单的销售数据复盘分析,通过数据对整体美妆类品牌有一个初步的轮廓认知。