news 2026/6/10 15:08:31

浏览器市场与用户画像分析实验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
浏览器市场与用户画像分析实验

一、实验背景

1. 实验目的

1. 基于助睿数智(Uniplore)平台完成浏览器日志数据ETL加工,清洗、聚合每日浏览器访问明细数据,生成周活跃、使用频率、时长统计等8张业务表。

2. 掌握数据大屏静态布局搭建,完成9个多类型图表(柱状图、饼图、指标卡、折线图)页面排版与样式美化。

3. 学习蓝图编辑器交互配置,实现MySQL数据源接入、并行数据分发、图表自动渲染数据库真实数据。

4. 排查数据链路报错、字段映射错误、页面脚本异常等可视化常见故障,形成完整排错思路。

2. 实验环境

- 平台全称:助睿数智(Uniplore)一站式数据科学实验平台

- 实验地址:https://lab.guilian.cn/

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

- 数据源:团队私有MySQL数据库

- 实验模块:

1. 数据加工(ETL):对应官方手册topic/118

2. 大屏静态布局:对应官方手册topic/119

3. 大屏蓝图数据接入:对应官方手册topic/120

3. 整体处理流程

1. **数据加工阶段**:创建用户-日-浏览器-小时明细表 → 生成8张业务统计表 → 数据探查验证

2. **大屏布局阶段**:新建市场分析大屏 → 导入背景与素材 → 9个图表组件拖拽排版 → 组件导出至蓝图编辑器

3. **数据接入阶段**:创建数据库数据源 → 全局节点触发 → 6个SQL请求节点拉取数据 → 并行数据处理 → 图表绑定数据接口

4. **验证发布阶段**:预览调试 → 故障排查 → 发布生成分享链接

---

二、实验步骤

模块1:浏览器数据加工

步骤1:创建用户_日_浏览器_小时明细表

1. 打开项目"互联网用户行为日志",新建转换流**"创建用户_日_浏览器_小时明细表"**

2. 拖拽**执行一个SQL脚本**组件,数据库连接选择"团队私有数据库"

3. 输入建表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 COMMENT='用户_日_浏览器_小时明细表';

```

4. 点击"运行"执行转换流

步骤2:复制并修改转换流

1. 复制"互联网用户行为日志数据清洗抽取"转换流,重命名为**"输出用户日浏览器小时明细表"**

2. 修正**排序记录1**组件:排序字段改为`user_id`、`usage_date`、`process_name`、`hour`(与分组组件一致)

3. 添加**值映射**组件,连接分组1输出,完成浏览器名称映射:

| 进程名 | 目标值 |

|--------|--------|

| iexplore.exe | IE浏览器 |

| 360chrome.exe | 360极速 |

| 360se.exe | 360se |

| chrome.exe | Google |

| sogouexplorer.exe | 搜狗 |

| QQBrowser.exe | QQ浏览器 |

4. 修改**过滤记录**组件:仅保留上述6个浏览器进程,删除EXCEL.EXE等非浏览器进程

5. 修改分组组件:将聚合类型"个数"改为"统计不同值的数量(N)"

6. 添加**表输出**组件,目标表`daily_browser_detail`,字段映射:

| 表字段 | 流字段 |

|--------|--------|

| user_id | user_id |

| usage_date | usage_date |

| browser_name | process_name |

| hour | hour |

| total_duration_sec | total_duration_sec |

| active_count | active_count |

7. 勾选"裁剪表",运行转换流

步骤3:创建全部目标数据表

1. 新建转换流**"创建浏览器大屏分析目标数据表"**

2. 拖拽执行一个SQL脚本组件,输入完整建表语句(包含7张表的DROP+CREATE):

```sql

-- 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='用户画像统计表';

```

3. 运行转换流完成所有表创建

步骤4:各浏览器周活跃趋势表数据抽取

1. 新建转换流**"各浏览器周活跃趋势表数据抽取"**

2. **表输入**:读取`daily_browser_detail`表

3. **字段选择**:修改`usage_date`字段类型为Date,格式`yyyy-MM-dd`

4. **值映射**:将所有日期映射为对应周区间(5/7-5/13、6/4-6/10、7/2-7/8、8/6-8/12),目标字段`week_range`

5. **排序记录**:按`browser_name`、`week_range`升序

6. **分组**:分组字段`browser_name`、`week_range`,聚合`user_id`为"统计不同值的数量",输出`active_user_count`

7. **表输出**:写入`browser_weekly_active`,勾选裁剪表

8. 运行转换流

步骤5:各浏览器使用频率分布表数据抽取

1. 新建转换流**"使用频率分布数据抽取"**

2. **表输入**:读取`daily_browser_detail`

3. **排序记录**:按`user_id`、`browser_name`升序

4. **分组**:按用户+浏览器聚合`total_duration_sec`总和,输出`total_seconds`

5. **增加常量**:新增`hour_m_s=3600`

6. **计算器**:计算`total_hours = total_seconds / hour_m_s`,保留2位小数

7. **JavaScript代码**:实现时长分级:

```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 = '重度';

}

