第1章:Python数据分析与可视化入门

各位风电圈的兄弟们,大家好。我是老张,在风场摸爬滚打了十来年。今天咱们聊点实在的——怎么用Python把风电机组的数据玩明白。

说实话,我刚入行那会儿,分析数据全靠Excel。一个风场几十台机组,每台机组几百个测点,光整理数据就能干到后半夜。后来我学了Python,才发现原来很多重复劳动都可以自动化。嗯,今天我就把这几年的经验分享给你们。

1.1 为什么风电运维需要Python?

你想想看,一台风机每天产生的数据量有多大?振动、温度、功率、风速、桨距角……这些数据如果靠人工去翻,根本看不过来。我见过太多运维兄弟,明明机组已经出现异常趋势了,愣是没发现,等出了故障才后悔。

Python能帮我们做什么?说白了就三件事:

  • 快速处理数据——几万行数据,几秒钟搞定
  • 自动发现规律——哪些参数异常了,一目了然
  • 可视化呈现——把枯燥的数字变成图表,领导看了也点头

我个人习惯是,每天上班第一件事,先跑一遍Python脚本,看看过去24小时的数据有没有异常。这比等报警系统响了再处理,要主动得多。

核心观点:Python不是程序员的专利,而是运维工程师的得力工具。别怕学不会,我团队里50多岁的老电工都学会了。

1.2 NumPy基础操作——数据处理的基石

NumPy,全称是Numerical Python。说白了,它就是Python里专门处理数组和矩阵的库。为什么风电数据离不开它?因为我们的数据大多是数值型的,比如风速序列、功率序列,用NumPy处理起来效率极高。

1.2.1 创建数组

先看个最简单的例子。假设我们要分析某台风机一天内的风速数据,每10分钟一个采样点,一共144个点:

import numpy as np

# 创建一维数组,模拟风速数据(单位:m/s)
wind_speed = np.array([3.2, 4.1, 5.6, 6.8, 7.2, 6.5, 5.8, 4.9, 3.8, 3.1])
print(wind_speed)
# 输出:[3.2 4.1 5.6 6.8 7.2 6.5 5.8 4.9 3.8 3.1]

我在项目中遇到过,有人直接用Python列表存数据,结果数据量一上来,程序跑得比蜗牛还慢。换成NumPy数组后,速度提升了至少10倍。为什么?因为NumPy底层是用C语言写的,内存管理更高效。

1.2.2 数组运算

风电数据经常要做各种运算,比如计算平均风速、最大风速、风速标准差等。用NumPy一行代码就搞定:

# 计算统计量
mean_wind = np.mean(wind_speed)      # 平均风速
max_wind = np.max(wind_speed)        # 最大风速
std_wind = np.std(wind_speed)        # 风速标准差

print(f"平均风速:{mean_wind:.2f} m/s")
print(f"最大风速:{max_wind:.2f} m/s")
print(f"风速标准差:{std_wind:.2f} m/s")

嗯,这里要注意:标准差能反映风速的波动程度。如果某台机组的风速标准差突然变大,很可能意味着湍流强度异常,需要关注叶片受力情况。

1.2.3 数组切片与索引

有时候我们只想看某段时间的数据,比如只看上午8点到10点的风速:

# 假设数据每10分钟一个点,第0个点对应0:00
# 8:00对应第48个点,10:00对应第60个点
morning_wind = wind_speed[48:60]
print(morning_wind)

我曾经犯过一个低级错误:切片时把结束索引写成了60,结果只取到了59。记住,Python切片是左闭右开的,也就是包含起始索引,不包含结束索引。

小技巧:如果你不确定数组的长度,可以用 len(wind_speed) 查看。我每次写切片代码前,都会先打印一下数组形状,避免越界。

1.3 Pandas基础操作——表格数据处理利器

NumPy处理数值数组很厉害,但风电数据往往还带着时间戳、机组编号、故障代码这些信息。这时候就需要Pandas出场了。Pandas的核心是DataFrame,你可以把它理解成一个超级Excel表格。

1.3.1 读取数据

风场的数据通常存在CSV文件里。我习惯用Pandas直接读取:

import pandas as pd

# 读取风场数据
df = pd.read_csv('wind_farm_data.csv')
print(df.head())  # 查看前5行数据

