第4章:风电项目数据采集与清洗
4.1 数据源识别:你得知道风从哪来
做风电投资决策,第一步不是算账,而是找数据。我见过太多项目,模型建得漂漂亮亮,结果数据源一塌糊涂,最后全白干。
数据源主要分三类:气象、地理、电网。咱们一个一个说。
4.1.1 气象数据
这是最核心的。风速、风向、温度、气压、湿度,缺一不可。我个人习惯优先用中尺度气象数据,比如ERA5、MERRA-2。为什么?因为免费、时间长、覆盖广。
但注意,这些数据分辨率低,大概10-30公里一个格点。你想想看,一个风电场可能就几平方公里,直接用肯定不行。需要降尺度处理,或者结合测风塔数据。
4.1.2 地理数据
地形、海拔、地表粗糙度、土地利用类型。这些决定了风能不能吹到风机面前。我记得有个项目,选址在丘陵地带,结果实际风速比预测低了15%。后来一查,是地形数据用了30米分辨率,但实际地形变化在10米尺度。
所以,地理数据尽量用高分辨率。SRTM 30米是底线,能用ASTER GDEM或者LiDAR更好。
4.1.3 电网数据
接入点位置、电压等级、线路容量、限电历史。这些直接决定你的电能不能卖出去。我曾经遇到一个项目,风资源极好,但电网接入容量只有50MW,项目规划了100MW。结果?只能弃风。
电网数据可以从当地电网公司公开信息获取,或者用全球电网数据库。但注意,公开数据往往滞后,最好找当地合作伙伴核实。
4.2 缺失值处理:别让数据坑了你
数据采集回来,你会发现总有缺失。测风塔坏了、传感器故障、传输中断,原因很多。怎么处理?
4.2.1 识别缺失模式
先看缺失是随机的还是系统的。随机缺失好办,系统缺失要小心。比如,某个风向传感器只在特定风速下失效,那缺失值就不是随机的。
我一般用pandas的isnull()和heatmap可视化缺失模式。代码很简单:
import pandas as pd
import seaborn as sns
df = pd.read_csv('wind_data.csv')
sns.heatmap(df.isnull(), cbar=False)
嗯,这里要注意,如果缺失超过30%,我建议直接放弃这个数据源。补出来的也不可信。
4.2.2 插值方法
对于短时间缺失(比如几小时),线性插值就够了。长时间缺失(几天以上),我推荐用时间序列方法,比如ARIMA或者Prophet。
| 缺失时长 | 推荐方法 | 注意事项 |
|---|---|---|
| < 6小时 | 线性插值 | 简单快速,但可能忽略波动 |
| 6小时 - 3天 | 三次样条插值 | 平滑性好,适合风速数据 |
| > 3天 | ARIMA / Prophet | 需要历史数据训练模型 |
4.3 异常值检测:揪出捣乱的数据点
异常值比缺失值更隐蔽。它看起来有数据,但其实是错的。比如,风速突然跳到100m/s,或者温度变成-50°C。这些明显不合理。
4.3.1 物理阈值法
最简单的办法。风速不可能超过60m/s(台风除外),温度不可能超出-40°C到50°C(除非在极端地区)。设定上下限,超出就标记。
我习惯先看数据分布,再定阈值。比如:
# 风速合理范围:0-50 m/s
df = df[(df['wind_speed'] >= 0) & (df['wind_speed'] <= 50)]
4.3.2 统计方法
Z-score和IQR是常用方法。Z-score适合正态分布数据,风速数据往往偏态,所以IQR更常用。
Q1 = df['wind_speed'].quantile(0.25)
Q3 = df['wind_speed'].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
df = df[(df['wind_speed'] >= lower) & (df['wind_speed'] <= upper)]
但注意,IQR方法可能把正常的高风速点误判为异常。比如,一个强风天气,风速达到25m/s,这在IQR方法里可能被剔除。所以,我建议结合物理阈值一起用。
4.3.3 机器学习方法
如果数据量大,可以用孤立森林(Isolation Forest)或LOF。我一般在处理多变量异常时用,比如风速、风向、温度一起看。
from sklearn.ensemble import IsolationForest
model = IsolationForest(contamination=0.05)
df['anomaly'] = model.fit_predict(df[['wind_speed', 'wind_dir', 'temp']])
df = df[df['anomaly'] == 1]
4.4 知识体系总览
下面这张图,是我自己总结的数据采集与清洗流程。你照着做,基本不会出大问题。
这张图里,我特意加了一个反馈循环。为什么?因为数据清洗不是一次性的。你处理完异常值,可能发现新的缺失模式;补完缺失值,可能又暴露新的异常。所以,多迭代几次,直到数据质量达标。
好了,数据采集与清洗就讲到这里。记住,数据是投资决策的基石。你花80%的时间在数据上,剩下20%做模型,结果往往比反过来好得多。