零基础:学生考勤标签构建|零代码实操全流程
本文介绍了使用助睿数智平台构建学生考勤主题标签的实验过程。实验通过零代码ETL工具完成数据接入、清洗、关联和标签计算全流程,包括:1) 创建原始数据表并导入CSV数据;2) 对学生基础信息进行标准化处理;3) 关联考勤记录与考勤类型数据;4) 使用JavaScript脚本识别异常考勤行为;5) 分组统计各类考勤指标;6) 输出最终标签宽表。实验解决了字段提取、空值处理等常见问题,验证了平台在数据处
一、实验背景
1. 实验目的
这次实验,我打算用助睿数智平台,完成学生用户画像里考勤主题标签的构建。做之前我就给自己定了几个核心目标:
- 完整走一遍零代码平台的数据接入、ETL 清洗、标签计算到结果输出的全流程,把这些操作练熟;
- 搞懂学生基础属性(比如年级、校区、住校状态)和考勤行为数据之间的关联逻辑,搭一套能复用的标准化考勤标签体系;
- 学会处理数据空值、字段不规范、多表关联失败这些实验里常见的坑;
- 最后输出一份完整、准确的学生考勤标签宽表,为之后的学生行为分析和教育管理决策提供数据支撑。
2. 实验环境
- 平台全称:助睿数智(Uniplore)一站式数据科学实验平台,该平台无需编写复杂代码,通过可视化组件拖拽即可完成数据处理操作,非常适合数据处理初学者使用。
- 产品官网:https://www.uniplore.com/
- 平台地址:https://lab.guilian.cn/
- 使用数据:本次实验采用教育大数据课程提供的专用数据集,包含三类CSV格式数据表,分别是`student_info.csv`(存储学生基础信息,如学号、姓名、班级、出生日期等)、`kaoqin.csv`(存储学生考勤记录,如考勤ID、学号、考勤类型ID、考勤日期等)、`control.csv`(存储考勤类型字典,用于对应考勤类型ID和具体的考勤行为名称,如迟到、早退等)。
- 核心工具:主要使用助睿平台内置的零代码ETL组件,包括表输入、记录集连接、字段选择、替换NULL值、JavaScript脚本编辑、表输出等,这些组件覆盖了数据处理的全流程,可满足本次实验的所有操作需求。
3. 整体处理流程
结合实验目的和数据特点,我梳理了本次实验的核心处理流程,整体遵循“数据接入→数据清洗与标准化→多表关联→行为标签计算→结果输出”的逻辑顺序,每一步都环环相扣,确保数据处理的准确性和完整性,具体流程拆解如下:
- 数据接入:先将本地的三类CSV数据表上传至助睿平台,导入到团队私有数据库中,完成原始数据的入库操作,为后续处理奠定基础;
- 数据清洗与标准化:对学生基础信息表进行清洗,处理空值、规范字段格式,同时从班级字段中提取年级、校区信息,对住校状态进行标准化映射,生成学生基础主题标签表;
- 多表关联:将考勤记录表与考勤类型字典表进行关联,补充考勤行为的语义信息,让考勤记录更易理解;再将关联后的考勤数据与学生基础主题标签表关联,实现学生基础信息与考勤行为数据的对应;
- 行为标签计算:按学号分组,统计每个学生的总考勤次数、迟到次数、早退次数等核心考勤指标,生成考勤行为标签;
- 结果输出:清洗冗余字段、处理剩余空值,生成最终的学生考勤主题标签宽表,完成整个实验流程。
二、实验步骤
本次实验的步骤的我按照整体处理流程逐步推进,我每一步操作都经过反复验证,确保操作正确、数据无误,具体详细步骤如下:
(一) 实验项目创建与数据资源获取
实验的第一步是创建专属实验项目,并完成原始数据的导入和入库,这是后续所有操作的基础,具体操作如下:
1、 创建实验项目
- 我们首先需打开助睿数智实验平台的登录页面,点击「ETL数据集成环境」,成功登录平台后,进入首页的项目管理界面;


- 在项目管理界面中,先要选择所属团队(可以选择个人团队),找到「新建项目」按钮并点击,弹出项目创建窗口,输入项目名称为“学生用户画像-考勤标签构建”,点击「确定」按钮,完成实验项目的创建;

- 项目创建完成后,我点击进入项目内部,在左侧导航栏中找到「文件库」模块,点击“文件库”,右键根目录,点击“新建目录”,输入目录名称为“数智教育数据集”,点击“确定”。



