Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
二期数据处理脚本
数据概况
| 项目 | 一期 | 二期 |
|---|---|---|
| 区域 | 仅长宁区 | 13个区 |
| 学校数 | 9所 | 176~177所 |
| 基础信息表 | 277行 | 5,557行 |
| 课程实施情况表 | 5,506行 / 128题 | 145,484行 / 103题 |
| 学科课程实施情况表 | 25,006行 / 131题 | 1,348,513行 / 87~131题 |
一期 vs 二期 关键差异
- 格式不同:一期是3张扁平Excel,二期是原始平台导出(每题一个Sheet + 15个学科独立文件)
- 题目数量:课程实施表少了25题(128→103),学科表按学科不同题数也不同
- 学校名称:一期用简称("延安中学"),二期用全称("上海市延安中学")
- 长宁区:二期只有8所(缺少"市三女中"),一期有9所
- 字段ID覆盖:
- 课程实施表:共有275个,一期独有74个,二期独有62个
- 学科表字段名称:共有713个,一期独有150个,二期独有53个
脚本说明
01_etl_transform.py — ETL转换
将二期原始数据转换为与一期相同列结构的3张扁平表(parquet格式)。
cd report-admin
python3 scripts/era2/01_etl_transform.py
输入:二期/[整理前] 二期_课程实施+教材使用情况表/ 下的17个xlsx文件
输出:data/era2/ 下的3个parquet文件 + etl_meta.json
era2_基础信息表.parquet— 列与一期完全一致era2_课程实施情况表.parquet— 列与一期完全一致era2_学科课程实施情况表.parquet— 列与一期完全一致etl_meta.json— 元信息(学校列表、区域列表等)
⚠️ 学科表有135万行,超过Excel行数上限(1,048,576),因此使用parquet格式
02_verify_data.py — 数据验证
对比一期和二期的列名、字段ID、学校名称等。
cd report-admin
python3 scripts/era2/02_verify_data.py
完整脚本列表
| 脚本 | 功能 | 用法 |
|---|---|---|
01_etl_transform.py |
原始格式 → 扁平表 parquet | python3 scripts/era2/01_etl_transform.py |
02_verify_data.py |
验证 ETL + 一期对比 | python3 scripts/era2/02_verify_data.py |
03_test_pipeline.py |
完整 Pipeline 测试(不调 LLM) | python3 scripts/era2/03_test_pipeline.py --district 长宁区 |
04_generate_report.py |
单校报告生成 | python3 scripts/era2/04_generate_report.py --school 延安中学 |
05_batch_generate.py |
批量报告生成 | python3 scripts/era2/05_batch_generate.py --district 长宁区 |
config_era2.py |
二期配置(路径、学校映射等) | 被其他脚本导入 |
data_engine_era2.py |
二期数据引擎(兼容一期接口) | 被其他脚本导入 |
关键参数
--district 长宁区— 只分析长宁区8所学校(默认)--district all— 分析全部13个区176所学校--enable-llm— 启用 LLM 文字生成(会产生 API 费用)--school 延安中学— 指定学校(支持简称)--list-schools— 列出可用学校
运行示例
cd report-admin
# 1. ETL(只需运行一次)
python3 scripts/era2/01_etl_transform.py
# 2. 测试 pipeline(长宁区)
python3 scripts/era2/03_test_pipeline.py --district 长宁区
# 3. 全市 pipeline
python3 scripts/era2/03_test_pipeline.py --district all
# 4. 生成延安中学报告(不调LLM)
python3 scripts/era2/04_generate_report.py --school 延安中学
# 5. 批量生成长宁区全部报告(不调LLM)
python3 scripts/era2/05_batch_generate.py --district 长宁区
# 6. 启用LLM生成(⚠️ 会产生费用)
python3 scripts/era2/04_generate_report.py --school 延安中学 --enable-llm
后续优化方向
- 学校名称映射扩展:目前只配了长宁区8所学校的全称→简称映射,全市176所需补充
- 学校类型信息补充:办学性质、学校等级、特色类型等(一期在 config 手工配了9所)
- 题号映射精细核对:确认二期103题与一期128题的对应关系,优化赋分覆盖率
- 赋分规则适配:基于字段ID的赋分规则大部分可复用,但部分新增/缺失字段需处理
- 全市对照基准:二期有176所学校,PCA和标准化终于有统计意义,可做真正的全市对照