当前位置: 首页 > news >正文

【助睿实验指导】浏览器用户行为分析与流失预测-数据加工

实验目的

  • 熟悉数据集构成与半结构化日志数据特点,掌握文本日志解析、字段拆分的实操方法

  • 完成数据规整,将零散原始日志转化为标准结构化数据表

  • 实现多维度数据聚合、字段衍生与跨表关联,搭建适配分析场景的指标体系

  • 完成机器学习特征工程处理,产出可直接使用的预测建模数据集

实验环境

  • 实验平台:助睿在线实验平台 https://lab.guilian.cn/

本次实验使用助睿数智(Uniplore)作为一站式数据科学平台。该
平台覆盖从数据接入、ETL处理、机器学习建模到可视化展示的全链路零代码功能,适用于数据分析教学与企业数据加工场景。助睿数智官网为:https://www.uniplore.com/

  • 数据处理:助睿 ETL 数据集成平台

  • 数据规模:1000 用户,800 万 + 条行为记录,约 825MB

实验步骤

创建实验项目

点击“新建项目”,输入项目名称“互联网用户行为日志数据加工”,点击“确定”,创建成功后即可在数据集成页面看到新创建的项目

项目创建成功后点击该项目右上角“…”,点击“打开项目”,在项目页面,可以看到左侧有3个菜单:资源库、文件、元数据,资源库用于对工作流的管理,包括新建、删除、修改、查看工作流的信息;导出导入工作空间;调度管理等操作,文件库用于保存工作流中需要用到的文件和工作流产生的文件,元数据管理是助睿ETL的重要基石,可以为工作流定义“运行配置”、“数据库”、“flink集群”等配置,首先获取本次的实验数据集:点击“文件库”,右键根目录,点击“新建目录”,输入目录名称为“互联网用户行为日志数据集”,点击“确定”

接下来我们将公共空间的数据资源导入到这个目录下,点击公共空间,点击“数据资源”,点击属于“互联网用户行为日志数据集”下的数据卡片右上角的“更多”,并点击“导出”,在弹出的窗口中选择导出到刚刚新创建的目录下,点击“确定”

可以看到在互联网用户行为日志数据集的目录下,新增了数据文件,接下来重复以上导出操作,将本次实验用到的20个数据都导出到“互联网用户行为日志数据集”

在之前的实验《学生用户画像-考勤主题标签构建》中,我们已经创建了团队私有数据库的连接,无需再建立数据源连接,如果还未创建的,可以参考《学生用户画像-考勤主题标签构建》的建立数据源连接小节的内容下创建连接。

新建转换工作流,并命名为“创建原始行为日志数据表”,在该工作流中拖拽“执行一个SQL脚本”组件,通过执行SQL脚本来创建一个标签表。整个转换流如下所示,配置说明:在组件中填写SQL脚本,选择目标数据库连接“团队私有数据库”,确保脚本执行权限

完成后运行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志。

新建转换工作流,并命名为“行为日志数据转为结构化数据”,在该工作流中拖拽“获取文件名”组件,双击“获取文件名”组件,在配置窗口中,点击文件或目录后后的“浏览文件”按钮,在弹出的窗口中选择我们上面创建的目录“互联网用户行为日志数据集”,再点击“确定”,选择目录后,点击“增加”

选择的目录出现在下方的路径中,点击“确认”

拖拽一个“Java 代码” 组件到画布中,并创建“获取文件名”组件到“Java 代码” 组件的连线,连接线类型选择“主输出步骤”,双击“Java 代码” 组件,输入代码,在字段空白表格处右键点击“插入”,双击插入的行,字段名输入“session_id”,类型选择“String”,继续插入行,依次将java代码中输出的字段进行配置

右键“java 代码”组件点击“预览输出字段”,可以看到有很多字段是我们不需要也不属于原始数据字段的,需要移除

拖拽“字段选择”组件到画布中,并创建“Java 代码”组件到“字段选择”组件的连线,连接线类型选择“主输出步骤”,双击“字段选择”组件,点击tab选项“移除”,并在字段名称下方空白处右键点击“获取字段”,选中上一步骤中的Java代码输出的字段后,右键点击“删除选中的行”,最后剩下多余的字段即可点击“确认”

