淘宝用户行为数据分析

系列文章目录

第二章 淘宝用户生命周期分析



一、项目背景

随着互联网行业快速发展,其中电商已成为消费的主要趋势,并且电商板块收入已经成为企业新的主要增长点。近几年,我国的电商发展快速,电商市场越来越趋于成熟,竞争加剧,用户有了更多的选择,导致用户对于商品和服务的质量的要求也越来越高。因此需要企业更高的运营能力,在各个方面都需要做到精细化运营,这样才能更好的不被市场和用户所淘汰,因此越来越多的电商企业开始关注数据的价值,日常业务产生的海量数据蕴含着巨大的价值,如何在现在竞争激烈的环境中生存下来,其中最重要的一个因素就是数据化运营。

二、项目目的

基于淘宝用户行为数据进行数据分析,探索用户行为规律,帮助用户快速找到商品,提高用户忠诚度,为商家寻找高价值客户,为商家的精准营销与精细化运营提供数据支撑,从而帮助商家实现营收增长。


三、理解数据

数据来源:来自阿里云天池,共有1225万条左右数据,数据为淘宝APP2014年11月18日至2014年12月18日的用户行为数据,共计6列字段。
天池数据集
user_id: 用户id
item_id: 商品id
behavior_type: 用户行为类型(1:点击;2:收藏;3:加入购物车;4:支付)
user_geoshash: 地理位置
item_category: 用户行为发生的时间

二、分析思路

在这里插入图片描述

三、用户生命周期分析

1、 用户活跃规律

(1)不同日期的网页浏览量和访问量情况

代码

# 每天UV和PV的变化
# 浏览量不用去重,直接分组计算
pv_daily = tbdata['user_id'].groupby(tbdata['date']).count().rename('pv').reset_index()
# 访客数,先分组,去重,最后统计count
uv_daily = tbdata['user_id'].groupby(tbdata['date']).apply(lambda x:x.drop_duplicates().count()).rename('uv').reset_index()
# 日期变换
date = pv_daily.date.astype('str').to_list()

可视化

from pyecharts.charts import *
import pyecharts.options as opts
import numpy as np

pv = (
Line(init_opts=opts.InitOpts(width="1000px",height="500px")) #设置画布大小
    .add_xaxis(date)
    .add_yaxis(
                "页面访问量(PV)",
                #PV数据,用np的方法,转为十万,取小数点2位
                np.round(pv_daily.pv/10000,decimals=2)
                )
    .add_yaxis(
                "页面访客数(UV)",
                yaxis_index=1,
                #UV数据,用np的方法,转为,取小数点2位
                y_axis=np.round(uv_daily.uv/1,decimals=2)
                
                )
    .extend_axis(      #添加新的Y轴
        yaxis=opts.AxisOpts(
            name="uv",
            type_="value",
            min_=0,
            max_=10000,
            interval=2000, #最小值,最大值,步长
            axislabel_opts=opts.LabelOpts(formatter="{value} 人"),
        )
    )
#   全局  
    .set_global_opts(  
        tooltip_opts=opts.TooltipOpts(#打开提示框
            is_show=True,   # 是否显示提示框组件,包括提示框浮层和 axisPointer。
            trigger="axis",  # 触发类型,坐标轴
            axis_pointer_type="cross"    #指示器类型,十字
        ),
        xaxis_opts=opts.AxisOpts(
            type_="category",#纵轴区间阴影
            axispointer_opts=opts.AxisPointerOpts(is_show=True,type_="shadow"),
        ),
        yaxis_opts=opts.AxisOpts( #调整主Y轴的名称 最小值,最大值,步长
            name="pv",
            type_="value",
            min_=0,
            max_=40,
            interval=10,
            axislabel_opts=opts.LabelOpts(formatter="{value} 万次"),
            axistick_opts=opts.AxisTickOpts(is_show=True),  #显坐标轴刻度
            splitline_opts=opts.SplitLineOpts(is_show=True),  #显分割线
        ),
        title_opts=opts.TitleOpts(title="日期维度下的PV和UV",pos_left='center'),#标题设置
        legend_opts=opts.LegendOpts(is_show=True,pos_top='95%')    #显示图例
    )
     .set_series_opts(
        # 为了不影响标记点,这里把标签关掉
        label_opts=opts.LabelOpts(is_show=False), #不显示标签数字
        markpoint_opts=opts.MarkPointOpts( #显示最大值和最小值
            data=[
                opts.MarkPointItem(type_="max", name="x轴最大", value_index=1),
                opts.MarkPointItem(type_="min", name="x轴最大", value_index=1),
                
            ])
    )
)
pv.render_notebook()```

## 2.读入数据

代码如下(示例):

```c
data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

