Files
report-admin/scripts/era2/era2-keypoint.md
T
lofyerandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 71db82393a Initial commit
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-13 15:38:41 +08:00

9.2 KiB
Raw Blame History

二期(Era2)全市数据升级 — 关键点说明

更新日期:2026-03-18

本文档用于向领导解释:为什么需要接入全市数据、接入后能带来什么价值、技术上需要注意哪些关键点。


一、背景:当前方案的局限

二期报告生成系统目前使用的数据来自原始平台导出(17个Excel分学科文件,经ETL合并),覆盖 13个区、176所学校。但存在三个核心局限:

1. "区均值恒等于50分"问题

当前系统对每个区独立做标准化PCA + Z-score → 均值50,标准差10),导致:

  • 任何一个区的"区均值"永远精确等于50.00分
  • 校长看到的"高于区均值X分"只能反映区内相对位置,无法回答"我们区在全市什么水平?"
  • 强区和弱区的50分含金量完全不同,但报告无法体现

2. 缺失学校类型信息

原始导出数据中没有学校类型字段(市实验性示范性高中、区实验性示范性高中、公办普通高中、民办高中、特色高中等),导致:

  • 报告中"同类学校均值"被迫等于区均值,丧失了对标参考价值
  • LLM分析文字无法给出针对性的定位建议(如"作为市实验性示范性高中,应在全市发挥引领作用")
  • 缺少A/B/C/D/T类学校的分类对比

3. 缺失3个区的数据

原始导出覆盖13个区、176所学校,缺少**嘉定区(11校)、普陀区(13校)、浦东新区(57校)**的数据,合计缺失约81所学校。


二、全市数据带来的价值

邱老师提供的全市数据(3个Excel文件)覆盖 16个区、266所学校,与当前数据相比:

价值1:全市统一基准线

用全市266所学校做标准化基准后:

对比项 当前方案 升级后
标准化基准 区内自己 → 区均值恒=50 全市266校 → 区均值有差异
杨浦区均值 50.00(数学定义) 可能 52-55(反映杨浦在全市偏上)
报告价值 只能看区内排名 能看到全市坐标、区域定位
校长体感 "高于均值8分"——均值是什么? "高于全市均值8分"——清晰有力

价值2:学校类型对标

全市数据自带每所学校的完整元数据:

字段 示例 报告中的用途
学校类型 市实验性示范性高中 "同类学校均值"计算、LLM定位建议
学校类型编号 A类/B类/C类/D类/T类 五类学校分组对比
学校性质 公办/民办 办学性质维度分析
所处地区 城区/城市郊区 城郊差异分析
学校特色 科技类/艺术类/人文类 特色学校的个性化建议

升级后的报告示例

贵校课程实施总体得分58.75分,高于杨浦区均值(53.2分) 5.55分,高于全市同类学校(市实验性示范性高中,74所)均值(54.8分) 3.95分,在杨浦区14所学校中排名第1位。

价值3:覆盖完整16区

对比项 当前方案 升级后
覆盖区域 13个区 16个区+嘉定、普陀、浦东新区)
学校数量 176所 266所
浦东新区 缺失 57所(最大区)

价值4:恢复被削弱的维度

全市数据比当前parquet 多出102个字段,其中包括之前因原始导出格式问题被标记为"二期删除"的关键字段:

恢复的字段 归属维度 影响
信息化平台功能_*18个) 环境支持 该子维度从"降级评分"恢复为完整评分
管理业务的信息化应用_*2个) 课程迭代优化 该子维度从仅1个评分项恢复到3+个
教学业务的信息化应用_*4个) 课程迭代优化 同上
已完成的网络课程门数1个) 课程迭代优化 同上
德育、劳动周、选课走班等(约75个) 多个维度 增加评分区分度

⚠️ 唯一仍缺失的字段:信息技术与教学融合的认识_*(教学方式创新维度),已用教学信息化应用程度_*替代,不受影响。


三、技术实施方案

架构决策:在现有era2代码上扩展,不复制新分支

原因:赋分引擎、渲染引擎、模板、LLM引擎完全复用,只改数据加载层和统计基准层。复制会导致两套几乎相同的代码,后续维护成本翻倍。

改动范围

