如果某公司的一款 App 上线一段时间,有了稳定的日活跃用户量。在此基础上,我们可以用更多维度去测量用户对App产品的 活跃度。
用户活跃度 用来描述用户对于特定产品或服务的使用程度,该指标用来衡量用户对于该事物的忠诚度,对于整个产品或服务的品牌起着重要的作用。不同的产品,会根据其特性,选取一个合适的方面来衡量用户活跃度,比如:
- 用户在一段时间内使用产品或服务的次数;
- 用户使用产品或服务的时长;
- 用户与产品服务的互动程度
本文通过用户登录的天数来衡量用户活跃度,并据此对用户进行了分类,标准如下:
- 一周内只有一天有登录记录的,是 潜在用户;
- 一周内有 2 – 4 天有登录记录的,是 活跃用户;
- 一周有 5 天以上的有登录记录的,是 忠实用户。
在保证日活跃用户总量的基础上,活跃与忠实用户的占比越多越好。本文以 csv 文本文件的形式提供了 2021 年 9 月 23 日前的用户登录记录。每条记录代表了每个 ID 的用户的登录日期。现在希望以周为单位,查看每周内,三类用户的占比是如何变化的。
本次任务的用户活跃度分析,是通过用户在一周内登录的天数来衡量。数据来源 csv,记录的信息非常简洁,每行信息都只有 登录时间 和 ID (即用户身份码),表示某个特定用户在某天有一次登录。在其中我们发现,一个用户在同一天可能会有多个登录记录,表示他在一天内多次打开了 app。我们在统计时,只算作一次。
查看一年内,潜在、活跃、忠实 三类用户的占比有没有变化,那就需要经过下面四步操作:
- 将同一个用户一天内的多次登录记录压缩为一次;
- 计算出日期属于一年内的第几周;
- 以周为单位,统计出每周内,每个用户的登录次数,并根据登录次数将用户分为 潜在、活跃、忠实 三类。
- 继续以周为单位,统计出每周内,三类用户的总数以及各自占比。
Step 1 去重复值
读取CSV先分析下数据结构和数量,df 自动为数据加上了从 0 开始的行索引,一共有 17464 条数据:
使用 DataFrame 的 drop_duplucates() 方法进行去重处理。其基本参数为:
- subset 参数内传入的是若干列名,意思是比较范围,只比较填入的列中的数据,如果一致就视为重复值。不填就默认全部列都要比较;
- keep 参数规定了重复值的处理方式,'first' 代表只保留第一条数据,'last' 代码只保留最后一行,而 False 表示一条都不保留,默认值为 'first';
- ignore_index 参数如果填 True,结果生成的 DataFrame 就会重新从 0 开始建立行索引,填 False 就保留原来的索引,默认为 False。
Step 2 日期处理
从 登录时间 列中的日期提取它们所对应的年份中的周次。让我们检查该列的基本信息,请注意打印的最后一行;将日期转换为相应的类型,pandas 提供的 to_datetime() 函数可以将字符串格式的日期(例如 '2021/09/01', '20210901', '2021-09-01')或该类数据的整个 Series 转换为日期格式。
其中 dt.isocalendar() 可以返回日期的 ISO 周日历 形式,即 年份 yyyy 第 x 周第 x 天。我们通过编写代码来查看结果:
计算用户粘性
基于每个用户的登录天数,我们将他们划分为 潜在、跟进 和 合作 三类。只登录 1 天的用户为潜在用户,登录 2-4 天的用户为跟进用户,登录 5-7 天的用户为合作用户。编写一个函数,其逻辑非常简单:
接下来,我们需要在 weekly_login 中添加 类型 列,利用 apply() 方法和 get_type() 函数的结合,根据 登录天数 得出 类型:
至此,我们再次进行聚类分析:以周为单位,统计每周内三种类型用户的数量。在 Pandas 中,是否可以像这样在纵横两个方向创建透视表?当然可以,我们只需在 pivot_table() 中增加一个 columns 参数,将列名指定给它。我们还可以再添加一个 fill_value 参数,传入特定值,以便填充由二维展开形成的空单元格:
user_type 可以通过累加三列的结果得到:
计算每周内每种类型用户占比的代码如下:
结论分析
从得到的结论中,潜在用户的占比似乎一直维持在 80% 左右,而合作比用户长期徘徊在 0% 附近,仅偶尔出现少量合作用户。表明在这一年中,产品的用户粘性没有太大变化。为了进一步验证该结论,我们可以使用 Excel 或 Ploty 绘制图表。Ploty 的代码示例如下:
生成的图表为河流图,每个颜色的纵向宽度表示每种用户类型的占比大小。从趋势上看,潜在用户和跟进用户的占比确实没有太大变化,但合作用户从第 24 周开始逐渐有了稳定的占比,表明合作用户方面的确有所起色。产品需要持续迭代,在维持合作用户占比的增加跟进用户比例。