4. 环境数据获取与预处理基础
环境数据可视化仪表盘的可信度,几乎完全取决于进入图表之前的那一段“脏活”:数据从哪里来、怎么清洗、如何对齐到同一时空基准。很多仪表盘上线后出现“浓度曲线突然飙升”“同一站点两套数据对不上”“月度总量比日数据累加还小”等问题,根源往往不在前端图表,而在数据获取与预处理环节。本节围绕三条主线展开:数据采集接口、数据清洗、时空对齐与聚合,目标是让读者理解如何把原始环境数据加工成可直接用于可视化的高质量数据集。
一、数据采集接口:API、文件与数据库
环境数据常见的来源有三类,它们的接入方式和质量控制重点各不相同。
API 接口适合获取实时或准实时数据,例如空气质量监测平台的逐小时污染物浓度、气象站的分钟级观测。典型做法是按时间窗口分页拉取,并处理限流与重试。以某空气质量开放接口为例,请求通常需要指定站点编码、污染物因子和时间范围:
GET /api/v1/air/station?station_id=1101A&pollutant=pm25
&start=2024-03-01T00:00:00&end=2024-03-02T00:00:00
&page=1&page_size=500
Header: Authorization: Bearer <token>
接入时要记录三个关键信息:时间戳的时区与含义(是观测时刻还是入库时刻)、缺失值的编码方式(空字符串、null、-999 还是 -1)、单位(μg/m³ 还是 mg/m³)。这三项若不在采集层统一登记,后续清洗会反复返工。
文件常见于历史数据交付、第三方监测报告和离线补数,格式多为 CSV、Excel 或 NetCDF。文件接入的核心问题是“结构不稳定”:列名可能带中文、单位混在表头里(如“PM2.5(μg/m³)”),日期格式可能是 2024/3/1 或 20240301。建议在读取后立即做一次“列名标准化映射”,把原始列名映射到统一字段名,例如 pm25、pm10、obs_time、station_id。
数据库适合已沉淀的历史数据,通常通过 SQL 按站点、因子、时间范围抽取。数据库接入的优势是可以在查询阶段完成初步过滤和聚合,减少传输量;但要注意数据库中的时间字段类型(timestamp 是否带时区)、站点编码是否与外部接口一致,以及是否存在重复写入。
二、数据清洗:缺失值、异常值与单位统一
清洗不是“把空值删掉”这么简单,而是要有明确的判断规则。下面按三类问题分别说明。
缺失值要先区分“真缺失”和“无效值”。传感器故障、通信中断造成的缺失,与低于检出限被记为 -999 的情况,处理方式不同。对于短时缺失(如连续 1~2 小时),可用线性插值或前后均值填补;对于长时段缺失(如超过 6 小时),更稳妥的做法是标记为缺失并在可视化中用断线或灰色区间表示,而不是强行填补出虚假的连续曲线。填补比例应作为数据质量指标记录下来,例如某站点某月 PM2.5 填补率为 8%,超过阈值(如 20%)时在仪表盘上给出提示。
异常值的识别要结合物理合理范围与统计方法。物理范围例如 PM2.5 浓度不应为负、相对湿度应在 0~100% 之间;统计方法可用“均值 ± 3 倍标准差”或四分位距(IQR)规则:低于 Q1−1.5×IQR 或高于 Q3+1.5×IQR 的点视为疑似异常。但要注意,污染过程本身就会产生高值,不能一律当作错误删除。合理做法是“标记而非直接删除”:先打上异常标记,再结合相邻站点、相邻时刻判断是真实污染过程还是传感器跳变。例如某站点 PM2.5 在 1 小时内从 35 μg/m³ 跳到 480 μg/m³,而周边站点仅小幅上升,则更可能是仪器故障。
单位统一是容易被忽视却影响巨大的环节。常见换算包括:CO 从 mg/m³ 到 μg/m³ 乘以 1000;气体污染物在质量浓度与体积浓度(ppb、ppm)之间换算需要借助摩尔体积,标准状态下 1 mol 气体约 22.4 L,因此 ppb 与 μg/m³ 的换算系数与污染物摩尔质量有关。例如 NO₂ 摩尔质量约 46 g/mol,在参考状态下 1 ppb ≈ 1.88 μg/m³。所有换算系数应集中配置在一张映射表中,避免散落在代码各处。
三、时空对齐与聚合
不同来源的数据往往“时间对不上、空间对不上”。时间对齐的核心是统一到同一时间基准和同一时间粒度。例如气象数据是逐分钟、空气质量是逐小时,做联合分析时应统一到小时;若原始时间戳是本地时间,要先转换为带时区的标准时间再对齐,避免跨时区或夏令时造成错位。对齐方式常用“就近匹配”(取最近时刻)或“区间聚合”(把一小时内多条记录聚合为一条)。
空间对齐则涉及站点与网格、行政区、流域等空间单元的对应关系。常见做法是建立“站点—区域”映射表,把站点观测聚合到城市或区县;若使用网格数据,则需要空间插值或按网格归属统计。聚合时要明确聚合函数:浓度类指标通常用算术平均,降水量用求和,超标天数用计数。聚合粒度变化会改变结论,例如日均值超标与小时均值超标的判定结果可能不同,因此仪表盘上必须标注聚合口径。
上图把整条链路串起来:采集层负责“拿到并登记”,原始层负责“留底”,清洗层负责“修正与标记”,对齐聚合层负责“统一口径”,最终输出一份字段、单位、时空基准都一致的数据集,并把缺失率、异常标记、聚合口径等质量指标随数据一起交付。仪表盘上的每个图表都应能回答“这份数据经过哪些处理”,否则再漂亮的图也难以支撑决策。
把上述流程固化为可重复执行的脚本或任务,是保证仪表盘长期可用的关键。一个实用的检查顺序是:先确认时间字段的时区与格式,再核对单位与缺失编码,然后执行缺失与异常处理,最后做时空对齐与聚合,并在每一步输出行数、缺失率、异常数等统计量。只要这些统计量在合理范围内,进入可视化的数据就具备了基本的可信度。