Initial commit
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
commit
71db82393a
@@ -0,0 +1,103 @@
|
||||
# 二期数据处理脚本
|
||||
|
||||
## 数据概况
|
||||
|
||||
| 项目 | 一期 | 二期 |
|
||||
|------|------|------|
|
||||
| 区域 | 仅长宁区 | **13个区** |
|
||||
| 学校数 | 9所 | **176~177所** |
|
||||
| 基础信息表 | 277行 | 5,557行 |
|
||||
| 课程实施情况表 | 5,506行 / 128题 | 145,484行 / **103题** |
|
||||
| 学科课程实施情况表 | 25,006行 / 131题 | **1,348,513行** / 87~131题 |
|
||||
|
||||
### 一期 vs 二期 关键差异
|
||||
|
||||
1. **格式不同**:一期是3张扁平Excel,二期是原始平台导出(每题一个Sheet + 15个学科独立文件)
|
||||
2. **题目数量**:课程实施表少了25题(128→103),学科表按学科不同题数也不同
|
||||
3. **学校名称**:一期用简称("延安中学"),二期用全称("上海市延安中学")
|
||||
4. **长宁区**:二期只有8所(缺少"市三女中"),一期有9所
|
||||
5. **字段ID覆盖**:
|
||||
- 课程实施表:共有275个,一期独有74个,二期独有62个
|
||||
- 学科表字段名称:共有713个,一期独有150个,二期独有53个
|
||||
|
||||
## 脚本说明
|
||||
|
||||
### `01_etl_transform.py` — ETL转换
|
||||
|
||||
将二期原始数据转换为与一期相同列结构的3张扁平表(parquet格式)。
|
||||
|
||||
```bash
|
||||
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、学校名称等。
|
||||
|
||||
```bash
|
||||
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` — 列出可用学校
|
||||
|
||||
### 运行示例
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
## 后续优化方向
|
||||
|
||||
1. **学校名称映射扩展**:目前只配了长宁区8所学校的全称→简称映射,全市176所需补充
|
||||
2. **学校类型信息补充**:办学性质、学校等级、特色类型等(一期在 config 手工配了9所)
|
||||
3. **题号映射精细核对**:确认二期103题与一期128题的对应关系,优化赋分覆盖率
|
||||
4. **赋分规则适配**:基于字段ID的赋分规则大部分可复用,但部分新增/缺失字段需处理
|
||||
5. **全市对照基准**:二期有176所学校,PCA和标准化终于有统计意义,可做真正的全市对照
|
||||
Reference in New Issue
Block a user