数据分析实战——淘宝母婴用品购买情况

1.数据说明

数据来源:阿里巴巴天池:https://tianchi.aliyun.com/dataset/dataDetail?dataId=45

字段说明:
表(sample)sam_tianchi_mum_baby_trade_history

字段说明
user_id用户ID
auction_id购买行为编号
cat_id商品种类ID
cat1商品种类
property商品属性
buy_mount购买数量
day购买时间

表(sample)sam_tianchi_mum_baby

字段说明
user_id用户ID
birthday出生日期
gender性别(男0女1)

2.数据清洗

2.1导入数据

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
#读取数据
data = pd.read_csv('(sample)sam_tianchi_mum_baby_trade_history.csv')
#查看数据信息
data.info()

在这里插入图片描述

2.2选择子集

商品属性字段的数据都是一些编号,对分析没有用处,故删除该字段。

data.drop(columns='property',inplace=True)

2.3缺失值处理

#查看缺失值
data.isnull().sum()

无缺失值

2.4重复值处理

#查看重复值并显示
data.duplicated('user_id').sum()
data[data.duplicated('user_id')].user_id

分析:用户id的重复说明是用户进行复购,不影响分析结果,故不作处理。

2.5新建年龄列

可以通过表1的购买时间和表2的婴儿出生日期来计算年龄,从而对不同年龄段的婴儿需求进行分析。

#打开表2
data1=pd.read_csv('(sample)sam_tianchi_mum_baby.csv')
#匹配表2中用户ID对应的销售表单
data2 = data1.merge(data,how="left",on='user_id').fillna(0)
data2 = data1.merge(data2,how="left",on='user_id').fillna(0)
data2.head()

在这里插入图片描述

#删除多余的列
data2.drop(["birthday_y","gender_y"],axis=1,inplace=True)
#查看数据信息
data2.info()

在这里插入图片描述

#将日期由数字格式转换成文本格式
data2[["day","birthday_x"]] = data2[["day","birthday_x"]].astype('object')
#将日期由文本格式转换成日期格式
import datetime
data3 = data2['day'].apply(lambda x:datetime.datetime.strptime(str(x),"%Y%m%d"))
data4 = data2['birthday_x'].apply(lambda x:datetime.datetime.strptime(str(x),"%Y%m%d"))
#计算用户购买时的婴儿年龄
data5=[]
for i in range(0,956):
    data5.append(data3[i].year - data4[i].year)
data6 = pd.DataFrame(data5)
data2['age'] = data6 
#验证是否成功
data2.head()

在这里插入图片描述

2.6去除异常值

data2.describe()

在这里插入图片描述
主要看年龄age一列,可以发现出现了28岁的“婴儿”,不符合本课题内容,需要去除年龄大于10的订单,而年龄出现负数,可以认为在婴儿出生前,父母就准备好了奶粉,或者试验奶粉,属于正常现象不做处理。而一个订单销售数量160,距标准值相差甚远属于异常值,需要处理订单数大于15的订单。

data2[data2['age']>10]
data2=data2.drop(labels=[97,720,727,949])#其中几项是不合格的行的标签
data2[data2['buy_mount']>15]
data2 = data2.drop(labels=[471,483,493,520,917])#其中几项是不合格的行的标签

3.消费者行为分析

3.1数据透视表

result1=pd.pivot_table(data,index='cat1',values='buy_mount',aggfunc=np.sum)
plt.figure(figsize=(7,5))
plt.bar(x=['28','38','50008168','50014815','50022520','122650008'],
        height=result1['buy_mount'])
plt.show()

在这里插入图片描述
分析:由图可知,商品编号为28的销量最高,而50014815次之,而122650008的销量最低,应对此现状提高或减少生产量或者加大宣传力度。

3.2用户画像

3.2.1探究不同年龄段的消费情况

#使用数据透视表
result2=pd.pivot_table(data2,index='age',values='buy_mount',aggfunc=np.sum)
plt.figure(figsize=(7,5))
plt.bar(x=['-2','-1','0','1','2','3','4','5','6','7','8','9','10'],
        height=result2['buy_mount'])
plt.show()

在这里插入图片描述
分析:通过购买用户婴儿年龄与购买数量的关系绘制用户画像,可知最主要的消费人群为婴儿年龄为0到2岁的用户,而随着年龄的增加用户的购买量减少,而婴儿出生前购买的数量相对较少。
结论:可以重点加大对婴儿年龄为0—2岁用户的推广力度,而也要注意推广婴儿出生前的用户,这样可以提高怀孕用户的销售量。

3.2.2探究不同性别用户的销售情况

#性别与购买数量的销售关系
result3=pd.pivot_table(data2,index='gender_x',values='buy_mount',aggfunc=np.sum)
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.figure(figsize=(5,5))
plt.pie(['650','559','44'],
        labels=['男孩','女孩','未出生'],
        colors=['red','green','blue'],
        autopct='%.2f%%')
plt.title("各渠道销售额占比")
plt.show()

在这里插入图片描述
分析:由图可知,婴幼儿为男孩的销售量较女孩更大一些,而未出生购买商品的用户占比很小,所以应该加大用户家婴幼儿是男孩的推广力度以及产品制造。

