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,或者功率为负值。这些数据必须剔除。

我常用的方法有两种:

  1. 3σ原则:计算数据的均值和标准差,超出均值±3倍标准差的数据视为异常。这个方法适合正态分布的数据。
  2. 箱线图法:用四分位数判断。超出上四分位数+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 知识体系总览

下面这张图,把数据采集与预处理的整个流程串起来了。你可以把它当作一个“检查清单”,做项目时对照着来。

数据采集与预处理流程 SCADA系统 传感器数据采集 测风塔数据 数据清洗 缺失值处理 异常值处理 重复值去重 数据标准化

这张图展示了从数据源头到最终标准化数据的完整链路。每一步都环环相扣,缺一不可。我建议你在实际项目中,也画一张类似的流程图,贴在工位上。每次处理数据前看一眼,能避免很多低级错误。


公众号:蓝海资料掘金营,微信deep3321