学生体测画像生成工具
Goal
给定一份 Excel 体测算分表(.xlsx/.xlsm),产出一份双击即开的单文件 HTML 画像工具,围绕班级做三件事:班级画像诊断、项目排行榜、打擂榜 PK。老师拿到 HTML 用浏览器打开即可,无需安装、无需联网、无需服务器。
本 skill 只负责「算分表 → 画像 HTML」这一生成动作;画像的交互查看由产出的 HTML 自身完成。
触发词
体测画像、班级画像、学生画像、体质健康画像、生成画像、做个体测报告、体测排行榜、打擂榜、班级体质诊断、谁跑得最快、给某班做体质短板分析。
AI 工作流(接到上述请求时)
- 取得老师的 Excel 算分表(老师给的路径,或上传的文件)。
- 运行:
bash python generate_profile.py "算分表.xlsx" --name 2026初三抽测 --output 体测画像_初三.html
- 自动识别工作簿里的年级表(如「六年级」「初一」「高一」);可用--grades 初一 初二限定只处理哪些年级。
- 优先读取表内已算好的「得分」列;若表是原始录入表(没有得分列),自动调用内置score_engine_2014.score_one从原始值算分,与《国家学生体质健康标准(2014)》逐分一致。 - 把产出的 HTML 路径交给老师,提示「用 Edge / Chrome 打开」。
- 老师可在 HTML 内:选「数据集 → 年级 → 班级」看班级画像;切「排行榜」看个人或班级排名;切「打擂榜」做 PK(🎲 随机匹配按成绩就近)。
依赖
- Python 3.8+,仅需
openpyxl:pip install openpyxl score_engine_2014.py+standard2014_data.json(本 skill 附带,零第三方依赖,与tizhi-score-2014评分引擎同源)
评分口径
沿用《国家学生体质健康标准(2014 修订)》,与 tizhi-score-2014 评分引擎逐分一致:
- 时间类(50米跑 / 折返跑 / 耐力跑)越短越好;成绩为 0 一律得 0 分,不误判满分。
- 坐位体前屈 = 0 视为合法成绩(约 60 分);其余项目 0 为真实成绩。
- 缺考 / 未测 / 免测 / 缓测 → 该项不出分、不参与计分,标准分按其余已测项归一化(有多少项评多少项),报表单列缺项。
文件清单
| 文件 | 作用 |
|---|---|
generate_profile.py |
核心:读 Excel → 算分 → 调用 build_html 产出画像 HTML |
build_html.py |
把模板 + 评分库 + 数据内联成单文件 HTML |
_template.html |
画像工具 UI 模板(班级画像 / 排行榜 / 打擂榜) |
standard2014.js / extract.js |
浏览器端评分与抽取(导入面板用,可选) |
_lib/xlsx.full.min.js |
SheetJS,浏览器直接读 Excel |
score_engine_2014.py / standard2014_data.json |
评分引擎(兜底自算用) |
README.md / 安装与使用说明.md |
概览与使用者指南 |
为什么是 skill 而不是纯 HTML
纯 HTML 画像工具是「老师自助用」;本 skill 让它变成「AI 帮老师生成」——老师把算分表丢给 AI,AI 直接产出成品 HTML,无需老师自己会操作导入、选文件。两者底层共用同一套模板与评分口径。
| 2026-10-13 | 提升 skillhub 可发现性:displayName 改为「体测画像报告(班级诊断·排行榜·打擂榜)」、summary/description 改为以「体测画像/班级体质健康诊断/排行榜/打擂榜」等用户真实检索词开头、新增 tags;slug 保持 tizhi-profile 不变(沿用已发布版本历史) |
更新历史
| 日期 | 内容 |
|---|---|
| 2026-09-30 | 从本地画像工具链抽取为 skill:去 Excel COM 依赖(改 openpyxl)、去硬编码数据源(改命令行参数)、缺得分列时自动用评分引擎自算;产出字段结构与模板 100% 一致 |
| 2026-10-11 | 排行榜支持前/后 N 名方向切换;时间类 0 成绩不再误判优秀(展示层排序统一走 rawSortOf);新增页头「📄 导出报告」(年级/班级/个人/专项四类 A4,打印存 PDF)与「⚠ 数据提醒」(异常值扫描弹窗:折返跑/坐位体前屈/50米超范围、时间类 0 值);导入时附加分按国标引擎自动校准(漏算引体/仰卧/跳绳附加分补上),附加分支持单独排行;修复耐力跑附加分表高段 +40 秒 bug;修复短板/优势判定——短板只列低于年级均分的项目(不硬凑 3 个),优势列出全部高于年级均分的项目 |
| 2026-10-11 | 新增「🗂 数据管理」页:导入后可按姓名搜索、修改学生原始成绩(留空=未测),保存即按国标引擎重算单项得分/附加分/总分;修改存本机 localStorage(刷新不丢),支持单人恢复原始与一键撤销全部;附加分各处不再显示等级(排行榜等级列显示 —,专项分档改用分数段) |
| 2026-10-12 | 新增批次体系与「📈 批次对比」页:一个 HTML 可存多批体测数据,导入方式新增「存为新批次」,页头批次下拉切换/删除,导出数据文件含全部批次(TIZHI_BATCHES 格式,向后兼容单批次);对比页支持个人纵向(姓名+性别+学校跨批匹配,得分/等级/原始成绩 + ↑绿升↓红降箭头)、班级横向(班级名+学校匹配,人数/均分/优良率/及格率/各项目均分)、年级对比(年级+主学校);个人画像快捷名单扩容——本班列出全部学生,其他范围默认 60 人可展开全部;排行榜点击行改为跳转个人画像,行内新增「🥊 打擂」按钮单独送擂;build 同步产出「诸城市明诚学校体测画像工具.html」内部版 |
| 2026-10-13 | 评分口径改为「有多少项评多少项」:项目无成绩(该年级国标不测 / 学校未录 / 该生缺考)自动不参与计分,标准分按实际有成绩项目的权重归一化到 100 分制,任何项目都无成绩才不出分;全项齐时与原算法完全一致(如六年级 7 项 73.5);解决导入部分项目未录的表(如三年级只录跳绳)时 3567 人算不出总分的问题;数据管理编辑页与导入报告同步说明该口径 |
| 2026-10-13 | 新增「缺项自愈」:打开 HTML / 切换批次时,对「有原始成绩却因旧口径缺项无总分」的学生按当前引擎自动补算(只处理 std 为空者,完整数据不受影响;真无成绩者保持不出分)——旧版本导入的缓存数据换到新 HTML 无需手动重导;内嵌数据版 13650 人中 72 个历史缺项学生启动即补算 |
| 2026-10-13 | 新增「单行表头」支持:导入器自动识别表头占 1 行还是 2 行,修复上传学校自制的「体质上报表模版」(12 列原始测量值、无得分等级列、数据从第 2 行起)时因第一条学生被当成二级表头、导致全部成绩列无法映射(人数识别正常但 100%% 无成绩)的问题;性别对比差值列文案改为「男生高/女生高/持平 +差值」,并修掉差值为 0 时误显「女优0」 |