```

8. **排序记录**:按`browser_name`、`usage_level`升序

9. **分组**:按浏览器+使用等级统计用户数

10. **表输出**:写入`browser_frequency_stats`

11. 运行转换流

步骤6:各浏览器使用数量分布表数据抽取

1. 新建转换流**"浏览器使用数量分布数据抽取"**

2. **表输入**:读取`daily_browser_detail`

3. **排序记录**:按`user_id`升序

4. **分组**:按用户统计浏览器种类数量,输出`browser_cnt`

5. **JavaScript代码**:转换为"1种"、"2种"、"3种及以上":

```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种及以上';

}

```

6. **排序记录**:按`browser_count`升序

7. **分组**:按使用数量统计用户数

8. **表输出**:写入`browser_multi_usage`

9. 运行转换流

步骤7:各浏览器工作日周末对比表数据抽取

1. 新建转换流**"浏览器工作日周末对比数据抽取"**

2. **表输入**:读取`daily_browser_detail`

3. **JavaScript代码**:判断工作日/周末:

```javascript

var date = usage_date;

var dayOfWeek = date.getDay();

var day_type = "";

if (dayOfWeek >= 1 && dayOfWeek <= 5) {

day_type = "工作日";

} else {

day_type = "周末";

}

```

4. **排序记录**:按`browser_name`、`day_type`升序

5. **分组**:聚合平均时长、总时长、用户数

6. **增加常量**:`hour_m_s=3600`

7. **计算器**:总时长转换为小时

8. **字段选择**:删除冗余字段

9. **表输出**:写入`browser_weekday_weekend`

10. 运行转换流

步骤8:核心指标数据抽取

1. 新建转换流**"核心指标数据抽取"**

2. **表输入**:执行SQL计算4个核心指标:

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

```

3. **行转列**:将4个指标转为键值对格式

4. **值映射**:将指标名映射为中文

5. **表输出**:写入`browser_overview`

6. 运行转换流

步骤9:用户画像表加工

1. 从公共空间导出`demographic.csv`到项目根目录

2. 新建转换流**"用户画像表加工"**

3. **CSV文件输入**:读取`demographic.csv`,编码UTF-8

4. **增加常量**:`year=2012`

5. **计算器**:计算年龄`age = year - BIRTHDAY`

6. **JavaScript代码**:年龄分段:

```javascript

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';

}

```

7. **表输入**:读取`daily_browser_detail`

8. 两个数据流分别按`user_id`和`USERID`排序

9. **记录集连接**:左连接两个表,关联字段`user_id`和`USERID`

10. **排序记录**:按所有分组字段排序

11. **分组**:按浏览器+所有用户属性统计用户数

12. **表输出**:写入`user_profile_stats`

13. 运行转换流

模块2:大屏静态布局制作

步骤1:新建市场分析大屏

1. 进入助睿数据大屏平台,点击"+新建"→"新建大屏"

2. 选择空白模板,命名为"市场分析"

3. 进入编辑界面

步骤2:大屏基础样式设置

1. **背景设置**:右侧页面设置→背景图片,粘贴链接:

`https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/public-material/bg-2.png`

2. **标题设置**:

- 拖拽"单张图片"组件,重命名"标题banner"

- 图片链接:`https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/practice/browser-analysis/banner01.png`

- 基础属性:宽度1920,高度114,位置x=0,y=0

3. **导航设置**:

- 拖拽"单张图片"作为导航背景,链接:`https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/comprehensive-data/navigation-bg-1.png`

- 添加"通用标题"组件,文本"市场分析"

- 复制导航组件,修改为"用户画像",调整位置

4. 将顶部所有组件成组,命名"顶部"

步骤3:9个图表组件布局制作

按照官方手册布局,依次制作以下9个图表区域:

| 图表名称 | 组件类型 | 标题 | 背景图链接 |

|----------|----------|------|------------|

| 浏览器用户数 | 基础柱状图 | 浏览器用户数 | 短标题背景 |

| 浏览器使用时长 | 多维度饼图 | 浏览器使用时长 | 短标题背景 |

| 浏览器人均使用时长 | 基础柱状图 | 浏览器人均使用时长 | 短标题背景 |

| 数据概览 | 4个数据翻牌器 | 数据概览 | 长标题背景 |

