保姆级教程!浏览器用户行为数据分析全流程(零代码ETL+8张统计表加工+大屏数据准备)
本实验基于用户浏览器行为数据,通过ETL流程加工完成数据大屏所需的统计表。实验使用助睿数智平台,对1000万+条行为记录进行分析,输出浏览器市场格局、周活跃趋势、使用频率分布等7类统计表。关键技术包括多表关联、JavaScript字段处理、分组聚合及周数据映射。实验重点解决了分组统计异常等典型ETL问题,验证了该平台在大规模数据处理中的稳定性。最终形成了包括核心指标、用户画像在内的完整分析体系,为
1 实验目的
本实验基于“用户-日-浏览器-小时”明细表,完成数据大屏所需的各项统计表加工,包括:
- 浏览器市场格局统计(覆盖率、使用时长)
- 浏览器周活跃趋势统计
- 浏览器使用频率分布统计
- 用户浏览器使用数量分布统计
- 浏览器工作日与周末使用对比统计
- 用户画像统计(性别、年龄、学历、职业、收入、居住地类型、省份分布)
2 实验环境
- 实验平台:助睿在线实验平台 https://lab.guilian.cn/
本次实验使用助睿数智(Uniplore)作为一站式数据科学平台。该平台覆盖从数据接入、ETL处理、机器学习建模到可视化展示的全链路零代码功能,适用于数据分析教学与企业数据加工场景。
助睿数智官网为 Uniplore iDIS-大数据智能全流程服务平台-BI数据可视化工具
- 数据处理:助睿 ETL 数据集成平台
- 建模平台:助睿 AI 人工智能平台
- 数据规模:1000 用户,800 万 + 条行为记录,约 825MB
3 实验数据
本实验基于上个实验《浏览器用户行为分析与流失预测-数据加工》产出的数据,以及原始数据 demographic 用户属性表。
上个实验已输出的数据:
daily_browser_detail:用户-日-浏览器-小时明细表(将在本实验第4.1节中输出)browser_coverage:浏览器市场覆盖率统计表browser_hourly:浏览器时段活跃统计表
4 整体分析框架
4.1 我们要回答什么业务问题?
在制作数据大屏之前,我们需要先明确一个问题:大屏上要展示什么?
大屏的每个图表、每个数字,都需要有对应的数据来源。我们不能在大屏上直接查询原始明细表( behavior_events),因为:
- 原始明细表数据量大,查询慢,影响大屏加载速度
- 大屏需要的是聚合后的统计结果,不是原始明细
- 多个图表可能共用同一份聚合数据,提前加工可以避免重复计算
因此,在设计大屏之前,我们首先需要明确:我们要通过数据分析回答哪些业务问题?
|
业务问题 |
为什么重要 |
|
哪个浏览器用户最多? |
了解市场领导者,判断自身产品的市场地位 |
|
哪个浏览器用户用得最久? |
用户数多不代表粘性高,使用时长方能反映真实依赖度 |
|
用户活跃度在增长还是下降? |
判断产品生命周期,及时发现衰退信号 |
|
用户什么时候最活跃? |
优化推送和运营时机,在正确时间触达用户 |
|
用户是重度使用还是偶尔打开? |
区分核心用户和边缘用户,制定差异化运营策略 |
|
用户同时用几个浏览器? |
了解用户忠诚度,判断是否存在被竞品替代的风险 |
|
用户还用什么其他浏览器? |
识别主要竞争对手,制定针对性竞争策略 |
|
工作日和周末使用习惯有何不同? |
区分工作场景和娱乐场景,优化产品功能 |
|
核心用户是谁?(性别、年龄、职业) |
明确目标用户群体,指导产品设计和营销方向 |
|
用户的教育水平如何? |
影响产品复杂度设计,高学历用户可能接受更复杂的功能 |
|
用户的收入水平如何? |
影响商业化策略,高收入用户付费意愿更强 |
|
用户分布在哪里?(城市、省份) |
指导区域市场拓展和资源投放 |
4.2 选择哪些分析维度来回答这些问题?
根据上述业务问题,我们可以分为2个部分:市场分析与用户画像,这2个部分可以选择以下分析维度:
大屏一:浏览器市场行为分析
|
维度 |
回答的业务问题 |
核心指标 |
|
市场格局 |
哪个浏览器用户最多?哪个用得最久? |
用户数、使用时长占比、人均时长 |
|
周活跃趋势 |
用户活跃度在增长还是下降? |
每周活跃用户数 |
|
时段偏好 |
用户什么时候最活跃? |
24小时活跃分布 |
|
使用频率 |
用户是重度还是轻度使用? |
轻/中/重度用户占比 |
|
浏览器使用数量 |
用户同时用几个浏览器? |
1种/2种/3种及以上用户占比 |
|
竞品重叠 |
用户还用什么其他浏览器? |
同时使用两个浏览器的用户数 |
|
工作日vs周末 |
工作和娱乐时使用习惯有何不同? |
工作日/周末使用时长对比 |
大屏一:浏览器用户画像分析
|
维度 |
回答的业务问题 |
核心指标 |
|
性别分布 |
男女用户比例如何? |
男性/女性用户数及占比 |
|
年龄分布 |
哪个年龄段的用户最多? |
各年龄段用户数及占比 |
|
学历分布 |
用户教育水平如何? |
各学历层次用户数及占比 |
|
职业分布 |
哪些职业的用户最多? |
各职业用户数及占比 |
|
收入分布 |
用户收入水平如何? |
各收入段用户数及占比 |
|
居住地类型分布 |
城市用户还是乡镇用户多? |
城市/城郊/乡村用户占比 |
|
地域分布 |
用户分布在哪些省份? |
各省份用户数 |
4.3 需要加工哪些目标表?
根据上述分析维度,我们反推出需要加工的目标表:
大屏一目标表:
|
目标表 |
对应维度 |
数据来源 |
|
browser_overview |
核心指标 |
daily_browser_detail |
|
browser_coverage |
市场格局 |
daily_browser_detail |
|
browser_weekly_active |
周活跃趋势 |
daily_browser_detail |
|
browser_hourly |
时段偏好 |
daily_browser_detail |
|
browser_frequency_stats |
使用频率 |
daily_browser_detail |
|
browser_multi_usage |
浏览器使用数量 |
daily_browser_detail |
|
browser_cooccurrence |
竞品重叠 |
daily_browser_detail |
|
browser_weekday_weekend |
工作日vs周末 |
daily_browser_detail |
大屏二目标表:
|
目标表 |
对应维度 |
数据来源 |
|
user_profile_stats |
性别、年龄、学历、职业、收入、省份、居住地类型 |
demographic、daily_browser_detail |
5 各目标表加工说明
|
目标表 |
用途 |
加工逻辑 |
数据来源 |
|
browser_coverage |
回答“哪个浏览器用户最多?哪个用得最久?” |
按 browser_name 分组,统计用户数、总时长、人均时长 |
daily_browser_detail(已在上个实验输出) |
|
browser_hourly |
回答“用户什么时候最活跃?” |
按 browser_name、hour 分组,统计活跃用户数 |
daily_browser_detail(已在上个实验输出) |
|
browser_weekly_active |
回答“用户活跃度在增长还是下降?” |
按 browser_name 和周编号分组,统计每周活跃用户数 |
daily_browser_detail |
|
browser_frequency_stats |
回答“用户是重度还是轻度使用?” |
计算每个用户的周使用时长,按阈值(轻度<3h、中度3-10h、重度>10h)划分等级,再按浏览器分组统计 |
daily_browser_detail |
|
browser_multi_usage |
回答“用户同时用几个浏览器?” |
统计每个用户使用多少种不同的浏览器,按1种、2种、3种及以上分组 |
daily_browser_detail |
|
browser_cooccurrence |
回答“用户还用什么其他浏览器?” |
统计每对浏览器被同一用户使用的人数 |
daily_browser_detail |
|
browser_weekday_weekend |
回答“工作日和周末使用习惯有何不同?” |
按浏览器和日期类型(工作日/周末)分组,统计人均使用时长 |
daily_browser_detail |
|
user_profile_stats |
回答“核心用户是谁?用户教育/收入水平如何?”… |
按性别、年龄、学历、职业、收入、省份、居住地类型分组统计 |
demographic、daily_browser_detail |
6 实验步骤
6.1 准备 用户-日-浏览器-小时 明细表
上个实验中的“互联网用户行为日志数据清洗抽取”转换流已经包含了生成明细数据的完整逻辑,但只输出了分支A和B(browser_coverage 和 browser_hourly)。我们需要将其复制一份,改为输出明细表,作为本实验后续加工的基础。
6.1.1 创建用户_日_浏览器_小时明细表
首先,我们先在团队私有数据库中创建用于存放 用户-日-浏览器-小时 明细表的数据表
打开上个实验创建的项目“互联网用户行为日志”
新建转换流“创建用户_日_浏览器_小时明细表”,拖入“执行一个SQL脚本”组件

