案例---电商用户业务行为分析

小咪咪 2022-12-12 12:30 237阅读 0赞

1. 电商用户业务行为分析

电商平台中的用户行为频繁且较复杂,系统上线运行一段时间后,可以收集到大量的用户行为数据,进而利用数据分析技术进行深入挖掘和分析,得到感兴趣的商业指标并增强对风险的控制。

电商用户行为数据多样,整体可以分为用户行为习惯数据和业务行为数据两大类。

用户的行为习惯数据包括了用户的登录方式、上线的时间点及时长、点击和浏览页面、页面停留时间以及页面跳转等等,我们可以从中进行流量统计和热门商品的统计,也可以深入挖掘用户的特征;这些数据往往可以从web服务器日志中直接读取到。

而业务行为数据就是用户在电商平台中针对每个业务(通常是某个具体商品)所作的操作,我们一般会在业务系统中相应的位置埋点,然后收集日志进行分析。

业务行为数据又可以简单分为两类:一类是能够明显地表现出用户兴趣的行为,比如对商品的收藏、喜欢、评分和评价,我们可以从中对数据进行深入分析,得到用户画像,进而对用户给出个性化的推荐商品列表,这个过程往往会用到机器学习相关的算法;另一类则是常规的业务操作,但需要着重关注一些异常状况以做好风控,比如登录和订单支付。

2. 项目主要模块

基于对电商用户行为数据的基本分类,我们可以发现主要有以下三个分析方向:

1.热门统计
利用用户的点击浏览行为,进行流量统计、近期热门商品统计等。

2.偏好统计
利用用户的偏好行为,比如收藏、喜欢、评分等,进行用户画像分析,给出个性化的商品推荐列表。

3.风险控制
利用用户的常规业务行为,比如登录、下单、支付等,分析数据,对异常情况进行报警提示。

本项目限于数据,我们只实现以下三个需求:

  1. 用户的四种行为情况,用柱状图显示;
  2. 统计每天各行为的访问次数,并以折线图显示;
  3. 找出购买率最高的前二十个商品品类,并以柱状图展示

3. 数据源解析

我们准备了一份淘宝用户行为数据集,保存为csv文件。包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢),数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔;用户行为类型共有四种
*1. pv:商品详情页点击;

  1. buy:购买;
  2. cart:加入购物车;
  3. fav:收藏商品;*

4、需求的实现过程:

分析数据 —> 整理并清除异常数据 —> 实现需求

1、分析数据

数据有3个多G,全部读取耗费时间与内存,因此使用pandas的迭代读取方法,先获取前一万条数据,熟悉数据内容,并加入列名

  1. import pandas as pd
  2. user_behavior = pd.read_csv('UserBehavior.csv',header=None,iterator=True)
  3. head_data = user_behavior.get_chunk(10000)
  4. head_data.head()

2、对数据进行整理、清洗
2.1、添加列名,数据特征分别是:用户ID,商品ID,商品类目ID,行为类型,时间戳

  1. head_data.columns = ['user_id','goods_id','category_id','behaviour','timestamp']

2.2 查看是否有缺失值

  1. head_data.info()

2.3、将时间戳转为时间格式,并新加一列time

  1. head_data['time'] = pd.to_datetime(head_data['timestamp'],unit='s')

2.4、时间戳这列数据下面不会用到,可以删除掉

  1. head_data = head_data.drop(['timestamp'],axis=1)

2.5、将time字段设为索引,目的是为了方便清除异常时间的数据

  1. head_data.set_index('time',inplace=True)

2.6、数据是2017年11月25日至2017年12月3日之间,将异常时间的数据清洗掉

  1. head_data = head_data['2017-11-25':'2017-12-3']

3、数据整理完,开始解决需求

需求1 : 统计用户的每个购物行为,思路:使用groupby进行分组并统计

  1. count_by_user_behav = head_data.groupby(['user_id','behaviour']).count()
  2. count_by_user_behav.head()

只取一列次数,作为画图的Y轴值

  1. count_by_user_behav = count_by_user_behav['goods_id']
  2. count_by_user_behav.head()

