Files
module1_3/README.md
2026-02-27 17:06:56 +08:00

144 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 作战体系数据清洗与标准化系统
## 项目简介
本项目用于处理异质作战体系节点的原始JSON数据。系统能够自动识别并修复数据中的噪声、缺失值、异常值并将关键效能指标标准化至 [0, 1] 区间,最终输出符合建模要求的高质量数据集。
## 目录结构
```
project/
├── config/
│ ├── config.yaml # 配置文件(推荐,支持注释)
│ └── config.json # 配置文件备选
├── data/
│ ├── raw_data_sample.json # 原始输入数据JSON 模式)
│ └── cleaned_data_final.json # 清洗后的输出数据
├── src/
│ ├── cleaner.py # 清洗运行程序
│ └── data_loader.py # 数据加载JSON/达梦)
├── report/
│ └── detailed_cleaning_report.json # 详细清洗报告
├── scripts/
│ └── inspect_dm_tables.py # 达梦表结构查看(部署时用)
├── .env.example # 环境变量示例(含 DM_PASSWORD
└── README.md # 项目说明文档
```
## 清洗流程说明
程序按以下顺序依次执行五步清洗操作:
### 1. 去重 (clean_duplicates)
- **依据**:按 `TARGET_ID` 去重,同一目标只保留一条记录
- **策略**:若存在 `CREATED_TIME` 字段,按创建时间倒序排序后保留最新一条;否则保留第一条
- **目的**:消除重复录入的目标节点
### 2. 缺失值填充 (handle_missing_values)
- **范围**:对所有数值型列(除 ID 外)进行处理
- **策略**
- 先按 `ROLE_ID` 分组,用同类型单位的均值填充该组内缺失值
- 若分组后仍有缺失(如该组仅有一条记录),用全列均值兜底填充
- **目的**:保证数值字段完整,便于后续建模
### 3. 异常值纠正 (correct_outliers)
- **涉及字段**`TARGET_RECOGNITION_CAPABILITY``STRIKE_ACCURACY``ANTI_JAMMING_CAPABILITY``ENVIRONMENT_ADAPTABILITY``MOBILITY`
- **规则**
- 若值 < 0取绝对值
- 若值 > 1截断为 1.0
- **目的**:将效能指标统一限制在 [0, 1] 区间内
### 4. 噪声平滑 (apply_kalman_filter)
- **对象**`COMMUNICATION_RANGE`(通信范围)字段
- **方法**:使用窗口大小为 3 的移动平均进行平滑(与卡尔曼滤波效果类似的时序平滑)
- **结果**:数值保留 2 位小数
- **目的**:削弱测量噪声对连续数值的影响
### 5. 标准化与输出
- 坐标精度统一为 2 位小数
- 时间戳统一为 ISO-8601 格式
- 输出清洗后 JSON 及详细报告(含各步骤的统计与示例)
## 数据源配置
程序支持两种数据源,通过 `config/config.yaml``config/config.json` 中的 `source` 切换:
| source | 适用场景 | 说明 |
|--------|--------------|------|
| `json` | 开发、无数据库 | 从 `data/raw_data_sample.json` 读取 |
| `db` | 生产、有达梦库 | 从达梦数据库指定表读取 |
### 开发阶段(当前设备无达梦)
保持 `source: json`,直接使用本地 JSON 文件即可。
### 生产阶段(部署到有达梦的设备)
`OBJECTIVE_INSTANCE` 表结构与 `raw_data_sample.json` 一致,配置中已设为 `db.table: OBJECTIVE_INSTANCE`,直接查询即可。
1. **修改配置**`source: db`,端口 `5080`、表 `OBJECTIVE_INSTANCE` 已预设;
2. **设置密码**`export DM_PASSWORD=你的密码`
3. **运行清洗**`python src/cleaner.py`
若需自定义查询(如加 WHERE 条件),可清空 `table`,在 `db.query` 中写完整 SQL。
### 密码注入与安全说明
**⚠️ 安全原则:切勿将达梦密码写入配置文件或源代码。**
达梦模式通过环境变量 `DM_PASSWORD` 注入密码,支持以下方式:
| 方式 | 说明 |
|------|------|
| **终端** | `export DM_PASSWORD=你的密码`Linux/Mac`set DM_PASSWORD=你的密码`Windows CMD |
| **PyCharm** | Run → Edit Configurations → Environment variables → 添加 `DM_PASSWORD=你的密码` |
| **.env 文件** | 复制 `.env.example``.env`,填入 `DM_PASSWORD=你的密码`,并用 `python-dotenv` 加载(需自行集成) |
`inspect_dm_tables.py` 支持两种密码来源:优先环境变量 `DM_PASSWORD`,其次脚本内 `LOCAL_PASSWORD`。若使用 `LOCAL_PASSWORD`,务必执行 `git update-index --assume-unchanged scripts/inspect_dm_tables.py` 避免误提交。
配置文件(`config.yaml` / `config.json`)中仅配置 `host``port``user``schema``table` 等,**不包含 password**。本项目源代码中不包含任何硬编码密码。
## 快速开始
### 1. 环境依赖
```bash
pip install -r requirements.txt
```
核心依赖:`numpy``pandas``PyYAML`。达梦模式需额外安装 `dmPython`
### 2. 运行清洗
在项目根目录下执行:
```bash
python src/cleaner.py
```
默认从 JSON 读取,处理后生成:
- `data/cleaned_data_final.json`(清洗后的数据)
- `report/detailed_cleaning_report.json`(详细清洗报告)
## 输出结果示例
**清洗前 (Raw):**
```json
{
"MOBILITY": -0.5,
"STRIKE_ACCURACY": 1.5,
"COMMUNICATION_RANGE": 102.8116
}
```
**清洗后 (Cleaned):**
```json
{
"MOBILITY": 0.5,
"STRIKE_ACCURACY": 1.0,
"COMMUNICATION_RANGE": 102.81
}
```
## 清洗报告说明
`detailed_cleaning_report.json` 中包含:
- **summary**:总记录数、最终记录数、去重数量
- **details**:各字段缺失值填充数量、异常值修正数量及示例、噪声平滑处理记录、标准化说明