# Prompt 01：数据读取与核查

## 背景

这是二分类临床预测模型开发流程的第一阶段：把原始数据安全地读进来，弄清它的结构与质量，为后续清理与建模建立可信起点。本阶段只读取、核查与记录，不做任何清理、插补或建模。对应 Book 3 第 2 章前半，参考实现见 `Demo_R_Project/R/01_prepare_data.R`。

## 数据说明

- 原始数据：`<数据路径>`（读取后在本阶段保存一份快照，此后快照只读）；
- 数据字典：`<数据字典路径>`（若无可用的外部字典，则由本阶段根据实际数据生成草案，交人工确认）；
- 结局变量：`<结局变量>`；正类：`<正类>`（其余取值视为负类；取值集合必须先与字典核对）；
- 每行代表一个独立观测；若数据中缺少稳定行标识，本阶段新建行 ID 变量 `<行ID变量>`。

## 当前任务

读取原始数据并完成结构核查：确认结局与正类编码、生成数据字典与数据画像、汇总缺失情况、保存只读快照。不做变量筛选、不做清理改动、不做任何建模。

先检查输入并给出简要计划，然后继续执行指定任务；不要在计划后等待用户再次确认。只有输入冲突、字典冲突、必须改变方法或命中暂停条件时停止。

## 方法

1. 从 `<数据路径>` 读取数据，禁止 `setwd` 与个人绝对路径；
2. 新建 `<行ID变量>`（稳定、唯一、可复现）；
3. 核对 `<结局变量>` 的实际取值集合，确认正类 `<正类>` 与负类编码，统计事件数与事件率；
4. 生成数据字典（变量名、类型、取值范围/水平、缺失数）与数据画像（样本量、变量数、各变量分布概览）；
5. 生成缺失概览（每变量缺失数与比例），只报告，不按缺失比例删除任何变量；
6. 将"加载后 + 行 ID"的快照落盘为原始快照；后续重复运行时仅校验一致性，不覆盖；
7. 绘制结局分布图与缺失概览图。

## 输出

- `data/raw/`（或约定目录）下的原始快照：行 ID + 全部原始列；
- `results/tables/data_dictionary.csv`：数据字典；
- `results/tables/data_profile.csv`：数据画像；
- `results/tables/missing_summary.csv`：缺失概览；
- `results/figures/` 下的结局分布图与缺失概览图；
- 日志：记录数据来源、行列数、结局编码核对结果与运行时间。

## 约束

- 原始数据只读：除首次写入快照外，任何后续运行不得改写原始数据与快照；
- 样本量、事件数、缺失数等一律从实际数据读数，不预先写死；
- 本阶段不做插补、不删变量、不删行、不做单因素筛选；
- 若需派生变量，只能按固定规则生成并明确标注为技术派生变量，不解释为临床阈值；
- 全程使用仓库内相对路径。

## 验收

- 快照存在且非空，行数与原始数据一致，`<行ID变量>` 唯一无重复；
- 数据字典、画像、缺失概览三个 CSV 可读，且样本量、事件数、缺失数与实际数据一致；
- 结局取值集合与 `<正类>` 说明一致，事件数与事件率已记录；
- 两张图存在且非空；
- 日志包含来源、版本/时间、行列数与编码核对结果。

## 暂停条件

出现以下任一情况，停止并报告，等待人工决定：结局变量不存在或取值无法确认正/负类；数据结构与说明严重不符（如多行对应同一观测）；必要读取依赖不可用；快照与既有快照不一致（疑似源数据被改动）；行 ID 无法保证唯一。