在这里插入图片描述

(2)分析

从图中可以看出,pv和uv数据成正相关关系。双十二当天浏览量和访问量急剧上升,均达到最高值,这是因为当天双十二活动,推测为大量优惠活动推广拉新活动带来的影响,吸引了大量用户的访问点击,也证明了这次活动的效果很好。

(3)不同日期的网页浏览量和访问量情况

# 24小时pv的变化
pv_moment = tbdata.groupby('hour')['user_id'].count().rename('pv').reset_index()
# 24小时uv的变化
uv_moment = tbdata.groupby('hour')['user_id'].apply(lambda x:x.drop_duplicates().count()).rename('uv').reset_index()
# 日期变换
attr = pv_moment.hour.astype('str').to_list()    #日期列表

可视化

from pyecharts.charts import *
import pyecharts.options as opts
import numpy as np

pv = (
Line(init_opts=opts.InitOpts(width="1000px",height="500px")) #设置画布大小
    .add_xaxis(xaxis_data=attr)
    .add_yaxis(
                "页面访问量(PV)",
                np.around(pv_moment.pv/10000,decimals=2),   #PV数据,用np的方法,转为十万,取小数点2位
                )
    .add_yaxis(
                series_name="页面访客数(UV)",
                yaxis_index=1,
                y_axis=uv_moment['uv'].to_list(),
                
                )
    .extend_axis(      #添加新的Y轴
        yaxis=opts.AxisOpts(
            name="uv",
            type_="value",
            min_=0,
            max_=10000,
            interval=2000, #最小值,最大值,步长
            axislabel_opts=opts.LabelOpts(formatter="{value} 人"),
        )
    )
#   全局  
    .set_global_opts(  
        tooltip_opts=opts.TooltipOpts(#打开提示框
            is_show=True,   # 是否显示提示框组件,包括提示框浮层和 axisPointer。
            trigger="axis",  # 触发类型,坐标轴
            axis_pointer_type="cross"    #指示器类型,十字
        ),
        xaxis_opts=opts.AxisOpts(
            type_="category",#纵轴区间阴影
            axispointer_opts=opts.AxisPointerOpts(is_show=True,type_="shadow"),
        ),
        yaxis_opts=opts.AxisOpts( #调整主Y轴的名称 最小值,最大值,步长
            name="pv",
            type_="value",
            min_=0,
            max_=100,
            interval=20,
            axislabel_opts=opts.LabelOpts(formatter="{value} 万人"),
            axistick_opts=opts.AxisTickOpts(is_show=True),  #显坐标轴刻度
            splitline_opts=opts.SplitLineOpts(is_show=True),  #显分割线
        ),
        title_opts=opts.TitleOpts(title="时刻维度下的PV和UV",pos_left='center'),#标题设置
        legend_opts=opts.LegendOpts(is_show=True,pos_top='95%')    #显示图例
    )
     .set_series_opts(
        # 为了不影响标记点,这里把标签关掉
        label_opts=opts.LabelOpts(is_show=False), #不显示标签数字
        markpoint_opts=opts.MarkPointOpts( #显示最大值和最小值
            data=[
                opts.MarkPointItem(type_="max", name="x轴最大", value_index=1),
                opts.MarkPointItem(type_="min", name="x轴最大", value_index=1),
                
            ])
    )
)
pv.render_notebook()