| 工作日vs周末使用时长 | 分组柱状图 | 工作日vs周末使用时长 | 长标题背景 |

| 24小时活跃用户数分布 | 区域图 | 24小时活跃用户数分布 | 长标题背景 |

| 浏览器周活跃用户数变化 | 折线图 | 浏览器周活跃用户数变化 | 短标题背景 |

| 使用频率分布 | 垂直基本柱图 | 使用频率分布 | 短标题背景 |

| 浏览器使用数量分布 | 基本饼图 | 浏览器使用数量分布 | 短标题背景 |

每个图表区域包含:

1. 区域背景:链接`https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/public-material/area-bg.png`

2. 标题背景:短标题`https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/public-material/title-bg-short.png`,长标题`https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/public-material/title-bg-long.png`

3. 通用标题组件

4. 对应图表组件

步骤4:组件导出到蓝图编辑器

1. 右键画布中每个图表和指标卡组件

2. 选择"导出到蓝图编辑器"

3. 全部导出完成后,点击顶部"蓝图编辑器"切换页面

模块3:大屏蓝图数据接入

步骤1:创建团队私有数据库数据源

1. 大屏顶部切换到"我的数据"

2. 点击"+新建"→"新建数据源"

3. 数据库类型MySQL,填入团队私有数据库地址、端口、账号、密码

4. 点击"立即添加",测试连接成功

步骤2:为市场格局3个图表配置数据

1. 拖拽**全局节点**到画布

2. 拖拽**SQL请求**节点,连接全局节点"页面初始化完成"→"执行SQL"

3. SQL请求配置:

- 数据源:团队私有数据库

- SQL代码:

```javascript

let sql = `

select

browser_name as x,

user_count as y1,

round(total_duration_sec/3600,0) as y2,

round((total_duration_sec/3600)/user_count,1) as y3

from labs.browser_coverage

order by browser_name`

return sql

```

4. 拖拽**并行数据处理**节点,添加3个处理方法:

- 各浏览器用户数:

```javascript

return data.map(item => ({

x: item.x,

y: item.y1,

s: '用户数'

}));

```

- 各浏览器总使用时长:

```javascript

return data.map(item => ({

name: item.x,

value: item.y2

}));

```

- 各浏览器人均使用时长:

```javascript

return data.map(item => ({

x: item.x,

y: item.y3,

s: '人均时长(小时)'

}));

```

5. 连接SQL请求"执行成功"到3个并行处理方法

6. 添加3个图表节点到画布,连接并行处理输出到对应图表"导入数据接口"

7. 返回画布,每个图表:

- 数据源切换为对应并行处理接口

- 字段映射:柱状图x→x,y→y;饼图name→name,value→value

步骤3:为指标区域配置数据

1. 拖拽**SQL请求**节点,连接全局节点

2. SQL代码:

```javascript

let sql = `select metric_name, metric_value from labs.browser_overview `

return sql

```

3. 拖拽**并行数据处理**节点,添加4个处理方法:

- 总使用时长:

```javascript

var item = data.find(d => d.metric_name === '总使用时长');

return [{ value: item ? item.metric_value : 0 }];

```

- 人均使用时长:

```javascript

var item = data.find(d => d.metric_name === '人均使用时长');

return [{ value: item ? item.metric_value : 0 }];

```

- 活跃用户占比:

```javascript

var item = data.find(d => d.metric_name === '活跃用户占比');

return [{ value: item ? item.metric_value : 0 }];

```

- 重度用户占比:

```javascript

var item = data.find(d => d.metric_name === '重度用户占比');

return [{ value: item ? item.metric_value : 0 }];

```

4. 连接4个并行处理输出到对应数据翻牌器

步骤4:为其他图表配置数据

按照相同步骤,依次配置剩余5个图表:

| 图表名称 | SQL代码 |

|----------|---------|

| 工作日vs周末使用时长 | `select browser_name as x, avg_duration_sec as y, day_type as s from labs.browser_weekday_weekend order by browser_name, day_type` |

| 24小时活跃用户数分布 | `select hour as x, active_user_count as y, browser_name as s from labs.browser_hourly order by browser_name, hour` |

| 浏览器周活跃用户数变化 | `select week_range as x, active_user_count as y, browser_name as s from labs.browser_weekly_active order by browser_name, week_range` |

| 使用频率分布 | `select browser_name as s, user_count as y, usage_level as x from labs.browser_frequency_stats order by browser_name` |

| 浏览器使用数量分布 | `select browser_count as name, user_count as value from labs.browser_multi_usage order by browser_count` |

步骤5:预览与发布

1. 点击画布右上角"保存"

2. 点击"预览"按钮,打开新页面查看效果

