3. 监测数据获取与数据字典构建
COD与氨氮的变化趋势分析,前提是拿到一条“可比、可拼接、可追溯”的时间序列。实际工作中,数据往往来自三个互不相同的渠道:在线自动监测设备、人工采样实验室分析、以及历史台账(纸质记录、Excel报表、旧系统导出)。这三类数据在采样频率、单位、精度、时间戳含义上都不一致,如果直接混在一起画趋势线,很容易得出错误结论。本节的任务,就是把“取数”和“定义字段”这两件事做扎实。
三类数据源的获取方式与特点
在线监测数据通常由COD在线分析仪、氨氮在线分析仪按固定周期(常见为每2小时、每4小时或每日)自动测量并上传。获取方式一般是登录平台导出CSV,或通过数采仪/平台接口按时间段拉取。这类数据量大、连续性好,但要注意三个细节:一是时间戳记录的是“采样时刻”还是“分析完成时刻”,两者可能相差几十分钟;二是设备存在校准、维护、试剂更换导致的停机时段,这些时段往往以空值或异常值出现;三是部分平台对超标值做了标记但未在导出文件中保留,需要单独核对。
手工采样数据由人员现场取样后送实验室,按国标方法(如COD重铬酸盐法、氨氮纳氏试剂分光光度法)分析。它的频率低(可能每周一次或每月数次),但准确度高,常作为在线数据的比对基准。获取时要保留采样时间、采样点位、分析方法、检出限和检测结果,尤其是“采样时间”与“分析时间”必须分开记录,否则无法与在线数据对齐。
历史台账是最容易被忽视的部分。早期数据可能是纸质报表或人工录入的Excel,字段名不统一(“COD”“CODcr”“化学需氧量”混用),单位可能是mg/L也可能是ppm,缺失值可能写成“—”“/”“未测”或直接留空。获取这类数据时,第一步不是急着导入,而是先做字段盘点和单位核查。
数据字典:让每个字段都有明确含义
数据字典的本质是一份“字段契约”,它规定每个字段叫什么、代表什么、用什么单位、允许什么取值、缺失时怎么标记。没有这份契约,不同来源的数据合并后就会出现“同一列里既有mg/L又有ppm”“空值既表示停机又表示未采样”的混乱。下面给出一个面向COD与氨氮时间序列的最小可用数据字典示例,字段设计直接对应后续趋势分析与关联分析的需要。
| 字段名 | 含义 | 类型/单位 | 取值与缺失规则 |
|---|---|---|---|
| record_id | 记录唯一标识 | 字符串 | 不可为空,建议“来源缩写+日期+序号” |
| station_id | 监测点位编码 | 字符串 | 不可为空,与点位台账一致 |
| sample_time | 采样时刻(数据归属时间) | 日期时间,精确到分钟 | 不可为空,统一为北京时间 |
| data_source | 数据来源 | 枚举 | ONLINE / MANUAL / LEDGER,不可为空 |
| cod_value | COD测定值 | 数值,mg/L | 缺失记为空并配合flag,不得填0 |
| nh3n_value | 氨氮测定值 | 数值,mg/L | 同上 |
| value_flag | 数据质量标记 | 枚举 | N正常 / M缺失 / C校准维护 / O超标 / S可疑 |
| method | 分析方法 | 字符串 | 在线填仪器方法,手工填国标方法编号 |
| detect_limit | 检出限 | 数值,mg/L | 低于检出限时值记检出限一半并标S |
| remark | 备注 | 字符串 | 记录停机原因、异常说明等 |
这份字典里有两个设计要点值得强调。第一,缺失必须与零值严格区分。COD为0在现实中几乎不可能,若把停机时段的空值填成0,趋势图上会出现虚假的“骤降”,后续相关性计算也会被严重扭曲。因此约定:缺失一律留空,用value_flag=M标识,分析时按缺失处理而非按0参与计算。第二,时间字段只保留一个权威口径。建议统一用sample_time表示“该数据所代表的采样时刻”,在线数据若只有分析完成时刻,需在入库时按设备周期回推或由台账补充说明,避免同一时刻出现两条互相矛盾的数据。
采样频率与时间对齐
在线数据可能是2小时一条,手工数据可能一周一条,两者频率相差两个数量级。做关联分析前必须明确对齐规则:通常将手工数据视为“该时刻的参考真值”,用于校验同一时间窗口内在线数据的偏差;而趋势分析则以在线序列为主,手工点作为校核标记叠加。若需要统一到日尺度,可对在线数据取日均值,但必须同时记录当日有效数据条数,条数过少(如少于应测条数的75%)的日均值应标记为可疑,不参与趋势拟合。
入库前的核查与一个可执行的小例子
把三类数据按字典整理后,建议做一次“入库前核查”,重点看四件事:单位是否全部为mg/L(发现ppm需按密度换算或直接按1:1近似并注明)、时间范围是否连续、缺失比例是否异常、同一时刻是否存在重复记录。举个教学示例(以下数值为假设,仅用于说明处理逻辑):某点位在线COD在3月1日08:00、10:00、12:00分别记录为38、41、空值,value_flag依次为N、N、C(12:00设备校准);同日手工采样10:30测得COD为40 mg/L。处理时,12:00的空值保留为空并标C,不参与日均值计算;10:30手工值作为独立记录入库,data_source=MANUAL。若计算3月1日日均COD,则用08:00与10:00两条有效在线值求平均,并在备注中注明“当日有效在线数据2条,低于应测条数,日均值仅供参考”。这样的处理方式,才能保证后续趋势线不会因校准停机出现虚假波动,也不会因手工点混入而重复计数。
完成上述工作后,得到的就是一张字段含义清晰、单位统一、缺失有标记、来源可追溯的COD与氨氮时间序列表。它是后续趋势分析、相关性计算和异常识别的共同基础,也是本课程所有分析结论能够站得住脚的前提。