第一部分:浏览器市场与用户画像分析 – 数据加工(2)
1. 实验目的
基于“用户-日-浏览器-小时”明细表,完成数据大屏所需的各项统计表加工,包括:浏览器市场格局、周活跃趋势、使用频率分布、使用数量分布、工作日vs周末对比、用户画像统计。
2. 实验环境
- 平台:助睿在线实验平台(https://lab.guilian.cn/)
- 工具:助睿数智 ETL 数据集成平台
- 数据规模:1000用户,800万+行为记录
3. 整体分析框架
| 哪个浏览器用户最多?用得最久? | browser_coverage(已产出) |
| 用户活跃度在增长还是下降? | browser_weekly_active |
| 用户是重度还是轻度使用? | browser_frequency_stats |
| 用户同时用几个浏览器? | browser_multi_usage |
| 工作日和周末使用习惯有何不同? | browser_weekday_weekend |
| 核心指标卡片 | browser_overview |
| 用户画像(性别、年龄、学历等) | user_profile_stats |
4. 实验步骤
4.1 准备基础明细表 daily_browser_detail
4.1.1 创建目标数据表
- 新建转换流“创建用户_日_浏览器_小时明细表”
- 拖入“执行一个SQL脚本”组件,数据库连接选择“团队私有数据库”
- 执行以下SQL:
CREATE TABLE IF NOT EXISTS `daily_browser_detail` (
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`usage_date` DATE NOT NULL COMMENT '使用日期',
`browser_name` VARCHAR(50) NOT NULL COMMENT '浏览器名称',
`hour` TINYINT NOT NULL COMMENT '小时',
`total_duration_sec` INT NOT NULL COMMENT '总使用时长(秒)',
`active_count` INT NOT NULL COMMENT '活跃次数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 点击“运行”按钮执行

4.1.2 复制并修改转换流
- 找到上个实验的“互联网用户行为日志数据清洗抽取”转换流 → 右键“复制” → 粘贴 → 重命名为“输出用户日浏览器小时明细表”
- 关键修正:双击“排序记录 1”组件,将排序字段修改为:user_id、usage_date、process_name、hour(与分组组件保持一致)


4.1.3 添加浏览器名称映射
- 在分组组件后添加“值映射”组件
- 配置映射关系:

| iexplore.exe | IE浏览器 |
| chrome.exe | |
| 360chrome.exe | 360极速 |
| 360se.exe | 360se |
| sogouexplorer.exe | 搜狗 |
| QQBrowser.exe | QQ浏览器 |
4.1.4 添加表输出
- 拖入“表输出”组件,配置:
- 数据库连接:团队私有数据库
- 目标表:daily_browser_detail
- 勾选“裁剪表”
- 勾选“指定数据库字段”,建立字段映射
- 点击“运行”执行转换流


4.2 创建所有目标数据表
- 新建转换流“创建浏览器大屏分析目标数据表”
- 拖入“执行一个SQL脚本”组件,执行以下SQL(创建6张表):
— 1. 核心指标概览表
CREATE TABLE `browser_overview` (
`metric_name` VARCHAR(50) NOT NULL,
`metric_value` DECIMAL(12,2) NOT NULL
);
— 2. 各浏览器周活跃趋势表
CREATE TABLE `browser_weekly_active` (
`browser_name` VARCHAR(50) NOT NULL,
`week_range` VARCHAR(20) NOT NULL,
`active_user_count` INT NOT NULL
);
— 3. 浏览器使用频率分布表
CREATE TABLE `browser_frequency_stats` (
`browser_name` VARCHAR(50) NOT NULL,
`usage_level` VARCHAR(10) NOT NULL,
`user_count` INT NOT NULL
);
— 4. 用户使用浏览器数量分布表
CREATE TABLE `browser_multi_usage` (
`browser_count` VARCHAR(10) NOT NULL,
`user_count` DECIMAL(5,2) NOT NULL
);
— 5. 浏览器工作日周末对比表
CREATE TABLE `browser_weekday_weekend` (
`browser_name` VARCHAR(50) NOT NULL,
`day_type` VARCHAR(10) NOT NULL,
`avg_duration_sec` INT NOT NULL,
`total_duration_hour` BIGINT NOT NULL,
`user_count` INT NOT NULL
);
— 6. 用户画像统计表
CREATE TABLE `user_profile_stats` (
`browser_name` VARCHAR(50) NOT NULL,
`gender` VARCHAR(10),
`age_group` VARCHAR(10),
`edu` VARCHAR(50),
`job` VARCHAR(50),
`income` VARCHAR(50),
`city_type` VARCHAR(10),
`province` VARCHAR(50),
`user_count` INT NOT NULL
);
- 点击“运行”执行

4.3 各浏览器周活跃趋势表
| 数据源 | daily_browser_detail |
| 分组字段 | browser_name、week_range |
| 聚合 | user_id 去重计数 → active_user_count |
| 目标表 | browser_weekly_active |
步骤:









4.4 各浏览器使用频率分布表
| 数据源 | daily_browser_detail |
| 中间计算 | 每用户每浏览器总时长 → 转小时 → 分等级(<3h/3-10h/>10h) |
| 分组字段 | browser_name、usage_level |
| 聚合 | user_id 去重计数 → user_count |
| 目标表 | browser_frequency_stats |

具体组件配置:






- JavaScript代码:
var total_hours = total_hours;
var usage_level = '';
if (total_hours < 3) {
usage_level = '轻度';
} else if (total_hours >= 3 && total_hours < 10) {
usage_level = '中度';
} else {
usage_level = '重度';
}



4.5 各浏览器使用数量分布表
| 数据源 | daily_browser_detail |
| 中间计算 | 每用户使用浏览器种类数 → 分等级(1种/2种/3种及以上) |
| 分组字段 | browser_count |
| 聚合 | user_id 去重计数 |
| 目标表 | browser_multi_usage |





JavaScript代码:
var browser_cnt = browser_cnt;
var browser_count = '';
if (browser_cnt == 1) {
browser_count = '1种';
} else if (browser_cnt == 2) {
browser_count = '2种';
} else {
browser_count = '3种及以上';
}
- 按 browser_count 升序排列




4.6 各浏览器工作日周末对比表
| 数据源 | daily_browser_detail |
| 中间计算 | 根据日期判断工作日/周末 |
| 分组字段 | browser_name、day_type |
| 聚合 | 平均时长、总时长(秒转小时)、用户数 |
| 目标表 | browser_weekday_weekend |



JavaScript代码(判断工作日/周末):
var date = usage_date;
var dayOfWeek = date.getDay();
var day_type = "";
if (dayOfWeek >= 1 && dayOfWeek <= 5) {
day_type = "工作日";
} else {
day_type = "周末";
}






4.7 核心指标数据抽取
| 数据源 | daily_browser_detail(一次性SQL计算) |
| 处理方式 | 列转行 → 指标名映射为中文 |
| 目标表 | browser_overview |


核心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(
(SELECT COUNT(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(
(SELECT COUNT(*) FROM (
SELECT user_id FROM daily_browser_detail
WHERE usage_date BETWEEN '2012-05-07' AND '2012-07-08'
GROUP BY user_id
HAVING SUM(total_duration_sec) / 3600 > 30
) t) * 100.0 / COUNT(DISTINCT user_id), 2
) AS heavy_ratio
FROM daily_browser_detail

|
total_hours |
total_hours |
metric_value |
|
avg_hours |
avg_hours |
metric_value |
|
active_ratio |
active_ratio |
metric_value |
|
heavy_ratio |
heavy_ratio |
metric_value |


4.8 用户画像表加工
4.8.1 导入人口属性数据
- 进入“公共空间” → “数据资源” → 找到 demographic.csv
- 点击“更多” → “导出” → 选择根目录 → “确定”

4.8.2 构建转换流






var age_group = '';
if (age < 18) age_group = '<18';
else if (age <= 25) age_group = '18-25';
else if (age <= 35) age_group = '26-35';
else age_group = '>35';





排序记录组件:共8个排序条件
|
1 |
browser_name |
是 |
否 |
否 |
0 |
否 |
|
2 |
GENDER |
是 |
否 |
否 |
0 |
否 |
|
3 |
EDU |
是 |
否 |
否 |
0 |
否 |
|
4 |
JOB |
是 |
否 |
否 |
0 |
否 |
|
5 |
INCOME |
是 |
否 |
否 |
0 |
否 |
|
6 |
PROVINCE |
是 |
否 |
否 |
0 |
否 |
|
7 |
ISCITY |
是 |
否 |
否 |
0 |
否 |
|
8 |
age_group |
是 |
否 |
否 |
0 |
否 |
分组字段同排序字段,共8个:


4.9 验证结果
- 右键点击“团队私有数据库” → “加载元数据”
- 点击“数据探查”,查看各目标表数据是否符合预期



- 输出表汇总
| browser_weekly_active | 各浏览器每周活跃用户数 |
| browser_frequency_stats | 各浏览器轻/中/重度用户分布 |
| browser_multi_usage | 用户使用1/2/3+种浏览器的数量分布 |
| browser_weekday_weekend | 各浏览器工作日vs周末使用时长对比 |
| browser_overview | 总时长、人均时长、周活跃占比、重度用户占比 |
| user_profile_stats | 各浏览器按性别/年龄/学历/职业/收入/地域的用户分布 |
第二部分:浏览器市场分析——大屏静态布局制作
- 可视化工具:助睿Max(数据大屏)
- 实验数据:
| 数据概览 | 浏览器市场 | 总使用时长 | 指标卡 | browser_coverage | 所有用户累计使用时长(小时) |
| 人均使用时长 | 指标卡 | browser_coverage | 总使用时长 / 覆盖用户数(小时/周) | ||
| 活跃用户占比 | 指标卡 | browser_coverage | 周活跃用户数 / 覆盖用户数 | ||
| 重度用户占比 | 指标卡 | browser_frequency_stats | 使用时长>10小时/周的用户占比 | ||
| 市场格局 | 用户规模 | 用户数 | 柱状图 | browser_coverage | 展示6个浏览器用户数 |
| 使用规模 | 使用时长 | 饼图 | browser_coverage | 展示各浏览器使用时长占比 | |
| 使用粘性 | 人均使用时长 | 柱状图 | browser_coverage | ||
| 用户行为 | 时间趋势 | 周活跃趋势 | 折线图 | browser_weekly_active | 展示第1-4周各浏览器活跃用户数变化 |
| 使用习惯 | 使用频率分布 | 堆叠柱状图 | browser_frequency_stats | 轻/中/重度用户在各浏览器的占比 | |
| 时段偏好 | 全天时段 | 24小时活跃分布 | 折线图 | browser_hourly | X轴小时,Y轴活跃用户数,不同颜色代表不同浏览器 |
| 周内对比 | 工作日vs周末 | 分组柱状图 | daily_browser_detail | 对比工作日和周末的使用时长 | |
| 竞争关系 | 使用数量 | 浏览器使用数量分布 | 饼图 | browser_multi_usage | 用户使用1种/2种/3种及以上浏览器的比例 |

- 进入大屏管理中心,首先添加我们所需的数据源。

- 点击“新建大屏”

- 进入大屏设计界面,使用组件完成静态大屏设计。


第三部分:浏览器市场分析——大屏数据接入
目的:使用助睿Max的蓝图编辑器,将之前实验加工好的数据表接入到大屏的各个图表组件中,使图表能够动态展示真实数据。
- 组件导入到蓝图编辑器后,可以为该组件配置交互。

- 切换至蓝图编辑器

- 依次配置好所有节点

- 保存后发布效果应如图:

第四部分:实验总结
问题分析:本次实验中主要遇到了周活跃趋势表week_range字段空值入库报错问题,主要原因是按照设置的4个范围映射字段后,其余没有包含的字段将输出为NULL值,不符合建表时的非空约束,导致工作流无法正常运行。
解决方式:我们根据日志定位到了输出为NULL的组件,在“不匹配时的默认值”设为“其他”,既不影响我们的映射,也不会造成空值。
本次实验在之前的数据集成相关操作外,还拓展了数据大屏的设计和数据接入方面的实践,很新奇也不太熟练,但在一步步配置中慢慢有理解到“为什么这样设置?”、“如何将业务问题转换为设计的思维”等等,助睿平台在学习中给我们提供了很好的学习实践平台和资源。



