3、数据采集与预处理基础

大家好,我是老张,在风电这行摸爬滚打了十几年。今天咱们聊聊数据采集和预处理。说实话,很多运维兄弟觉得这活儿就是“跑脚本、填表格”,没啥技术含量。但我告诉你,数据预处理做不好,后面AI模型再牛也是白搭。我见过太多项目,模型训练出来效果差,最后查来查去,发现是原始数据里一堆脏数据。

说白了,数据预处理就是给AI模型“喂饭”。饭要是馊的,AI肯定拉肚子。咱们一步步来。

3.1 数据采集方式:SCADA、振动、油液、温度

风电场的核心数据源,我归纳为四大类。每一类采集方式都不一样,坑也不一样。

3.1.1 SCADA系统数据

SCADA是风机的“黑匣子”。它记录着风速、功率、转速、桨距角、发电机温度、电网参数等等。采集频率通常是秒级或分钟级。

  • 采集方式:通过OPC UA、Modbus TCP等工业协议,从风机主控PLC读取。
  • 数据特点:结构化、时间序列、量大。但经常有缺失和异常。
  • 我的经验:有一次,某风场SCADA数据里风速一直显示0,但功率却有500kW。我一看就知道是风速仪冻住了。这种数据如果不处理,模型会以为“无风也能发电”,后果很严重。
小技巧:SCADA数据采集时,建议同时记录“质量戳”(Quality Flag)。很多PLC会标记数据是否有效,这个字段千万别丢了。

3.1.2 振动数据

振动数据是判断齿轮箱、轴承、发电机健康状态的关键。采集频率很高,通常在kHz级别。

  • 采集方式:加速度传感器(ICP/IEPE类型)安装在轴承座、齿轮箱壳体上。通过数据采集卡(DAQ)或专用CMS系统采集。
  • 数据特点:非结构化、高频、数据量大。一个传感器1小时就能产生几百MB数据。
  • 避坑指南:我曾经遇到一个项目,振动传感器安装位置不对,导致采集到的信号全是机舱共振,根本不是齿轮箱的真实振动。后来重新打孔安装才解决。所以,传感器安装位置一定要按厂家规范来。

3.1.3 油液数据

油液分析是“血液检测”。通过检测油液中的金属颗粒、水分、粘度等指标,判断齿轮箱磨损程度。

  • 采集方式:离线取样送检(传统方式),或者在线油液传感器(实时监测)。
  • 数据特点:数据量小,但维度多。常见指标有:铁磁颗粒数、非铁磁颗粒数、水分含量、酸值、粘度等。
  • 我的建议:离线取样一定要规范。我见过有人用矿泉水瓶装油样,结果瓶子里有残留水,导致检测结果严重偏差。一定要用专用取样瓶。

3.1.4 温度数据

温度数据看似简单,但能反映很多问题。比如齿轮箱油温异常升高,可能是散热器堵塞或轴承磨损。

  • 采集方式:PT100热电阻或热电偶,安装在齿轮箱、发电机、主轴、环境等位置。通过PLC或独立采集模块读取。
  • 数据特点:变化缓慢,但容易受环境温度影响。需要做环境补偿。
  • 注意:温度传感器容易漂移。我遇到过一台风机,齿轮箱油温一直比同型号其他风机高5度,换了传感器后恢复正常。所以,定期校准传感器很重要。

3.2 数据预处理方法

数据采集回来,不能直接用。预处理是让数据“干净”起来。我常用的方法就三个:缺失值处理、异常值检测、数据归一化。

3.2.1 缺失值处理

SCADA数据里,缺失值很常见。原因可能是通信中断、传感器故障、PLC死机等。

处理方法

  • 删除法:如果缺失比例很小(比如<1%),直接删除该行数据。简单粗暴,但有效。
  • 填充法:用均值、中位数、前向填充(用上一个有效值填充)或插值法(线性插值、样条插值)。
  • 模型预测法:用其他相关变量预测缺失值。比如用风速和功率的关系,预测缺失的功率值。
我的经验:对于SCADA数据,我习惯用“前向填充+线性插值”组合。如果缺失时间短(<5分钟),用前向填充;如果缺失时间长,用线性插值。但要注意,如果缺失时间超过1小时,建议直接标记为“无效”,不要强行填充。

3.2.2 异常值检测

异常值就是“离群点”。比如风速突然跳到100m/s,或者功率突然变成负值。这些数据必须剔除。

常用方法

  • 3σ原则:假设数据服从正态分布,超过均值±3倍标准差的数据视为异常。
  • 箱线图法:用四分位数(Q1和Q3)计算IQR,超出Q1-1.5IQR或Q3+1.5IQR的数据视为异常。
  • 领域知识法:比如风速不可能超过切出风速(通常25m/s),功率不可能超过额定功率的1.2倍。这些硬性阈值最可靠。
警告:不要盲目用3σ原则!风电数据很多不服从正态分布(比如风速是威布尔分布)。我建议先用箱线图法做初步筛选,再用领域知识做二次确认。

3.2.3 数据归一化

归一化就是把不同量纲的数据缩放到同一范围。比如风速是0-25m/s,温度是-20-60℃,如果不归一化,AI模型会认为温度变化不重要。

常用方法

  • Min-Max归一化:将数据缩放到[0,1]区间。公式:x' = (x - min) / (max - min)。
  • Z-score标准化:将数据转换为均值为0、标准差为1的分布。公式:x' = (x - μ) / σ。
  • Robust标准化:用中位数和IQR代替均值和标准差,对异常值更鲁棒。

代码示例(Python)

from sklearn.preprocessing import MinMaxScaler, StandardScaler
import pandas as pd

# 假设df是包含风速、温度、功率的DataFrame
scaler = MinMaxScaler()
df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

# 或者用Z-score
scaler = StandardScaler()
df_standardized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
我的习惯:对于深度学习模型(如LSTM),我常用Min-Max归一化。对于传统机器学习模型(如随机森林),Z-score更常用。但记住,归一化参数(min、max、μ、σ)一定要用训练集计算,然后应用到测试集,避免数据泄露。

3.3 知识体系总览

下面这张图,是我自己画的。它把数据采集和预处理的整个流程串起来了。你一看就明白。

数据采集与预处理知识体系 SCADA数据 振动数据 油液数据 温度数据 数据预处理 缺失值处理 异常值检测 数据归一化 删除法 填充法(均值/插值) 模型预测法 3σ原则 箱线图法 领域知识法 Min-Max归一化 Z-score标准化 Robust标准化

嗯,这张图把整个流程讲清楚了。从四种数据源,到预处理三大方法,再到具体实现。你写代码的时候,就照着这个框架来。

最后说一句,数据预处理没有“万能公式”。不同风场、不同机型、不同传感器,坑都不一样。多积累经验,多看看数据分布,慢慢就有感觉了。

专注资料整理