#性别与商品种类的销售关系
result4=pd.pivot_table(data2,index='cat1',
                       columns='gender_x',
                       values='buy_mount',
                       aggfunc=np.sum)
plt.figure(figsize=(12,5))
plt.subplot(221)
plt.bar(x=['28','38','50008168','50014815','50022520','122650008'],
        height=result4[0],color='red')
plt.subplot(222)
plt.bar(x=['28','38','50008168','50014815','50022520','122650008'],
        height=result4[1],color='green')
plt.subplot(223)
plt.bar(x=['28','38','50008168','50014815','50022520','122650008'],
        height=result4[2],color='blue')
plt.xlabel("商品种类")
plt.ylabel("销售数量")
plt.show()

在这里插入图片描述
分析:从数据透视表中可以看出,男孩和女孩都更偏向于购买商品50008168,商品50014815与商品28次之,可以加大对这几类商品的生产与宣传力度。而对于未出生的婴儿在性别处于未知阶段的时候商品50014815与商品28更受消费者青睐,可以通过对怀孕的孩子妈妈或者家庭进行宣传,提高购买量。

4.商品销售的时间影响分析

4.1销量与月份关系

#将数据的购买日期转换成日期格式
data["day"] = data['day'].apply(lambda x:datetime.datetime.strptime(str(x),"%Y%m%d"))
data['Month'] = data.day.astype('datetime64[M]') #设置成月份形式
data_month = data.groupby('Month',as_index = False)#按月份分类
data_month.buy_mount.sum()#按月份汇总
df = data_month.buy_mount.sum()#新建汇总列表
plt.figure(figsize=(20,5))
plt.plot(df["Month"],df["buy_mount"])
plt.show()

在这里插入图片描述

分析波峰:在每年的10到11月份左右会有一个大波峰,每年的5月以及9月左右会有一个小波峰,在这段时间销量较同期会有一个明显的涨幅
推测1:节日因素,在5月有劳动节,母亲节;9月有中秋节;而是10月到11月左右有国庆节、万圣节、立冬、感恩节等节日,平台在这些节日可能绘有促销打折,这时随着价格降低需求量会增加,同时销售量也会增加。
推测2:双十一打折力度高,淘宝双十一是从2009年开始便存在的大型购物促销狂欢日,而又伴随着即将到来的春节假期,顾客可能进行囤货,结合两个因素导致需求量大幅上升,所以在11月前会出现一个大型的销量波峰。
结论:在5月与9月以及11月需要加大供货量,保证供需平衡。

分析波谷:每年的1月左右会出现一个明显的销量波谷,说明这段时间的销量较同期低。
推测:1月份正值春节,店铺休息,而开着的店铺肯定会抬高物价,而用户在11月进行囤货所以导致1月份的需求量减小,出现销量波谷。
结论:1月销量惨淡,需要考虑减少进货量的问题,适当降低物价拓宽销售渠道加大宣传力度。

4.2销量与季度关系

#删除不完整的季度信息
df=df.drop(labels=[0,1,2,3,4,5,30,31])
#计算每个季度的销售数量
spring = df[:3]['buy_mount'].sum() + df[12:15]['buy_mount'].sum()
summer = df[3:6]['buy_mount'].sum() + df[15:18]['buy_mount'].sum()
autumn = df[6:9]['buy_mount'].sum() + df[18:21]['buy_mount'].sum()
winter = df[9:12]['buy_mount'].sum() + df[21:24]['buy_mount'].sum()
plt.figure(figsize=(6,6))
plt.pie([spring,summer,autumn,winter],
        labels=["春季",'夏季','秋季','冬季'],
        autopct='%.2f%%')
plt.title("季度销量图")
plt.show()

在这里插入图片描述
分析:由季度销量图可以看出其中冬季销量最多达到了43%,春季最少,为13%。应提高冬季的供货量,并趁销售热潮举办活动加大宣传提高销量,而春季则应该调整销售模式,降低价格以提高销售量。

5.用户复购率分析

data_du = data[data.duplicated('user_id')] #查看复购数据
data_du.info()

在这里插入图片描述
分析:共29971条订单记录而复购率仅为0.09%,用户粘性差,可能由于多种原因共同导致,其中可能包括产品质量差,客服服务态度差,售后保障差等多种原因。商家必须要仔细查找更多原因来保证后续提高销售质量,提高用户的复购率。

sale_fu = pd.pivot_table(data_du,index='cat1',values='buy_mount',aggfunc=np.sum)
plt.figure(figsize=(5,5))
plt.bar(x=['50014815','38','28','50008168'],
        height=['2','4','8','19'])
ax = plt.gca()
ax.set_xlabel("销量",fontsize = 14,color = 'b')
ax.set_ylabel("商品分类",fontsize = 14,color = 'b')
plt.show()

在这里插入图片描述
分析:在少量的复购订单中,复购用户购买50008168的比较多,其次是28。与之前的分析相吻合,店铺可着重推广这两款商品,并且提高其他的商品质量,提高总销售量与利润。

  • 5
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值