摘要大家好这篇文章描述一套从学籍、成绩、考勤与一卡通消费数据构建学生画像的流程在清洗阶段统一学号并完成学生级汇总在分析阶段衍生偏科与成绩稳定性等指标采用标准化后的 KMeansk5划分群体并基于簇特征与分位数规则生成可读的群体命名进一步输出规则化标签与风险评分1 引言这篇文章记录了一套从学籍、成绩、考勤与一卡通消费数据构建学生画像的完整流程。工程实现分为两段脚本clean.py负责数据清洗、学号统一、多表连接生成学生级宽表student_profile.csv。analysis.py负责特征衍生、KMeans 聚类、可视化、及画像卡与风险评分生成。阅读本文你可以获得一个可运行的、从原始 CSV 到学生群体画像的端到端方案。免责声明本文使用的数据均为经过脱敏处理的模拟数据不包含任何真实学生隐私信息。文中出现的“班级”、“姓名”等字段仅为结构示意。环境与依赖 建议使用 Python 3.10本文在 Python 3.11 下调试核心第三方库为 pandas数据清洗与聚合、NumPy数值计算、scikit-learnStandardScaler、KMeans、matplotlib可视化。2 数据与目录约定路径说明data/原始 CSVoutputs/cleaned/清洗结果主文件 student_profile.csvoutputs/analysis/分析结果表格、图像3 清洗阶段学生级画像表清洗阶段是整个工程的基石。我们在这一步完成文件编码兼容与列名规范化。关键操作所有表映射到统一主键bf_StudentID这是后续多源数据聚合的灵魂。成绩数值化与缺考处理缺考不计入平均分。考勤规则统计、消费金额符号统一。核心聚合逻辑类似于# 多表合并示意student_profilepd.merge(students_info,grades_agg,onbf_StudentID,howleft)student_profilepd.merge(student_profile,attendance_agg,onbf_StudentID,howleft)student_profilepd.merge(student_profile,consumption_agg,onbf_StudentID,howleft)student_profile.to_csv(outputs/cleaned/student_profile.csv,indexFalse)最终形成一人一行的宽表。4 分析阶段衍生特征与 KMeans 群体划分4.1 学业相关特征从行为数据中挖掘出两个不易直接获取的特征偏科指数subject_std将学生各科平均分展开成宽表按行计算各科均值的标准差。数值越大科目间差异越显著。成绩稳定性score_std学生历次成绩的标准差反映其成绩的波动程度。4.2 聚类划分逻辑我们选取了五个维度组成特征向量avg_score, score_std, total_spend, late_count, subject_std处理步骤如下缺失值以0填充后使用StandardScaler标准化。调用 KMeans 算法固定随机种子以保证可复现。fromsklearn.preprocessingimportStandardScalerfromsklearn.clusterimportKMeans# 五维特征成绩均值、成绩波动、总消费、迟到次数、偏科指数缺失用 0 参与聚类featuresprofile[[avg_score,score_std,total_spend,late_count,subject_std]].fillna(0)# 标准化消除量纲避免某一维数值特别大支配距离scalerStandardScaler()X_scaledscaler.fit_transform(features)# KMeans固定簇数与随机种子保证同一数据下结果可复现kmeansKMeans(n_clusters5,# 学生群体分为 5 类可按需求调整random_state42,# 复现用改数据/改 k 后簇编号含义需重新解读n_initauto,# sklearn 较新版本推荐初始化策略)profile[cluster]kmeans.fit_predict(X_scaled)4.3 群体命名规则业务可读标签 cluster_name命名不针对单个学生而是针对每个簇在各维度上的簇内均值与全校四个维度的 75% 分位数比较条件簇内均值相对全校标签片段平均成绩 ≥ 成绩的全局 75% 分位高绩效总消费 ≥ 总消费的全局 75% 分位高消费迟到次数 ≥ 迟到的全局 75% 分位高迟到偏科指数 ≥ 偏科的全局 75% 分位偏科明显若命中多项以「 / 」连接若四项均未达到上述阈值则记为 综合平稳。该规则保证图中「群体名称」与簇中心统计一致便于文字叙述与图例对照。4.4 本批次结果中簇 04 的含义结合统计表解读下表基于 outputs/analysis/student_profile_enriched.csv 按 cluster 分组统计得到人数、cluster_name 众数、簇内均值。撰写论文或博客时若重新跑分析应重新生成该表以保持与图表一致。clustercluster_name众数人数 n簇内平均成绩约簇内平均总消费约簇内平均迟到次数约简要解读0高消费50655.5331670.53总消费维度的簇均值处于全校高位命名为「高消费」成绩与迟到在簇均值上接近中等水平。1综合平稳76956.6920810.68人数最多簇均值未达到四条「高×」命名阈值属中间型群体。2综合平稳26853.779760.55与簇 1 同为「综合平稳」但平均总消费明显更低、平均成绩略低可叙述为「消费总额偏低、学业略低的中间群体」。3高迟到1988.7220681.13命名上侧重迟到相对突出的一组簇内平均成绩极低建议核查缺考、记录缺失或样本量极少的成绩记录避免误读。4高迟到2457.57240613.29人数很少但簇内平均迟到次数很高属于「迟到行为极端」的典型小群体。关于「综合平稳」出现两次 命名规则只看簇均值是否越过全局 75% 阈值簇 1 与簇 2 在多维空间中的位置不同例如消费总额差异大KMeans 仍将它们分为两簇。写作时应用上表数值区分二者而不能仅依赖四字标签。5 图表 placement、图注与结果分析集中展示以下图表形成从宏观到微观的证据链。5.1 portrait_cluster_radar.png学生群体画像雷达图图注示例 「图 1 五类学生群体在平均成绩、总消费、迟到次数、偏科指数上的簇内均值轮廓已对簇内均值做 min-max 归一化以便形状对比同一图上不同簇可不直接比较原始量纲。」分析要点 雷达图用于对比五类群体的相对强项与弱项哪一维隆起或凹陷。阅读时配合 §4.4 表格中的簇编号与 cluster_name例如「高消费」簇是否在消费维度突出「高迟到」簇是否在迟到维度突出。5.2 cluster_sizes.png各学生群体人数分布图注示例 「图 2 各簇学生人数分布簇编号 04 与 §4.4 群体含义表对应。」这张图把学生分成了 5 个群体每个群体在「平均成绩、总消费、迟到次数、偏科指数」四个维度上有明显差异5.3 score_by_cluster.png各群体平均成绩分布图注示例 「图 3 各簇学生平均成绩的箱线图分布。」图3显示簇3的成绩分布与其他四簇明显分离其中位数仅为5分左右箱体极度压缩远低于全校平均水平且无任何上须延伸。这一异常形态与表4.4中簇3平均成绩8.72分相符但中位数更低暗示该群存在大量近乎零分的记录。结合本分析中缺考编码已被剔除该现象仍需核查原始成绩表是否存在大量补考未录入、缓考数据缺失或学生已休退学等数据质量问题。5.4 consumption_distribution.png学生总消费分布与参考线图注示例 「图 4 学生总消费直方图及参考竖线须注意横轴为总消费与月均口径在文字中区分。」这张图展示了学生月消费的分布并以15% 分位值 1370.5作为 “贫困线” 参考消费分布呈明显的单峰形态峰值在 2000 元左右说明大部分学生的月消费集中在 1500~4000 元区间。红色虚线左侧消费≤1370.5元的学生数量极少说明绝大多数学生的消费都远高于贫困线水平整体经济条件较好5.5 late_vs_score.png迟到次数与平均成绩散点图图注示例 「图 5 迟到次数与平均成绩散点按簇着色。」相对于群体 0 1 2 3 群体4迟到率比较高成绩无明显区别。5.6 subject_bias_dist.png偏科指数分布图注示例 「图 6 偏科指数各科均分标准差的直方图及经验参考线。」整体情况超半数学生偏科指数≥15偏科是普遍问题。群体关联「高消费 / 综合平稳」群体偏科指数低成绩均衡。「高迟到」群体偏科指数高成绩分化严重。干预重点盯紧临界线附近的学生防止滑向偏科重点帮扶迟到、偏科双高的学生。### 5.7 individual_radar_.png 与 individual_labels_.txt个人微观画像示例5.7 individual_radar_.png 与 individual_labels_.txt个人微观画像示例图注示例 「图 7 某学生各科成绩与全校均分对比雷达图」分析要点 体现从「群体」到「个人」的下钻强调示例为随机抽取完整结论应以 student_portrait_cards.csv 为准。6. 画像卡标签与风险评分我们设计了两套互补的输出来描述学生解决“描述”与“排序”两种不同需求portrait_tags规则标签像一张便签用几句话描述学生概况适合快速浏览。风险评分与原因一个 0-100 的量化分数用于全校范围内排序筛查并附上可解释的原因。6.1 portrait_tags标签生成规则程序基于全校分位数为每个学生贴上由以下五个维度组合而成的标签成绩全校平均分的 20% 和 80% 分位为界分为成绩优秀、成绩中等、成绩待提升。偏科偏科指数 ≤ 15 为学科均衡否则为偏科明显注此阈值与聚类命名的“偏科明显”规则不同可能会有一致或不一致的个案属正常现象。消费有月均消费数据时与全校比较分为低消费、消费适中、高消费。若无月均数据则跳过此段。考勤迟到次数达到全校高段位标为迟到偏多否则出勤较好。成绩稳定性成绩波动大则标为成绩波动大否则成绩较稳定。最终将命中的标签用顿号连接如“成绩优秀、学科均衡、消费适中、出勤较好、成绩波动大”。6.2 风险评分体系四个分数都是 0~100数值越高代表在数据上越值得关注非品行鉴定。学业风险academic_risk_score综合均分偏低、偏科程度、成绩波动三者经分位数映射后合成。消费风险consumption_risk_score考察消费的两端过高或过低及刷卡频次异常优先使用月均消费计算。考勤风险attendance_risk_score由迟到、早退加权得到迟到权重更大。综合风险overall_risk_score默认为学业*0.5 考勤*0.3 消费*0.2侧重学业与出勤。6.3 风险等级与原因风险等级risk_level按综合分切为低/中/高用于快速过滤不作为最终定性。风险原因risk_reasons / risk_reasons_top3通过 if 规则生成解释如“成绩落入全校后20%”、“迟到次数过多”等用分号连接。top3字段只取最靠前的三条适合打印成报表。提醒可能出现“分数较高但文字原因较少”的情况这是设计上允许的。因为评分是加权连续值原因则是离散规则触发。二者互补而非完全一一对应。7 主要输出文件文件谁来看内容要点student_portrait_cards.csv数据分析师每人一行含标签、四类风险分、等级、原因全貌high_risk_students_top100.csv学生工作者综合风险排序前100列全用于建立关注名单high_risk_students_explanations.csv班主任/汇报姓名班级分原因前三条简洁方便沟通poor_student_candidates.csv资助工作低消费候选用于辅助分析*.png所有人论文、报告所需的各种可视化图表8 合规与边界公开发表的 CSV 或图片必须对学号、姓名等彻底脱敏。所有风险评分和标签都是基于有限数据的辅助分析工具不能替代正式认定和综合评价。涉及资助、处分等实际工作请务必遵守学校规定与个人信息保护法。9 结语本文提供了一套特征工程→聚类→命名→画像卡输出的完整管道。你可以在替换数据后一键重跑脚本刷新所有表格和图像快速得到属于你这批数据的结论。对技术同学这是一个融合了数据清洗、无监督学习、特征分箱和结果可视化的经典毕设/项目参考。对业务老师这套输出可以帮你从几千行原始表格中解放出来看到一个“活”的学生概览图谱。