Files
module1_3/final/README.md
2026-04-23 12:48:59 +08:00

14 KiB
Raw Blame History

作战体系数据清洗与网络效能评估系统

项目简介

本系统包含两大功能模块:

  1. 数据清洗:从 JSON 文件或达梦数据库读取实体属性表、三元组,进行去重、缺失值填充、异常值修正、噪声平滑等清洗;并按 1125 属性需求内容与格式的双重对齐(格式校验 + 内容校验 + 原始字段→规范 schema 转换),输出仅含 xlsx 定义字段nodes.json,不保留原始其他字段。
  2. 网络关系与效能评估:基于节点与三元组数据,计算关系强度、过滤低置信边,评估任务网络效能,生成评价报告。

目录结构

final/
├── config/
│   ├── config.yaml       # 主配置文件(推荐)
│   └── config.json       # 备选配置
├── data/
│   ├── raw_data_sample.json    # 原始实体数据JSON 模式)
│   ├── nodes.json              # 清洗后实体(关系/网络计算用)
│   └── triples.json            # 清洗后三元组(来自 run_all
├── report/
│   ├── detailed_cleaning_report.json    # 实体清洗报告
│   └── triplet_cleaning_report.json     # 三元组清洗报告
├── results/
│   ├── filtered_triples.json   # 过滤后三元组
│   ├── triples.csv             # 三元组表格
│   └── evaluation_report.txt   # 效能评价报告
├── src/
│   ├── main_227.py             # 主程序(清洗 + 关系 + 网络评估)
│   ├── cleaner.py              # 实体清洗
│   ├── attribute_schema.py     # 1125 属性规范:格式/内容校验 + 原始→规范转换
│   ├── data_loader.py          # 数据加载JSON/达梦)
│   └── triplet_cleaner.py      # 三元组清洗
├── scripts/
│   ├── run_all.py              # 一键运行(仅清洗)
│   ├── export_triplets.py      # 单独导出三元组
│   ├── inspect_dm_tables.py    # 达梦表结构查看
│   ├── f_relation1125.py       # 关系强度计算
│   └── f_net1125.py            # 任务网络评估
├── .env.example
└── README.md

快速开始

1. 环境依赖

pip install -r requirements.txt
# 达梦模式需额外pip install dmPython

2. 运行方式

命令 功能
python src/main_227.py 完整流程:实体清洗 → 关系强度计算 → 网络效能评估
python scripts/run_all.py 仅清洗:实体 + 三元组 读取、清洗、导出

3. 开发模式(无达梦数据库)

config/config.yamlconfig/config.json 中设置:

source: json

然后运行:

python src/main_227.py

程序会从 data/raw_data_sample.json 读取实体数据并清洗;关系/网络计算则从 data/nodes.jsondata/triples.json 读取。


配置说明

必须修改的配置

根据你的环境,在 config/config.yamlconfig/config.json 中修改以下项:

配置项 说明 示例
source 数据源:json(开发)或 db(达梦) json
db.host 达梦库地址source=db 时) 127.0.0.1
db.port 达梦端口 5080
db.user 达梦用户 SYSDBA
db.table 实体表名 OBJECTIVE_INSTANCE
db.triplet_table 三元组表名 RELATION_INSTANCE

达梦密码(切勿写入配置)

达梦模式需设置环境变量:

export DM_PASSWORD=你的密码

或在 PyCharmRun → Edit Configurations → Environment variables → 添加 DM_PASSWORD=你的密码

可选配置

配置项 说明 默认
json.input_file 实体 JSON 路径 data/raw_data_sample.json
json.output_file 清洗后实体输出 data/nodes.json
triplet.enabled 是否处理三元组 true
triplet.input_file JSON 模式下三元组路径 null
triplet.output_file 三元组输出 data/triples.json
triplet.clean.deduplicate 三元组去重 true
triplet.clean.filter_orphans 过滤悬空引用 false
eval.nodes_file main_227 读取的节点文件 data/nodes.json
eval.triples_file main_227 读取的三元组文件 data/triples.json(与 triplet.output_file 一致)

配置优先级

config.json 优先于 config.yaml;修改其一即可。


数据流程

main_227.py 流程

1. 实体清洗
   - 从 JSON 或达梦读 raw_data_sample / OBJECTIVE_INSTANCE
   - 去重、缺失值填充、异常值修正、噪声平滑
   - 输出 nodes.json
2. 关系与网络评估
   - 按配置读取 nodeseval.nodes_file / json.output_file、tripleseval.triples_file = triplet.output_file
   - 计算 5 类关系强度(情报保障、指挥控制、状态反馈、平台部署、协同作战)
   - 按阈值过滤关系
   - 评估 5 类任务网络效能
   - 输出 results/ 下报告与表格

