双十一淘宝美妆消费数据分析
数据来源
- 和鲸社区数据分析项目:https://www.kesci.com/mw/project/5e60fc9cb8dfce002d7ff6a1/dataset
项目描述
- 由于是真实的商业数据,所以做了匿名处理,数据集中对店名的引用被处理为产品的品牌名以保护店家隐私。
- 通过对天猫双十一美妆数据集中品牌、销量、热度等特征的分析,尝试探索以下问题:
- 双十一期间,最受消费者青睐的产品或品牌是哪些
- 双十一期间,美妆行业各品类的销售情况
- 双十一期间,消费高峰何时出现
- 双十一期间,客户的评论数对销量的影响
import numpy as np
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
import warnings
warnings.filterwarnings('ignore')
1.读取数据
df=pd.read_csv('./beautymakeup.csv',',')
df.info()
df.head()
2.清洗数据
2.1去除重复值
df.duplicated().sum()#计算重复条数
df.drop_duplicates(inplace=True)#去除重复值
df.shape#查看去重后数据条数
df.reset_index(inplace=True,drop=True)#重置索引
2.2处理缺失值
df.sale_count.mode()#sale_count的众数
df.comment_count.mode()#comment_count的众数
sale_count、comment_count的众数都为0,且结合实际情况销量、评论数都可能存在为0的情况,因此是使用0来填充这两列的空值。
df.fillna(0,inplace=True)
df.sale_count=df.sale_count.astype('int64')
df.comment_count=df.comment_count.astype('int64')
df.isnull().sum()#检查是否完成缺失值的处理
2.3提取表格信息
2.3.1对商品名称title进行分词处理
import jieba
title_cut=[]
for i in df.title:
j=jieba.lcut(i)
title_cut.append(j)
df['name_cut']=title_cut
df[['title','name_cut']].head()
2.3.2给商品添加分类并增加对应列
first_type=[]#主类别
second_type=[]#子类别
basic_config_data = '''护肤品 套装 套装
护肤品 乳液类 乳液 美白乳 润肤乳 凝乳 柔肤液' 亮肤乳 菁华乳 修护乳
护肤品 眼部护理 眼霜 眼部精华 眼膜
护肤品 面膜类 面膜
护肤品 清洁类 洗面 洁面 清洁 卸妆 洁颜 洗颜 去角质 磨砂
护肤品 化妆水 化妆水 爽肤水 柔肤水 补水露 凝露 柔肤液 精粹水 亮肤水 润肤水 保湿水 菁华水 保湿喷雾 舒缓喷雾
护肤品 面霜类 面霜 日霜 晚霜 柔肤霜 滋润霜 保湿霜 凝霜 日间霜 晚间霜 乳霜 修护霜 亮肤霜 底霜 菁华霜
护肤品 精华类 精华液 精华水 精华露 精华素
护肤品 防晒类 防晒霜 防晒喷雾
化妆品 口红类 唇釉 口红 唇彩
化妆品 底妆类 散粉 蜜粉 粉底液 定妆粉 气垫 粉饼 BB CC 遮瑕 粉霜 粉底膏 粉底霜
化妆品 眼部彩妆 眉粉 染眉膏 眼线 眼影 睫毛膏
化妆品 修容类 鼻影 修容粉 高光 腮红
其他 其他 其他'''#标准分类
category_map={
}
for m in basic_config_data.split('\n'):
basic_category_list=m.strip().strip('\n').strip('\t').split('\t')
first_category=basic_category_list[0]
second_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_map[unit_category]=(first_category,second_category)
category_map
for i in range(len(df)):
exist=False
for j in df['name_cut'][i]:
if j in category_map:
first_type.append(category_map.get(j)[0])
second_type.append(category_map.get(j)[1])
exist=True
break
if not exist:
first_type.append('其他')
second_type.append('其他')
gender=[]
for i in range(len(df)):
if '男' in df.name_cut[i]:
gender.append('是')
elif '男生' in df.name_cut[i]:
gender.append('是')
elif '男士' in df.name_cut[i]:
gender.append('是')
else:
gender.append('否')