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

发布时间:2026/5/21 6:21:14

助睿实验作业2-学生用户画像考勤-主题标签构建 一、实验背景1.实验目的基于“数智教育”大赛数据集设计并实现学生多维度考勤统计助睿ETL转换流掌握ETL数据处理全流程数据接入、关联、衍生、聚合、落地解决校园考勤人工统计效率低、口径不统一的问题同时结合实验实际数据情况优化空值处理逻辑确保转换流可正常运行输出精准的多维度考勤统计结果为校园考勤管理提供数据支撑。2.实验环境工具平台本次实验使用助睿数智Uniplore一站式数据科学平台。该平台覆盖从数据接入、ETL处理、机器学习建模到可视化展示的全链路零代码功能适用于数据分析教学与企业数据加工场景。平台访问地址https://lab.guilian.cn/产品官网https://www.uniplore.com/实验设备计算机支持助睿ETL平台运行具备数据库连接权限数据源“数智教育”大赛数据集共包含7张核心业务表。本次实验聚焦考勤主题实际使用以下3张表3_kaoqin.csv考勤主表事实表4_kaoqintype.csv考勤类型码表维度表2_student_info.csv学生信息表属性表3.处理流程本次ETL转换流的整体处理逻辑如下共分为五个阶段数据接入阶段使用三个【表输入】组件分别读取考勤主表、考勤类型码表和学生信息表。多表关联阶段通过【记录集连接】组件依次完成两张关联操作。首先将考勤主表与考勤类型码表按考勤类型ID进行左外连接为打卡记录补充标准化考勤事件名称然后将关联结果与学生信息表按学生ID进行左外连接引入学生基础属性。字段处理与标签衍生阶段使用【字段选择】筛选保留核心字段使用【替换空值】对性别、政治面貌、出生日期等字段的空值统一替换为“未知”使用【字段衍生】基于班级名称生成“年级”和“校区类型”基于住校字段生成“是否住校”标签。指标聚合计算阶段使用【过滤记录】组件根据考勤事件名称关键词并遵循“排除请假”口径分别筛选出迟到/晚到、早退、请假、未穿校服四类行为记录使用【分组聚合】组件以学生ID为分组维度对四类行为分别进行计数统计。结果落地阶段使用【表输出】或【Excel输出】组件将最终统计结果写入目标数据库或文件完成全流程处理。二、实验步骤1.准备工作1.1导入文件新建项目名字为“学生用户画像标签构建”打开项目点击文件库右键根目录新建目录名字为“数智教育数据集”点击公共空间点击数据资源输入3_kaoqin.csv点更多再点导出选择导出路径再点确定同样输入“4_kaoqintype.csv““2_student_info.csv”导出到我们新建的目录可以看到目录下多了三个文件1.2连接数据源点击元数据右键关系数据库新建数据源名字为“团队私有数据库”其他按图中填写用户名要和数据库名称一致然后点击测试测试成功后点击添加2.数据导入”团队私有数据库“2.1创建原始_学生考勤表数据点击资源库右键根目录点击新建转换流名字为“创建原始_学生考勤表”点击确定双击进入转换流点击组件库搜索“执行一个SQL脚本”把这个组件拖入画布双击组件选择团队私有数据库把代码复制进去点击确认代码CREATE TABLE IF NOTEXISTS raw_attendance ( id bigintNOT NULL AUTO_INCREMENT COMMENT 自增ID, attendance_id varchar(64) DEFAULTNULL COMMENT 考勤ID, learn_term varchar(30) DEFAULTNULL COMMENT 学期, data_datetime varchar(50) DEFAULTNULL COMMENT 时间和日期, attendance_type_id varchar(64) DEFAULTNULL COMMENT 考勤类型ID, attendance_name varchar(100) DEFAULTNULL COMMENT 考勤名称, attendance_task_order_id varchar(64) DEFAULTNULL COMMENT 考勤事件ID, stu_id varchar(64) DEFAULTNULL COMMENT 学生ID, stu_name varchar(100) DEFAULTNULL COMMENT 学生姓名, cla_name varchar(100) DEFAULTNULL COMMENT 班级名, cla_id varchar(64) DEFAULTNULL COMMENT 班级ID, create_time datetime DEFAULTCURRENT_TIMESTAMP COMMENT 入库时间, PRIMARY KEY (id), KEY idx_student_id (stu_id), KEY idx_term (learn_term) ) COMMENT原始_学生考勤表;点击运行并启动2.2原始_学生考勤表数据导入新建转换流名字为“导入原始_学生考勤数据”点击组件库输入“CSV文件输入”把组件拖入画布步骤名称为“考勤记录”文件为“3_kaoqin.csv”编码为“UTF-8”右键获取字段获取后点击确认把表输出拖入画布并连接选择主输出步骤双击表输出选择“团队私有数据库”目标表选择“raw_attendance”勾上图中所示获取字段双击修改表字段点击确认运行2.3创建原始_考勤类型表接下来和上面类似新建转换流命名为“创建原始_考勤类型表”拖入“执行一个SQL脚本”组件把代码复制进去然后点击确认代码CREATE TABLE IF NOTEXISTS raw_attendance_type ( id bigintNOT NULL AUTO_INCREMENT COMMENT 自增ID, attendance_type_id varchar(64) NOT NULL COMMENT 考勤类型id, attendance_type_name varchar(100) DEFAULTNULL COMMENT 考勤类型名称, attendance_task_order_id varchar(64) DEFAULTNULL COMMENT 考勤事件id, attendance_task_name varchar(100) DEFAULTNULL COMMENT 考勤事件名, create_time datetime DEFAULTCURRENT_TIMESTAMP COMMENT 入库时间, PRIMARY KEY (id), UNIQUE KEY uk_attendance_type_id (attendance_task_order_id) )COMMENT原始_考勤类型表;运行2.4导入原始_考勤类型表数据新建转换流命名为“导入原始_考勤类型表数据”点击组件库输入“CSV文件输入”把组件拖入画布步骤名称为“考勤类型”文件为“4_kaoqintype.csv”列分隔符插入制表符编码为“GB2”右键获取字段获取后点击确认把表输出拖入画布并连接选择主输出步骤双击表输出选择“团队私有数据库”目标表选择“raw_attendance_type”勾上图中所示获取字段双击修改表字段点击确认运行2.5创建原始_学生基本信息表新建转换流命名为“创建原始_学生基本信息表”拖入“执行一个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原始_学生信息表;运行2.6导入原始_学生基本信息表数据新建转换流命名为“导入原始_学生基本信息表数据”点击组件库输入“CSV文件输入”把组件拖入画布文件为“2_student_info.csv”编码为“UTF-8”右键获取字段获取字段时需要将“bf_leaveSchool”的字段类型修改为“String”获取后点击确认把表输出拖入画布并连接选择主输出步骤双击表输出选择“团队私有数据库”目标表选择“raw_student_info”勾上图中所示获取字段双击修改表字段点击确认运行2.7创建学生考勤主题标签表新建转换流命名为“创建学生考勤主题标签表”拖入“执行一个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) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT学生考勤主题标签表;运行2.8学生考勤主题标签构建2.8.1获取考勤记录、考勤类型数据、学生信息数据新建转换流命名为“学生考勤主题标签”拖入三个表输入双击表输入点击获取SQL查询语句选择“raw_attendance“点击确定把步骤名称改为考勤记录然后确认双击表输入1点击获取SQL查询语句选择“raw_attendance_type“点击确定把步骤名称改为考勤类型然后确认双击表输入2点击获取SQL查询语句选择“raw_student_info“点击确定把步骤名称改为学生信息然后确认2.8.2关联考勤记录考勤类型把排序记录拖入画布连接考勤记录双击排序记录步骤名称为“按照考勤类型和考勤任务类型排序”然后获取字段字段只留“attendance_type_id”、“attendance_task_order_id”因为下一步连接是使用这两个字段进行连接所以采用这两个字段对记录进行排序点击确认把记录集连接拖入画布连接组件双击记录集连接配置如图所示然后获取字段字段只留“attendance_type_id”、“attendance_task_order_id”然后点击确认2.8.3统计学生异常考勤次数拖入“JavaScript代码”组件到画布连接双击“JavaScript代码”组件命名为“提取异常考勤记录”输入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; } }点击获取变量点击测试脚本出现我们定义的变量然后点击确认2.8.4多维度分组聚合统计聚合规则聚合函数SUM迟到标记→ 迟到次数late_count聚合函数SUM早退标记→ 早退次数early_count聚合函数SUM请假标记→ 请假次数leave_count聚合函数SUM没穿校服标记→ 没穿校服次数no_uniform_count拖入“分组”组件并连接双击“分组”组件设置分组字段为“stu_id”、“stu_name”、“cla_id”、“cla_name”设置句话字段为“leave_count”“late_count”,early_count,no_uniform_count2.8.5关联学生信息拖入“排序记录”连接双击“排序记录”名称为“按照学生编号进行排序”只留“stu_id”,点击确认复制连接分组名称为“考勤数据按学号排序”点击确认拖入”记录集连接“连接组件双击配置组件点击确认2.8.6移除冗余字段拖入”字段选择“我们只要学生 IDstu_id学生姓名stu_name班级 IDcla_id班级名称cla_name迟到次数late_count早退次数early_count请假次数leave_count没穿校服次数no_uniform_count性别stu_sex出生日期born_date政治面貌policy是否住校live_on_campus所有要移除这些字段点击确认2.8.7空值处理3个数据表关联后字段“stu_sex”、“born_date”、“policy”、“live_on_campus”存在空值需要对这么空值进行处理。拖拽“替换NULL值”组件至画布创建“移除冗余字段”字段选择组件到“替换NULL值”组件的连线连线类型选择“主输出步骤”双击“替换NULL值”组件勾选“选择字段”插入“stu_sex”、“born_date”、“policy”、“live_on_campus”空值均替换为“未知”2.8.8学生基础属性标准化处理经过多表关联与字段筛选后原始数据中住校状态为编码值且缺少年级、校区类型等画像分析必需字段无法直接用于学生考勤标签输出与后续用户画像分析。因此需要对学生基础属性进行标准化映射、缺失字段衍生统一数据格式、补齐分析维度保证标签表规范可用。添加“值映射”组件到画布中并创建替换NULL值组件到值映射组件的连线并选择“主输出步骤”双击“值映射”组件步骤名称改为“住校状态映射”使用的字段名为“live_on_campus”不匹配时的默认值为“否”插入配置如图拖拽“JavaScript代码”组件至画布中创建住校状态映射组件到JavaScript代码组件的连线双击“JavaScript代码”组件步骤名称改为“从班级提取年级”并输入代码代码var gra_nameif (cla_name null){ gra_name未知}elseif(cla_name.includes(高一)){ gra_name高一}elseif (cla_name.includes(高二)){ gra_name高二}elseif (cla_name.includes(高三)){ gra_name高三} else{ gra_name未知}插入字段“gra_name”类型为“String”,替换“字段名”或“重命名”值选择“否”设置完成后点击“确认”添加“JavaScript代码”组件.连接命名为“校区类型判定”代码var class_campus_typeif (cla_name null){ class_campus_type未知}elseif(cla_name.startsWith(白-) || cla_name.startsWith(东-)){ class_campus_type新校区}elseif (cla_name ! null !isEmpty(cla_name)){ class_campus_type老校区} else{ class_campus_type未知}插入字段名称“class_campus_type”类型为“String”替换“字段名”或“重命名”值选择“否”2.8.9结果入库添加表输出组件并创建“校区类型判定”“JavaScript代码组件到表输出组件的连线基本配置双击表字段中的字段名称在下拉框中选择正确的对应字段运行三、实验结果加载元数据点击数据探查双击目标表“student_attendance_stats”在右侧页面选择“查询”tab标签点击查询空值为未知违规次数也统计了四、问题与解决问题现象修改表字段时不知道怎么修改解决方法双击字段名五、实验总结在实验过程中我学会了使用平台如何排序处理空值如何分组如何标准化也深刻体会到ETL在校园数据治理中的实际价值。标准化的考勤统计流程可推广至学校日常管理为教学管理、学生行为分析、异常预警等提供准确、及时的数据支撑。

相关新闻