前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >电商项目分析用户购买行为案例一

电商项目分析用户购买行为案例一

作者头像
木野归郎
发布2022-02-25 10:06:09
1.2K0
发布2022-02-25 10:06:09
举报
文章被收录于专栏:share ai happiness

大家好,我是小瑄

在电商项目中经常需要对用户购买行为进行分析,比如需要求用户连续购买天数,用户这次购买与上次购买间隔天数。

这里是基于hive on spark来对数据进行分析的,所以使用sql进行讲解

使用sql求用户连续购买天数以及与上次购买间隔天数,按照下面步骤进行处理

  • 对数据进行聚合/去重
  • 对用户进行分组排序
  • 日期与序号进行减法运算
  • 获取开始连续的日期以及连续天数
  • 使用Hive中lead函数

根据业务需求不一样,可能名称也不一样,主要是理解思想。

对数据进行聚合/去重

第一步是对数据按天进行初步聚合(因为一个用户可能在某天有多次购买行为)

因为只是作为演示,所以只用单个用户进行

代码语言:javascript
复制
select member_id,order_date 
from TABLE_NAME 
where member_id='1690' 
group by member_id,order_date

结果如下:

对用户进行分组排序

我们把上一个结果表称为: TABLE_1

代码语言:javascript
复制
select
   member_id
  ,order_date 
  ,row_number() over(partition by member_id order by order_date) as rank_num
from
  TABLE_1

结果如下:

日期与序号进行减法运算

思路: 如果我的日期是连续的.这时日期减去序号天数,那么连续的日期会得到同一个日期,我们暂且称之为起始日期。

我们把上一个结果表称为: TABLE_2

代码语言:javascript
复制
select
    member_id
   ,order_date 
   ,rank_num
   ,date_sub(order_date,rank_num) as origin_date
from
  TABLE_2

结果如下:

获取开始连续的日期以及连续天数

其实从上面的结果表中就已经能够统计出那些用户的连续天数满足需求了.为了保留更多信息,所以还是可以继续进行加工

我们把上一个结果表称为: TABLE_3

代码语言:javascript
复制
select
   table_a.member_id                   as member_id
  ,table_a.continuous_start_date      as continuous_start_date    
  ,count(table_a.continuous_start_date)   as continuous_date
from
  (
select
member_id
   ,min(order_date) over(partition by member_id,origin_date) as continuous_start_date
from
  TABLE_3
  ) table_a
 group by table_a.member_id,table_a.continuous_start_date

结果如下:

使用Hive中lead函数

lead() over() 将下一行提到当前行来另起字段

lead(需要调整的字段名,下几行,空余部分用什么补充)

lag() over() 将上一行提到当前行来另起字段

lag(需要调整的字段名,上几行,空余部分用什么补充)

饱经沙场的都知道,产品提需求后面一般都会跟着无数的顺便、再来等等…

思路:

当(continuous_start_date + continuous_date) - 下一行的continuous_start_date =中断天数

其实算中断天数的方法很多.我这里就采用 lead函数来实现.我们把上面的结果表称为: TABLE_4

代码语言:javascript
复制
select
   a.member_id                as member_id                
  ,a.continuous_start_date    as continuous_start_date      
  ,a.continuous_next_date     as continuous_next_date 
  ,a.continuous_date         as continuous_date          
  ,datediff(a.continuous_next_date,date_add(a.continuous_start_date,a.continuous_date)) as discontinuity_date
from
(
select
   member_id  as  member_id  
  ,continuous_start_date  as  continuous_start_date  
  ,lead(continuous_start_date,1,0) over(partition by member_id,continuous_start_date) as continuous_next_date
  ,continuous_dateas  continuous_date
from
   TABLE_4
 )a

结果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OnlyCoding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档