3. 确认所有图表正常显示数据,无控制台报错

4. 点击"发布"按钮,生成分享链接

画布链接:http://47.109.66.142:30887/#/dataScreen/release?shareId=1235cbd8eb6f4f9caf63aa857500f61e

三、实验结果

1. **ETL加工结果**:成功生成8张业务数据表,所有转换流执行无报错,数据探查验证各表数据完整准确。

2. **静态布局结果**:完成9个图表组件的规范排版,页面分区清晰,样式符合官方要求。

3. **数据接入结果**:

- 数据库数据源连接正常,6个SQL请求均可成功查询数据

- 并行数据处理正确拆分数据,输出符合图表要求的格式

- 所有图表成功加载数据库真实数据,无空白或静态示例数据

4. **最终成果**:生成可分享的浏览器市场分析大屏链接:

http://47.109.66.142:30887/#/dataScreen/release?shareId=1235cbd8eb6f4f9caf63aa857500f61e`

---

四、问题与解决

问题1:转换流运行报错"Column 'week_range' cannot be null"

1. 现象:周活跃趋势表转换流表输出失败

2. 原因:值映射组件未覆盖所有日期,部分日期未匹配到周区间

3. 解决:补全4周所有28天的日期与周区间映射关系

问题2:图表显示空白,无任何数据

1. 现象:切换数据接口后图表无内容

2. 原因:字段映射错误,将SQL原始字段y1/y3直接映射到图表y字段

3. 解决:并行处理已将y1/y3重命名为y,图表统一映射x→x,y→y

问题3:预览报错"Request error [SQL 请求] undefined"

1. 现象:控制台红色报错,图表无数据

2. 原因:蓝图存在两条独立SQL执行链,逻辑冲突;图表仍为静态数据模式

3. 解决:删除冗余节点,保留单条执行链;所有图表切换为数据接口模式

问题4:控制台报错"Uncaught SyntaxError: Unexpected token '<'"

1. 现象:页面脚本解析失败

2. 原因:浏览器缓存资源异常

3. 解决:Ctrl+Shift+Delete清除全部缓存,重新预览

问题5:饼图标签显示异常

1. 现象:饼图标签重叠或不显示

2. 原因:饼图内外半径设置不当

3. 解决:调整数据系列内外半径,设置标签显示方式

---

五、实验总结

1. 实验收获

1. 完整掌握助睿平台从数据ETL加工到可视化大屏制作的全流程操作

2. 熟练使用蓝图编辑器实现数据请求、并行处理、图表绑定的完整数据流

3. 积累了丰富的可视化故障排查经验,能够快速定位和解决常见问题

4. 理解了商业数据分析大屏的设计思路和实现方法

2. 平台评价

助睿数智平台提供了一站式零代码数据处理与可视化解决方案,大大降低了数据分析的门槛。蓝图编辑器的可视化编程方式非常直观,适合初学者学习。但平台内网访问偶尔会出现资源加载异常的情况,操作时需要注意及时保存。

3. 改进建议

1. 增加更多的图表样式和交互功能

2. 优化蓝图编辑器的节点连线体验

3. 提供更详细的错误提示信息,方便用户排查问题

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 15:03:13

FinalShell保存的密码安全吗?一个Java脚本带你解密本地存储机制

FinalShell密码存储机制深度解析&#xff1a;从Java解密代码看客户端安全实践 打开FinalShell的安装目录&#xff0c;那些看似随机的加密字符串背后隐藏着怎样的安全逻辑&#xff1f;作为一款流行的SSH客户端工具&#xff0c;FinalShell的密码存储机制一直是开发者关注的焦点。…

作者头像 李华
网站建设 2026/6/10 14:51:19

从硬盘到Wi-Fi:汉明码是如何默默守护你每天的数据安全的?

从硬盘到Wi-Fi&#xff1a;汉明码是如何默默守护你每天的数据安全的&#xff1f; 当你用手机扫描二维码支付时&#xff0c;当你在咖啡馆用Wi-Fi传输文件时&#xff0c;甚至当你在电脑上保存文档时&#xff0c;有一种诞生于1950年的古老算法正在幕后默默工作。它就是汉明码——这…

作者头像 李华
网站建设 2026/6/10 14:49:43

MCP 控制平面的大规模部署架构——从单集群到多区域

一、从原型到大规模生产在前面的章节中&#xff0c;我们讨论了如何用 MCP 和 Peta 构建一个生产级的 Agent 系统。我们介绍了 Skill 设计、策略配置、审计日志、人工审批等核心能力。这些能力在单集群部署中已经足够强大。但随着 Agent 系统的规模化&#xff0c;新的挑战出现了…

作者头像 李华