3、数据采集与预处理:SCADA系统介绍、传感器数据采集、数据清洗、数据标准化
各位工程师朋友,咱们今天聊聊数据的事。你想想看,一个风场几十台风机,每台风机每秒都在产生数据。这些数据就是风场的“血液”。没有干净的数据,再牛的AI模型也是白搭。我见过太多项目,模型算法选得挺好,结果数据一塌糊涂,最后发电量预测偏差大得离谱。所以,数据采集与预处理,是智能决策系统的地基。
3.1 SCADA系统:风场的“神经中枢”
SCADA,全称是监控与数据采集系统。说白了,它就是风场的“大脑”和“神经”。
我个人习惯把SCADA系统比作一个24小时不睡觉的“值班员”。它干三件事:
- 采集数据:从每台风机、测风塔、升压站收集信号。
- 监控状态:实时显示风机是运行、停机还是故障。
- 控制指令:远程启停风机、调整桨距角、偏航对风。
我在项目中遇到过一件事。有个风场SCADA系统报警延迟了30秒。就这30秒,一台风机因为振动超标没及时停机,齿轮箱直接报废。所以,SCADA系统的实时性和可靠性,怎么强调都不过分。
核心要点:SCADA系统采集的数据,通常以10分钟为间隔存储。这个10分钟平均值,是后续所有分析的“原材料”。
3.2 传感器数据采集:从物理量到数字信号
传感器是SCADA系统的“眼睛”和“耳朵”。风机上常见的传感器有这些:
| 传感器类型 | 测量参数 | 安装位置 |
|---|---|---|
| 风速仪 | 风速、风向 | 机舱顶部、测风塔 |
| 转速传感器 | 叶轮转速、发电机转速 | 主轴、发电机轴 |
| 振动传感器 | 轴承振动、塔筒振动 | 齿轮箱、发电机、塔筒 |
| 温度传感器 | 齿轮箱油温、发电机绕组温度 | 齿轮箱、发电机内部 |
| 功率传感器 | 有功功率、无功功率 | 变流器、并网点 |
嗯,这里要注意。传感器采集的原始信号是模拟量(比如4-20mA电流信号),需要经过模数转换变成数字量。转换过程中会有量化误差,这个误差虽然小,但在做高精度分析时不能忽略。
我的经验:风速仪最容易出问题。冰雹、结冰、鸟类撞击都可能导致数据异常。我建议在测风塔上安装两套风速仪做冗余,交叉验证数据可靠性。
3.3 数据清洗:剔除“脏数据”
数据清洗,说白了就是“去伪存真”。SCADA系统采集的数据,脏得很。我见过最夸张的一个风场,10%的数据都是无效的。如果不处理,模型训练出来就是“垃圾进,垃圾出”。
3.3.1 缺失值处理
为什么会缺失?通信中断、传感器故障、存储异常,原因很多。处理方式有三种:
- 直接删除:如果缺失比例小于5%,且是随机缺失,直接删掉这行数据。简单粗暴,但有效。
- 插值填充:用前后时刻的平均值填充。比如10分钟数据缺失,用前10分钟和后10分钟的平均值补上。
- 模型预测:用其他相关参数(比如风速、桨距角)建立回归模型,预测缺失值。这个方法精度高,但计算量大。
避坑指南:我曾经连续缺失超过2小时的数据用插值填充,结果模型训练出来偏差很大。后来发现,连续缺失超过1小时的数据,直接删除更安全。因为这段时间内风况可能已经发生剧烈变化,插值出来的数据是“假数据”。
3.3.2 异常值处理
异常值,就是那些明显不合理的数据。比如风速显示100m/s,或者功率为负值。这些数据必须剔除。
我常用的方法有两种:
- 3σ原则:计算数据的均值和标准差,超出均值±3倍标准差的数据视为异常。这个方法适合正态分布的数据。
- 箱线图法:用四分位数判断。超出上四分位数+1.5倍四分位距,或下四分位数-1.5倍四分位距的数据,视为异常。这个方法对非正态分布数据更鲁棒。
举个例子,风速数据清洗的代码逻辑:
import pandas as pd
import numpy as np
# 假设df是包含风速数据的DataFrame
def clean_wind_speed(df, col='wind_speed'):
# 3σ方法
mean = df[col].mean()
std = df[col].std()
df_clean = df[(df[col] >= mean - 3*std) & (df[col] <= mean + 3*std)]
# 同时剔除物理上不可能的值(风速不可能超过50m/s)
df_clean = df_clean[df_clean[col] <= 50]
return df_clean
小技巧:异常值不一定是“坏数据”。有时候,异常值恰恰是故障的前兆。比如振动值突然飙升,可能是轴承即将损坏的信号。所以,清洗异常值之前,先问问自己:这个异常是传感器误报,还是真实物理现象?
3.4 数据标准化:让不同量纲的数据“对话”
数据标准化,就是把不同量纲的数据映射到同一个尺度。你想想看,风速是0-30m/s,功率是0-2000kW,温度是-20-80℃。如果不标准化,模型会天然认为数值大的特征更重要,这显然是错的。
常用的标准化方法:
| 方法 | 公式 | 适用场景 |
|---|---|---|
| Z-score标准化 | x' = (x - μ) / σ | 数据近似正态分布,无严格边界 |
| Min-Max归一化 | x' = (x - min) / (max - min) | 数据有明确边界,如功率、温度 |
| Robust标准化 | x' = (x - median) / IQR | 数据存在较多异常值 |
我个人习惯用Z-score标准化。因为它不受异常值影响太大,而且标准化后的数据均值为0,方差为1,很多机器学习算法都喜欢这个特性。
重要提醒:标准化参数(均值、标准差、最小值、最大值)必须在训练集上计算,然后应用到测试集和验证集。千万不能在整个数据集上统一计算,否则会造成数据泄露,模型评估结果会虚高。
3.5 知识体系总览
下面这张图,把数据采集与预处理的整个流程串起来了。你可以把它当作一个“检查清单”,做项目时对照着来。
这张图展示了从数据源头到最终标准化数据的完整链路。每一步都环环相扣,缺一不可。我建议你在实际项目中,也画一张类似的流程图,贴在工位上。每次处理数据前看一眼,能避免很多低级错误。
公众号:蓝海资料掘金营,微信deep3321