助睿实验作业2 - 学生用户画像-考勤主题标签构建

一、实验背景

1.1 实验目的

基于“数智教育”大赛数据集,设计并实现学生多维度考勤统计ETL转换流

掌握ETL数据处理全流程(数据接入、关联、衍生、聚合、落地)

解决校园考勤人工统计效率低、口径不统一的问题

结合实验实际数据情况,优化空值处理逻辑,确保转换流可正常运行

输出精准的多维度考勤统计结果,为校园考勤管理提供数据支撑

1.2 实验环境

项目

说明

实验平台

助睿零代码在线实验平台(https://lab.guilian.cn/

产品官网

https://www.uniplore.com/

数据库类型

MySQL

数据源

“数智教育”大赛数据集(3_kaoqin.csv、4_kaoqintype.csv、2_student_info.csv)

1.3 业务场景与数据说明

校园考勤管理需要:

统计学生迟到、早退、请假、没穿校服等异常考勤次数

按年级、校区、住校状态等维度进行画像分析

替代人工Excel统计,实现考勤数据从原始打卡到标准化结果的闭环处理

源数据说明:

数据源表

核心作用

关键字段

考勤主表(3_kaoqin)

存储学生每日原始打卡记录

学生ID、班级ID、考勤类型ID、考勤时间

考勤类型码表(4_kaoqintype)

标准化考勤事件名称

考勤类型ID、考勤事件名称

学生信息表(2_student_info)

提供学生基础属性

学生ID、姓名、性别、住校状态

1.4 标签字段设计

学生基础属性标签:

标签字段

数据来源

说明

学生ID

考勤主表

学生唯一标识

学生姓名

考勤主表

便于结果查阅

班级ID

考勤主表

班级唯一标识

班级名称

考勤主表

用于提取年级和校区类型

性别

学生信息表

分析性别考勤差异

出生日期

学生信息表

分析年龄维度

政治面貌

学生信息表

分析不同群体考勤行为

学生画像维度标签(衍生字段):

标签字段

衍生逻辑

口径说明

年级

从班级名提取

包含“高一”→高一,包含“高二”→高二,包含“高三”→高三

是否住校

映射bf_zhusu

1→“是”,0→“否”,空值→“未知”

校区类型

从班级名判断

“白-”或“东-”开头→新校区,其他→老校区

 考勤行为统计标签:

标签字段

统计逻辑

口径说明

迟到次数

统计迟到/晚到且非请假记录

考勤名称包含“迟到”“晚到”,排除请假

早退次数

统计早退且非请假记录

考勤名称包含“早退”,排除请假

请假次数

统计包含请假记录

考勤名称包含“请假”关键词

没穿校服次数

统计包含校服记录

考勤名称包含“校服”关键词

二、实验步骤

2.1创建实验项目

1.点击“新建项目”

2.输入项目名称“学生用户画像标签构建”

3.点击“确定”完成创建

2.2 获取实验数据集

1.在“文件库”新建目录“数智教育数据集”

2.从公共空间导入以下文件:

3_kaoqin.csv(考勤主表)

4_kaoqintype.csv(考勤类型码表)

2_student_info.csv(学生信息表)

2.3 建立数据源连接

1.在“元数据”tab页,右键“关系数据库” → “新建数据源”

2.配置MySQL连接:

连接名称:团队私有数据库

主机名:rm-2vc3qok06bag39a5n.mysql.cn-chengdu.rds.aliyuncs.com

端口:3306

数据库名:se_group_14

驱动类型:MySQL 8+

3.点击“测试”确认连接成功

4.点击“添加”完成配置

2.4 数据导入团队私有数据库

2.4.1 创建并导入考勤表

创建表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`)

) COMMENT='原始_学生考勤表';

导入配置:

使用“CSV文件输入”组件读取3_kaoqin.csv

使用“表输出”组件写入raw_attendance表

2.4.2 创建并导入考勤类型表

创建表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`)

) COMMENT='原始_考勤类型表';

特别配置:

列分隔符:制表符(TAB)

编码:GB2312

2.4.3 创建并导入学生信息表

