数据分析实战1:淘宝数据分析

本文需要用到的数据分析包有pandas、numpy、matplotlib、jieba、seaborn

数据分析的步骤:

  • 数据预处理(去重、缺失值处理)

  • 数据查看(找到有用的分析数据)

  • 数据探索(依照数据给出探索出的结果)

数据预处理

 

1、模块导入

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport jiebaimport seaborn as sns

2、数据导入

字段介绍:update_time表示购买时间,id表示唯一标识符、title标识产品名称、price表示价格、sale_count表示销售数量、comment_count表示评论数量、店名。​​​​​​​

data=pd.read_csv('./双十一淘宝美妆数据.csv')data.head()

3、查看数据基本信息​​​​​​​

print(data.shape)print(data.info())
# sale_count、comment_count含有缺失值

4、重复值处理​​​​​​​

# 去除重复值data=data.drop_duplicates(inplace=False)# print(data.shape)
# 去除重复值之后,索引没有发生变化,因此可以使用以下方法来重置索引data.reset_index(inplace=True,drop=True)print(data.shape)

inplace参数的使用

inplace=False,默认该删除操作不改变原数据,

而是返回一个执行删除操作后的新dataframe(能用=进行赋值操作,但是碰到处理数据量大的时候,会造成内存滥用);

 

inplace=True,则会直接在原数据上进行删除操作,

删除后无法返回(这样操作省内存空间也就是减少资源占用,但不能用=进行赋值否则报错nonetype).

 

5、缺失值处理​​​​​​​

# 缺失值的处理方式有多种,1、可以直接删除 2、可以使用平均值替换 # 3、可以使用众数替换# 查看缺失值数据data.isnull().any()data.isnull().sum()
# 方法1:data.dropna(subset=['sale_count'])data.dropna(subset=['comment_count'])
# 方法2# 填入平均值data['sale_count'].fillna(data['sale_count'].mean,inplace=True)data['comment_count'].fillna(data['comment_count'].mean,inplace=True)print(data.isnull().any())
# 方法3# mode1=data.sale_count.mode()# mode2=data.comment_count.mode()# print(mode1)# print(mode2)

6、数据结构

data.describe()

 

数据查看

1、对title列处理。通过对标题的切词来找到有用的信息​​​​​​​

# 数据处理操作# 1、新增列值,使用切词来处理title标题
title_cut=[]for i in data.title:    j=jieba.lcut(i)    title_cut.append(j)data['item_name_cut']=title_cutdata[['title','item_name_cut']].head()

2、添加新列​​​​​​​

# 给商品添加分类sub_type=[]   # 子类别main_type=[]  # 主类别# 设置字符串格式basic_config_data="""护肤品  套装  套装              护肤品  乳液类  乳液  美白乳  润肤乳  凝乳  柔肤液  亮肤乳  菁华乳  修护乳护肤品  眼部护理  眼霜  眼部精华  眼膜          护肤品  面膜类  面膜                          护肤品  清洁类  洗面  洁面  清洁  卸妆  洁颜  洗颜  去角质  磨砂            护肤品  化妆水  化妆水  爽肤水  柔肤水  补水露  凝露  柔肤液  精粹水  亮肤水  润肤水  保湿水  菁华水  保湿喷雾  舒缓喷雾护肤品  面霜类  面霜  日霜  晚霜  柔肤霜  滋润霜  保湿霜  凝霜  日间霜  晚间霜  乳霜  修护霜  亮肤霜  底霜  菁华霜护肤品  精华类  精华液  精华水  精华露  精华素                    护肤品  防晒类  防晒霜  防晒喷雾                        化妆品  口红类  唇釉  口红  唇彩                      化妆品  底妆类  散粉  蜜粉  粉底液  定妆粉   气垫  粉饼  BB  CC  遮瑕  粉霜  粉底膏  粉底霜    化妆品  眼部彩妆  眉粉  染眉膏  眼线  眼影  睫毛膏                  化妆品  修容类  鼻影  修容粉  高光  腮红                    其他  其他  其他"""

