2026-02-27 17:06:56 +08:00
2026-02-27 17:06:56 +08:00
2026-02-27 17:06:56 +08:00
2025-11-25 18:49:23 +08:00
2026-02-27 17:06:56 +08:00
2026-02-27 17:06:56 +08:00
2026-02-27 17:06:56 +08:00
2026-02-27 17:06:56 +08:00
2026-02-27 17:06:56 +08:00
2026-02-27 17:06:56 +08:00

作战体系数据清洗与标准化系统

项目简介

本项目用于处理异质作战体系节点的原始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_CAPABILITYSTRIKE_ACCURACYANTI_JAMMING_CAPABILITYENVIRONMENT_ADAPTABILITYMOBILITY
  • 规则
    • 若值 < 0取绝对值
    • 若值 > 1截断为 1.0
  • 目的:将效能指标统一限制在 [0, 1] 区间内

4. 噪声平滑 (apply_kalman_filter)

  • 对象COMMUNICATION_RANGE(通信范围)字段
  • 方法:使用窗口大小为 3 的移动平均进行平滑(与卡尔曼滤波效果类似的时序平滑)
  • 结果:数值保留 2 位小数
  • 目的:削弱测量噪声对连续数值的影响

5. 标准化与输出

  • 坐标精度统一为 2 位小数
  • 时间戳统一为 ISO-8601 格式
  • 输出清洗后 JSON 及详细报告(含各步骤的统计与示例)

数据源配置

程序支持两种数据源,通过 config/config.yamlconfig/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/Macset 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)中仅配置 hostportuserschematable 等,不包含 password。本项目源代码中不包含任何硬编码密码。

快速开始

1. 环境依赖

pip install -r requirements.txt

核心依赖:numpypandasPyYAML。达梦模式需额外安装 dmPython

2. 运行清洗

在项目根目录下执行:

python src/cleaner.py

默认从 JSON 读取,处理后生成:

  • data/cleaned_data_final.json(清洗后的数据)
  • report/detailed_cleaning_report.json(详细清洗报告)

输出结果示例

清洗前 (Raw):

{
  "MOBILITY": -0.5,
  "STRIKE_ACCURACY": 1.5,
  "COMMUNICATION_RANGE": 102.8116
}

清洗后 (Cleaned):

{
  "MOBILITY": 0.5,
  "STRIKE_ACCURACY": 1.0,
  "COMMUNICATION_RANGE": 102.81
}

清洗报告说明

detailed_cleaning_report.json 中包含:

  • summary:总记录数、最终记录数、去重数量
  • details:各字段缺失值填充数量、异常值修正数量及示例、噪声平滑处理记录、标准化说明
Description
No description provided
Readme 327 KiB
Languages
Python 100%