接下来,我们将已经转换为结构化的数据输出到数据库中,以便后续使用,拖拽“表输出”组件到画布中,并创建“字段选择”组件到“表输出”组件的连线,连接线类型选择“主输出步骤”,双击“表输出”组件,选择“团队私有数据库”连接,勾选“裁剪表”,这样表输出组件在插入数据前会清空原始表数据,避免重复插入,勾选“指定数据库字段”,建立工作流字段与数据库表字段的映射关系。勾选后会激活“数据库字段”tab页,在数据库字段tab页,右键选择“获取字段”

我们创建的表字段与流字段是不一样的,双击表字段,在下拉框中选择正确的表字段,设置完成后点击“确认”

执行转换流,点击工具栏中的“执行”按钮,在弹出执行配置窗口中,选择默认配置,然后点击“启动”按钮,启动工作流,查看日志,工作流执行后会打开日志页面,定期刷新工作流日志数据。

查看数据库结果,打开“元数据”tab页,在“团队私有数据库”连接上右键选择“加载元数据”,然后进入数据探查页面,展开“团队私有数据库”,双击目标表“behavior_events”,在右侧页面选择“查询”tab标签,查看数据库表数据是否符合预期

新建转换工作流,并命名为“创建进程统计表”,在该工作流中拖拽“执行一个SQL脚本”组件,通过执行SQL脚本来创建一个标签表。整个转换流如下所示,配置说明:在组件中填写SQL脚本,选择目标数据库连接“团队私有数据库”,确保脚本执行权限;其他参数使用默认选项,完成后组件配置如下

由于数据量较大,为了顺利运行转换流,我们点开“元数据”,双击“团队私有数据库”,勾选“使用结果流”

完成后运行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志。

每个进程得用户规模即用户数量 = 每个进程名称得用户ID计数,新建转换流“统计进程用户规模”,拖拽“表输入”组件到画布中,数据库连接选择“团队私有数据库”,并获取 behavior_events 得所有SQL查询语句

拖拽“字段选择”组件到画布中,并创建“表输入”组件到“字段选择”组件得连线,双击“字段选择”组件,点击tab选项“移除”,然后再字段名称下方空白处右键点击“获取字段”,统计每个进程得用户数量只需用到 user_id、process_name 两个字段,所以需要移除其他字段,选中user_id、process_name 两个字段,右键点击“删除选中的行”,删除后点击“确认”

字段 process_name 可能存在空值,为避免后续操作错误,需要将空值替换为“未知”。拖拽“替换NULL值”组件到画布中,并创建“字段选择”组件到“替换NULL值”组件的连线,连接线类型选中“主输出步骤”,双击“替换NULL值”组件,勾选“选择字段”,在下方字段表格中插入一行,并输入:字段:process_name;值替换为:未知;是否为空:否

分组聚合之前需要对数据进行排序,否则分组计算结果可能出错。拖拽“排序字段”组件到画布中,创建“替换NULL值”组件到“排序记录”组件的连线,连接线类型选中“主输出步骤”,双击“排序记录”组件,将数据按照“process_name”字段升序排序

接下来就可以对排序后的数据进行分组聚合统计了,拖拽“分组”组件到画布中,创建“排序记录”组件到“分组”组件的连线,双击“分组”组件,在分组字段空白处获取字段后,仅保留“process_name”,在聚合表格空白处右键点击“插入”,双击插入的空白行,名称输入“user_count”,subject选择“user_id”,类型选择“个数”,最后点击“确认”

分组聚合后的数据我们需要输出到4.3.1小节创建的统计表中,拖拽“表输出”组件,创建“分组”组件到“表输出”组件的连线,双击“表输出”组件,选择“团队私有数据库”连接,勾选“裁剪表”,这样表输出组件在插入数据前会清空原始表数据,避免重复插入

勾选“指定数据库字段”,建立工作流字段与数据库表字段的映射关系。勾选后会激活“数据库字段”tab页,在数据库字段tab页,右键选择“获取字段”

最后执行转换流即可

为了确定覆盖用户最广的进程/软件,我们使用助睿BI来观察数据,点击实验平台左边菜单“助睿BI”,进入助睿BI首页