在这里插入图片描述

(4)分析

由图可以看出,发现每天用户活跃的高峰时间段在晚上21点和22点,这可能是因为上班族这时候也差不多下班结束工作,学生也结束了学习选择娱乐放松的休闲时刻;低峰时间段是在凌晨4点,该时间段人大都处于睡眠休息中。
建议:可以考虑在晚上8点增大商品推广力度,加大营销投入,可取的较好的收益,1点到5点之间适合做系统维护。

2、用户留存规律

(1)跳失率

跳失率 = 只有过1次pv的用户数量/总用户数

gourpby_userid = tbdata.groupby(tbdata['user_id'])
user_type = gourpby_userid.behavior_type.value_counts().unstack()
# print("分组情况",user_type.head(10))
# 跳失率:计算只浏览过一次界面的用户数量
only_pv_users = user_type[user_type[1]==1].shape[0]
bounce_rate = only_pv_users/to_uv

在这里插入图片描述

(2)分析

这个周期内的跳失率为0.0009,在一定程度上反应了商品的受欢迎程度高,说明店铺的商品详情页能吸引到用户进行下一步行为。

(3)留存率

由于数据不完整,假设将第一天(2014.12.18)登录的用户作为新用户,对其分析次日留存率、三日留存率、七日留存率。

# 次日新用户人数
ciri = df_date[df_date['date_diff']=='1 days'].drop_duplicates('user_id').shape[0]
# 三日新用户人数
sanri = df_date[df_date['date_diff']=='2 days'].drop_duplicates('user_id').shape[0]
# 七日新用户人数
qiri = df_date[df_date['date_diff']=='6 days'].drop_duplicates('user_id').shape[0]
print('次日留存率:{}'.format(round(ciri/diyi*100,2)))
print('三日留存率:{}'.format(round(sanri/diyi*100,2)))
print('七日留存率:{}'.format(round(qiri/diyi*100,2)))

结果:
在这里插入图片描述

(4)分析

用户的留存率较高,并保持相对稳定,由于无法获得第一天新用户人数,故数据的准确含义不能确定,但也从侧面说明淘宝平台是一个较成熟的平台。


3、用户购买情况

(1)复购率

复购率 = 购买2次及以上用户数/总购买用户数

gourpby_userid = tbdata.groupby(tbdata['user_id'])
user_type = gourpby_userid.behavior_type.value_counts().unstack()
# 复购率:计算支付行为>=2的用户数量 / 总购买数
user_bought_twice = user_type[user_type[4]>=2].shape[0]
# print("计算支付行为>=2的用户数量:",user_bought_twice)
user_bought = user_type[user_type[4]>0].shape[0]
repurchase = user_bought_twice/user_bought

可视化
在这里插入图片描述

(3)分析

平台整体复购率较高,淘宝用户的忠诚度以及淘宝对用户的粘性高。

(4)购买频次分析

# 这个id共发生了多少次支付行为(behavior_type==4),count对
a = tbdata['behavior_type'][tbdata['behavior_type']==4].groupby(tbdata['user_id']).count().rename('pay_count').reset_index()
# print("每个id发生的支付行为情况",'\n',a)

# 对支付行为的次数进行计数\分类,10次|20次|30次
b = a['user_id'].groupby(a['pay_count']).count().rename('user_count').reset_index()
print("每种支付次数对应多少个用户",'\n',b)
# 添加一列:支付次数分层,[1,10):10 ; [10,20):20 ; ...
b['fenceng'] = b['pay_count'].apply(lambda x:(int(x/10)+1)*10)
# 算算每层有多少用户,count数条数,sum求和:将user_count加和
data_user_buy = b['user_count'].groupby(b['fenceng']).sum().rename('num').reset_index()
data_user_buy