2、 数据资源导入
- 接下来我们将公共空间的数据资源导入到这个目录(数智教育数据集)下,点击「公共空间」,进入内部,再点击「获取资源」按钮,依次将公共空间的`2_student_info.csv`、`3_kaoqin.csv`、`4_kaoqinytpe.csv`三个文件上传至该目录,上传完成后,可在目录中看到三个文件的名称。





- 为了方便后续对数据进行处理,我需要将这三个CSV文件数据导入到团队私有数据库中,所以我们先要连接团队私有数据库。点击「元数据」,关系数据库右键打开菜单,选择「新建数据源」。

- 弹出新建数据库连接窗口,连接类型选择“MySQL”,用户名和密码使用助教提供的账号和密码。服务器主机名使用助教提供的数据库连接地址“rm-2vc3qok06bag39a5n.mysql.cn-chengdu.rds.aliyuncs.com”,端口号为3306,数据库名为助教提供的数据库名称,驱动类型选择“MySQL 8+”,连接名称为“团队私有数据库”,点击「测试连接」,提示连接成功后,点击「配置」按钮,完成数据库连接的配置。


3、 原始数据表结构创建与数据导入
由于导入数据库的原始数据没有规范的表结构,无法直接进行后续处理,因此我需要为每个原始数据表创建规范的表结构,并将CSV文件中的数据导入到对应的数据表中,三张表按相同步骤操作:
(1)创建原始_学生考勤表
- 点击左侧导航栏的「资源库」模块,右键根目录点击「新建转换流程」,输入流程名称为“创建原始_学生考勤表”,点击「确定」,进入转换流程编辑界面;



- 在编辑界面左侧的「组件库栏」中,我们需在该工作流中拖拽「执行一个SQL脚本」组件,通过执行SQL脚本来创建一个标签表,在组件中填写SQL脚本,选择目标数据库连接“团队私有数据库”,确保脚本执行权限,然后其他参数使用默认选项,我们可以不做处理。
SQL脚本如下:
CREATE TABLE IF NOT EXISTS `t_student_info` (
`stu_id` varchar(50) NOT NULL COMMENT '学号,作为主键,唯一标识每个学生',
`stu_name` varchar(50) DEFAULT NULL COMMENT '学生姓名',
`cla_name` varchar(50) DEFAULT NULL COMMENT '学生所在班级',
`grade` varchar(10) DEFAULT NULL COMMENT '学生所在年级',
`born_date` varchar(20) DEFAULT NULL COMMENT '学生出生日期',
`policy` varchar(10) DEFAULT NULL COMMENT '学生政治面貌',
`live_on_campus` varchar(10) DEFAULT NULL COMMENT '学生是否住校',
PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生基础信息表';


- 完成后运行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志。


(2)导入原始考勤数据
- 点击「资源库」新建转换工作流,并命名为“导入原始考勤数据”,并在「组件库」中拖拽一个“CSV文件输入”组件到画布。




- 双击该组件后,我在步骤名称中输入“考勤记录”,配置文件路径为“教育数据集”目录下的`3_kaoqin.csv`文件(点击文件名后的“浏览文件”按钮,在弹出的窗口中选择“3_kaoqin.csv”,点击“确定”),然后设置字段分隔符为逗号(默认),编码格式为UTF-8,点击「预览」,确认能正常读取CSV文件中的数据后,点击「确定」;




- 为了确保CSV文件中的字段与创建的数据库表字段一一对应,我添加了「字段选择」组件,拖拽至编辑区域,将「CSV文件输入」组件的输出端口与「字段选择」组件的输入端口连接,双击「字段选择」组件,将CSV文件中的字段与`raw_attendance`表中的字段进行一一映射。









- 完成后运行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志。


(3)创建原始_考勤类型表
- 我们首先需点击左侧导航栏的「资源库」模块,然后右键根目录点击「新建转换流程」,并输入流程名称为“创建原始_考勤类型表”,点击「确定」,进入转换流程编辑界面;

- 仿照“创建原始_学生考勤表”实验操作,我们需完成原始考勤类型表“4_kaoqintype.csv”数据导入到团队私有数据库。
其中的建表SQL为:
CREATE TABLE IF NOT EXISTS `raw_attendance_type` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`attendance_type_id` varchar(64) NOT NULL COMMENT '考勤类型id',
`attendance_type_name` varchar(100) DEFAULT NULL COMMENT '考勤类型名称',
`attendance_task_order_id` varchar(64) DEFAULT NULL COMMENT '考勤事件id',
`attendance_task_name` varchar(100) DEFAULT NULL COMMENT '考勤事件名',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '入库时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_attendance_type_id` (`attendance_task_order_id`)
)COMMENT='原始_考勤类型表';