由于之前的实验已经创建了团队私有数据库的数据源连接,本次实验无需再创建数据源连接,可直接创建数据集,点击“数据集”菜单,在数据集页面点击“+” - “新建数据集”,数据集名称和备注信息都输入“进程用户数据统计”,点击“确认”,右上角数据源选择进程统计表 program_stats 所在的“商业数据分析” - “labs”,将 program_stats 拖拽至画布中,可以看到 program_stats 的数据结果,为了方便观察,可以将字段备注修改为中文,修改完成后点击“保存”,保存并发布数据集

点击“工作表”,进入工作表页面后,点击“+” - “新建工作表”,输入工作表名称和备注信息后点击“确认”

数据集选择刚刚创建的数据集“进程用户数据统计”,图表类型选择“水平条图”,将字段“program_name”拖拽至Y轴,“user_count”拖拽至X轴,并将“user_count”按照降序排序,由此,我们可以看到,浏览器类进程(chrome.exe360chrome.exesogouexplorer.exeQQBrowser.exe)的用户数明显高于其他软件(如QQ.exeEXCEL.EXEWINWORD.EXE)。这表明浏览器是覆盖面最广的应用,样本充足;同时浏览器记录包含url,可进一步分析网站偏好。因此,确定浏览器为分析对象。

根据统计结果,我们发现浏览器类进程的用户覆盖率远高于其他软件,且浏览器记录包含url字段,可以挖掘用户网站偏好。因此,我们将分析对象锁定为浏览器,并围绕以下业务问题展开分析:

  • 浏览器市场格局:哪些浏览器用户最多、使用时长最长?

  • 用户画像:不同浏览器的用户在年龄、职业上有何差异?

  • 使用习惯:用户集中在什么时段使用浏览器?

  • 竞争迁移:用户是否会从一款浏览器切换到另一款?

  • 流失预测:哪些用户可能停止使用 iexplore.exe 浏览器?

  • 个性化推荐:根据用户的网站访问历史,可以推荐哪些网站?

为了回答这些问题,我们可以预先设计一套可视化方案(将在下一实验完成)。下表列出了每张图表对应的业务问题、所需数据字段以及最终输出的数据表名,后续数据加工将围绕它们展开。

创建两个转换流“创建浏览器的用户数总使用时长统计表”、“创建每个浏览器按小时统计活跃用户数统计表”

两个转换流都拖拽“执行一个SQL脚本”组件到画布中,分别输入以下SQL:

创建浏览器的用户数总使用时长统计表的“执行一个SQL脚本”组件配置如下

创建每个浏览器按小时统计活跃用户数统计表的“执行一个SQL脚本”组件配置如下,最后分别执行两个转换流即可

新建转换流“互联网用户行为日志数据清洗抽取”,拖入“表输入”组件到画布中,连接线上公共数据源(因为团队私有数据库中的数据只有20个数据,仅作教学,全部数据已存放在线上公共数据源中的 behavior_events 表中),获取 behavior_events 的所有SQL查询语句

拖拽“字段选择”组件到画布中,创建“表输入”组件到“字段选择”组件的连线,双击“字段选择”组件,点击“移除”tab选项,在字段名称下方空白处右键点击“获取字段”,选中 session_id, user_id, session_start_time, process_name, url, event_seconds 后删除选中的行,保留下来的字段就是要移除的字段,点击“确认”

拖拽“过滤记录”组件到画布中,创建“字段选择”组件到“过滤记录”组件的连线,连接线类型选择“主输出步骤”

双击“过滤记录”组件,可以看到需要配置匹配和不匹配的结果的输出步骤,因此,我们先将后续的步骤的组件拖进来,拖拽“排序记录”组件到画布中,创建“过滤记录”组件到“排序记录”组件的连线,连接线类型选择“True输出”

再拖一个“空操作 (什么也不做)”组件到画布中,创建“过滤记录”组件到“空操作 (什么也不做)”组件的连线,连接线类型选择“False输出”

再次双击“过滤记录”组件,发送匹配的结果给“排序记录”,发送不匹配的结果给“空操作 (什么也不做)”,接下来配置过滤条件,点击第一个“field”,选择“process_name”,表示过滤条件为process_name的值,点击函数符号,选择“IN LIST”,点击“value”,在弹出的窗口中,类型选择“String”,值为主要浏览器的进程名:“iexplore.exe;360chrome.exe;360se.exe;chrome.exe;sogouexplorer.exe;QQBrowser.exe”,表示process_name的值在其中的记录则为True,否则为False,最后点击“确认”