run_all.py 流程

1. 实体清洗 → data/nodes.json
2. 三元组清洗 → data/triples.json格式head, head_type, relation, tail, tail_type

输出文件说明

文件 来源 说明
data/nodes.json 清洗 清洗后实体({nodes: {id: obj}, global_params: {mtbf_max}},见下文)
data/triples.json run_all 清洗后三元组head/head_type/relation/tail/tail_type
report/detailed_cleaning_report.json 清洗 实体清洗统计(含 attribute_alignment格式/内容对齐情况)
report/triplet_cleaning_report.json run_all 三元组清洗统计
results/filtered_triples.json main_227 过滤后三元组(含强度)
results/triples.csv main_227 三元组表格
results/evaluation_report.txt main_227 效能评价报告

常见问题

Q: 运行报错「找不到文件 raw_data_sample.json」
A: 将 source 改为 json,并确保 data/raw_data_sample.json 存在;或检查 json.input_file 路径。

Q: 达梦模式连接失败?
A: 检查 DM_PASSWORD 环境变量、db.host/db.port,以及 dmPython 与达梦客户端是否正确安装。

Q: main_227 中 nodes.json、triples.json 从哪来?
A: nodes.jsontriples.json 均由清洗步骤生成run_all 或 main_227 前半段),格式需包含 headrelationtail 等字段。

Q: 如何查看达梦表结构?
A: 运行 python scripts/inspect_dm_tables.py(需设置 DM_PASSWORD)。

Q: nodes.json 为何没有 X、Y、ROLE_ID 等原始字段?
A: 输出完全对齐 1125 xlsx 规范,仅保留 schema 定义的 12 个字段;原始字段在转换阶段已映射为 spatialorg_unit 等规范结构。


数据清洗详细逻辑

清洗流程概览

原始数据 → 去重 → 缺失值填充 → 异常值修正 → 噪声平滑 → 1125 Schema 转换 → 关系计算前净化 → nodes.json
步骤 说明
去重 TARGET_ID 去重,优先保留 CREATED_TIME 最新的记录
缺失值填充 数值型字段按 ROLE_ID 分组均值填充,兜底用全局均值
异常值修正 TARGET_RECOGNITION_CAPABILITYSTRIKE_ACCURACYANTI_JAMMING_CAPABILITYENVIRONMENT_ADAPTABILITYMOBILITY 等 [0,1] 字段:负值取绝对值、>1 截断为 1
噪声平滑 COMMUNICATION_RANGE 做 3 点移动平均
1125 Schema 转换 见下文字段映射,输出仅含规范字段
关系计算前净化 见下文「关系计算前净化」

关系计算前净化sanitize_node_for_relation_calc

下游 f_relation1125utils.py 会对节点属性做数值运算(如欧氏距离、安全等级差、历史成功率平均),若字段为 None 会触发 NoneType 运算错误。因此在写入 nodes.json 前,对每条节点做最终净化,确保参与运算的字段永不为 None

净化项 处理方式
spatial.position 必须为 [float, float],含 None/NaN 的元素替换为 0.0
spatial.effective_radius 若为 None,设为 1.0
temporal.* time_window 缺省 24.0,其余缺省 1.0
security_level 若为 None 或越界,设为 315 范围)
history_success 若为 None,设为 0.801 范围)

该步骤在 attribute_schema.sanitize_node_for_relation_calc() 中实现,由 cleaner 在写入前对每个节点调用。

输出字段说明

nodes.json 完全对齐 xlsx 规范,不保留原始其他字段。每条记录仅包含:

字段 类型 说明
TARGET_ID 字符串 节点唯一标识(三元组 head/tail 引用所需)
function_vector 字典 7 维功能能力 [0,1]
spatial 字典 空间位置与有效半径
temporal 字典 时间相关属性
performance 字典 核心性能、生存能力、MTBF
protocol_list 列表 支持协议(字符串列表)
format_list 列表 支持格式(字符串列表)
interface_list 列表 支持接口(字符串列表)
security_level 整数 安全等级 [1,5],缺省 3关系计算用
org_unit 字符串/null 组织隶属
nation 字符串/null 国家代码
history_success 浮点数 历史成功率 [0,1],缺省 0.8(关系计算用)

nodes.json 整体结构{ "nodes": { "TARGET_ID": {...}, ... }, "global_params": { "mtbf_max": number } },兼容 main_227 / f_relation1125 关系计算。

单条节点记录示例:

{
  "TARGET_ID": "FS-俄-情报侦-132",
  "function_vector": {
    "f_IC": 0.9273, "f_IA": 0.7896, "f_CS": 0.2584, "f_IT": 0.5187,
    "f_DP": 0.9148, "f_CPS": 0.5619, "f_CC": 0.7822
  },
  "spatial": { "position": [79.36, 52.11], "effective_radius": 94.96 },
  "temporal": { "response_time": 23.3891, "cycle_time": 3.7, "data_age": 1.48, "time_window": 3.7 },
  "performance": { "core_performance": 0.9831, "survivability": 0.4094, "mtbf": 0.7202 },
  "protocol_list": [], "format_list": [], "interface_list": [],
  "security_level": 3, "org_unit": "师级", "nation": "俄", "history_success": 0.8
}

属性对齐与字段转换1125 规范)

依据 1125暂时属性需求(1).xlsx,对每条记录做 内容与格式的双重对齐

  • 格式校验各字段类型与结构dict/list/scalar
  • 内容校验:取值范围(如 [0,1]、[1,5]
  • 转换:原始扁平字段 → 规范 schema

清洗报告中 details.attribute_alignment 记录格式/内容错误统计及示例。

原始字段 → 目标 Schema 映射

function_vector功能向量

每个维度取 [0,1] 浮点数,从原始能力字段推导:

目标维度 原始字段(按优先级) 转换方式
f_IC 情报收集 DETECTION_ACCURACY, TARGET_RECOGNITION_CAPABILITY 取第一个有效值clamp 到 [0,1]
f_IA 信息分析 INFORMATION_FUSION_CAPABILITY, DETECTION_ACCURACY 同上
f_CS 协同作战 MOBILITY, ENVIRONMENT_ADAPTABILITY 同上
f_IT 信息传输 ANTI_JAMMING_CAPABILITY 同上
f_DP 数据处理 PROCESSING_CAPACITY, INFORMATION_FUSION_CAPABILITY 固定参考值:见下表
f_CPS 指挥控制 DECISION_RESPONSE_TIME 固定参考值:见下表
f_CC 综合保障 SUPPORT_CAPACITY, LOAD_CAPACITY 固定参考值:见下表

固定参考值转换公式(原始值不在 [0,1] 时使用):

维度 公式 参数说明
f_CPS 1 / (1 + t/30) t = 响应时间(秒),响应越快能力越高
f_DP log10(1+PC) / log10(10001) PC = PROCESSING_CAPACITY无则用 INFORMATION_FUSION_CAPABILITY clamp [0,1]
f_CC 0.6×support_norm + 0.4×load_norm support_norm = log10(1+SUPPORT)/log10(10001)load_norm = LOAD/100仅一个有时取该值

spatial空间属性

目标字段 原始字段(按优先级) 转换
position position(列表 [x,y])、X/x+Y/yPOSITION_X/POSITION_YLONGITUDE/LATITUDE [round(x,2), round(y,2)]None/NaN 替为 0.0,兼容达梦多种列名
effective_radius COMMUNICATION_RANGE 原值保留 4 位小数,缺省 1.0

temporal时间属性

目标字段 原始字段 转换
response_time DECISION_RESPONSE_TIME 原值
cycle_time REFRESH_RATE 原值
data_age TRANSMISSION_DELAY 原值(近似数据新鲜度)
time_window REFRESH_RATE 原值

performance性能属性

目标字段 原始字段(按优先级) 转换
core_performance STRIKE_ACCURACY, DETECTION_ACCURACY, MOBILITY 取第一个有效值clamp [0,1]
survivability ENVIRONMENT_ADAPTABILITY, ANTI_JAMMING_CAPABILITY 同上
mtbf RELIABILITY, SYSTEM_RELIABILITY 取第一个有效值

其他标量字段

目标字段 原始字段 转换
protocol_list PROTOCOL 字符串→列表,空则 []
format_list FORMAT 同上
interface_list INTERFACE 同上
security_level security_level, SECURITY_LEVEL 整数 [1,5],缺省 3(避免关系计算时 None 运算错误)
org_unit LEVEL, ROLE_ID 取第一个非空字符串
nation COUNTRY_REGION 原值
history_success history_success, HISTORY_SUCCESS clamp [0,1],缺省 0.8(同上)

缺失与空值

  • 无可映射原始值时,多数目标字段为 null(列表型为 []
  • security_levelhistory_successspatial.position 等参与关系运算的字段永不为 null:缺省分别为 30.8[0,0],并在「关系计算前净化」阶段再次保证
  • 可选字段(如 org_unitnation)缺失不影响记录通过校验