3、设置类别字典并添加新列​​​​​​​

# 设置字典category_config_map={}for config_line in basic_config_data.split('\n'):    print(config_line)    basic_category_list=config_line.strip().strip('\n').strip('\t').split('\t')#     print(basic_category_list)    main_category=basic_category_list[0]#     print(main_category)    sub_category=basic_category_list[1]#     print(sub_category)    ubit_category_list=basic_category_list[2:-1]#     print(ubit_category_list)    for ubit_category in ubit_category_list:        if ubit_category and ubit_category.strip().strip('\t'):            category_config_map[ubit_category]=(main_category,sub_category)category_config_ma
for i in range(len(data)):    exist=False    for temp in data.item_name_cut[i]:#         print(temp)        if temp in category_config_map:#             print(category_config_map.get(temp)[0])#             print(category_config_map.get(temp)[1])            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('其他')​​​​​​​
# 查看数据格式print(len(sub_type),len(main_type),len(data))​​​​​​
# 新增加列值data['sub_type']=sub_typedata['main_type']=main_typedata.head()

 

 

4、数据查看​​​​​​​

# 统计汇总data['sub_type'].value_counts()data['main_type'].value_counts()

5、判断特殊用法​​​​​​​

# 切词判断是否为特殊群体使用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('否')​​​​​​
data['是否男士专用']=genderdata['是否男士专用'].value_counts()

6、日期设置​​​​​​​

# 新增销售额和购买日期列值data['销售额']=data.sale_count*data.pricedata['update_time']=pd.to_datetime(data['update_time'])data['update_time']# 将时间设置成新的indexdata=data.set_index('update_time')data['day']=data.index.day

7、删除不需要的数据​​​​​​​

# 保存数据del data['item_name_cut']

8、保存数据

data.to_excel('clean_beautymakeup.xls',sheet_name='clean_data')

 

数据探索

 

1、各品牌sku数​​​​​​​

# 指定默认字体plt.rcParams['font.sans-serif']=['SimHei']# 负号显示问题plt.rcParams['axes.unicode_minus']=Falseplt.figure(figsize=(8,6))# 计算各店铺的商品数量data1=data['店名'].value_counts().sort_values(ascending=False)# 柱形图的设置data1.plot.bar(width=0.6,alpha=0.6,color='b')# 题目的设置plt.title('各品牌SKU数',fontsize=18)# 纵坐标的设置plt.ylabel('商品数量',fontsize=14)plt.show()

 

2、各品牌销售量个销售额分布​​​​​​​

# 品牌总销售量和总销售额# 设置画板,fig,axes=plt.subplots(1,2,figsize=(12,10))# 品牌总销售量,按照店名汇总升序排序ax1=data.groupby('店名').sale_count.sum().sort_values(ascending=True)# 绘制图表类型并放置画板位置ax2=ax1.plot(kind='barh',ax=axes[0],width=0.6)# 设置标题ax2.set_title('品牌总销售量',fontsize=12)# 设置横坐标轴ax2.set_xlabel('总销售额')

ax3=data.groupby('店名')['销售额'].sum().sort_values(ascending=True)ax4=ax3.plot(kind='barh',ax=axes[1],width=0.6)ax4.set_title('品牌总销售额',fontsize=12)ax4.set_xlabel('总销售额')
# plt.subplots_adjust(wspace=0.4)plt.show()

3、各类别的销售量个销售额介绍​​​​​​​

# 各类别的销售量,销售额情况fig,axes=plt.subplots(1,2,figsize=(12,5))# 主类别的分布data1=data.groupby('main_type')['sale_count'].sum()