记得有一次,我接手一个老旧风场的数据,CSV文件编码是GBK的,直接读取报错了。后来加了个参数 encoding='gbk' 才搞定。所以,如果读取报错,先检查编码格式。

1.3.2 数据筛选与过滤

我们经常需要筛选出特定条件下的数据。比如,找出所有功率大于1500kW的记录:

# 筛选功率大于1500kW的数据
high_power = df[df['power'] > 1500]
print(high_power.head())

或者找出某台特定机组的全部数据:

# 筛选机组编号为WTG-05的数据
wtg05_data = df[df['turbine_id'] == 'WTG-05']
print(wtg05_data.shape)  # 查看数据量

1.3.3 缺失值处理

风电数据经常有缺失值,比如传感器故障、通信中断等。如果不处理,后续分析会出问题。我常用的方法是:

# 查看缺失值情况
print(df.isnull().sum())

# 删除缺失值较多的行
df_clean = df.dropna(subset=['power', 'wind_speed'])

# 或者用均值填充
df['power'].fillna(df['power'].mean(), inplace=True)

我个人建议:如果缺失值超过30%,就别填充了,直接删除那部分数据。否则填充出来的数据反而会误导分析。

避坑指南:我曾经用均值填充了所有缺失值,结果发现功率曲线的形状完全变了。后来才意识到,风速低的时候功率本来就小,用整体均值填充会高估低风速段的功率。所以,填充前一定要考虑数据的特点。

1.4 Matplotlib与Seaborn可视化——让数据说话

数据整理好了,接下来就是画图。一张好的图表,胜过千言万语。我每次给领导汇报,都是先甩几张图,再解释数据。

1.4.1 绘制风电数据趋势图

趋势图是最常用的。比如,看某台机组一周内的功率变化:

import matplotlib.pyplot as plt

# 假设df已经包含时间戳和功率数据
plt.figure(figsize=(12, 6))
plt.plot(df['timestamp'], df['power'], color='blue', linewidth=1)
plt.title('WTG-05 功率趋势图(一周)')
plt.xlabel('时间')
plt.ylabel('功率 (kW)')
plt.grid(True, alpha=0.3)
plt.show()

嗯,这里有个细节:如果数据点太多,线会看起来很密。我一般会设置 alpha=0.7 让线条半透明,或者用 plt.scatter() 画散点图。

1.4.2 绘制相关性热力图

相关性热力图能帮我们快速找出哪些参数之间存在关联。比如,风速和功率肯定相关,但温度和功率呢?

import seaborn as sns

# 选择数值列计算相关性
numeric_cols = ['wind_speed', 'power', 'temperature', 'vibration']
corr_matrix = df[numeric_cols].corr()

# 绘制热力图
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('风电机组参数相关性热力图')
plt.show()

我在项目中遇到过,有次发现振动和功率的相关性突然变高了。排查后发现是齿轮箱轴承出了问题。所以,相关性热力图不仅能看正常情况下的关联,还能用来做异常检测。

实战经验:相关性不等于因果关系。风速和功率相关,是因为物理规律决定的。但如果你发现两个不相关的参数突然变得相关了,那就要警惕了——很可能有故障在酝酿。

1.5 本章知识体系

为了让大家更直观地理解本章的知识结构,我画了一张图:

Python数据分析与可视化知识体系 风电数据分析 NumPy 数值计算 创建数组、数组运算 切片索引、统计计算 Pandas 表格处理 数据读取、筛选过滤 缺失值处理、数据清洗 Matplotlib/Seaborn 趋势图、散点图 相关性热力图 目标:从数据中发现问题,用图表讲清故事

1.6 本章小结

好了,今天的内容就到这里。咱们回顾一下:

  • NumPy:处理数值数组,速度快,适合做统计计算
  • Pandas:处理表格数据,读取、筛选、清洗一条龙
  • Matplotlib/Seaborn:把数据变成图表,趋势图看变化,热力图看关联

说实话,这些工具刚开始用的时候可能会觉得有点陌生。但别急,多用几次就顺手了。我团队里有个小伙子,刚开始连pip安装都不会,现在每天用Python自动生成风场日报,效率提升了不止一倍。

下一章,咱们会深入讲讲怎么用这些工具做风电数据的异常检测。到时候我会分享几个我在现场遇到的真实案例,保证干货满满。

专注资料整理