可视化

from pyecharts.charts import *
import pyecharts.options as opts
bar = (Bar()
       .add_xaxis(data_user_buy.fenceng[0:15].tolist())
       .add_yaxis('人数', data_user_buy.num[0:15].tolist(), yaxis_index=0)
    
       .set_global_opts(
        tooltip_opts=opts.TooltipOpts(
            is_show=True,trigger="axis",axis_pointer_type="cross"
        ),
        xaxis_opts=opts.AxisOpts(
            name="频次",
            type_="category",
            axispointer_opts=opts.AxisPointerOpts(is_show=True,type_="shadow"),
        ),
        yaxis_opts=opts.AxisOpts(
            name="人数",
            axislabel_opts=opts.LabelOpts(formatter="{value}人"),
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
        title_opts=opts.TitleOpts(title="用户购买次数情况分析",pos_left='center'),
        legend_opts=opts.LegendOpts(is_show=False)
    )
      )

bar.render_notebook()

在这里插入图片描述

(5)分析

由图可见,58.05%的用户购买10次以内,10-20-30次之间的流失较多,下降幅度较大,10-20次用户流失了57.44%,20-30次用户流失了62.93%。
建议:针对较少成交的买家要多次触达,养成消费习惯,增加推广,完善购物体验,提高用户消费频次。30次以上,较高几率会成为高度忠实用户,应提高其满意度,增大留存率。

(6)复购特征分析

代码

# 多重行索引分组聚合,先按user_id分组,然后按date分组,最后统计各组内支付行为的次数
buy_again_days1 = tbdata[tbdata['behavior_type']==4].groupby(['user_id','date']).count().reset_index()
# 加一列,实现date数据列的格式转换:str-> datetime
buy_again_days1['date_time'] = pd.to_datetime(buy_again_days1['date'])
# 对date_time 里的每个用户下面的所有交易时间进行升序排序,然后做差分,删除空值
buy_again_days2 = buy_again_days1.groupby('user_id')['date_time'].apply(lambda x:x.sort_values().diff(1).dropna())
# 将时间数据转换成int型,然后统计数量
buy_again_days = buy_again_days2.map(lambda x:x.days).value_counts().reset_index()

可视化

line = (Line()
       .add_xaxis([i for i in range(1,31)])
       .add_yaxis('',buy_again_days.date_time.tolist())
       .set_global_opts(
        tooltip_opts=opts.TooltipOpts(
            is_show=True,trigger="axis",axis_pointer_type="cross"
        ),
        xaxis_opts=opts.AxisOpts(
            name="天数",
            type_="category",
            axispointer_opts=opts.AxisPointerOpts(is_show=True,type_="shadow"),
        ),
        yaxis_opts=opts.AxisOpts(
            name="人数",
            type_="value",
            min_=0,
            max_=15000,
            interval=3000,
            axislabel_opts=opts.LabelOpts(formatter="{value}人"),
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
        title_opts=opts.TitleOpts(title="用户复购间隔时间及消费次数分布",pos_left='center'),
        legend_opts=opts.LegendOpts(is_show=True,pos_top='95%')
    )
    
      )

line.render_notebook()

在这里插入图片描述

(7)分析

从上图可知,用户复购时间间隔主要在2天,大部分买家会在购买后的2天内在重新购买。推测可能商店本身性质,及相关优惠活动对用户的吸引力较大,用户在短时间发生复购。

总结

以上是对用户生命周期的分析。从用户活跃规律、用户留存规律、用户购买情况入手,分析用户频繁浏览、访问的时间,发现规律,找到增加访问量、点击量的活动投入时间点;分析用户留存规律,及时采取新的活动策略,预防流失;分析用户购买情况,了解用户购买规律,知道用户的购买习惯,利于我们活动商品的推荐。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值