首先,“排序记录”组件在上一步骤已经拖入了,双击“排序记录”组件,按session_idevent_seconds升序排列

拖拽“分析查询”组件到画布中,创建“排序记录”组件到“分析查询”组件的连线,双击“分析查询”组件,分组字段为“session_id”,新增加的字段“next_event_seconds”,要取值的字段为“event_seconds”,类型“前第N行”,N为“1”,获取同一会话内下一行的event_seconds值,存入新字段next_event_seconds

拖拽“计算器”组件到画布中,创建“分析查询”组件到“计算器”组件的连线,双击“计算器”组件,插入新字段行,新字段输入“duration_sec”,计算公式选择“A - B”,字段A选择“next_event_seconds”,字段B选择“event_seconds”,值类型为“Integer”

使用“字段选择”,只保留user_id,process_name,session_start_time,url,duration_sec

使用“过滤记录”组件,过滤掉duration_sec <= 0的记录(最后一条记录没有下一条,时长无效,忽略)

拖拽剪切字符串组件到画布中,创建过滤记录 1组件到拖拽剪切字符串组件的连线,连接线类型选择“Trur输出”,剪切字符串组件的配置如下:

拖拽字段选择组件到画布中,创建剪切字符串组件到字符选择组件的连线,连接线类型选择“主输出步骤”,字段选择2组件的配置如下:

通过计算器组件,我们可以提取 yyyy-MM-dd HH:mm:ss 中的HH,拖拽计算器组件到画布中,创建字符选择组件到计算器组件的连线,连接线类型选择“主输出步骤”,计算器 1组件的配置如下:

拖拽排序记录组件到画布中,创建“计算器 1”组件到“排序记录 1”组件的连线,排序记录 1组件的配置如下:

接下来,拖拽分组组件,创建“排序记录 1”组件到分组组件的连线,分组组件的配置如下:

以上步骤获取的数据已经是比较合适颗粒度的数据了,可以以此为基础,抽取不同维度的数据,以便用来实现后续的可视化分析

拖拽分组组件到画布中,创建“分组”组件到“分组 1”组件的连线,“分组 1”组件只按process_name分组。聚合:user_count= COUNT(user_id) (有多少不同用户使用过该浏览器);total_duration= SUM(total_duration_sec) (所有用户的累计使用时长)

分组聚合的结果需要落地数据库,拖拽“表输出”组件到画布中,创建“分组 1”组件到“表输出 组件的连线”,表输出组的配置如下:

拖拽“排序记录”组件到画布中,创建“分组”组件到“排序记录 2”组件的连线,数据传输模式选择复制发送,“排序记录 2”组件的配置如下:

拖拽分组组件到画布中,创建“排序记录 2”组件到“分组 2”组件的连线,“分组 2”组件按process_name、hour分组。聚合:active_user_count =user_id个数

分组聚合的结果需要落地数据库,拖拽“表输出”组件到画布中,创建“分组 2”组件到“表输出 1组件的连线”,表输出组的配置如下:

点击运行按钮

查看结果

点击“元数据”tab选项,右键团队私有数据,并点击“加载元数据”,接着点击“数据探查”,可以看到团队私有数据库目录,点击 browser_coverage、browser_hourly 两个数据表,查询数据情况是否符合预期

实验总结


本次实验的核心目标是完成浏览器用户行为数据的加工,为后续分析与预测建模准备结构化数据集。实验严格遵循了官方指导流程,首先将半结构化的原始日志通过“获取文件名”和“Java代码”组件解析为结构化表behavior_events,接着按进程名统计用户规模以确定分析焦点。随后,围绕选定的浏览器对象,设计并实现了市场格局与时段偏好两个分析方向,通过多步清洗(过滤非浏览器记录、计算停留时长、筛选有效时长)、聚合(按用户-日-浏览器-小时粒度压缩数据)与分支处理,最终成功生成了browser_coverage(浏览器用户数与总时长)和browser_hourly(浏览器按小时活跃用户数)两张核心统计表,为后续的可视化分析与流失预测奠定了坚实的数据基础。


