返回 Skill 列表
extension
分类: 数据与分析无需 API Key

考试学校情况统计

全市考试后学校小题情况统计工具。基于各校各生各小题得分原始表,按学校分组计算各题平均分、得分率,并输出双排名:名次1:全部学校排名,名次2:指定学校子集内部排名,非指定学校留空,核心特性:支持各学段(小学/初中/高中)各学科,题目数量和满分通过配置区适配,学校按拼音自动排序,等价于Excel中文排序,输出格式与模版完全一致(字体、边框、列宽、数字格式)已验证:物理16题41校、地理25题44校,数据零差异依赖: openpyxl、pypinyin。全市考试后按学校分组统计各题平均分、得分率、名次1(全部学校排名)和名次2(指定学校内部排名),输出Excel。适用于小学、初中、高中各学段各学科。当用户说'做学校统计'、'学校小题统计'时触发。

person作者: user_b6508d8dhubcommunity

全市考试 — 学校小题情况统计(含名次1/名次2)

适用范围

本SKILL适用于各学段(小学、初中、高中)各学科考试的学校小题得分情况统计。不同学段、不同学科的题目数量、满分、子题结构可能不同,通过修改脚本配置区即可适配。

学段适用示例:

  • 小学:语文、数学、英语等
  • 初中:语文、数学、英语、物理、化学、生物、地理、历史、道德与法治等
  • 高中:物理、化学、生物、地理、历史、政治等

用途

全市考试后(不限学段、不限科目),基于各校各生各小题得分原始表,按学校分组统计各题平均分、得分率、名次1(全部学校排名)、名次2(指定学校内部排名),输出Excel。

已验证科目:物理(16题41校,含8校名次2)、地理(25题44校,含8校名次2)。

触发词

"学校统计"、"全市学校统计"、"学校小题统计"、"做学校统计"

统计口径(已验证)

  1. 平均分:各学校所有学生在该题得分的算术平均
  2. 得分率:平均分 / 该题满分
  3. 名次1:按平均分从高到低,在数据中所有学校之间排名,同分同名次(跳过后续名次)
  4. 名次2:按平均分从高到低,仅在RANK2_SCHOOLS指定的学校之间排名,同分同名次;非指定学校名次2留空
  5. 学校排序:按拼音(带声调,TONE3模式)排序,等价于Excel中文排序

名次2说明

名次2用于在指定学校子集内部排名,例如某市8所学校内部排名:

  • 学校列表由RANK2_SCHOOLS配置项指定
  • 非指定学校的名次2单元格留空
  • RANK2_SCHOOLS为空列表时,不输出名次2列(回退到仅名次1模式)

各题满分设定

每次考试满分可能不同,必须向用户确认各题满分后再修改脚本中 FULL_MARKS。

历史记录(按学段、学科分类):

高中

物理

  • 2026-07-31 泰兴市物理(16题):题1~11各4, 题12=15, 题13=6, 题14=8, 题15=12, 题16=15
  • 2026-08-01 泰州一模物理(16题):同上

地理

  • 2026-08-01 泰州二模地理(25题):题1~22各2, 题23=20, 题24=18, 题25=18

原始数据格式

每行一个学生,列结构:

  • 姓名, 班级, 学校
  • 总分, 客观分, 主观分
  • 第1题~第N题(含子题,视题目结构而定)

注意:不同考试的列名可能不同(如"科目总分"vs"总分"、"第1题"vs"题1"),需通过 COLUMN_MAP 适配。

输出格式

  • Col 1: 序号
  • Col 2: 学校
  • 总分/客观分/主观分: 各3列(平均分, 名次1, 名次2)
  • 无子题的题目: 每题4列(平均分, 得分率, 名次1, 名次2)
  • 有子题的题目: 每题4列(平均分, 得分率, 名次1, 名次2)+ 子题平均分列

列数随题目数量变化,例如:物理16题=90列,地理25题=122列。

输出样式

  • 表头: 宋体 11pt 加粗, 居中, thin边框
  • 序号/学校列: 宋体 11pt 加粗, 居中, thin边框
  • 数据列: Times New Roman 11pt, 居中, thin边框
  • 平均分格式: 0.00_);\(0.00\)(2位小数)
  • 得分率格式: 0.0%(1位小数百分比)
  • 名次格式: 0_);\(0\)(整数)
  • 行高: 表头22, 数据16
  • 列宽: B(学校)=11.625, C(总分)=7.0, 其余默认
  • 无合并单元格

使用方法

# Python路径
PYTHON="C:/Users/PC/.workbuddy/binaries/python/envs/default/Scripts/python.exe"

# 运行(学校按拼音自动排序)
"$PYTHON" school_stats.py "<原始数据文件>" "<输出文件>"

# 运行(指定学校顺序,可选)
"$PYTHON" school_stats.py "<原始数据文件>" "<输出文件>" "学校A,学校B,学校C"

适配新考试需修改

脚本配置区八项配置:

  1. COLUMN_MAP — 原始列名→内部标准名映射(当列名不同时修改)
  2. FULL_MARKS — 各题满分设定
  3. NUM_COLS — 原始数据中的数值列名列表(内部标准名)
  4. RATE_COLS — 需要计算得分率的题目
  5. SIMPLE_Q — 无子题的题号列表
  6. SUB_Q_INFO — 有子题的题目配置:(题号, 子题列表)
  7. RANK2_SCHOOLS — 名次2排名学校列表(为空则不输出名次2列)
  8. SCHOOL_ORDER — 学校排列顺序(留空则按拼音排序)

验证结果

  • 物理16题41校:与模版逐项对比,3690个单元格0差异,格式完全一致
  • 地理25题44校:25题得分率全部正确,客观分+主观分=总分零误差

依赖

  • openpyxl
  • pypinyin(用于拼音排序;未安装时回退GBK编码排序)

文件位置

  • 脚本: ~/.workbuddy/skills/physics-school-stats/school_stats.py
  • SKILL说明: ~/.workbuddy/skills/physics-school-stats/SKILL.md

注意事项

  • 每次执行前必须确认各题满分和题目结构,不同学段、不同学科、不同考试可能不同
  • 不同学段差异:小学可能无解答题子题结构,初高中可能有复杂子题;题目数量、满分分配差异大,全部通过配置区适配,脚本逻辑无需修改
  • 学校数因考试范围不同而变化(物理41校、地理44校等)