You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言处理点击流数据:按会话用户ID移除连续重复事件

点击流数据连续重复页面清洗方案

清洗规则确认

处理前先明确规则,避免误操作破坏数据准确性:

  • 原始数据集字段:Session(会话标识)、UserID(用户标识)、Duration(min)(会话总时长,单位分钟)、id(原路径序号)、Page#(浏览页面标识)
  • 仅删除同Session+同UserID分组下,连续相邻的重复Page#记录,非连续的同页面访问(比如路径「首页→详情页→首页」里的两次首页访问)属于正常跳转,必须保留
  • 所有保留记录的Duration(min)字段保留原始值,不做重算
  • 清洗完成后按同组内的浏览先后顺序,重新生成从1开始的连续id序号

Pandas 实现代码(适用于本地小批量数据处理)

核心思路是通过相邻行值对比标记连续重复项,不要直接用全局去重方法,避免误删非连续的有效访问记录。

import pandas as pd

# 1. 读取原始数据,替换为你自己的文件路径,支持csv、excel等格式
df = pd.read_csv("你的点击流原始数据文件.csv")

# 注意:如果原始数据没有按浏览时间升序排列,先执行排序,否则去重逻辑会出错
# df = df.sort_values(by=["Session", "UserID", "浏览时间戳字段名"])

# 2. 标记连续重复的Page记录
df["is_dup"] = df.groupby(["Session", "UserID"])["Page#"].shift(1) == df["Page#"]
# 过滤掉重复项
df_clean = df[~df["is_dup"]].copy()

# 3. 重新生成连续的路径id
df_clean["id"] = df_clean.groupby(["Session", "UserID"]).cumcount() + 1

# 4. 删除临时标记列,导出清洗后的数据
df_clean = df_clean.drop(columns=["is_dup"])
df_clean.to_csv("清洗后点击流数据.csv", index=False)

SQL 实现代码(适用于数仓大批量数据处理)

逻辑和Pandas版本完全一致,用窗口函数取上一条访问的页面做对比:

WITH mark_duplicate AS (
    SELECT
        Session,
        UserID,
        `Duration(min)`,
        Page#,
        -- 取同会话同用户的上一条访问页面
        LAG(Page#, 1) OVER (PARTITION BY Session, UserID ORDER BY id) AS prev_page
    FROM 原始点击流表名
)
SELECT
    Session,
    UserID,
    `Duration(min)`,
    -- 重新生成连续路径序号
    ROW_NUMBER() OVER (PARTITION BY Session, UserID ORDER BY id) AS id,
    Page#
FROM mark_duplicate
-- 过滤第一条记录(无上一页)和上一页与当前页不同的有效记录
WHERE prev_page IS NULL OR prev_page != Page#

避坑提醒

  • 严禁直接使用全局去重方法(比如直接按Session+UserID+Page#去重),这类操作会删除所有非连续的同页面访问记录,完全扭曲真实用户旅程路径
  • 如果原始数据的id字段不是严格按浏览时间递增的,排序时必须替换为真实的浏览时间戳字段,否则路径顺序会错乱
  • Duration(min)是会话级统计字段,不需要随记录删除重新计算,保留原值即可匹配分析口径

内容的提问来源于stack exchange,提问作者user2845095

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:54:06