第一章:风电数据初探——认识SCADA数据、数据字段解读、数据质量概览
各位工程师朋友,咱们今天聊聊风电数据清洗的第一步——数据初探。说实话,我见过太多人一上来就急着跑模型,结果数据质量一塌糊涂,后面全白干。我个人习惯是,拿到数据先花半天时间“盘一盘”,搞清楚它到底长什么样。
1.1 SCADA数据到底是什么?
SCADA,全称是数据采集与监视控制系统。说白了,就是风机身上装了无数个传感器,每隔几秒或几分钟,把风机的“身体状况”上报一次。我参与过的项目里,数据采集频率通常是10秒一次,也有1秒一次的,但那种数据量太大,存储成本高,一般项目扛不住。
你想想看,一台风机有上百个传感器,从风速、转速到齿轮箱温度,再到桨叶角度,全都在记录。这些数据就是咱们做分析的“原材料”。
核心要点:SCADA数据是时间序列数据,每一行代表一个时间点,每一列代表一个监测变量。数据质量直接决定后续分析的成败。
1.2 数据字段解读——别被字段名吓到
我第一次接触SCADA数据时,看到几十个字段名,头都大了。后来发现,其实可以分成几大类:
| 字段类别 | 典型字段 | 说明 |
|---|---|---|
| 时间戳 | timestamp | 数据采集的时间点,格式通常是YYYY-MM-DD HH:MM:SS |
| 环境参数 | wind_speed, wind_direction, air_density | 风速、风向、空气密度等外部条件 |
| 运行参数 | rotor_speed, generator_speed, blade_pitch | 转速、桨距角等机组运行状态 |
| 温度参数 | gear_bearing_temp, generator_temp, nacelle_temp | 齿轮箱、发电机等关键部件温度 |
| 功率参数 | active_power, reactive_power | 有功功率、无功功率,直接反映发电量 |
| 状态标识 | status_code, alarm_code | 机组运行状态码和报警码 |
嗯,这里要注意:不同风机制造商的字段命名可能不一样。我在项目中遇到过,某品牌风机把风速叫“WS”,另一家叫“WindSpeed”,还有叫“AVG_WIND_SPEED”的。所以拿到数据后,第一件事就是对照数据字典,把字段名统一。
1.3 数据质量概览——先看看数据“脏不脏”
数据质量,说白了就是数据能不能用。我总结了一套“三步走”的快速检查方法:
- 看缺失值——哪些字段有空值?空值比例高不高?
- 看异常值——有没有风速500m/s这种离谱数据?
- 看时间连续性——时间戳有没有跳变?有没有重复?
我曾经接手过一个项目,数据里风速字段有30%是空值,一问才知道,是风速计坏了半年没人修。这种数据如果不处理,模型训练出来就是废的。
小技巧:用Python的df.info()和df.describe()可以快速了解数据概况。我习惯先看describe()里的min和max,如果风速最小值是负数,那肯定有问题。
1.4 知识体系框架图
下面这张图,是我自己总结的SCADA数据初探的核心逻辑。你看一眼,心里就有谱了:
1.5 实战:用Python快速查看数据
光说不练假把式。咱们直接上代码,看看怎么用Python快速摸清数据底细:
import pandas as pd
import numpy as np
# 读取数据
df = pd.read_csv('wind_turbine_scada.csv')
# 1. 看数据形状
print(f"数据维度:{df.shape}")
print(f"字段列表:{df.columns.tolist()}")
# 2. 看缺失值
missing = df.isnull().sum()
missing_pct = missing / len(df) * 100
print("\n缺失情况:")
print(missing_pct[missing_pct > 0])
# 3. 看基本统计
print("\n基本统计:")
print(df.describe())
# 4. 看时间范围
print(f"\n时间范围:{df['timestamp'].min()} 到 {df['timestamp'].max()}")
print(f"总时长:{(df['timestamp'].max() - df['timestamp'].min()).days} 天")
注意:如果数据量很大(比如几千万行),直接用df.describe()可能会卡死。我建议先抽样,比如df.sample(10000),快速看个大概。
1.6 避坑指南
最后,分享几个我踩过的坑:
- 时间戳格式不统一——有的用“2024-01-01 00:00:00”,有的用“2024/01/01 00:00”。我建议统一转成datetime格式,不然排序会出问题。
- 风速负值——我曾经见过风速-5m/s的数据,明显是传感器故障。这种数据要么剔除,要么用前后值填充。
- 功率为负——风机停机或耗电时,有功功率可能为负。这不一定是异常,但要结合状态码判断。
好了,这一章就到这里。数据初探是基础中的基础,但也是最容易被忽视的。把这一步做扎实了,后面的清洗和特征工程才能事半功倍。