1 实验目的

本实验基于“用户-日-浏览器-小时”明细表,完成数据大屏所需的各项统计表加工,包括:

  • 浏览器市场格局统计(覆盖率、使用时长)
  • 浏览器周活跃趋势统计
  • 浏览器使用频率分布统计
  • 用户浏览器使用数量分布统计
  • 浏览器工作日与周末使用对比统计
  • 用户画像统计(性别、年龄、学历、职业、收入、居住地类型、省份分布)

2 实验环境

本次实验使用助睿数智(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),因为:

  1. 原始明细表数据量大,查询慢,影响大屏加载速度
  2. 大屏需要的是聚合后的统计结果,不是原始明细
  3. 多个图表可能共用同一份聚合数据,提前加工可以避免重复计算

因此,在设计大屏之前,我们首先需要明确:我们要通过数据分析回答哪些业务问题?

业务问题

为什么重要

哪个浏览器用户最多?

了解市场领导者,判断自身产品的市场地位

哪个浏览器用户用得最久?

用户数多不代表粘性高,使用时长方能反映真实依赖度

用户活跃度在增长还是下降?

判断产品生命周期,及时发现衰退信号

用户什么时候最活跃?

优化推送和运营时机,在正确时间触达用户

用户是重度使用还是偶尔打开?

区分核心用户和边缘用户,制定差异化运营策略

用户同时用几个浏览器?

了解用户忠诚度,判断是否存在被竞品替代的风险

用户还用什么其他浏览器?

识别主要竞争对手,制定针对性竞争策略

工作日和周末使用习惯有何不同?

区分工作场景和娱乐场景,优化产品功能

核心用户是谁?(性别、年龄、职业)

明确目标用户群体,指导产品设计和营销方向

用户的教育水平如何?

影响产品复杂度设计,高学历用户可能接受更复杂的功能

用户的收入水平如何?

影响商业化策略,高收入用户付费意愿更强

用户分布在哪里?(城市、省份)

指导区域市场拓展和资源投放

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_coveragebrowser_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

Google

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去重计数)

1

最后拖入表输出组件,将分组聚合结果入库,表输出组件配置为:

  • 数据库连接:选择“团队私有数据库”
  • 目标表: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(DISTINCT user_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

接下来我们将年龄划分为四段:<1818-2526-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_idusage_dateprocess_namehour)。
  • 保存修改后重新执行转换流,分组结果恢复正常。

8 实验总结

通过本次实验,我掌握了以下知识与技能:

  • 数据大屏的数据准备方法论

理解了在设计数据大屏之前,需要先明确业务问题,再反推需要哪些聚合统计表,而不是直接查询原始明细表。

  • ETL零代码加工能力

熟练使用了助睿ETL平台中的多种组件,包括:表输入、表输出、排序记录、分组、值映射、字段选择、增加常量、计算器、JavaScript代码、记录集连接、行转列等。

  • 多表关联与聚合统计

掌握了如何将行为日志表(daily_browser_detail)与用户属性表(demographic.csv)通过用户ID进行关联,并按多维度分组统计用户画像。

  • 数据清洗与字段派生

学会了使用JavaScript组件实现复杂字段逻辑,如:根据出生年份计算年龄并分段、根据日期判断工作日/周末、根据使用时长划分轻度/中度/重度用户等。

  • 周活跃趋势统计

掌握了将日期映射为指定周区间的方法,并统计每周各浏览器的活跃用户数。

  • 核心指标计算

学会了使用一条SQL配合行转列操作,计算总时长、人均时长、周活跃率、重度用户占比等全局核心指标。

  • ETL常见问题排查能力

通过解决分组聚合类型错误、排序字段不一致、单位转换、表关联等实际问题,提升了数据加工过程中的问题定位和解决能力。

助睿数智(Uniplore)一站式数据科学平台在本次实验中的表现总体良好,主要评价如下:

评价维度

评价内容

易用性

拖拽式组件编排、可视化连线设计,降低了数据加工的门槛,适合教学和快速开发场景。

组件丰富度

覆盖了数据输入、转换、聚合、连接、输出等全流程,JavaScript组件提供了良好的扩展能力。

调试体验

执行日志清晰,能够快速定位错误原因,但部分错误提示(如字段不存在)可以更友好。

数据探查

内置的“元数据加载”和“数据探查”功能方便查看表结构和抽样数据,有助于验证加工结果。

稳定性

在800万+条数据量(约825MB)下运行稳定,未出现卡顿或崩溃。

Logo

一站式 AI 云服务平台

更多推荐