使用pandas自带的画图功能,因为用户很多,所以x轴就很长,双击图片可以放大

  1. count_by_user_behav.plot(kind='bar', figsize=(150,10))

在这里插入图片描述
需求2 : 统计每天各行为的访问次数,并以折线图显示

  1. # 接下来结合matplotlib画图
  2. from matplotlib import pyplot as plt
  3. %matplotlib inline
  4. # 设置画布尺寸
  5. plt.figure(figsize=(20, 8))
  6. # 以行为类型进行分组
  7. for group_name,group_data in head_data.groupby('behaviour'):
  8. # 对每天的行为进行统计,resample中的D表示天,也可以用H按小时统计
  9. count_by_day = group_data.resample('D').count()['behaviour']
  10. # 以日期作为X轴,以次数为y轴
  11. x = count_by_day.index
  12. y = count_by_day.values
  13. # 设置x,y轴数据以及每条线的标签名
  14. plt.plot(range(len(x)), y, label=group_name)
  15. # 设置x轴的刻标以及对应的标签,rotation是设置标签的倾斜度
  16. plt.xticks(range(len(x)), x, rotation=45)
  17. # 对每条折线的含义进行标注,自动选择最佳位置
  18. plt.legend(loc='best')
  19. 可以清晰看出四种购物行为的走势图
  20. plt.show()

在这里插入图片描述
需求3 : 找出购买率最高的前二十个商品品类,并以柱状图展示

思路:按商品种类进行分组,购买率 = 购买次数/(访问+购物车+收藏+购买)

  1. # 取消以时间为索引
  2. head_data = head_data.reset_index()
  3. # 按商品种类进行分组
  4. count_by_category_id = head_data.groupby('category_id')
  5. # 分组后每组数据的数量
  6. count_by_category_id.size()

看一下分组后的部分数据

  1. for group_name,group_data in count_by_category_id:
  2. print('组名:',group_name)
  3. print('数据:')
  4. print(group_data)
  5. print(group_data.shape)
  6. break

在这里插入图片描述
思路:通过shape看出这组数据的形状为两行五列,因此可以直接用shape[0]作为购物的总次数使用,接下来再以behaviour分组,通过size属性,获取buy这一组的次数,最后将商品种类与购买率一一对应保存在字典中,使用内置函数sorted对字典进行排序

  1. con_dict = { }
  2. 中,使用内置函数sorted对字典进行排序
  3. # 总次数
  4. for group_name,group_data in count_by_category_id:
  5. total = group_data.shape[0]
  6. buy = 0
  7. try:
  8. # 有些商品没有购买行为,以buy作为索引获取时会出错,使用异常语句捕捉一下
  9. buy = group_data.groupby('behaviour').size()['buy']
  10. except:
  11. pass# 转化率
  12. convention = buy/total*100
  13. # 类别名称对应转化率
  14. con_dict[group_name] = convention
  15. # 排序
  16. sort_con = sorted(con_dict.items(),key=lambda item:item[1],reverse=True)
  17. # 对排好序的列表取值
  18. sort_con_20 = sort_con[:20]
  19. sort_con_20

sorted的用法: 第一个参数是进行排序的可迭代对象; key:主要是用来比较的元素,lambda函数的参数取自要排序的可迭代对象,指定可迭代对象中的元素进行排序; reverse:排序规则,默认升序,True表示降序;

前二十个商品种类及对应购买率如下,拿到这个,就可以使用matplotlib进行绘图了

  1. # 获取所有的商品种类
  2. tick_label = [i[0] for i in sort_con_20]
  3. # 获取转化率
  4. num_list = [i[1] for i in sort_con_20]
  5. # 开始画图
  6. plt.figure(figsize=(20, 8))
  7. plt.bar(range(len(sort_con_20)), num_list,tick_label=tick_label)
  8. plt.show()

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,237人围观)

还没有评论,来说两句吧...

相关阅读

    相关 案例---用户业务行为分析

    1. 电商用户业务行为分析 电商平台中的用户行为频繁且较复杂,系统上线运行一段时间后,可以收集到大量的用户行为数据,进而利用数据分析技术进行深入挖掘和分析,得到感兴趣的商