遇到的问题与解决方案


在“统计进程用户规模”环节,多次遇到数据写入数据库失败的问题。第一次报错为“Unknown column ‘process_name’”,排查发现是数据库表program_stats中实际字段名为program_name,而Kettle流字段为process_name,两者不匹配。第二次报错“Field ‘program_name’ doesn’t have a default value”,则是因为表输出步骤未正确建立流字段到表字段的映射。解决方案是:在表输出组件的“数据库字段”选项卡中,手动将流字段process_name映射到表字段program_name,将user_count正确对应,从而实现了将分组统计结果(每个进程的用户数)准确写入目标统计表。这提示了在ETL过程中,严格校验源字段与目标表字段的名称、类型及非空约束至关重要。


主要收获


通过本次实验,深入掌握了处理半结构化日志数据的完整ETL方法论:从文件名解析、自定义Java代码解析键值对数据,到数据清洗(空值替换、无效数据过滤)、特征工程(停留时长计算、日期与小时提取),再到多维度分组聚合与数据落地。尤其理解了“排序-分组”模式在聚合计算中的必要性,以及通过复制发送主数据流实现多分支并行处理不同粒度统计表的技巧。此外,养成了在关键步骤后预览数据、对比数据库表结构与映射关系的调试习惯,并能根据业务分析目标反向设计数据加工链路(如为回答“用户使用时段偏好”,需先聚合出“用户-日-浏览器-小时”粒度明细)。这些能力对后续独立完成复杂数据加工任务具有重要实践价值。

http://www.gsyq.cn/news/1417999.html

相关文章:

  • C51中RAM位寻址寄存器解析与应用技巧
  • 审图AI能替代人工审图吗?看实测数据怎么说
  • 微信小程序平台——全域经营新基建与服务商深度选型指南
  • 20252817 2025-2026-2 《网络攻防实践》实践九报告
  • 2026年5月更新:江苏三轮车电机核心服务商战略图谱与选择洞察 - 2026年企业资讯
  • CentOS 7/8上5分钟搞定Pure-FTPd:从YUM安装到创建虚拟用户(保姆级教程)
  • 【太奶学IT】图像处理三大学习范式:监督/自监督/无监督怎么实现?大白话讲透+参考文献
  • 漫谈学习之MapDiffusion算法学习
  • 我的大一下
  • Nginx保留UTM参数重定向配置:4种方法彻底解决流量追踪失效问题
  • 当Kon-Boot遇上Win10微软账户:实测免费版行不通?试试这个创建新管理员的隐藏技巧
  • PythonGIL机制详解
  • 降AIGC黑科技揭秘!实测验证工具榜与精准选型导航
  • NQ551固态MT29F16T08EWLEHD6-ITF:E
  • 时间序列建模避坑指南:你的ACF/PACF分析可能从一开始就错了
  • 真假问题与真假研究
  • 腾讯云备案后仍无法公网访问DeepSeek API?Nginx反向代理+SSL自动续期+HTTPS强制跳转终极配置(已验证2024.06最新版)
  • 用DeepXDE搞定薛定谔方程:一个Python代码示例带你入门物理信息神经网络
  • 会生成世界,不等于理解世界:20个世界模型大考来了
  • 2026年5月靠谱的海参崴四日游旅行社如何选厂家推荐榜,跟团游、纯玩专线、品质小团、定制服务厂家选择指南 - 海棠依旧大
  • AI和程序员,谁更适合写代码
  • 如何科学地为孩子选择合适的室内照明?这三点家长必看
  • 强力升级你的OneNote笔记体验:NoteWidget Markdown插件全攻略
  • m4s-converter:如何快速解决B站缓存视频的播放难题?
  • 2026年现在程序员失业有多严重?Java程序员2026真实就业现状
  • macOS Sequoia 命令行(终端)完全使用指南
  • 经常听到的四类称呼:黑客、骇客、白客、红客职责大盘点
  • 09.Day 9:成果落地——Act 阶段战报生成与大屏数据落盘
  • MATLAB源码-第451期】基于MATLAB的改进蚁群算法与预约表避碰的仓储多机器人无冲突路径规划仿真
  • CANN asnumpy 库——昇腾 NPU 原生 NumPy 兼容层