3、数据探索与可视化:描述性统计、趋势分析、相关性分析、可视化工具应用

各位同事,大家好。我是老张,在风场摸爬滚打了十几年。今天咱们聊聊数据探索和可视化。说白了,就是拿到一堆数据后,怎么快速看出门道来。

很多运维兄弟拿到SCADA数据,第一反应就是头疼。几千个变量,几万行记录,看都看不过来。我刚开始也这样,后来慢慢摸索出一些套路。今天就把这些经验分享给大家。

3.1 描述性统计:先给数据“把把脉”

拿到数据别急着画图。先做描述性统计,就像医生看病先量体温、测血压一样。我习惯用Python的pandas库,一行代码就能搞定。

import pandas as pd

# 读取数据
df = pd.read_csv('wind_turbine_data.csv')

# 描述性统计
print(df.describe())

输出结果会告诉你每个变量的均值、标准差、最小值、最大值、四分位数。嗯,这里要注意:标准差特别大的变量,往往藏着问题。比如风速的标准差突然变大,可能意味着湍流强度异常,或者风向标出了问题。

关键指标解读:

  • 均值:反映整体水平。比如平均风速6.5m/s,低于设计值,就要查查是不是选址问题。
  • 标准差:反映波动程度。齿轮箱温度标准差超过5℃,说明散热系统可能不稳定。
  • 四分位数:看数据分布。如果75%分位点接近最大值,说明数据右偏,可能有极端值。

我的小技巧: 我习惯把描述性统计结果做成一张表格,贴在工位上。每次巡检前扫一眼,心里就有数了。比如某台机组功率均值突然下降,但风速均值没变,那大概率是变桨系统或发电机出了问题。

3.2 趋势分析:看数据“怎么走”

描述性统计只能看静态情况。趋势分析才是动态的。我经常用滚动平均来平滑数据,消除短期波动,看清长期趋势。

# 计算7天滚动平均
df['power_rolling'] = df['power'].rolling(window=7).mean()

# 绘制趋势图
import matplotlib.pyplot as plt
plt.plot(df['time'], df['power'], alpha=0.5, label='原始数据')
plt.plot(df['time'], df['power_rolling'], color='red', label='7天滚动平均')
plt.legend()
plt.show()

为什么要用滚动平均?你想想看,风速、功率这些数据,每分钟都在跳。直接看原始数据,眼睛都看花了。滚动平均就像给数据加了个“滤镜”,让你看清真正的变化趋势。

我曾经用这个方法发现过一个大问题。某台机组功率在三个月内缓慢下降了5%。单看每天的数据,根本看不出来。但滚动平均曲线一画出来,下降趋势非常明显。后来排查发现,是叶片结冰导致气动性能下降。

避坑指南: 我曾经犯过一个错误,直接用原始数据做趋势分析。结果发现趋势忽上忽下,根本没法判断。后来才意识到,数据必须先做预处理,比如去除停机时段、剔除异常值。否则趋势分析就是“垃圾进,垃圾出”。

3.3 相关性分析:找变量之间的“关系”

风场运维中,很多变量是相互关联的。比如风速和功率,理论上应该是三次方关系。但实际数据中,这种关系会受到很多因素干扰。相关性分析就是帮我们量化这种关系。

我常用皮尔逊相关系数,取值范围在-1到1之间。绝对值越接近1,相关性越强。正数表示正相关,负数表示负相关。

# 计算相关系数矩阵
corr_matrix = df[['wind_speed', 'power', 'rotor_speed', 'pitch_angle']].corr()
print(corr_matrix)

输出结果是一个表格,比如:

变量 风速 功率 转速 桨距角
风速 1.00 0.92 0.85 -0.60
功率 0.92 1.00 0.88 -0.55
转速 0.85 0.88 1.00 -0.45
桨距角 -0.60 -0.55 -0.45 1.00

你看,风速和功率相关系数0.92,非常强。但桨距角和风速是负相关,-0.60。这符合物理规律:风速越大,桨距角会调大来限制功率。

实战经验: 我遇到过一台机组,风速和功率的相关系数只有0.6。正常应该在0.9以上。这说明什么?要么风速仪坏了,要么发电机效率下降。后来一查,果然是风速仪结冰,测出来的风速偏低。

3.4 可视化工具应用:让数据“说话”

数据探索离不开可视化。我常用的工具有三个:matplotlibseabornplotly。各有各的用处。

  • matplotlib:基础绘图库,适合做折线图、柱状图。我用来画趋势图。
  • seaborn:统计绘图库,适合做热力图、箱线图。我用来画相关性矩阵。
  • plotly:交互式绘图库,适合做动态图表。我用来做数据探索的“放大镜”。

下面这张图是我用seaborn画的相关性热力图,一眼就能看出哪些变量关系紧密。

import seaborn as sns
import matplotlib.pyplot as plt

# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0)
plt.title('变量相关性热力图')
plt.show()

热力图中,颜色越深,相关性越强。红色表示正相关,蓝色表示负相关。我习惯先看对角线,都是1.0,然后看其他格子。如果发现某个变量和所有变量都不相关,那这个变量很可能是个“废变量”,可以考虑剔除。

我的习惯: 做可视化时,我一般先画散点图矩阵。比如风速、功率、转速、桨距角四个变量,两两画散点图。这样能快速发现非线性关系。比如风速和功率,散点图应该是一条S形曲线。如果出现奇怪的形状,比如中间有缺口,那可能是数据采集有问题。

下面这张SVG图,展示了数据探索的完整流程。从原始数据开始,经过描述性统计、趋势分析、相关性分析,最后用可视化工具呈现结果。每一步都有明确的目的和输出。

数据探索与可视化流程 原始数据 数据预处理(清洗、去噪) 描述性统计 趋势分析 相关性分析 可视化呈现(图表、热力图、散点图) 运维决策支持

这张图我经常贴在办公室墙上。每次做数据分析,就按这个流程走一遍。不会漏掉关键步骤,也不会走弯路。

重要提醒: 可视化不是终点,而是手段。我见过有人花大量时间把图表做得花里胡哨,但根本看不出问题。记住:图表要服务于分析目的。比如你想看趋势,就用折线图;想看分布,就用直方图;想看关系,就用散点图。别为了好看而好看。

好了,数据探索和可视化就聊到这儿。核心就是:先描述、再看趋势、后找关系、最后可视化呈现。这套流程我用了十年,屡试不爽。希望大家也能用起来,让数据真正为风场运维提效。


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