学生用户画像 - 考勤主题标签构建
摘要:本实验基于"数智教育"大赛数据集,利用助睿零代码平台构建学生考勤主题标签ETL流程。实验完整实现了数据接入、关联、衍生、聚合和落地的全流程处理,解决了传统人工统计效率低、标准不统一的问题。通过优化空值处理逻辑,建立了标准化的考勤统计体系,最终输出包含迟到、早退、请假等维度的精准考勤数据。实验过程中解决了数据缺失、乱码等技术问题,验证了ETL流程在教育数据治理中的实用价值,
学生用户画像 - 考勤主题标签构建
实验说明
1.1 实验目的
基于“数智教育”大赛数据集,设计并实现学生多维度考勤统计助睿ETL转换流,掌握ETL数据处理全流程(数据接入、关联、衍生、聚合、落地),解决校园考勤人工统计效率低、口径不统一的问题;同时结合实验实际数据情况,优化空值处理逻辑,确保转换流可正常运行,输出精准的多维度考勤统计结果,为校园考勤管理提供数据支撑。
1.2 实验环境
工具: 助容零代码在线实验平台:https://lab.guilian.cn/
本次实验使用助睿数智(Uniplore)是AI驱动的一站式数据科学平台。该平台覆盖从数据接入、ETL处理、机器学习建模到可视化展示的全链路零代码功能,适用于数据分析教学与企业数据加工场景。产品官网为https://www.uniplore.com/
数据源:“数智教育”大赛数据集(共包含7张核心业务表)
实验设备:计算机(支持助睿ETL平台运行,具备数据库连接权限)
1.3实验步骤:1.创建新项目命名为“学生用户画像标签构建”:
点击该项目右上角进入项目,点击文件库,右键根目录创建新目录名为;数智教育数据集

再点击11公共空间,再点击数据资源,点击“3_kaoqin.csv”卡片右上角的“更多”,并点击“导出”
选择这个目录确定

接下来重复以上导出操作,将本次实验用到的数据表 4_kaoqintype.csv 和 2_student_info.csv 都导出到“数智教育数据集”
- 点击元数据右键新建数据源,命名为“团队私有数据库”,配置如下

点击测试,提示连接成功后,确认
- 新建转换工作流,并命名为“创建原始_学生考勤表”,在该工作流中拖拽“执行一个SQL脚本”组件,通过执行SQL脚本来创建一个标签表。整个转换流如下所示:

SQL脚本:CREATE TABLE IF NOT EXISTS `raw_attendance` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增ID', `attendance_id` varchar(64) DEFAULT NULL COMMENT '考勤ID', `learn_term` varchar(30) DEFAULT NULL COMMENT '学期', `data_datetime` varchar(50) DEFAULT NULL COMMENT '时间和日期', `attendance_type_id` varchar(64) DEFAULT NULL COMMENT '考勤类型ID', `attendance_name` varchar(100) DEFAULT NULL COMMENT '考勤名称', `attendance_task_order_id` varchar(64) DEFAULT NULL COMMENT '考勤事件ID', `stu_id` varchar(64) DEFAULT NULL COMMENT '学生ID', `stu_name` varchar(100) DEFAULT NULL COMMENT '学生姓名', `cla_name` varchar(100) DEFAULT NULL COMMENT '班级名', `cla_id` varchar(64) DEFAULT NULL COMMENT '班级ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '入库时间', PRIMARY KEY (`id`), KEY `idx_student_id` (`stu_id`), KEY `idx_term` (`learn_term`) ) COMMENT='原始_学生考勤表';

注意红色的锁要点一下才能编辑,然后确定。点击运转:

新建转换工作流,并命名为“导入原始考勤数据”,在该工作流中拖拽一个“CSV文件输入”组件到画布,双击更名然后点击浏览文件,在弹出的窗口中选择“3_kaoqin.csv”,点击“确定”
配置如上,下滑右键单击获取字段,确认
接下来拖拽一个“表输出”组件到画布,并创建“考勤记录”CSV文件输入组件到“表输出”组件的连线,连线类型选择“主输出步骤”(本次实验均选择‘主输出步骤’),配置如下

再点击数据库字段,右键单机获取字段,并修改名如下图

点击确认,然后运转

- 参照第3小节的实验操作,完成原始考勤类型表“4_kaoqintype.csv”数据导入到团队私有数据库
脚本: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='原始_考勤类型表';
特别说明:使用CSV文件输入组件时,考勤类型原始表的列分隔符和考勤表的不一样,在配置中,列分隔符为“插入制表符(TAB)”、编码为“GB2312”