ax1=data1.plot(kind='pie',ax=axes[0],               autopct='%.1f%%',    # 设置百分比格式,保留一位小数               pctdistance=0.8,     # 设置百分比标签与圆心距离               labels=data1.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=20)
# 次类别的分布data2=data.groupby('sub_type')['sale_count'].sum()
ax2=data2.plot(kind='pie',ax=axes[1],               autopct='%.1f%%',    # 设置百分比格式,保留一位小数               pctdistance=0.8,     # 设置百分比标签与圆心距离               labels=data2.index,  # 设置标签值               labeldistance=1.2,  # 设置标签与圆心的距离               startangle=230,       # 设置饼图的初始角度               radius=1.1,          # 设置饼图的半径               counterclock=False,  # 是否逆时针,这里设置为顺时针方向               wedgeprops={'linewidth':1.2,'edgecolor':'k'},  # 设置饼图内外边界的属性值               textprops={'fontsize':10,'color':'k'},         # 设置文本标签的属性值              )ax2.set_title('子类别销售量占比',fontsize=20)
plt.subplots_adjust(wspace=0.4)plt.show()

 

4、各品牌种类的销售额和销售量分布​​​​​​​

# 各品牌总类的销售额和销售量
plt.figure(figsize=(14,6))# 设置柱形图sns.barplot(x='店名',y='sale_count',hue='main_type',data=data,            saturation=0.75,ci=0)plt.title('各品牌各总类的总销售额')plt.ylabel('销量')# 添加文本标注plt.text(0,78000,'注:此处可以使用堆叠图,对比效果更明显',         verticalalignment='top',horizontalalignment='left',color='gray',fontsize=10)plt.show()
plt.figure(figsize=(14,6))# 设置柱形图sns.barplot(x='店名',y='销售额',hue='main_type',data=data,            saturation=0.75,ci=0)plt.title('各品牌各总类的总销售额')plt.ylabel('销量额')plt.show()

5、各品牌各子类的总销量和总销售额​​​​​​​

# 各品牌各子类的总销售量plt.figure(figsize=(16,6))sns.barplot(x='店名',y='sale_count',hue='sub_type',data=data,saturation=0.75,ci=0)plt.title('各品牌各子类的总销售量')plt.ylabel('销量')plt.show()
# 各品牌各子类的总销售额plt.figure(figsize=(14,6))sns.barplot(x='店名',y='销售额',hue='sub_type',data=data,saturation=0.75,ci=0)plt.title('各品牌各子类的总销售额')plt.ylabel('销量额')plt.show()

6、各品牌的热度​​​​​​​

# 各品牌的热度,评论数plt.figure(figsize=(12,6))data1=data.groupby('店名').comment_count.mean().sort_values(ascending=False)data1.plot(kind='bar',width=0.8)plt.title('各品牌商品的平均评论数')plt.ylabel('评论数')plt.show()

  •  
plt.figure(figsize=(12,10))
x=data.groupby('店名')['sale_count'].mean()y=data.groupby('店名')['comment_count'].mean()s=data.groupby('店名')['price'].mean()txt=data.groupby('店名').id.count().index# print(txt)
sns.scatterplot(x,y,size=s,hue=s,sizes=(100,1500),data=data)
# 注释for i in range(len(txt)):    plt.annotate(txt[i],xy=(x[i],y[i]))
plt.ylabel('热度')plt.xlabel('销量')
plt.legend(loc='upper left')plt.show()

7、品牌价格对比​​​​​​​

# 各品牌的价格,箱线图的绘制
plt.figure(figsize=(14,6))sns.boxplot(x='店名',y='price',data=data)plt.ylim(0,2500)plt.show()

​​​​​​​

# 各品牌产品的平均价格fig=plt.figure(figsize=(12,6))
data.groupby('店名').price.sum()avg_price=data.groupby('店名').price.sum()/data.groupby('店名').price.count()data1=avg_price.sort_values(ascending=False)
data1.plot(kind='bar',width=0.8,alpha=0.6,color='b',label='各品牌平均价格')# 平均价格y=data['price'].mean()plt.axhline(y,0.1,color='r',label='全品牌平均价格')
# 设置图标plt.ylabel('各品牌平均价格')plt.title('各品牌产品的平均价格',fontsize=24)# 图例设置plt.legend(loc='best')plt.show()

 

随着大数据的时代的到来,数据变得越来越重要,数据可以帮助我们来看清行业的本质,也可以帮助我们更加快速的了解一个行业,关注公众号——DT学说,走进数据的时代

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值