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

点击上方“大话coding”,选择“星标”公众号

重磅干货,第一时间送达


大家好,我是小瑄

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

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

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

  • 对数据进行聚合/去重

  • 对用户进行分组排序

  • 日期与序号进行减法运算

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

  • 使用Hive中lead函数

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

对数据进行聚合/去重

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

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

select member_id,order_date 
from TABLE_NAME 
where member_id='1690' 
group by member_id,order_date

结果如下:

05c573f4ab8059dc4c3929d810e970d5.png

Step 2:对用户进行分组排序

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

select
   member_id
  ,order_date 
  ,row_number() over(partition by member_id order by order_date) as rank_num
from
  TABLE_1

结果如下:

c42b891f8a9289c298d27a507f82e95b.png

Step 3:日期与序号进行减法运算

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

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

select
    member_id
   ,order_date 
   ,rank_num
   ,date_sub(order_date,rank_num) as origin_date
from
  TABLE_2

结果如下:

529036456dbc7a293fae03d0b0f238b6.png

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

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

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

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

结果如下:

a6896df786070d6d93c0188828d29ace.png

使用Hive中lead函数

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

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

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

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

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

思路:

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

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

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

结果如下:

f6fa7f9106e8d56bbf124274abfef5dd.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值