浏览器用户行为数据分析与可视化综合实验第一部分

第一部分:实验一数据清洗与基础加工

1实验目的

本实验基于“用户-日-浏览器-小时”明细表,完成数据清洗与基础加工目标:对原始行为日志数据进行清洗、过滤、映射和聚合,生成可用于分析的用户行为明细表及基础统计表,包括:

用户-日-浏览器-小时明细表(daily_browser_detail)

浏览器市场覆盖率统计表(browser_coverage)

浏览器时段活跃统计表(browser_hourly)

2实验环境

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

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

建模平台:助睿AI人工智能平台

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

3实验数据

本实验基于上个实验《浏览器用户行为分析与流失预测-数据加工》产出的数据。

上个实验已输出的数据:

daily_browser_detail、browser_coverage、browser_hourly

实验步骤

6.1准备用户-日-浏览器-小时明细表

上个实验中的“互联网用户行为日志数据清洗抽取”转换流已经包含了生成明细数据的完整逻辑,但只输出了分支A和B(browser_coverage和browser_hourly)。我们需要将其复制一份,改为输出明细表,作为本实验后续加工的基础。

6.1.1创建用户_日_浏览器_小时明细表

首先,我们先在团队私有数据库中创建用于存放用户-日-浏览器-小时明细表的数据表

打开上个实验创建的项目“互联网用户行为日志”

新建转换流“创建用户_日_浏览器_小时明细表”,拖入“执行一个SQL脚本”组件

双击“执行一个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='用户_日_浏览器_小时明细表';

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

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脚本”组件

6.2-1

6.2-2

6.2-3

双击“执行一个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.2-4

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”

IMG_261

再拖拽值映射组件,字段选择组件连接值映射组件

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

IMG_263

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

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

IMG_265

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

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

IMG_267

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

数据库连接:选择“团队私有数据库”

目标表:browser_weekly_active

勾选“裁剪表”,清空原有数据

勾选“指定数据库字段”,建立字段映射

IMG_269

执行转换流:

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

}else if(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种';

}else if(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获取所有查询语句

6.6-1

6.6-2

6.6-4

接下来,根据使用日期获取星期几,拖拽JavaScript代码组件到画布中,表输入组件连接JavaScript代码组件

6.6-3

双击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="周末";

}

6.6-6

接下来,我们就可以统计工作日和周末的使用时长和用户数了

同样的,先拖入排序记录组件

6.6-7

将数据按照browser_name、day_type升序排序

6.6-9

再拖入分组组件,按browser_name、day_type分组

聚合:

avg_seconds=平均使用时长(秒)

total_seconds=总使用时长(秒)

user_count=COUNT(DISTINCT user_id)

6.6-11

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

6.6-14

6.6-15.1

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

6.6-15

6.6-16.1

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

数据库连接:选择“团队私有数据库”

目标表:browser_weekday_weekend

勾选“裁剪表”,清空原有数据

勾选“指定数据库字段”,建立字段映射

6.6-17IMG_266

6.6-18

执行转换流:

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(

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

}else if(age<=25){

age_group='18-25';

}else if(age<=35){

age_group='26-35';

}else{

age_group='>35';

}

6.8.4表输入:读取用户_日_浏览器_小时明细数据

拖入“表输入”组件到画布中

双击“表输入”组件,数据库连接选择“团队私有数据库”,点击“获取SQL查询语句”

在弹出的窗口中,选择用户_日_浏览器_小时明细表daily_browser_detail

系统提示选择“确认”

IMG_291

获取SQL查询语句后点击“确认”、

6.8.5关联用户属性

记录集连接组件可以将两个表进行连接,就是数据库中的join操作。数据连接时注意两个连接的数据集是否存在同一个字段。

“记录集连接”组件之前需要先对数据进行排序,否则可能出错

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

双击“排序记录1”组件,命名为“明细数据按用户ID排序”,在空白表格处右键点击“获取字段”

仅保留“user-id”,其他字段选中后右键点击“删除选中的行”

设置user_id升序排序后点击“确认”

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

IMG_298

接下来,两个数据就可以通过记录集连接组件来关联了,拖拽“记录集连接”组件到画布中,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执行转换流

点击“运行”按钮

IMG_307

6.8.9查看结果数据

点击“元数据”tab选项,右键团队私有数据库,点击“加载元数据”

点击“数据探查”,查看以上生成的目标表是否符合预期

实验总结

本次实验完成了数据清洗与基础加工的全流程,成功构建了用户-日-浏览器-小时明细表(daily_browser_detail)以及浏览器市场覆盖率、时段活跃等基础统计表。通过ETL平台掌握了字段映射、排序分组、聚合计算、JavaScript代码处理等核心操作,为后续多维度分析奠定了统一的数据基础。

平台评价:助睿数智平台在本实验中表现出色。零代码的ETL组件设计直观,拖拽即可完成复杂的数据加工流程;排序记录、分组、值映射、记录集连接等组件功能完善,执行效率高;同时平台支持SQL脚本和自定义JavaScript代码,兼顾了灵活性与易用性,非常适合数据分析教学场景。

实验成果:成功生成了6张业务分析目标表,构建了一套可复用的浏览器行为数据加工流程。

Logo

一站式 AI 云服务平台

更多推荐