4. 数据加载与初步探索性分析
水下定位数据在进入清洗流程之前,必须先被正确读入并形成可观察的整体印象。这一步看似只是“打开文件”,实际上决定了后续所有判断的可信度:时间戳解析错位、坐标系字段被当成普通数值、二进制日志的帧头偏移一位,都会让异常检测建立在错误的前提上。本节围绕三类常见数据源(CSV、JSON、二进制日志)的加载要点,以及时间序列可视化、统计摘要、异常初步识别和缺失模式分析四个观察维度展开,目标是让读者拿到一批原始数据后,能快速形成“这批数据长什么样、哪里可能有问题”的初步结论。
一、三类格式的加载要点
水下定位系统常见的输出格式各有陷阱。CSV 通常由声学定位设备或后处理软件导出,字段包括时间戳、目标编号、经度、纬度、深度、斜距、声速、定位质量因子等。加载时最关键的是时间戳解析:必须显式指定格式与时区,避免被自动推断成本地时间。例如使用 Python 的 pandas 读取时:
import pandas as pd
df = pd.read_csv("usbl_track_20240612.csv",
parse_dates=["utc_time"],
date_format="%Y-%m-%dT%H:%M:%S.%f",
dtype={"target_id": "category",
"quality_flag": "int8"})
df = df.sort_values("utc_time").reset_index(drop=True)
这里把 target_id 设为分类类型、quality_flag 设为小整数,既节省内存,也避免后续误把编号当连续量做统计。排序不可省略,因为很多设备按写入顺序而非时间顺序落盘,乱序会直接破坏时间序列图的连续性。
JSON 格式多见于设备配置回传或带嵌套结构的定位报文,一条记录可能包含 position、attitude、acoustic 等多个子对象。加载时先用 json.load 读入,再用 pd.json_normalize 展平嵌套字段,把 position.lat、acoustic.slant_range 变成独立列。需要特别检查数组型字段(如多阵元到达时刻)是否被压成字符串,若是则需在展平后单独解析。
二进制日志(如设备私有帧格式)不能直接读成文本。典型做法是按固定帧长切分,先校验帧头魔数与长度字段,再按结构体解包。示例帧头为 0xAA55,帧长 64 字节,前 8 字节为时间戳(微秒),随后是目标号、经纬度(各 4 字节浮点)、深度与质量位。解包时务必记录“解析失败帧数”和“帧头偏移位置”,这两个数字本身就是重要的数据质量信号——若失败帧占比超过 1%,往往意味着采样率切换或文件截断。
二、时间序列可视化:先看整体节奏
加载完成后,第一张图应当是时间戳与关键量的散点或折线图。对水下定位而言,最有信息量的组合是“时间—斜距”和“时间—定位质量因子”。正常跟踪时斜距应随目标运动平滑变化;若出现阶跃、平台期或密集的零值段,通常对应丢包、声速剖面失配或目标被遮挡。绘图时把质量因子用颜色映射到点上,可以一眼看出低质量点是否成簇出现——成簇的低质量往往指向环境因素(如温跃层、多径),而孤立低质量点更可能是单次测量噪声。
另一个实用技巧是绘制时间间隔序列(相邻记录的时间差)。水下定位常因通信占空比导致采样不均匀,若时间差出现规律性的大间隔,说明存在周期性的数据缺口,后续做插值或重采样时必须按实际间隔处理,而不能假设等间隔。
三、统计摘要与异常初步识别
统计摘要不应只看均值方差。对经纬度这类有强空间相关性的量,均值和标准差意义有限,更应关注分位数、极差和重复值比例。建议对每个数值字段输出计数、缺失数、最小值、1%/5%/50%/95%/99% 分位数和最大值,并单独统计“零值比例”和“重复值比例”。水下定位中,深度字段出现大量零值往往是设备未锁定或字段未填充,而非真实位于水面。
直方图用于看分布形态:斜距若呈明显双峰,可能混入了两个目标或两种工作模式;定位质量因子若集中在少数离散档位,说明它是枚举量而非连续量,后续应做分组统计而非回归。散点图最适合看两两关系,例如“斜距—深度”散点可暴露声速误差导致的系统性弯曲,“经度—纬度”散点则能直观显示轨迹是否出现跳点或镜像点。箱线图适合按目标编号或按时间段分组,比较各组的中位数与离群点密度,快速定位“哪个目标、哪个时段”问题最集中。
四、缺失模式分析
缺失不是简单的“有多少空值”,而是“空在哪些字段、哪些时段、是否成组出现”。建议构造一个字段×时段的缺失矩阵:横轴按小时分箱,纵轴为关键字段(经度、纬度、深度、斜距、质量因子),单元格用颜色表示该时段缺失比例。水下定位中常见的三种模式值得区分:随机缺失(零星单点,多为瞬时干扰)、块状缺失(连续时段整段为空,多为设备重启或通信中断)、字段相关缺失(深度与斜距同时缺失,说明是同一采集链路故障而非独立问题)。
对块状缺失还要进一步看缺口长度分布:若缺口长度集中在某个固定值附近(例如恰好等于一个通信周期),基本可以判定为协议层丢包而非物理遮挡。这一步的结论会直接影响清洗策略——随机缺失可考虑插值,块状缺失更应标记为无效段而非强行填补。
五、形成初判记录
完成上述观察后,应把结论落成一份简短的初判记录,作为后续清洗的依据。记录至少包含:数据总量与时间跨度、解析失败帧数及占比、各字段缺失比例、识别出的异常类型及其对应时段或目标编号、初步判断的成因方向。例如“目标 03 在 14:20–14:35 出现斜距平台期,同期质量因子成簇下降,疑似温跃层导致的多径,暂标记为待复核段”。这份记录不必冗长,但必须把“看到了什么”和“怀疑什么”分开写,避免把推测当成事实带入清洗环节。