• 如何分析周活跃率?


    181df7c7cecef4a14cded8e1108af020.png

    【题目】

    有两张表:

    1)“用户登录信息表”,包含2个字段:用户id、登录日期。

    8b7132b6c9dc333d1354d97bdd2e5444.png

    2)“已注册用户信息表”,包含2个字段:用户id、注册日期。

    ccbe4515e4a81fc58950298d33ab08b1.png

    【问题】计算周活跃用户率。

    【解题思路】

    1. 活跃用户率

    “活跃用户率”是观察用户活跃度的常见指标,一般指所有注册用户中活跃用户的比例。当活跃周期设定为“周”时,计算的就是“周活跃用户率”。

    周活跃用户率 = 周活跃用户数 / 当前注册用户数

    值得注意的是,“当前注册用户数”指截止本周最后一天之前注册的用户数量。因为,在这之后注册的用户必然不会在本周活跃。

    2. 日期处理

    为了获取“用户登录信息表”中“登录日期”对应周的信息,我们需要对该字段进行处理。

    函数year的作用是日期的年份,使用方法是:

    year(日期字段名)

    函数week的作用是返回一个int型的数值,代表指定日期在所在年的周数信息,使用方法是:

    week(日期字段名,参数)

    其中,“参数”不填写的情况下,默认值为0,代表周日为本周第一天;“参数”为1时,代表周一为本周第一天;“参数”为2时,代表周二为本周第一天;以此类推。

    1. select 用户id,
    2. 登录日期,
    3. year(登录日期) as 年份,
    4. week(登录日期,1) as 周数
    5. from 用户登录信息表;

    返回结果如下:

    11a0fbde1b8a77f45a4b359c58f5cf2b.png

    该结果记为表t1,在此基础上计算每周活跃用户数。

    1. select t1.年份,
    2. t1.周数,
    3.        count(distinct 用户id) as 活跃用户数
    4. from
    5. (
    6. select 用户id,
    7. 登录日期,
    8. year(登录日期) as 年份,
    9. week(登录日期,1) as 周数
    10. from 用户登录信息表
    11. ) as t1
    12. group by t1.年份,t1.周数;

    返回结果如下:

    e78cb2b8192a21cefff3ce9951225bf4.png

    该结果记为表t2,记录的是每周的活跃用户数。

    对“已注册用户信息表”的“注册日期”字段进行处理:

    1. select 用户id,
    2. 注册日期,
    3.        year(注册日期) as 年份,
    4. week(注册日期,1) as 周数
    5. from 已注册用户信息表;

    返回结果如下:

    0880bb648d269c642814343effda6820.png

    该结果记为表t3。

    为了后面计算“当前注册用户数”,需要获取“用户登录信息表”中的“活跃最大年份”,以及对应的“活跃最大周数”。

    1. select year(max(登录日期)) as 活跃最大年份,
    2. week(max(登录日期),1) as 活跃最大周数
    3. from 用户登录信息表;

    返回结果如下:

    2fd08b8fd3cba788a4fc24d462396497.png

    该结果记为表t4。

    3. 多表联结

    52527f6d0017b5e72dd519b72ff3eaad.png

    为了计算每个活跃周的“当前注册用户数”,将表t3和表t4进行联结。

    1. select count(distinct t3.用户id) as 当前注册用户数
    2. from
    3. (
    4. select 用户id,
    5. 注册日期,
    6. year(注册日期) as 年份,
    7. week(注册日期,1) as 周数
    8. from 已注册用户信息表
    9. ) as t3
    10. left join
    11. (
    12. select year(max(登录日期)) as 活跃最大年份,
    13. week(max(登录日期),1) as 活跃最大周数
    14. from 用户登录信息表
    15. ) as t4 on 1 = 1
    16. where t3.年份 < t4.活跃最大年份 or (t3.年份 = t4.活跃最大年份 and t3.周数 <= t4.活跃最大周数);

    返回结果如下:

    05fd0687b2e58c5d5b5a6aca4f707d40.png

    该结果记为表t5。

    最后,将表t2和表t5联结,计算最终结果:

    1. select t2.年份,
    2. t2.周数,
    3.        t2.活跃用户数,
    4. t5.当前注册用户数,
    5. t2.活跃用户数/t5.当前注册用户数 as 周活跃用户率
    6. from
    7. (
    8. select t1.年份,
    9. t1.周数,
    10. count(distinct 用户id) as 活跃用户数
    11. from
    12. (
    13. select 用户id,
    14. 登录日期,
    15. year(登录日期) as 年份,
    16. week(登录日期,1) as 周数
    17. from 用户登录信息表
    18. ) as t1
    19. group by t1.年份,t1.周数
    20. ) as t2
    21. left join
    22. (
    23. select count(distinct t3.用户id) as 当前注册用户数
    24. from
    25. (
    26. select 用户id,
    27. 注册日期,
    28. year(注册日期) as 年份,
    29. week(注册日期,1) as 周数
    30. from 已注册用户信息表
    31. ) as t3
    32. left join
    33. (
    34. select year(max(登录日期)) as 活跃最大年份,
    35. week(max(登录日期),1) as 活跃最大周数
    36. from 用户登录信息表
    37. ) as t4 on 1 = 1
    38. where t3.年份 < t4.活跃最大年份 or (t3.年份 = t4.活跃最大年份 and t3.周数 <= t4.活跃最大周数)
    39. ) as t5 on 1 = 1;

    返回结果为:

    f25cbea38aaa6cf57eacf3855c7cb709.png

    【本题考点】

    1)考查对用户活跃指标“周活跃用户率”的了解;

    2)考查对日期的处理能力,比如week函数的使用;

    3)考查对多表联结的了解。

    1453150c9186e9134380260d5173576d.jpeg

    a129ad6e3977d59959f780dc70480ebd.png

     ⬇️点击「阅读原文」

     免费报名 数据分析训练营

  • 相关阅读:
    python中json的使用dump,dumps,loads,load简单了解
    Python源码剖析3-列表对象PyListObject
    [Android]从app的trace打桩原理回顾zygote的fork
    ElasticSearch - 基于 拼音分词器 和 IK分词器 模拟实现“百度”搜索框自动补全功能
    【操作系统】 第二章 —— 系统调用 中断 异常
    软件测试的价值
    IT&OT强强联合,得帆信息X树根互联打造工业制造融合解决方案
    Ae 效果:CC Page Turn
    31.nacos集成Feign和Gateway实例(springcloud)
    Gradio的web界面演示与交互机器学习模型,高级接口特征《6》
  • 原文地址:https://blog.csdn.net/zhongyangzhong/article/details/126132591