4、数据工程与预处理:农业数据清洗、缺失值处理、时间序列对齐、特征工程与数据标注实战
农业数据是典型的“脏数据”集合体。无论是大田物联网采集的土壤墒情、气象站记录的温湿度、无人机多光谱影像反演的植被指数,还是养殖场内的环境控制日志与饲喂记录,其原始形态往往存在传感器漂移、通信中断导致的数据空洞、不同设备时钟不同步、单位不统一、异常跳变等问题。若直接将此类数据送入AI模型,轻则降低预测精度,重则导致模型完全失效。本章将围绕农业数据从“原始采集”到“模型可用”的完整链路,系统讲解数据清洗、缺失值处理、时间序列对齐、特征工程与数据标注的实战方法。
上图展示了农业数据预处理的核心链路。从多源数据采集开始,经过清洗、缺失值处理、时间对齐、特征工程与标注,最终形成可用于模型训练的高质量数据集。下面我们将逐一深入每个环节的实战要点。
4.1 农业数据清洗:核心原理与判断方法
核心原理:农业数据清洗的目标是识别并修正数据中的错误、不一致与冗余。与通用数据清洗不同,农业数据具有鲜明的领域特征:土壤传感器可能因电极老化产生缓慢漂移;气象站风速仪在结冰时会输出恒定零值;CO₂传感器在维护期间可能跳变到满量程。这些都需要结合物理规律与农学知识进行判断。
判断方法:清洗前需建立“三查”机制:查范围(是否超出物理可能值域)、查突变(相邻采样点变化率是否超过作物生理极限)、查一致性(同一田块相邻传感器读数是否合理)。例如,土壤湿度在1小时内跳变超过15%基本可判定为异常,而气温在10分钟内变化超过8℃也需重点核查。
| 异常类型 | 典型场景 | 检测方法 | 处理策略 |
|---|---|---|---|
| 物理越界 | 湿度>100%或<0% | 阈值判断 | 剔除或置为缺失 |
| 突变跳变 | 温度1分钟变化>5℃ | 差分+滑动窗口 | 中值滤波或插值替换 |
| 传感器漂移 | pH值长期缓慢偏移 | 与标准液比对 | 线性校正或重新校准 |
| 重复记录 | 通信重发导致重复 | 时间戳+值双重比对 | 保留首条或末条 |
4.2 缺失值处理:从简单插值到多重填补
农业数据缺失是常态,通信中断、设备维护、电池耗尽都会造成数据空洞。缺失值处理的核心在于评估缺失机制:完全随机缺失(MCAR)、随机缺失(MAR)或非随机缺失(MNAR)。例如,土壤水分传感器在土壤结冰时常失效,这属于非随机缺失,简单插值会引入偏差。
操作流程:
- 缺失模式分析:统计各传感器缺失率、缺失时段分布,判断是否与农事操作或天气事件相关。
- 选择填补策略:对于短时间缺失(<30分钟),线性插值或前向填充即可;对于数小时缺失,推荐使用时间加权插值或基于相似日期的KNN填补;对于关键变量(如授粉期温度)的长时间缺失,建议使用多重填补法(MICE)并引入辅助变量。
- 验证填补效果:随机抽取完整时段,人为制造缺失,比较填补值与真实值的误差。
# 基于Pandas的时间加权插值示例
import pandas as pd
import numpy as np
# 假设df为5分钟采样的温湿度数据
df['temp_interp'] = df['temperature'].interpolate(method='time', limit_direction='both')
# 对于超过2小时的缺失,使用前向填充+后向填充的平均
df['temp_filled'] = df['temperature'].fillna(method='ffill', limit=24).fillna(method='bfill', limit=24)
4.3 时间序列对齐:多源异构数据的融合基础
农业AI系统往往融合多个时间粒度的数据:气象站每小时上报、土壤传感器每15分钟采集、无人机影像每周拍摄、人工巡检记录每天一次。时间对齐的目标是将这些异构数据统一到同一时间基准上,同时保留各源数据的特征。
对齐策略:
- 降采样对齐:以最粗时间粒度为准,将高频数据聚合(均值、最大值、累积量)。适用于长期趋势分析。
- 升采样对齐:以最细粒度为准,对低频数据插值。适用于需要精细时间特征的场景(如病害预警)。
- 事件驱动对齐:以农事事件(灌溉、施肥、喷药)为锚点,对齐前后时间段的数据。适用于农事效果评估。
对齐过程中需特别注意时区问题。跨区域农场应统一使用UTC存储,展示时再转换本地时间。此外,设备时钟漂移是常见问题,建议每日通过NTP同步,并在对齐时记录时钟偏移量。
| 数据源 | 原始粒度 | 对齐目标 | 聚合方法 |
|---|---|---|---|
| 自动气象站 | 10分钟 | 1小时 | 均值+极值 |
| 土壤墒情仪 | 15分钟 | 1小时 | 均值 |
| 无人机多光谱 | 每周1次 | 1天 | 前向填充+生长模型修正 |
| 人工巡检 | 每天1次 | 1小时 | 分段常数填充 |
4.4 特征工程:从原始数据到AI可用的知识表达
特征工程是农业AI落地的关键环节。好的特征能显著提升模型性能,甚至比复杂模型更重要。农业特征工程需结合作物生长规律、动物行为学与设施环境控制逻辑。
特征体系构建:
- 统计特征:滑动窗口内的均值、标准差、变异系数、偏度、峰度。例如,温室内温度变异系数可反映通风系统工作状态。
- 时序特征:滞后值(lag1、lag2)、差分(一阶差分反映变化速率)、累积生长度日(GDD)、累积光照辐射。
- 频域特征:对振动信号(如风机轴承)做FFT提取主频幅值,对声音信号(如猪咳嗽声)提取梅尔频率倒谱系数(MFCC)。
- 交互特征:温湿度联合计算饱和水汽压差(VPD),这是设施农业中控制病害的关键指标。
# 特征工程示例:计算VPD与生长度日
def calc_vpd(temp, rh):
es = 0.6108 * np.exp(17.27 * temp / (temp + 237.3))
ea = rh / 100 * es
return es - ea
def calc_gdd(temp_max, temp_min, base_temp=10):
avg_temp = (temp_max + temp_min) / 2
return max(0, avg_temp - base_temp)
4.5 数据标注:半自动策略与质量控制
农业数据标注面临两大挑战:专业标注人员稀缺、标注标准难以统一。例如,判断一张叶片图像是否“染病”,不同农艺师可能有不同标准。因此,标注环节需要设计“人机协同”的流程。
标注类型与策略:
- 分类标注:用于病害识别、生长阶段判断。建议采用“初标+专家复核”模式,初标可由经过培训的农业技术员完成,专家抽检比例不低于20%。
- 回归标注:用于产量预测、体重估计。需明确标注单位与精度,如猪只体重标注精确到0.5kg。
- 目标检测标注:用于果实计数、动物个体识别。使用半自动工具(如CVAT)预标注,人工修正边界框。
标注质量控制流程:
- 制定详细的标注规范文档,包含正负样本示例与边界案例说明。
- 进行标注一致性测试:选取10%的样本由两人独立标注,计算Cohen's Kappa系数,要求>0.8。
- 建立标注反馈闭环:定期将模型预测结果与人工标注对比,发现系统性偏差并及时修正规范。
4.6 案例拆解:某智慧猪场环境监测数据预处理实战
背景与约束:某规模化猪场部署了环境监测系统,采集猪舍内温度、湿度、氨气浓度、CO₂浓度,采样间隔5分钟。目标是为“猪只热应激预警模型”提供高质量训练数据。现场存在三个问题:一是部分传感器因猪只拱动导致数据跳变;二是每天凌晨2:00-2:10设备自检导致数据缺失;三是氨气传感器每周校准一次,校准前后数据存在偏移。
初始现象与目标:原始数据共180天,约5万条记录。初步统计发现:温度数据有0.8%的越界值(>45℃或<-10℃),氨气浓度有12%的缺失(集中在自检时段),且校准日前后氨气均值差异达8ppm。
处理过程:
- 清洗阶段:对温度采用“物理阈值+变化率”双重过滤,将1分钟内变化>5℃的记录标记为异常,使用前后各3个点的中值替换。对氨气数据,先识别校准日(通过运维日志),将校准前2小时数据整体平移至校准后基准。
- 缺失值处理:针对凌晨自检缺失,采用“周期插值法”——取前7天同一时刻的均值填补。对于其他零星缺失,使用时间加权线性插值。
- 时间对齐:将5分钟数据重采样为15分钟,温度、湿度取均值,氨气、CO₂取最大值(因为峰值对猪只影响更大)。同时对齐猪只饲喂记录(每日3次),构造“饲喂后2小时”的时间窗口特征。
- 特征工程:构建了温湿度联合的温湿指数(THI)、氨气累积暴露量(过去6小时加权和)、昼夜温差、通风效率指数(CO₂与温度变化率之比)等12个特征。
- 标注:由兽医根据猪只呼吸频率、采食量下降等行为指标,将每15分钟的环境数据标注为“正常”或“热应激风险”。共标注约1.7万条,专家抽检Kappa系数为0.85。
结果对比:使用处理后的数据训练XGBoost模型,热应激预警的F1分数从0.62提升至0.87。特别是加入“氨气累积暴露量”特征后,模型对亚健康状态的识别率提升了22%。
风险与代价:整个预处理过程耗时约2周,其中标注环节占60%工作量。由于采用了半自动标注(先由规则引擎预标,再人工修正),标注效率提升了3倍。但需注意,规则引擎的预标结果需定期复核,防止错误累积。
复盘经验:农业数据预处理没有“万能模板”,必须深入理解传感器原理、动物生理与环境控制逻辑。建议建立“数据预处理日志”,记录每次清洗、填补的规则与参数,确保可追溯、可复现。同时,预处理流程应模块化封装,便于在多个农场快速复用。