双击“执行一个SQL脚本”组件,数据库连接选择“团队私有数据库”,并输入以下SQL:

点击“运行”按钮,执行转换流

6.1.2 复制转换流
在上个实验的项目中,找到“互联网用户行为日志数据清洗抽取”转换流,右键选择“复制”

右键根目录,点击“粘贴”
粘贴后右键重命名为“输出用户日浏览器小时明细表”

这里注意:上个实验中“排序记录 1”组件仅按照 process_name 升序排序,而分组组件的分组字段是:user_id、usage_date、process_name、hour,所以,需要更正“排序记录 1”组件的排序字段与分组组件的分组字段一致,否则会出现多条重复数据

6.1.3 浏览器名称映射
在分组组件后添加“值映射”组件,“值映射”组件连接到原分支A的分组 1组件、复制发送到原分支B的排序记录 2组件

值映射组件按照以下添加映射
|
进程名 |
说明 |
|
iexplore.exe |
IE浏览器 |
|
360chrome.exe |
360极速 |
|
360se.exe |
360se |
|
chrome.exe |
|
|
sogouexplorer.exe |
搜狗 |
|
QQBrowser.exe |
QQ浏览器 |

这里需要注意:上个实验的“4.5.3 过滤记录:筛选进程为主要浏览器的数据”步骤中
- 如果匹配条件是 process_name IN LIST “iexplore.exe;360chrome.exe;360se.exe;chrome.exe;sogouexplorer.exe;QQBrowser.exe”,则继续下一步骤
- 如果匹配条件与以上不同,则删除匹配值中的EXCEL.EXE、WINWORD.EXE、AlilM.exe,因为这3个不是浏览器

