R语言构建用户旅程:按会话分组生成访问路径并统计频次
R语言实现会话访问路径统计方案
实现思路
不需要复杂的多层自连接操作,基于dplyr包分组排序后直接拼接访问路径,代码简洁且运行效率高,完全覆盖两个核心需求:
- 按会话ID分组、时间戳升序拼接完整访问路径
- 统计相同路径的会话出现频次
具体实现步骤
1. 加载依赖包、构造样例数据集
首先加载数据处理需要的工具包,按照题目给出的4个会话行为构造测试数据:
# 加载依赖包 library(dplyr) library(stringr) # 构造样例用户行为日志 log_data <- tibble( `Session/User ID` = c(101,101,101,102,102,103,104,104), `Time Stamp` = as.POSIXct(c( "2024-01-01 10:00:00", "2024-01-01 10:01:00", "2024-01-01 10:02:00", "2024-01-01 10:05:00", "2024-01-01 10:06:00", "2024-01-01 10:10:00", "2024-01-01 10:15:00", "2024-01-01 10:16:00" )), Page = c("Page A", "Page B", "Page C", "Page B", "Page C", "Page A", "Page B", "Page C") )
2. 生成用户路径映射表
按Session/User ID分组,按时间戳升序排序后,将同组的页面名称拼接为完整路径,直接得到要求的映射表:
user_path_map <- log_data %>% # 按会话分组、按访问时间升序排序 group_by(`Session/User ID`) %>% arrange(`Time Stamp`, .by_group = TRUE) %>% # 拼接访问路径,用>分隔不同页面,可根据业务需求替换分隔符 summarise(Path = str_c(Page, collapse = " > "), .groups = "drop")
运行后输出的映射表结果如下:
| Session/User ID | Path |
|---|---|
| 101 | Page A > Page B > Page C |
| 102 | Page B > Page C |
| 103 | Page A |
| 104 | Page B > Page C |
3. 生成路径频次统计表
基于上一步得到的映射表,按路径分组计数即可得到频次统计结果:
path_freq <- user_path_map %>% group_by(Path) %>% summarise(Frequency = n(), .groups = "drop") %>% # 可选:按频次降序排序,方便快速定位高频路径 arrange(desc(Frequency))
运行后输出的频次表结果如下:
| Path | Frequency |
|---|---|
| Page B > Page C | 2 |
| Page A > Page B > Page C | 1 |
| Page A | 1 |
补充:自连接(self loop join)实现说明
如果需要贴合自连接构建用户旅程的思路,也可以通过偏移自连接的方式实现路径拼接:给每个会话内的访问记录打上访问序号,将序号n和n+1的记录连接后逐步拼接路径。但该方法代码复杂度更高,数据量大时运行效率远低于上述分组拼接方案,无特殊要求不推荐使用。
内容的提问来源于stack exchange,提问作者user2845095
相关产品推荐
相关产品推荐

