学生用户画像 - 考勤主题标签构建

实验说明

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 都导出到“数智教育数据集”

  1. 点击元数据右键新建数据源,命名为“团队私有数据库”,配置如下

点击测试,提示连接成功后,确认

  1. 新建转换工作流,并命名为“创建原始_学生考勤表”,在该工作流中拖拽“执行一个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文件输入组件到“表输出”组件的连线,连线类型选择“主输出步骤”(本次实验均选择‘主输出步骤’),配置如下

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

点击确认,然后运转

  1. 参照第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”

表输出组件配置:

运转:

  1. 参照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 数据处理操作,理清了教育类业务数据清洗与统计思路,最终得出精准的多维度考勤数据,能直接辅助校园日常考勤管理工作,也积累了实用的数据处理实操经验。

Logo

一站式 AI 云服务平台

更多推荐