另外,转换流中的分组组件中聚合字段的聚合类型是“个数”的,需要改成“统计不同值的数量(N)”,并在分支A的“分组 1”组件前添加排序记录组件,按 process_name 升序排序

6.1.5 添加表输出组件
拖拽“表输出”组件到画布中,值映射组件连接到“表输出”组件

双击“表输出”组件,配置如下:
- 数据库连接:选择“团队私有数据库”
- 目标表:
daily_browser_detail - 勾选“裁剪表”,清空原有数据
- 勾选“指定数据库字段”,建立字段映射

6.1.6 执行转换流
击“运行”按钮,执行转换流

6.2 创建目标数据表
在团队私有数据库中创建本实验需要输出的目标表
新建转换流“创建浏览器大屏分析目标数据表”,拖拽“执行一个SQL脚本”组件

双击“执行一个SQL脚本”组件,数据库连接选择“团队私有数据库”,并输入以下SQL,使用DROP TABLE可以避免需要重新建表时语句报错:
-- 1. 核心指标概览表
DROP TABLE IF EXISTS `browser_overview`;
CREATE TABLE `browser_overview` (
`metric_name` VARCHAR(50) NOT NULL COMMENT '指标名称',
`metric_value` DECIMAL(12,2) NOT NULL COMMENT '指标值'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='核心指标概览表';
-- 2. 各浏览器周活跃趋势表
DROP TABLE IF EXISTS browser_weekly_active;
CREATE TABLE `browser_weekly_active` (
`browser_name` VARCHAR(50) NOT NULL COMMENT '浏览器名称',
`week_range` VARCHAR(20) NOT NULL COMMENT '周日期范围',
`active_user_count` INT NOT NULL COMMENT '活跃用户数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='各浏览器周活跃趋势表';
-- 3. 浏览器使用频率分布表
DROP TABLE IF EXISTS browser_frequency_stats;
CREATE TABLE `browser_frequency_stats` (
`browser_name` VARCHAR(50) NOT NULL COMMENT '浏览器名称',
`usage_level` VARCHAR(10) NOT NULL COMMENT '使用等级',
`user_count` INT NOT NULL COMMENT '用户数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='浏览器使用频率分布表';
-- 4. 用户使用浏览器数量分布表
DROP TABLE IF EXISTS browser_multi_usage;
CREATE TABLE `browser_multi_usage` (
`browser_count` VARCHAR(10) NOT NULL COMMENT '使用浏览器数量',
`user_count` DECIMAL(5,2) NOT NULL COMMENT '用户数量'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户使用浏览器数量分布表';
-- 5. 浏览器工作日周末对比表
DROP TABLE IF EXISTS browser_weekday_weekend;
CREATE TABLE `browser_weekday_weekend` (
`browser_name` VARCHAR(50) NOT NULL COMMENT '浏览器名称',
`day_type` VARCHAR(10) NOT NULL COMMENT '工作日/周末',
`avg_duration_sec` INT NOT NULL COMMENT '人均使用时长(秒)',
`total_duration_hour` BIGINT NOT NULL COMMENT '总使用时长(小时)',
`user_count` INT NOT NULL COMMENT '用户数'
) COMMENT '浏览器工作日周末对比表';
-- 6. 用户画像统计表
DROP TABLE IF EXISTS `user_profile_stats`;
CREATE TABLE `user_profile_stats` (
`browser_name` VARCHAR(50) NOT NULL COMMENT '浏览器名称',
`gender` VARCHAR(10) COMMENT '性别',
`age_group` VARCHAR(10) COMMENT '年龄段',
`edu` VARCHAR(50) COMMENT '学历',
`job` VARCHAR(50) COMMENT '职业',
`income` VARCHAR(50) COMMENT '收入',
`city_type` VARCHAR(10) COMMENT '居住地类型',
`province` VARCHAR(50) COMMENT '省份',
`user_count` INT NOT NULL COMMENT '用户数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户画像统计表';

点击“运行”按钮,执行转换流
6.3 各浏览器周活跃趋势表数据抽取执行
目标:统计每个浏览器在第1-4周的每周活跃用户数
新建转换流“各浏览器周活跃趋势表数据抽取”,拖拽“表输入”组件画布中,数据库连接选择“团队私有数据库”,点击“获取SQL查询语句”,选择 daily_browser_detail 获取所有查询语句

这里我们需要将每个浏览器的使用日期转为周:5/7-5/13、6/4-6/10、7/2-7/8、8/6-8/12,可以使用值映射组件完成,但是在此之前,需要使用字段选择组件对usage_date进行格式转换。
拖拽字段选择组件到画布中,创建表输入组件到字段选择组件的连线

双击字段选择组件,点击“元数据”,右键插入,输入字段名称usage_date,类型为Date,格式为“yyyy-MM-dd”

再拖拽值映射组件,字段选择组件连接值映射组件
双击值映射组件,使用的字段名选择“usage_date”,目标字段名(空=覆盖)输入“week_range”,表示创建新字段week_range用来存储映射结果,接下来就插入行,将每个日期映射为对应的周区间

接下来我们按各浏览器、周分组统计用户数,分组之前需要对数据进行排序,避免统计结果出错。拖拽排序记录组件到画布中,创建值映射组件到排序记录组件的连线

排序记录组件设置为按照browser_name、week_range 升序排序

排序后拖拽分组组件,排序记录组件连接到分组组件

分组字段为browser_name、week_range,聚合时对user_id进行去重计数,得到active_user_count,因此,聚合配置中输入字段“active_user_count”,subject 为“user_id”,类型为“统计不同值的数量(N)”

最后拖入表输出组件,将分组聚合结果入库,表输出组件配置为:
- 数据库连接:选择“团队私有数据库”
- 目标表:
browser_weekly_active - 勾选“裁剪表”,清空原有数据
- 勾选“指定数据库字段”,建立字段映射


执行转换流:

6.4 各浏览器使用频率分布表数据抽取
目标:按轻/中/重度划分用户使用频率
新建转换流“使用频率分布数据抽取”,拖拽“表输入”组件画布中,数据库连接选择“团队私有数据库”,点击“获取SQL查询语句”,选择 daily_browser_detail 获取所有查询语句
接下来,我们统计每个用户使用各浏览器的使用时长,拖拽排序记录组件到画布中,创建表输入组件到排序记录组件的连线
排序记录组件设置为按照 user_id、browser_name 升序排序

排序后拖拽分组组件,排序记录组件连接到分组组件

分组组件的分组字段为 user_id、browser_name,总使用时长 = 每天总使用时长 total_duration_sec 求和

这样计算的总时长单位是秒,我们将其转换为小时更直观,小时 = 秒 ÷ 3600,由于我们的数据中没有3600这个字段,所以需要先增加这个常量字段。拖拽增加常量组件到画布中,分组组件连接到增加常量组件

增加常量组件配置中增加新字段“hour_m_s”,将其类型设置为 Integer ,并且值固定为 3600,如下

接下来,拖入计算器组件

通过计算器,计算小时,新增使用时长单位为小时的字段“total_hours”,计算公式为“A / B”,字段A为“total_seconds”,字段B为“hour_m_s”,保留2位小数

接下来,我们为使用频率划分等级。拖入JavaScript代码组件,计算器组件连接到JavaScript代码组件
双击JavaScript代码组件,如下以下代码,点击”获取变量”,自动获取代码中的变量
var total_hours = total_hours;
var usage_level = '';
if (total_hours < 3) {
usage_level = '轻度';
} elseif (total_hours >= 3 && total_hours < 10) {
usage_level = '中度';
} else {
usage_level = '重度';
}
usage_level这个字段我们需要在之前的增加常量组件中新增:

接下来,我们就可以统计每个浏览器的各使用等级的用户数了
同样的,先拖入排序记录组件,将数据按照 browser_name、usage_level 升序排序

再拖入分组组件,按 browser_name、usage_level 分组,统计 user_count(user_id去重计数)

最后拖入表输出组件,将分组聚合结果入库,表输出组件配置为:
- 数据库连接:选择“团队私有数据库”
- 目标表:
browser_frequency_stats - 勾选“裁剪表”,清空原有数据
- 勾选“指定数据库字段”,建立字段映射


执行转换流:

6.5 各浏览器使用数量分布表数据抽取
目标:统计用户使用1种、2种、3种及以上浏览器的用户数
新建转换流“浏览器使用数量分布数据抽取”,拖拽“表输入”组件画布中,数据库连接选择“团队私有数据库”,点击“获取SQL查询语句”,选择 daily_browser_detail 获取所有查询语句
接下来,我们统计每个用户使用各浏览器的种类数量,拖拽排序记录组件到画布中,创建表输入组件到排序记录组件的连线

排序记录组件设置为按照 user_id 升序排序

排序后拖拽分组组件,排序记录组件连接到分组组件

分组组件的分组字段为 user_id,使用浏览种类数量 = 浏览器名称去重计数

接下来,我们划分浏览器数量等级。拖入JavaScript代码组件,计算器组件连接到JavaScript代码组件
双击JavaScript代码组件,如下以下代码,点击”获取变量”,自动获取代码中的变量
var browser_cnt = browser_cnt;
var browser_count = '';
if (browser_cnt == 1) {
browser_count = '1种';
} elseif (browser_cnt == 2) {
browser_count = '2种';
} else {
browser_count = '3种及以上';
}

接下来,我们就可以统计使用1种、2种、3种浏览器的用户数了
同样的,先拖入排序记录组件,将数据按照 browser_count 升序排序

再拖入分组组件,按 browser_count 分组,统计 user_count(user_id去重计数)

最后拖入表输出组件,将分组聚合结果入库,表输出组件配置为:
- 数据库连接:选择“团队私有数据库”
- 目标表:browser_multi_usage
- 勾选“裁剪表”,清空原有数据
- 勾选“指定数据库字段”,建立字段映射


执行转换流:

6.6 各浏览器工作日周末对比表数据抽取
目标:统计各浏览器工作日周末使用时长对比
新建转换流“浏览器工作日周末对比数据抽取”,拖拽“表输入”组件画布中,数据库连接选择“团队私有数据库”,点击“获取SQL查询语句”,选择 daily_browser_detail 获取所有查询语句

接下来,根据使用日期获取星期几,拖拽JavaScript代码组件到画布中,表输入组件连接JavaScript代码组件
双击JavaScript代码组件,如下以下代码,点击”获取变量”,自动获取代码中的变量
// 获取日期var date = usage_date;
// 获取星期几(0=周日, 1=周一, ..., 6=周六)var dayOfWeek = date.getDay();
// 判断工作日还是周末var day_type = "";
if (dayOfWeek >= 1 && dayOfWeek <= 5) {
day_type = "工作日";
} else {
day_type = "周末";
}

接下来,我们就可以统计工作日和周末的使用时长和用户数了
同样的,先拖入排序记录组件,将数据按照 browser_name、 day_type升序排序

再拖入分组组件,按 browser_name、 day_type 分组
聚合:
avg_seconds= 平均使用时长(秒)total_seconds= 总使用时长(秒)user_count= COUNT(DISTINCTuser_id

平均使用时长单位是秒的数值不会太大,是比较好观察,但是总使用时长的单位是秒的话数值很大,不够直观,所以将其转为小时,参考“6.4 各浏览器使用频率分布表数据抽取”种计算小时的方法,使用增加常量组件和计算器组件来实现


在计算过程中出现了一些中间字段,我们使用字段选择组件来删除冗余字段

最后拖入表输出组件,将分组聚合结果入库,表输出组件配置为:
- 数据库连接:选择“团队私有数据库”
- 目标表:browser_weekday_weekend
- 勾选“裁剪表”,清空原有数据
- 勾选“指定数据库字段”,建立字段映射


执行转换流:

6.7 核心指标数据抽取
目标:将大屏顶部四个指标卡的数据存入一张通用的键值对表中
在以上数据抽取中,我们已经获取了各浏览器的用户数、使用时长、活跃用户数、重度用户数,但我们设计的核心指标是全局数据,除了使用时长,其他用户数相关的数据在不同浏览器之间是存在重叠的,所以需要重新计算。
用一个表输入组件,直接SQL一次性算出所有指标,然后通过列转行将一行转为四行
新建转换流,拖入表输入组件,数据库连接团队私有数据库,在SQL语句框中输入以下SQL:
SELECT
ROUND(SUM(total_duration_sec) /3600, 2) AS total_hours,
ROUND(SUM(total_duration_sec) /3600/COUNT(DISTINCT user_id), 2) AS avg_hours,
ROUND(
(SELECTCOUNT(DISTINCT user_id) FROM daily_browser_detail
WHERE usage_date BETWEEN'2012-08-06'AND'2012-08-12'
) *100.0/COUNT(DISTINCT user_id), 2
) AS active_ratio,
ROUND(
(SELECTCOUNT(*) FROM (
SELECT user_id FROM daily_browser_detail
WHERE usage_date BETWEEN'2012-05-07'AND'2012-07-08'GROUPBY user_id
HAVINGSUM(total_duration_sec) /3600>30
) t) *100.0/COUNT(DISTINCT user_id), 2
) AS heavy_ratio
FROM daily_browser_detail

接下来使用行转列组件将字段名称转为指标名称,字段值转为指标值

|
字段名称 |
key值 |
value字段 |
|
total_hours |
total_hours |
metric_value |
|
avg_hours |
avg_hours |
metric_value |
|
active_ratio |
active_ratio |
metric_value |
|
heavy_ratio |
heavy_ratio |
metric_value |
接下来使用值映射组件将指标名称映射为中文

最后使用表输出组件写入目标表 browser_overview


最后执行转换流即可
6.8 用户画像表加工
目标:统计每个浏览器按性别、年龄、学历、职业、收入、居住地类型的用户分布
6.8.1 获取人口属性信息表
用户画像表需要用户的属性信息,行为日志的数据中仅包含行为数据,缺少用户属性数据,因此需要获取数据集中的人口属性信息表 demographic.csv,行为日志数据与人口属性数据通过用户ID关联
本次实验已经将 demographic.csv 预先存放在实验平台的公共空间数据资源中,可以直接导出到我们的项目文件目库中
点击“公共空间”,点击tab选项“数据资源”,可以看到 demographic.csv

点击 demographic.csv 卡片右上角的“更多” - “导出”
选择导出到的目录,例如根目录

最后点击“确定”,刷新文件库的根目录,即可看到 demographic.csv

6.8.2 CSV文件输入:读取人口属性数据
新建转换流“用户画像表加工”,拖拽“CSV文件输入”组件到画布中
双击“CSV文件输入”组件,点击“浏览文件”按钮,在弹出的窗口中选择 demographic.csv,然后点击“确定”

列分隔符和封闭符保持不变,编码选择“UTF-8”
往下滑一点,在空白表格处右键点击“获取字段”

6.8.3 年龄分段
原人口属性数据中没有年龄字段,但是有出生年份,因此我们可以通过计算获取用户的年龄属性
首先我们拖入增加常量组件,增加常量字段“year”,值设为“2012”(数据是2012年的)

拖入“计算器”组件来计算用户在2012年的年龄,年龄 = 2012 - 出生年份,即:age = year - BIRTHDAY

接下来我们将年龄划分为四段:<18、18-25、26-35、>35
拖入JavaScript代码组件,计算器组件连接到JavaScript代码组件

双击JavaScript代码组件,输入以下代码,点击“获取变量”,自动获取代码输出的变量
var age_group = '';
if (age < 18) {
age_group = '<18';
} elseif (age <= 25) {
age_group = '18-25';
} elseif (age <= 35) {
age_group = '26-35';
} else {
age_group = '>35';
}

6.8.4 表输入:读取用户_日_浏览器_小时明细数据
拖入“表输入”组件到画布中,双击“表输入”组件,数据库连接选择“团队私有数据库”,点击“获取SQL查询语句”,在弹出的窗口中,选择用户_日_浏览器_小时明细表 daily_browser_detail,系统提示选择“确认”

6.8.5 关联用户属性
记录集连接组件可以将两个表进行连接,就是数据库中的join操作。数据连接时注意两个连接的数据集是否存在同一个字段。
“记录集连接”组件之前需要先对数据进行排序,否则可能出错

我们先拖拽2个“排序记录”组件到画布中,分别创建“表输入”组件到“排序记录 1”组件的连线、“CSV文件输入”组件到“排序记录”组件的连线,其中“CSV文件输入”组件到“排序记录”组件的连线类型选择“主输出步骤”

双击“排序记录 1”组件,命名为“明细数据按用户ID排序”,在空白表格处右键点击“获取字段”
仅保留“user-id”,其他字段选中后右键点击“删除选中的行”

设置 user_id 升序排序后点击“确认”
同样的双击“排序记录”组件,命名为“用户属性数据按用户ID排序”,设置按 USERID 升序排序

接下来,两个数据就可以通过记录集连接组件来关联了,拖拽“记录集连接”组件到画布中,2个排序记录组件分别连接到记录集连接组件,因为数据已经排序了,右上角的提示可以忽略

双击“记录集连接”组件,第一个Transform选择“明细数据按用户ID排序”,第二个Transform选择“用户属性数据按用户ID排序”,连接类型选择“LEFT OUTER”,分别点击两个“获得连接字段”按钮,获取2个数据的字段
2个数据是通过用户ID关联的,所以第一个Transform的连接字段保留“user_id”,第二个Transform的连接字段保留“USERID”,其他字段通过删除选中的行来删除

6.8.6 统计用户数
分组统计之前,需要先对数据进行排序,拖入排序记录组件,记录集连接组件连接到排序记录组件,按照等下分组聚合的分组字段升序排序,即:browser_name、GENDER、EDU、JOB、INCOME、PROVINCE、ISCITY、age_group

拖入分组组件,排序记录组件连接到分组组件,按 browser_name、GENDER、EDU、JOB、INCOME、PROVINCE、ISCITY、age_group 分组,聚合 user_count = user_id (统计不同值的数量(N))

6.8.7 表输出
拖入表输出组件,将分组聚合结果入库,表输出组件配置为:
- 数据库连接:选择“团队私有数据库”
- 目标表:user_profile_stats
- 勾选“裁剪表”,清空原有数据
- 勾选“指定数据库字段”,建立字段映射


6.8.8 执行转换流
点击“运行”按钮

6.8.9 查看结果数据
点击“元数据”tab选项,右键团队私有数据库,点击“加载元数据”
再点击“数据探查”,查看以上生成的目标表是否符合预期
7 问题与解决
问题1:分组组件聚合类型选择错误导致数据重复
问题现象
在“输出用户日浏览器小时明细表”转换流中,输出的数据存在多条重复记录,不符合预期。
问题原因
- 分组组件中部分聚合字段错误地使用了“个数”聚合类型,而不是“统计不同值的数量(N)”。
- “个数”统计的是分组内的记录条数(包含重复值),而业务需求需要对
user_id进行去重计数。
解决方法
- 将分组组件中需要去重计数字段的聚合类型从“个数”改为“统计不同值的数量(N)”。
- 重新执行转换流,重复数据问题消除。
问题2:排序记录组件排序字段与分组字段不一致
问题现象
在执行分组聚合操作时,统计结果出现异常,部分分组数据缺失或重复。
问题原因
- “排序记录”组件的排序字段与后续“分组”组件的分组字段不一致。
- 分组组件要求输入数据已按分组字段排序,否则可能导致分组结果错误。
解决方法
- 修正“排序记录”组件的排序字段,使其与分组组件的分组字段完全一致(
user_id、usage_date、process_name、hour)。 - 保存修改后重新执行转换流,分组结果恢复正常。
8 实验总结
通过本次实验,我掌握了以下知识与技能:
- 数据大屏的数据准备方法论
理解了在设计数据大屏之前,需要先明确业务问题,再反推需要哪些聚合统计表,而不是直接查询原始明细表。
- ETL零代码加工能力
熟练使用了助睿ETL平台中的多种组件,包括:表输入、表输出、排序记录、分组、值映射、字段选择、增加常量、计算器、JavaScript代码、记录集连接、行转列等。
- 多表关联与聚合统计
掌握了如何将行为日志表(daily_browser_detail)与用户属性表(demographic.csv)通过用户ID进行关联,并按多维度分组统计用户画像。
- 数据清洗与字段派生
学会了使用JavaScript组件实现复杂字段逻辑,如:根据出生年份计算年龄并分段、根据日期判断工作日/周末、根据使用时长划分轻度/中度/重度用户等。
- 周活跃趋势统计
掌握了将日期映射为指定周区间的方法,并统计每周各浏览器的活跃用户数。
- 核心指标计算
学会了使用一条SQL配合行转列操作,计算总时长、人均时长、周活跃率、重度用户占比等全局核心指标。
- ETL常见问题排查能力
通过解决分组聚合类型错误、排序字段不一致、单位转换、表关联等实际问题,提升了数据加工过程中的问题定位和解决能力。
助睿数智(Uniplore)一站式数据科学平台在本次实验中的表现总体良好,主要评价如下:
|
评价维度 |
评价内容 |
|
易用性 |
拖拽式组件编排、可视化连线设计,降低了数据加工的门槛,适合教学和快速开发场景。 |
|
组件丰富度 |
覆盖了数据输入、转换、聚合、连接、输出等全流程,JavaScript组件提供了良好的扩展能力。 |
|
调试体验 |
执行日志清晰,能够快速定位错误原因,但部分错误提示(如字段不存在)可以更友好。 |
|
数据探查 |
内置的“元数据加载”和“数据探查”功能方便查看表结构和抽样数据,有助于验证加工结果。 |
|
稳定性 |
在800万+条数据量(约825MB)下运行稳定,未出现卡顿或崩溃。 |
更多推荐


所有评论(0)