创建表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`)

) COMMENT='原始_学生信息表';

特别配置:

使用“字段选择”组件将bf_zhusu、bf_qinshihao字段类型设置为String

bf_leaveSchool字段类型修改为String

2.5 创建目标标签表

建表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 '统计入库时间'

) COMMENT='学生考勤主题标签表';

2.6 核心转换流配置

2.6.1 整体流程设计

数据接入 → 数据关联 → 行为标记 → 分组聚合 → 属性关联 → 空值处理 → 结果入库

2.6.2 组件配置说明

组件

作用

关键配置

表输入(考勤记录)

读取raw_attendance表

SQL获取所有字段

表输入(考勤类型)

读取raw_attendance_type表

SQL获取所有字段

表输入(学生信息)

读取raw_student_info表

SQL获取所有字段

排序记录

为关联排序

按attendance_type_id、attendance_task_order_id排序

记录集连接

关联考勤与考勤类型

LEFT OUTER,连接字段:attendance_type_id、attendance_task_order_id

JavaScript代码

行为标签衍生

通过关键词匹配生成迟到、早退、请假、没穿校服标记

分组

多维度聚合

按stu_id、stu_name、cla_id、cla_name分组,SUM聚合

记录集连接1

关联学生信息

LEFT OUTER,连接字段:stu_id

字段选择

移除冗余字段

保留核心字段

替换NULL值

处理空值

将空值替换为“未知”

值映射

住校状态映射

0→“否”,1→“是”

JavaScript代码

提取年级

从班级名提取高一/高二/高三

JavaScript代码

判定校区类型

班级名以“白-”或“东-”开头为新校区

表输出

结果入库

写入student_attendance_stats表

2.6.3 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 && attendance_task_name.includes("请假")){

    isLeave = 1;

}

提取年级脚本:

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 = '未知'

}

校区类型判定脚本:

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 = '未知'

}

2.7 执行转换流

1.点击工具栏“执行”按钮

2.选择默认配置

3.点击“启动”开始执行

4.查看日志确认执行状态

三、实验结果

3.1 执行结果

指标

数值

考勤记录读取

23,630条

学生信息读取

1,765条

考勤类型读取

15条

最终写入记录

19,546条

执行状态

✅ 成功

执行耗时

约13.5秒

四、问题与解决

问题1:建表后字段名不匹配: 执行导入时报错 Unknown column 'attendance_id' in 'field list'

  • 问题原因:执行CREATE TABLE时表已存在,旧表结构与新SQL不一致
  • 解决方法:先执行 DROP TABLE IF EXISTS 再执行 CREATE TABLE

问题2:考勤类型表导入失败: CSV读取字段乱码或字段不匹配

  • 问题原因:列分隔符和编码格式与默认值不同
  • 解决方法:列分隔符改为“制表符(TAB)”;编码改为“GB2312”

题3:字段类型导致小数问题: bf_zhusu、bf_qinshihao字段出现小数

  • 问题原因 CSV解析时Integer字段被识别为Double
  • 解决方法 使用“字段选择”组件将字段类型强制设置为String

问题4:表输出字段映射错误: 报错 Unknown column 'student_id' in 'field list'

  • 问题原因: 表输出组件的字段映射未正确配置
  • 解决方法 点击“获取字段”从目标表获取字段,手动匹配流字段

问题5:NOT NULL字段空值错误: 报错 Column 'gender' cannot be null

  • 问题原因: 学生信息表中某些字段存在空值
  • 解决方法: 使用“替换NULL值”组件将空值替换为“未知”

五、实验总结

5.1 实验收获

1.掌握了助睿ETL平台的操作流程

创建项目、获取数据、建立连接、新建转换流

添加组件、配置参数、执行转换、查看结果

2.掌握了ETL数据加工的完整流程

数据接入:从CSV文件导入数据库

数据关联:多表连接补充业务信息

数据衍生:JavaScript脚本生成新字段

数据聚合:分组统计计算指标

数据落地:结果写入目标表

3.理解了字段映射和空值处理的重要性

表输出字段必须与目标表完全匹配

NOT NULL字段需要处理空值

4.掌握了问题排查方法

通过执行日志定位错误

分析SQL语法错误、字段不匹配、约束冲突等常见问题

5.2 实验体会

相比传统编写SQL和脚本的数据处理方式,助睿平台的零代码拖拽式操作具有以下优势:

直观性:组件之间的数据流向清晰可见,便于理解和调试

低门槛:无需编写复杂代码,拖拽配置即可完成ETL任务

可复用:转换流可以保存、导出、复用,提高开发效率

易排查:执行日志详细,便于定位和解决问题

通过本次实验,成功构建了学生考勤主题标签ETL转换流,实现了考勤数据的自动化处理和多维度统计,为后续的学生用户画像分析奠定了数据基础。

Logo

一站式 AI 云服务平台

更多推荐