(4)导入原始考勤类型数据
- 点击「资源库」新建转换工作流,并命名为“导入原始考勤类型数据”,并在「组件库」中拖拽一个“CSV文件输入”组件到画布。


- 使用CSV文件输入组件时,考勤类型原始表的列分隔符和考勤表的不一样,我们在配置中,需将列分隔符设为“插入制表符(TAB)”、编码为“GB2312”,其余操作和“导入原始考勤数据”类似。




- 表输出组件的配置与“ 原始考勤记录表数据导入”的一样,映射表选择“raw_attendance_type”。







- 完成后运行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志。

(5)创建原始_学生信息表
- 点击左侧导航栏的「资源库」模块,右键根目录点击「新建转换流程」,输入流程名称为“创建原始_学生信息表”,点击「确定」,进入转换流程编辑界面;

- 仿照“创建原始_学生考勤表”实验操作,完成原始考勤类型表“2_student_info.csv”数据导入到团队私有数据库。
其中的建表SQL为:
CREATE TABLE IF NOT EXISTS `raw_student_info` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`stu_id` varchar(64) NOT NULL COMMENT '学生ID',
`stu_name` varchar(100) DEFAULT NULL COMMENT '学生姓名',
`stu_sex` varchar(10) DEFAULT NULL COMMENT '性别',
`stu_nation` varchar(50) DEFAULT NULL COMMENT '民族',
`born_date` varchar(10) DEFAULT NULL COMMENT '出生日期(年)',
`cla_name` varchar(100) DEFAULT NULL COMMENT '班级名',
`native_place` varchar(200) DEFAULT NULL COMMENT '家庭住址',
`residence_type` varchar(50) DEFAULT NULL COMMENT '家庭类型',
`policy` varchar(50) DEFAULT NULL COMMENT '政治面貌',
`cla_id` varchar(64) DEFAULT NULL COMMENT '班级ID',
`cla_term` varchar(30) DEFAULT NULL COMMENT '班级学期',
`live_on_campus` varchar(10) DEFAULT NULL COMMENT '是否住校',
`leave_school` varchar(10) DEFAULT NULL COMMENT '是否退学',
`dormitory_no` varchar(50) DEFAULT NULL COMMENT '宿舍号',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '入库时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_student_id` (`stu_id`),
KEY `idx_cla_id` (`cla_id`)
) COMMENT='原始_学生信息表';



(6)导入原始学生基本信息数据
- 点击「资源库」新建转换工作流,并命名为“导入原始学生基本信息数据”,并在「组件库」中拖拽一个“CSV文件输入”组件到画布。


- 我们需使用“CSV文件输出”组件输入“2_student_info.csv”数据,编码使用UTF-8,获取字段时,然后我们需要将“bf_leaveSchool”的字段类型修改为“String”,其余默认。特别说明:bf_zhusu、bf_qinshihao 这2个字段是Integer,为避免出现小数,需要使用“字段选择”组件来固化并规范




- 拖拽“字段选择”组件到画布中,创建“CSV文件输入”组件到“字段选择”组件的连线,连接线类型选择“主输出步骤”。


- 双击“字段选择”组件,在配置窗口中,点击“元数据”,并在空白处插入2行,将“bf_zhusu”、“bf_qinshihao”字段的元数据设置如下:

- 表输出组件的配置与“ 原始考勤记录表数据导入”的一样,映射表选择“raw_student_info”,将“2_student_info.csv”数据输出到团队私有数据库的“raw_student_info”中。








- 完成后运行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志。

(7)创建学生考勤主题标签表
- 我们先点击左侧导航栏的「资源库」模块,然后右键根目录点击「新建转换流程」,输入流程名称为“创建学生考勤主题标签表”,点击「确定」,进入转换流程编辑界面;

