4. 路测数据预处理与质量控制
路测采集回来的原始数据,几乎不可能直接用于覆盖分析。测试终端、扫频仪和信令采集设备各自按自己的时钟和格式记录数据,途中可能出现GPS失锁、终端掉线、软件重启、重复导出等情况。如果跳过预处理直接出图,很容易把“数据问题”误判成“网络问题”——例如某段道路RSRP突然恶化,实际只是GPS漂移把采样点甩到了建筑物另一侧。本节围绕数据清洗、时间同步与坐标纠偏、多源数据融合对齐、质量评估指标和工具链实践五个方面展开,目标是让进入分析环节的数据“干净、对齐、可追溯”。
一、数据清洗:缺失、异常与重复
路测数据常见的脏数据类型及处理策略如下:
- 缺失值:GPS未定位时经纬度为0或空、终端未注册时无服务小区信息、扫频仪个别频点无采样。对位置缺失的记录,若前后采样点时间间隔短且速度合理,可按时间线性插值补点;若缺失持续时间超过阈值(例如10秒),应标记为无效段而不是强行插值,避免制造虚假轨迹。
- 异常值:RSRP出现-200 dBm、SINR为-99 dB、速度超过200 km/h等明显越界值,通常来自解析错误或设备异常。处理时先按物理量程做硬阈值过滤(如LTE RSRP合理范围约-140~-44 dBm),再用滑动窗口中位数或3σ准则识别跳变点。
- 重复记录:同一时间戳、同一坐标出现多条完全相同或近似记录,多由重复导出、日志合并造成。可按“时间戳+经纬度+主服务小区PCI”组合键去重,保留首条或采样质量最高的一条。
clean_flag 字段记录每条记录的清洗状态(正常/插值/剔除/可疑),保留原始值副本,便于回溯和复核。二、时间同步与坐标纠偏
多源数据融合的前提是统一时间基准。测试终端、扫频仪、信令平台的时间戳可能分别来自设备本地时钟、GPS时间和服务器时间,彼此存在秒级甚至分钟级偏差。实践中以GPS时间为基准,将各源时间戳统一转换为UTC毫秒时间戳;对无GPS时间的设备,利用同一路段已知事件(如切换点、主服务小区变更)做特征对齐,估算固定时延并整体平移。
坐标纠偏主要处理两类问题:一是坐标系不一致,GPS原始输出多为WGS-84,而地图底图常为GCJ-02或BD-09,需按对应算法转换后再叠加;二是GPS漂移,表现为轨迹点偏离道路、速度突变。可用“速度合理性检验+地图匹配”组合处理:先剔除速度超过阈值的跳点,再将剩余点投影到最近道路中心线,偏移超过30米的点标记为可疑。
三、多源数据融合对齐
测试终端数据(含RSRP、SINR、PCI)、扫频数据(含各频点电平、邻区扫描)和信令数据(含切换、接入事件)采样周期不同,需要按时间窗对齐。常用做法是以终端数据为主表,设定对齐窗口(如1秒),将扫频和信令记录按最近时间戳挂接到主表记录上;窗口内无匹配则置空并标记。对齐后应检查关键字段的时序一致性,例如切换信令事件应出现在主服务PCI变更的邻近时间窗内。
四、数据质量评估指标
预处理完成后需要给出可量化的质量结论,通常从三个维度评估:
| 维度 | 核心指标 | 示例判据 |
|---|---|---|
| 完整性 | 有效采样点占比、最长缺失段时长 | 有效点≥95%,单段缺失≤10秒 |
| 准确性 | 量程越界率、GPS偏移超限率、插值点占比 | 越界率≤0.5%,偏移超限率≤2% |
| 一致性 | 多源时间吻合度、PCI变更与切换事件匹配率 | 匹配率≥90% |
这些指标应随预处理报告一并输出,作为后续覆盖分析结论可信度的前置说明。若某路段完整性或一致性不达标,该路段的覆盖统计结果应标注“低置信度”,避免被直接引用。
五、预处理脚本与工具链实践
实际工程中通常用Python脚本串联整个流程,核心依赖 pandas 做表格处理、pyproj 做坐标转换、shapely 做地图匹配。下面是一段可参考的清洗与对齐骨架(示例参数,需按实际数据调整):
import pandas as pd
# 1. 读取三源数据,统一时间戳为UTC毫秒
ue = pd.read_csv("ue_log.csv", parse_dates=["ts"])
ue["ts_ms"] = ue["ts"].astype("int64") // 10**6
# 2. 异常值过滤:RSRP量程 + 速度合理性
ue = ue[(ue.rsrp.between(-140, -44)) & (ue.speed_kmh < 200)]
# 3. 重复记录去重
ue = ue.drop_duplicates(subset=["ts_ms", "lon", "lat", "pci"], keep="first")
# 4. 按1秒窗口融合扫频数据
scan = pd.read_csv("scan_log.csv")
scan["ts_ms"] = scan["ts"].astype("int64") // 10**6
merged = pd.merge_asof(ue.sort_values("ts_ms"),
scan.sort_values("ts_ms"),
on="ts_ms", tolerance=1000, direction="nearest")
# 5. 输出质量指标
valid_ratio = len(merged) / len(ue)
print(f"有效采样点占比: {valid_ratio:.2%}")
工具链层面,建议把清洗规则写成配置文件(阈值、窗口大小、坐标系参数),脚本读取配置执行,保证不同批次数据用同一套标准处理,结果可复现。处理完成后输出三份产物:清洗后的主表、清洗标记明细表、质量评估报告。只有质量报告通过判据的数据集,才进入后续覆盖分析与优化决策环节。