表输出组件配置:

运转:
- 参照3.4小节的实验操作,完成原始学习基本信息表“2_student_info.csv”数据导入到团队私有数据库
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='原始_学生信息表';
注意:使用“CSV文件输出”组件输入“2_student_info.csv”数据,获取字段时,需要将“bf_leaveSchool”的字段类型修改为“String”

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


表输出配置如下;

运行:
6.新建转换流名为‘学生考勤主题标签’,进入之后,点击“组件库”,搜索“表输入”,拖拽3个表输入组件至画布中,更名如下:

考勤记录配置如下;
数据库浏览的时候选择此文件:

系统提示是否包含字段名选确定
同样的,参考以上步骤,将“表输入 1”和“表输入 2”组件分别命名为“考勤类型”和“学生信息”,分别获取“raw_attendance_type”考原始_考勤类型表和“raw_student_info”原始_学生信息表所有字段数据


接下来,从组件搜索排序记录和记录集连接,并连线如下:
点开排序记录并配置如下图:
再连接考勤类型和记录集连接,点开记录集连接并配置:

添加“JavaScript 代码”组件,对接“记录集连接”组件的输出,通过关键词匹配,生成二进制判断标签(1=是,0=否),用于后续指标聚合:

更名为‘提取异常考勤记录’,再把代码复制上去:
// 初始化变量
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;
}
}
再点击获取变量,测试脚本,点击确定

组件库里搜索分组,拖出来与‘提取异常考勤记录’连线,并点开进行如下操作:
也就是把分组字段和聚合字段编辑成如下图

搜索组件排序记录拖出来与排序信息连线,点开编辑如下:

拖拽“记录集连接”组件至画布中,创建“按照学生编号进行排序”排序记录组件到“记录集连接 1”组件的连接线,再次添加“排序记录”,并建立“记录集连接”组件到“排序记录”组件的连接线,点开第二个排序记录编辑如下(最右边那个):


确认后,点开记录集连接编辑如下:

确认即可
搜索“字段选择”,拖拽至画布中,创建“记录集连接 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)

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

拖拽“替换NULL值”组件至画布,创建“移除冗余字段”字段选择组件到“替换NULL值”组件的连线,连线类型选择“主输出步骤”,双击“替换NULL值”组件,勾选“选择字段”,进行如下编辑:双击插入的行,字段名称选择“stu_sex”,继续插入行,将“born_date”、“policy”、“live_on_campus”这四个的空值均替换为“未知”,
添加“值映射”组件到画布中,并创建替换NULL值组件到值映射组件的连线,并选择“主输出步骤”,编辑如下:

拖拽“JavaScript代码”组件至画布中,创建住校状态映射组件到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='未知'
}
编辑如下:

参考“从班级名提取年级”步骤,添加“JavaScript代码”组件,“JavaScript代码”组件命名为“校区类型判定”,输入的代码如下:
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='未知'
}
编辑如下:

添加表输出组件与“校区类型判定”组件相连,点开编辑如下:

要对字段进行更名:

7.运转如下:
8.打开“元数据”tab页,在“团队私有数据库”连接上右键选择“加载元数据”:

然后点击‘数据探查’,双击目标表“student_attendance_stats”,在右侧页面选择“查询”tab标签,如下即可:

1.4遇到的问题与解决:
行为标签衍生:统计学生异常考勤次数,做到这个步骤的时候,第一次的测试里面没有最后那几列数据,甚至有好几列出现了乱码,至于原因,数据缺失是因为要点击确认之后再点击测试才会出现,至于乱码呢,重新插入一次组件编辑就好了,包括很多次出现未知的小问题,都是重新插入一次组件就能解决了
1.5实验总结:
本次实验借助助睿平台,利用数智教育数据集搭建学生考勤 ETL 数据流,完整走完数据接入、关联加工、字段衍生、聚合统计到数据落地的全套流程。
实操中针对原始数据里的空值问题优化了处理规则,理顺考勤统计统一标准,改掉了以往人工统计考勤效率低、统计标准混乱的弊端。
通过实验熟练掌握了平台 ETL 数据处理操作,理清了教育类业务数据清洗与统计思路,最终得出精准的多维度考勤数据,能直接辅助校园日常考勤管理工作,也积累了实用的数据处理实操经验。
更多推荐




所有评论(0)