文件 改动内容 影响
08_etl_city_data.py 新建 — 将全市3个xlsx转为parquet 一次性ETL
config_era2.py 新增全市数据路径、自动构建SCHOOL_TYPE_MAP266校) 配置扩展
data_engine_era2.py 支持加载全市parquet;提供全市基准数据接口 接口扩展
stats_engine_era2.py 标准化基准改为全市;同类学校均值从全市同类型算 核心逻辑变化
04_generate_report.py 新增--city-baseline参数(默认开启) 参数扩展
05_batch_generate.py 同上 参数扩展

赋分引擎、渲染引擎、LLM引擎、模板 → 零改动


四、需要注意的关键点

关键点1:学校名称映射

全市数据使用简称(如"同济一附"),当前系统使用全称(如"同济大学第一附属中学")。

来源 杨浦区示例
全市数据 同济一附、复旦附中、交大附中、控江中学
当前系统 同济大学第一附属中学、复旦大学附属中学…

处理方案

  • 统一使用全市数据的简称作为系统内部标识
  • 报告标题使用全称(从A表或映射表获取),正文用简称
  • 需构建266所学校的 简称↔全称 映射表

关键点2:学校数量差异

数据源 学校数 说明
A表(基础信息) 270 含4所无课程数据的学校
B表(课程实施) 266 以此为准
C表(学科课程) 待确认 理论上应与B表一致
当前parquet 176 原始导出不完整

差异原因:当前parquet来自原始平台导出(17个分学科文件),部分区的数据未被导出。全市数据是整合后的完整版。

建议:以全市B表的266所学校为准。A表多出的4所(宝山世外、协和高中、金瑞学校、青浦协和)无课程数据,不参与赋分。

关键点3:字段差异处理

类别 数量 说明
全市与parquet共有字段 331 赋分引擎已适配
全市多出的字段 102 其中约25个可提升赋分精度,其余为新增题目
parquet独有的字段 5 其中nan为脏数据,其余4个为极少数学校的特殊选项

原则:赋分引擎基于字段名称匹配,多出的字段不会报错(被忽略),但可以主动利用恢复的字段提升评分精度。

关键点4B表中的表头行污染

全市B表的所在区列中混有一行值为district的表头行,加载时需过滤:

df = df[df['所在区'] != 'district']

关键点5:标准化基准变化的影响

使用全市基准后,所有已生成的报告得分都会变化

影响 说明
分数值变化 同一学校的得分可能从58.75→55.2或→62.3(取决于全市分布)
排名逻辑不变 区内排名仍按区内学校比较
水平划分 阈值不变(仍用赋分整理表中的固定阈值),但学校可能跨水平
LLM缓存 所有旧缓存失效,需重新生成(约50秒/校)

建议:全市基准上线后,需一次性重新生成所有已交付区域的报告。

关键点6C表文件较大

C全市数据_学科课程实施情况表_sh_sub7(全)(1).xlsx 约44MB,包含全市15个学科×266校的数据。ETL转parquet后约10-15MB,后续读取速度不受影响。


五、实施步骤(预估)

步骤 工作量 说明
1. 全市数据ETLxlsx→parquet 30分钟 新建脚本,处理名称映射和表头清洗
2. 构建全量SCHOOL_TYPE_MAP 15分钟 从A/B表提取266校元数据
3. 改造data_engine支持全市数据 30分钟 加载全市parquet,提供基准接口
4. 改造stats_engine标准化逻辑 45分钟 全市基准 + 同类学校均值
5. 恢复C类削弱字段的赋分 30分钟 环境支持、课程迭代优化维度
6. 测试验证 30分钟 对比前后得分变化,确认逻辑正确
7. 重新生成已交付区域报告 ~60分钟 杨浦14校+宝山19校+长宁9校

合计:约 3-4 小时


六、预期效果对比

报告第一段(Before

贵校课程实施总体得分为58.75分,高于长宁区均值(50.00分8.75分,同时高于同类学校均值(50.00分8.75分…

报告第一段(After

贵校课程实施总体得分为XX.XX分,高于杨浦区均值(XX.XX分X.XX分,高于全市同类学校(市实验性示范性高中,74所) 均值(XX.XX分)X.XX分。在杨浦区14所学校中排名第1位,在全市同类学校中排名第X位…

信息密度和说服力显著提升。