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 可视化工具应用:让数据“说话”
数据探索离不开可视化。我常用的工具有三个:matplotlib、seaborn和plotly。各有各的用处。
- 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