- 在该工作流中我们需拖拽“执行一个SQL脚本”组件,通过执行SQL脚本来创建一个标签表。
其中的建表SQL为:
CREATE TABLE IF NOT EXISTS student_attendance_stats (
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键',
student_id INT NOT NULL COMMENT '学生ID',
student_name VARCHAR(50) NOT NULL COMMENT '学生姓名',
class_id INT NOT NULL COMMENT '班级ID',
class_name VARCHAR(50) NOT NULL COMMENT '班级名称',
grade VARCHAR(10) NOT NULL COMMENT '年级',
gender VARCHAR(10) NOT NULL COMMENT '性别',
birth_date VARCHAR(10) NOT NULL COMMENT '出生日期',
political_status VARCHAR(20) NOT NULL COMMENT '政治面貌',
is_boarder VARCHAR(10) NOT NULL COMMENT '是否住校',
campus_type VARCHAR(10) NOT NULL COMMENT '校区类型',
late_count INT NOT NULL DEFAULT 0 COMMENT '迟到次数',
early_leave_count INT NOT NULL DEFAULT 0 COMMENT '早退次数',
leave_count INT NOT NULL DEFAULT 0 COMMENT '请假次数',
uniform_violate_count INT NOT NULL DEFAULT 0 COMMENT '没穿校服次数',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '统计入库时间',
INDEX idx_student (student_id),
INDEX idx_class (class_id),
INDEX idx_grade (grade)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生考勤主题标签表';



(二) 学生基础主题标签构建(数据清洗与标准化)
原始的学生基础信息表中存在空值、字段格式不规范等问题,无法直接作为标签使用,因此我们需要对其进行清洗和标准化处理,提取核心基础属性标签,生成学生基础主题标签表。
1、 数据转换流逻辑说明
转换流遵循“数据接入—清洗整合—维度拆解—标签标记—指标计算—结果落地”的核心逻辑:
- 数据接入:接入考勤原始打卡表、考勤类型码表、学生信息基础表
- 数据整合:多表关联,给原始打卡记录绑定学生班级、住校属性、考勤事件名称
- 标签标记:通过考勤事件名称自动识别迟到、早退、请假、未穿校服等行为
- 指标计算:按日核算在校时长,按多维度聚合统计各类异常次数
- 结果落地:统一写入考勤统计结果表,供报表、查询、分析直接使用

各组件作用:
|
组件 |
作用 | |
|---|---|---|
| 1 | 表输入 |
读取数据库中的原始数据表 |
| 2 |
排序记录 |
按照指定字段对数据进行排序,为记录集连接做准备 |
| 3 |
记录集连接 |
按关联字段连接两表,补充考勤行为名称或学生属性 |
| 4 |
字段选择 |
移除冗余字段,保留核心必要字段 |
| 5 |
JavaScript脚本 |
执行脚本,通过关键词匹配提取异常考勤记录,生成二进制标记 |
| 6 |
分组 |
按指定维度分组,使用SUM函数聚合统计各类异常次数 |
| 7 |
替换NULL值 |
将空值字段替换为“未知” |
| 8 |
值映射 |
将住校状态编码(0/1)映射为“否”/“是” |
| 9 |
表输出 |
输出最终结果到数据库目标表 |
2、 数据接入(获取考勤记录、考勤类型数据、学生信息数据)
- 我们需新建了一个转换流程,命名为“学生考勤主题标签”,进入流程编辑界面,首先添加三个「表输入」组件(获取考勤记录、考勤类型数据、学生信息数据)。


- 双击第一个表输入组件,在配置窗口中,我们需将步骤名称修改为“考勤记录”,数据库连接选择“团队私有数据库”,并点击“获取SQL查询语句”,在数据库中选择“raw_attendance”原始_学生考勤表。


- 同样的,参考以上步骤,我们需将“表输入 1”和“表输入 2”组件分别命名为“考勤类型”和“学生信息”,分别获取“raw_attendance_type”考原始_考勤类型表和“raw_student_info”原始_学生信息表所有字段数据。




3、 数据关联(关联考勤记录+考勤类型)
使用表输入组件读取考勤记录、考勤类型数据后,需通过记录集连接组件完成数据关联,补充关键业务信息,为后续指标计算奠定基础。
我们需要使用记录集连接组件,将考勤主表与考勤类型码表关联——因为考勤记录表只有考勤类型ID(attendance_type_id)和考勤任务顺序ID(control_task_order_id ),缺少具体的考勤行为名称,而我们通过记录集连接组件进行连接,即可为每条考勤记录补充“正常考勤”“没穿校服”“迟到”“请假”等具体行为信息,确保后续能准确识别各类考勤行为。
- 在组件库搜索“记录集连接”组件,并将组件拖拽至画布中。

- 创建“考勤记录”CSV文件输入组件到记录集连接组件的连接线。


- 在建立连接线时,会出现“排序需要”的提示。这是由于记录集连接组件是按接收数据的顺序进行记录关联的,如果接收的数据是无序的,可能会造成记录连接结果出错。为避免因为排序问题造成连接结果出错。我们需要添加一个「排序记录」组件到转换流的“考勤记录”与“记录集连接”之间。

- 双击「排序记录」组件后,我们需将步骤名称为“按照考勤类型和考勤任务类型排序”,并通过“获取字段”功能获取字段列表,然后删除多余字段,只保留“attendance_type_id”、“attendance_task_order_id”字段。因为下一步连接是使用这两个字段进行连接,所以采用这两个字段对记录进行排序。

- 我们需创建“考勤类型”表输入组件到「记录集连接」组件的连接线。由于“考勤类型”组件的记录默认是按“attendance_type_id”、“attendance_task_order_id”这两个字段升序记录的,所以无需再次排序。

- 双击「记录集连接」组件来配置“考勤记录”和“考勤类型”两个表的关联关系。在下拉列表中我们选择需要连接的数据来源,第一个Transform选择“按照考勤类型和考勤任务类型排序”,第二个Transform选择“考勤类型”。然后我们在连接类型选择LEFT OUTER,通过连接字段使用“attendance_type_id”、“attendance_task_order_id”两个字段进行左外连接——右键点击→获取字段,然后我们需要保留这两个字段,其余字段删除。

- 通过预览数据,我发现部分字段存在空值,比如`policy`(政治面貌)、`born_date`(出生日期)、`live_on_campus`(是否住校)字段有部分空值,这些空值会影响后续标签计算的准确性,因此我添加了「替换NULL值」组件,与「字段选择」组件连接,双击该组件,对空值进行统一处理:
- `policy`字段的空值替换为“未知”;
- `born_date`字段的空值替换为“未知”;
- `live_on_campus`字段的空值替换为“未知”。
- 配置完成后,运行该部分流程,预览数据,确认所有空值都已替换完成,数据格式基本规范。
4、 行为标签衍生(统计学生异常考勤次数)
通过Javascript脚本生成考勤行为二进制标记,为后续聚合统计提供支撑,确保标签判断精准。具体操作如下:
- 添加“JavaScript 代码”组件,对接“记录集连接”组件的输出,通过关键词匹配,生成二进制判断标签(1=是,0=否),用于后续指标聚合:


- 双击“JavaScript代码”组件,命名为“提取异常考勤记录”,在Script1中输入JavaScript脚本
脚本如下:
// 初始化变量
var isLate = 0;
var isEarly = 0;
var isLeave = 0;
var isNoUniform = 0;
// 核心判断逻辑
if(attendance_type_name != null && attendance_task_name != null){
// 迟到判断(排除请假)
if((attendance_type_name.includes("迟到") ||
attendance_type_name.includes("晚到") ||
attendance_task_name.includes("迟到") ||
attendance_task_name.includes("晚到")) &&
!attendance_task_name.includes("请假")){
isLate = 1;
}
// 早退判断(排除请假)
if((attendance_type_name.includes("早退") ||
attendance_task_name.includes("早退")) &&
!attendance_task_name.includes("请假")){
isEarly = 1;
}
// 校服违规:只要包含“校服”就标记违规
if(attendance_type_name.includes("校服") || attendance_task_name.includes("校服")){
isNoUniform = 1;
}
}
// 请假判断
if(attendance_task_name != null){
if(attendance_task_name.includes("请假")){
isLeave = 1;
}
}

- 我们需要使用“获取变量”获取输出字段,其中系统将自动解析脚本中变量定义代码,生成字段数据。然后我们再点击“JavaScript脚本”组件的“测试脚本”按钮,确认标记字段(is_late_early、is_leave等)仅存在1和0两个值,标签判断准确(如迟到记录对应is_late_early=1,正常出勤对应is_compliant=1),无异常,若未显示这几个字段:
- 先确认后再重新点击测试。


5、 多维度分组聚合统计
实验核心:按两大统计维度聚合数据,将明细数据转化为统计指标,满足多层级考勤管理需求。具体操作如下:
在助睿ETL平台拖拽2个“分组”组件,我们需要分别对接“用户自定义Java表达式”组件的输出,按两大统计维度进行聚合,统一聚合指标,确保数据全覆盖:
- 聚合规则:
- 聚合函数:SUM(迟到标记)→ 迟到次数(late_count);
- 聚合函数:SUM(早退标记)→ 早退次数(early_count);
- 聚合函数:SUM(请假标记)→ 请假次数(leave_count);
- 聚合函数:SUM(没穿校服标记)→ 没穿校服次数(no_uniform_count)
操作如下:
- 添加“分组”组件,并建立连接线,连线选择“主输出步骤”。


- 双击“分组”组件,右键分组字段区域插入“stu_id”、“stu_name”、“cla_id”、“cla_name”四个字段。

- 右键聚合字段区域插入“late_count”、“early_count”、“leave_count”、“no_uniform_count”五个字段。

6、 关联学生信息
基于上述结果,使用记录集连接组件,关联学生信息表——因为考勤记录表仅包含学生ID和班级ID,缺少学生是否住校的核心属性,通过按学生ID关联学生信息表,可补全该属性,支撑住校相关维度的统计。具体操作如下:
- 由于“学生信息”数据表中的学号不是升序记录的,所以在进行记录关联前,我们需要先对数据进行排序。即建立“学生信息”表输入组件到“排序记录”组件的连接线(通过对“stu_id”字段进行排序),并将排序步骤命名为“按照学生编号进行排序”。



- 我们需要拖拽“记录集连接”组件至画布中,并创建“按照学生编号进行排序”排序记录组件到“记录集连接 1”组件的连接线。


- 由于考勤记录数据不是按“学号”升序记录的,所以在进行记录关联前,也需要对数据进行排序。我们需要再次添加“排序记录”,并建立“记录集连接”组件到“排序记录”组件的连接线,然后通过字段使用“stu_id”进行升序排序。



- 我们还需创建“考勤数据按学号排序”记录排序组件到“记录集连接 1”组件的连线,关联学生信息和考勤记录信息。记录集连接 1组件的第一个Transform选择“考勤数据按学号排序”,第二个Transform选择“按照学生编号进行排序”,连接类型选择LEFT OUTER,连接字段都使用“stu_id”。


7、 字段选择(移除冗余字段)
我们经过多表关联和前期接入,数据中会包含大量与考勤统计无关的字段(如学生信息表中的非必要属性),我们需要对关联后的数据进行冗余字段移除,因为这些冗余字段不仅会增加数据处理的负担,还可能导致后续聚合、计算出现干扰,我们只有移除冗余字段,保留核心有用字段,才能提升处理效率,确保统计逻辑清晰。具体操作如下:
- 搜索“字段选择”,拖拽至画布中,创建“记录集连接 1”组件到字段选择组件的连接线。


- 双击字段选择组件,在配置弹窗中,步骤名称输入“移除冗余字段”,点击“移除”Tab标签,右键空白处并点击“获取字段”。在获取的字段中,我们需要删除以下核心字段外,其他字段保留,可为后续时间维度拆解和行为标签衍生奠定基础:
- 学生 ID(stu_id)
- 学生姓名(stu_name)
- 班级 ID(cla_id)
- 班级名称(cla_name)
- 迟到次数(late_count);
- 早退次数(early_count);
- 请假次数(leave_count);
- 没穿校服次数(no_uniform_count)
- 性别(stu_sex)
- 出生日期(born_date)
- 政治面貌(policy)
- 是否住校(live_on_campus)


- 在字段选择组件鼠标右键弹出菜单,点击“显示输出字段”,查看输出字段是否正确。


8、 空值处理
3个数据表关联后,字段“stu_sex”、“born_date”、“policy”、“live_on_campus”存在空值,需要对这么空值进行处理。
- 拖拽“替换NULL值”组件至画布,创建“移除冗余字段”字段选择组件到“替换NULL值”组件的连线,连线类型选择“主输出步骤”。


- 双击“替换NULL值”组件,勾选“选择字段”,字段名称选择“stu_sex”、“born_date”、“policy”、“live_on_campus”,并将对应的空值均替换为“未知”。

9、 学生基础属性标准化处理
经过多表关联与字段筛选后,原始数据中住校状态为编码值,且缺少年级、校区类型等画像分析必需字段,无法直接用于学生考勤标签输出与后续用户画像分析。因此需要对学生基础属性进行标准化映射、缺失字段衍生,统一数据格式、补齐分析维度,保证标签表规范可用。
(1)住校状态标准化(字段映射)
原始的`live_on_campus`字段中,部分数据用“0”和“1”表示,部分数据用“是”和“否”表示,格式不统一,无法作为标准化标签,因此我需要对该字段进行标准化映射,具体操作如下:
- 在转换流程中,添加「值映射」组件,与「替换NULL值」组件连接,双击该组件,配置目标字段为`live_on_campus`(需要标准化的字段);


- 在映射规则中,我设置了以下对应关系,确保字段值统一:
- 源值`0` → 目标值`否`;
- 源值`1` → 目标值`是`;
- 不匹配的默认值设置为`未知`,避免出现未映射的异常值。
双击“值映射”组件,步骤名称改为“住校状态映射”,使用的字段名为“live_on_campus”,不匹配时的默认值为“否”。

(2)年级字段提取(JavaScript脚本处理)
原始的`grade`字段中,部分数据为空,部分数据与班级信息不匹配,因此我决定通过JavaScript脚本,从`cla_name`(班级)字段中提取年级信息,确保年级字段的准确性,具体操作如下:
- 在转换流程中,继续添加「JavaScript脚本」组件,命名为“从班级提取年级”,与「值映射」组件连接;


- 双击该组件,进入脚本编辑界面,步骤名称改为“从班级提取年级”。并且输入以下JavaScript脚本,脚本的核心逻辑是判断班级名称中是否包含“高一”“高二”“高三”关键词,从而提取对应的年级信息,若班级名称为空或无对应关键词,则设置为“未知”:
var gra_name if (cla_name == null){ gra_name='未知' }else if(cla_name.includes('高一')){ gra_name='高一' }else if (cla_name.includes('高二')){ gra_name='高二' }else if (cla_name.includes("高三")){ gra_name='高三' } else{ gra_name='未知' }

- 配置输出字段,将脚本生成的`gra_name`字段替换原有字段,设置数据类型为“String”,确保与表结构一致;

(3)校区字段提取(JavaScript脚本处理)
原始数据中没有专门的校区字段,但班级名称中包含校区信息(如“东校区高一(1)班”),因此我同样通过JavaScript脚本,从`cla_name`(班级)字段中提取校区信息,新增校区标签,具体操作如下:
- 在转换流程中,添加「JavaScript脚本」组件,命名为“校区类别判断”,与“从班级提取年级”脚本组件连接;


- 双击该组件,然后步骤名称改为“校区类型判定”,并输入以下JavaScript脚本,核心逻辑是判断班级名称中是否包含“东校区”“老校区”关键词,提取对应的校区信息,若班级名称为空或无对应关键词,则设置为“其他校区”,同时配置输出字段,新增`campus_type`(校区)字段,设置数据类型为“String”,添加到数据结构中:
var class_campus_type if (cla_name == null){ class_campus_type='未知' }else if(cla_name.startsWith('白-') || cla_name.startsWith('东-')){ class_campus_type='新校区' }else if (cla_name != null && !isEmpty(cla_name)){ class_campus_type='老校区' } else{ class_campus_type='未知' }

10、 基础标签表输出
完成学生基础信息的清洗、标准化和字段提取后,我需要将处理后的数据输出为学生基础主题标签表,用于后续与考勤数据关联,具体操作如下:
- 在转换流程中,添加「表输出」组件,与“校区类别判断”脚本组件连接;


- 双击「表输出」组件,配置目标数据库连接为“团队私有数据库”,目标表选择`student_attendance_stats`表;

- 勾选「清空表再插入」选项,建立工作流字段与数据库表字段的映射关系。勾选后会激活“数据库字段”tab页,然后点击数据库字段tab页,配置`student_attendance_stats`表的映射。





(三) 执行工作流
- 执行转换流,点击工具栏中的“执行”按钮,在弹出执行配置窗口中,选择默认配置,然后点击“启动”按钮,启动工作流。


- 查看日志,工作流执行后会打开日志页面,定期刷新工作流日志数据。

- 打开“元数据”tab页,在“团队私有数据库”连接上右键选择“加载元数据”,然后进入数据探查页面,展开“团队私有数据库”,查看数据库表数据是否符合预期。


三、问题与解决
在本次实验过程中,我遇到了多个常见的数据处理问题,通过逐步排查、查阅平台帮助文档和反复测试,最终成功解决了所有问题,确保实验顺利推进。现将实验中遇到的主要问题、问题原因及解决方法详细记录如下,为后续类似实验提供参考:
1、 问题1:JavaScript脚本提取年级字段结果为空
- 问题现象:运行“从班级提取年级”的JavaScript脚本后,预览数据发现,`grade`字段全部显示为“未知”,没有成功提取到“高一”“高二”“高三”的年级信息,脚本运行无效。
- 问题原因:我仔细检查了脚本代码和字段信息,发现脚本中使用的字段名是`cla_name`,但在之前的「字段选择」组件中,我不小心将班级字段的名称修改为`class_name`,导致脚本无法读取到班级字段的数据,进而无法提取年级信息,所有结果均显示为“未知”。
- 解决方法:我重新进入「字段选择」组件,确认班级字段的实际名称为`class_name`,然后修改JavaScript脚本中的字段名,将`cla_name`全部替换为`class_name`,保存脚本后重新运行组件,成功提取到年级信息,`grade`字段显示正常,无异常。
2、 问题2:表输出组件无“raw_attendance”字段
- 问题现象:在配置「表输出」组件,将处理后的数据写入目标表时,测试数据库连接显示成功,且SOL语句正确执行,但表输出获取不到“raw_attendance”字段。
- 问题原因:我通过增加「表输入」组件查看数据库状态,发现数据库没有更新“raw_attendance”,而是旧的内容,导致无法获取新字段,在执行SQL语句只执行了判断和建表语句,不包含对已有表的更改。
- 解决方法:在执行SQL建表语句前,插入了DROP TABLE IF EXISTS `raw_attendance`;先判断是否存在raw_attendance表,若存在就先删除再创建。
五、实验总结
这次实验我围绕学生用户画像里的考勤主题标签构建,从数据接入到结果输出,完整走了一遍零代码 ETL 数据处理流程。整个做下来,我不仅练熟了具体操作,也踩了不少数据处理的坑,对用户画像构建的逻辑也有了更实在的理解,下面简单总结一下。
(1)实验收获
- 操作能力有了明显提升,这次实验里,我把助睿数智平台零代码 ETL 工具的核心组件都用了一遍,包括表输入、CSV 文件输入、字段选择、NULL 值替换、值映射、JavaScript 脚本编辑、记录集连接、分组、表输出这些。现在我能独立走完数据接入、清洗、关联、聚合、输出的全流程,不用再对着教程一步步问了。
- 把理论和实操串起来了,之前只在课本上知道用户画像有基础属性标签和行为标签,这次实际做了才明白,基础属性标签是行为标签的前提,而行为标签是对学生行为的量化体现,两者结合才能形成完整的用户画像。也更直观地感受到,多表关联、字段标准化、空值处理这些步骤,对数据处理的结果有多关键。
- 问题排查能力比之前强多了,实验过程中踩了不少常见的数据处理坑,比如关联报错、脚本跑不起来、数据有异常值、权限不足、中文乱码这些。我是通过一步步排查、翻资料、反复试错才把问题都解决的。现在再遇到类似的问题,我大概知道从哪里入手了,也明白数据处理真的要细心,一个小失误就可能导致整个流程跑不起来。
- 脚本应用能力也有进步,这次我用 JavaScript 脚本在零代码平台里实现了一些复杂的字段提取,也学会了怎么调试脚本、定位错误,能补全可视化组件实现不了的功能局限。
(2)对助睿数智平台的整体感受
这次实验我全程用的是助睿数智(Uniplore)一站式数据科学实验平台,整体体验下来,感觉它对初学者和教学实验场景都很友好。
- 上手门槛低,很适合教学:平台是零代码、可视化拖拽的方式,不用写复杂代码,就算没什么编程基础,也能很快上手,很适合课堂实验这种场景。
- 功能够全,也有扩展空间:内置的 ETL 组件覆盖了数据处理的全流程,同时支持 SQL 和 JavaScript 脚本扩展,既能做简单的数据清洗,也能处理复杂的字段提取和多表关联,兼顾了易用性和灵活性。
- 报错提示很实用:流程跑失败的时候,平台的报错提示和日志能直接告诉我大概问题出在哪,帮我省了不少排查时间,实验效率高了很多。
- 场景贴合实际,能感受到数据的价值:这次实验的流程设计,和教育行业的实际业务场景是对得上的,从学生基础信息处理到考勤标签构建,能直接对应到实际的学生行为分析和教育管理决策里,让我更直观地感受到了数据处理的实际意义。
当然也有一些可以优化的地方,比如部分组件的操作提示不够详细,刚开始上手的时候,得花点时间自己摸索配置方法;另外自动建表的权限限制,也让我多走了几步流程。但总体来说,这个平台完全能满足这次实验的需求,对数据处理初学者和教学实验来说,是个很合适的工具。
(3)实验不足和后续改进方向
虽然这次顺利完成了考勤主题标签的构建,但回头看还有不少可以优化的地方,后续可以从这几方面改进:
- 标签体系可以更细化:这次只做了基础的考勤行为标签,后续可以再加一些更细的维度,比如迟到时长标签、请假类型标签(事假、病假等),让标签体系更丰富,分析价值也更高。
- 数据验证可以更全面:这次我主要从数据完整性、空值、合理性这几个方面做了验证,后续可以加上数据一致性验证,比如核对学生学号的唯一性、考勤日期的合理性,进一步确保数据的准确性。
- 脚本可以写得更高效:这次用的 JavaScript 脚本逻辑比较简单,后续我打算多学一点复杂的脚本写法,让字段处理更灵活,也能提高数据处理的效率和准确性。
这次实验做下来,我不仅练熟了零代码数据处理的方法,也更深刻地体会到了数据处理的严谨性和重要性。后续我会多做一些类似的实操练习,把数据处理的基础打牢,为之后的学习和项目打好底子。
本文为 AI 辅助整理、本人实操完成的实验报告,核心操作与总结为原创
#助睿数智 #商业数据分析 #数据集成 #用户画像
更多推荐


所有评论(0)