4. 数据清洗与预处理工程

Anritsu 测试仪表(如 MS2090A 频谱分析仪、MT8000A 无线通信测试平台、MT8821C 综测仪)输出的原始数据,往往不能直接进入分析模型。以一次 5G NR 路测为例,仪表按固定周期上报 RSRP、SINR、TxPower、BLER 等参数,但采集过程中会出现 GPS 丢星导致的经纬度缺失、切换瞬间的采样重复、不同仪表时间戳基准不一致、以及个别因遮挡产生的异常尖峰。数据清洗与预处理工程的目标,就是把这些"脏数据"转化为时间对齐、单位统一、质量可控、可复用的分析数据集。

一、四类典型数据问题与处理策略

缺失值是 Anritsu 数据中最常见的问题。GPS 未定位时经纬度为空,弱覆盖区域 RSRP 可能上报为无效值。处理时需先区分缺失类型:连续短时缺失(如 1~3 个采样点)适合线性插值或前向填充;长时间缺失(如进入隧道 30 秒以上)则不应插值,而应标记为无效区间,避免伪造数据。判断依据可设阈值:连续缺失点数超过 5 个即标记为"数据空洞",不参与后续统计。

异常点通常来自瞬时干扰或仪表量程切换。例如 RSRP 正常波动在 -140~-40 dBm,若某点突然出现 -20 dBm 或 -200 dBm,即为异常。推荐使用"3σ 准则 + 物理边界"双重判断:先按滑动窗口计算均值与标准差,超出均值 ±3σ 的点标记为疑似异常;再结合参数物理范围(RSRP 有效范围 -156~-31 dBm)做二次确认。对确认的异常点,用窗口中位数替换比均值更稳健。

时间对齐是跨仪表分析的关键。Anritsu 仪表内部时钟与 GPS 时间可能存在偏移,多台仪表并行采集时时间戳基准不同。工程做法是:以 GPS 时间为基准时间轴,将各仪表时间戳映射到统一时间网格(如 100 ms 栅格),对落在同一栅格内的多个采样取均值或保留最新值。若时间偏移已知且稳定,可先做固定偏移校正再对齐。

单位统一与重复采样同样不可忽视。功率类参数可能以 dBm、dBW、W 混用,速率类可能以 kbps、Mbps 混用。建议在清洗流水线入口统一转换为 dBm 和 Mbps,并记录转换日志。重复采样则常见于仪表重传或采集软件重复写入,可通过"时间戳 + 参数名 + 数值"三元组去重,保留首次出现记录。

Anritsu 测试数据清洗流水线 原始数据 MS2090A / MT8000A CSV / 二进制日志 缺失值处理 短缺失→插值/前向填充 长缺失→标记空洞区间 阈值:连续>5点不插值 异常点检测 3σ滑动窗口 + 物理边界 RSRP有效:-156~-31 dBm 替换:窗口中位数 时间对齐 GPS基准时间轴 100ms栅格映射 同栅格取均值/最新 单位统一 功率→dBm 速率→Mbps 重复采样去重 时间戳+参数名+数值 三元组去重,保留首条 质量校验 完整率 / 有效率统计 异常率 < 2% 通过 清洗后数据集 时间对齐 · 单位统一 · 质量可控 可直接进入分析模型 关键参数与判断依据 缺失阈值:连续缺失 > 5 点 → 标记空洞 异常判定:|x - μ| > 3σ 且超出物理范围 时间栅格:100 ms(可配置 10/50/200 ms) 单位基准:功率 dBm,速率 Mbps 去重键:时间戳 + 参数名 + 数值 通过标准:完整率 ≥ 95%,异常率 < 2%

二、构建可复用的清洗流水线

把上述处理串成流水线,核心是"配置驱动 + 分步可插拔"。建议用 Python 实现,以 pandas 为数据处理底座,每个处理步骤封装为独立函数,通过 YAML 配置文件控制启用与参数。以下是一个可参考的流水线骨架:

# pipeline_config.yaml
missing:
  method: interpolate      # interpolate / ffill / drop
  max_gap: 5               # 连续缺失超过5点不插值
outlier:
  method: sigma            # sigma / iqr
  sigma_n: 3
  bounds:
    RSRP: [-156, -31]
    SINR: [-20, 40]
time_align:
  grid_ms: 100
  ref: gps
unit:
  power: dBm
  rate: Mbps
dedup:
  keys: [timestamp, param, value]
quality:
  min_complete_rate: 0.95
  max_outlier_rate: 0.02

流水线执行时,先读取原始 CSV,解析时间戳并转换为统一时区;然后按配置依次执行缺失值处理、异常点检测与替换、时间栅格对齐、单位换算、去重;最后输出质量报告,包含总记录数、缺失率、异常率、去重条数、时间对齐偏差等指标。若质量校验不通过(如完整率低于 95%),流水线应中止并输出告警,而不是把低质量数据送入下游。

工程提示:Anritsu 仪表导出的 CSV 中,时间戳格式可能因固件版本不同而存在差异(如 "2024-03-15 10:23:45.123" 与 "15/03/2024 10:23:45")。建议在流水线入口统一用 dateutil 解析,并记录解析失败的行号,便于回溯。

三、质量校验与结果判读

清洗完成后,需要一套可量化的验收标准。以下是一份可直接使用的质量检查表,字段与 Anritsu 测试数据场景对应:

检查项 计算方式 通过标准 不通过时的处理
完整率 有效记录数 / 总记录数 ≥ 95% 检查缺失原因,补充采集或调整插值策略
异常率 异常点数量 / 有效记录数 < 2% 排查干扰源或仪表量程设置
时间对齐偏差 各仪表时间戳与 GPS 基准的差值 ≤ 50 ms 重新校准仪表时钟或增大栅格
重复率 去重条数 / 总记录数 < 1% 检查采集软件写入逻辑
单位一致性 各参数量纲是否统一 全部统一 修正单位换算配置

以一次实际路测数据为例(示例数据,非实测):原始记录 12,000 条,缺失 480 条(4%),异常 156 条(1.3%),重复 72 条(0.6%),时间对齐偏差最大 38 ms。清洗后有效记录 11,520 条,完整率 96%,异常率 0.8%,全部指标通过。此时数据集可直接用于覆盖分析、切换成功率统计等下游任务。

注意:不要为了追求"完整率 100%"而过度插值。在弱覆盖或隧道场景中,强行填充会掩盖真实网络问题,导致分析结论失真。清洗的目标是"真实、可用",而非"好看"。

四、流水线复用与版本管理

可复用意味着同一套流水线能处理不同项目、不同仪表、不同参数集的数据。实现要点有三:一是配置与代码分离,参数通过 YAML 注入,不硬编码;二是处理步骤可插拔,新增参数只需在配置中增加边界与单位映射;三是每次运行输出清洗日志与质量报告,记录输入文件、配置版本、输出路径、各步骤处理条数,便于追溯与复现。建议将流水线封装为命令行工具,例如 python clean_pipeline.py --config config.yaml --input raw.csv --output clean.csv,并纳入版本控制,确保不同批次数据使用同一清洗标准。

当流水线稳定运行后,可进一步将质量报告接入监控看板,对完整率、异常率设置阈值告警。这样,数据清洗不再是"一次性脚本",而是可观测、可迭代的工程能力,为后续 Anritsu 测试数据分析提供可靠的数据底座。