数据采集与预处理:打好能效评估的地基

各位同行,咱们今天聊聊数据采集与预处理。说实话,这部分工作看着不起眼,但我在项目里吃过不少亏。你想想看,后面所有的能效指标、优化策略,全得靠这些原始数据撑着。数据不准,后面全是白搭。

我个人习惯把数据工作分成三步:先想清楚传感器怎么布,再把脏数据洗干净,最后把缺的数据补上。咱们一个一个来。

传感器部署策略:别瞎放,得讲究

传感器部署这事儿,我刚开始做的时候也犯过傻。记得有一次,我把温度传感器直接贴在管道外壁上,结果读数比实际介质温度低了十几度。后来才明白,隔热层和接触热阻的影响太大了。

部署策略的核心就三个字:代表性。你得保证测出来的数据能反映整个系统的真实状态。

关键原则:

  • 关键节点全覆盖:能源转换设备(燃气轮机、锅炉、制冷机)的进出口必须测
  • 空间分布合理:大型空间(如冷站、热力站)要按网格布点,避免死角
  • 冗余备份:重要测点至少双传感器,我见过单点故障导致整个评估停摆的惨案

举个例子,一个典型的园区综合能源系统,我建议这样布点:

监测对象 传感器类型 部署位置 数量建议
燃气轮机 温度、压力、流量 进出口、燃烧室 每台6-8个
电制冷机 功率、冷冻水温度 蒸发器、冷凝器 每台4-6个
光伏阵列 辐照度、直流电压/电流 阵列中心、边缘 每100kW 2-3个
储能电池 SOC、SOH、温度 电池模组表面 每簇3-5个

我的小技巧: 部署前先做一次系统仿真,用灵敏度分析找出哪些参数对能效影响最大。这样能省下不少传感器成本。我曾经帮一个项目省了30%的传感器预算,效果一点没打折扣。

数据清洗与异常值处理:脏数据比没数据更可怕

数据采回来了,但别急着用。我见过太多人直接拿原始数据算能效,结果算出来个负数。为什么?因为传感器漂移、通信丢包、现场干扰,什么妖魔鬼怪都有。

数据清洗,说白了就是三件事:去重、去噪、去异常

异常值检测,我常用的方法有这么几种:

  • 3σ原则:数据服从正态分布时,超出均值±3倍标准差的值直接干掉。简单粗暴,但有效。
  • 箱线图法:用四分位距(IQR)判断,超出Q1-1.5IQR或Q3+1.5IQR的算异常。这个方法对非正态分布的数据更友好。
  • 领域知识法:这个最靠谱。比如冷冻水温度不可能超过50℃,功率不可能为负值。我在项目中经常把物理约束写进清洗规则里。
# 一个简单的异常值清洗示例(Python伪代码)
def clean_sensor_data(df, column, method='3sigma'):
    if method == '3sigma':
        mean = df[column].mean()
        std = df[column].std()
        lower = mean - 3 * std
        upper = mean + 3 * std
    elif method == 'iqr':
        Q1 = df[column].quantile(0.25)
        Q3 = df[column].quantile(0.75)
        IQR = Q3 - Q1
        lower = Q1 - 1.5 * IQR
        upper = Q3 + 1.5 * IQR
    
    # 标记异常值
    df['is_anomaly'] = (df[column] < lower) | (df[column] > upper)
    return df

注意: 别一刀切地把异常值全删了。有些异常其实是系统真实状态,比如设备启停瞬间的冲击数据。我曾经因为误删了启动阶段的峰值数据,导致后续的能效评估完全失真。建议先标记,再人工复核。

缺失值插补方法:别让数据断档

数据缺失是家常便饭。通信中断、传感器故障、维护停机,都会导致数据出现空洞。直接扔掉?那时间序列就断了,能效评估没法做。

插补方法我按场景分三类:

  • 简单插补:用均值、中位数、众数填充。适合缺失率低(<5%)且数据平稳的场景。说白了就是图省事。
  • 时间序列插补:线性插值、样条插值、前向/后向填充。适合连续变化的数据,比如温度、压力。我个人偏爱线性插值,简单且物理意义明确。
  • 模型插补:用KNN、随机森林、甚至LSTM预测缺失值。适合缺失率高(>10%)或数据非线性强的场景。但要注意,别为了插补而插补,模型引入的误差可能比缺失本身还大。
# 线性插值示例
import pandas as pd

# 假设df是时间序列数据,'temp'列有缺失值
df['temp_interpolated'] = df['temp'].interpolate(method='linear')

# 前向填充(用上一个有效值填充)
df['temp_ffill'] = df['temp'].fillna(method='ffill')

避坑指南: 我曾经处理过一个冷站的数据,缺失率高达20%。一开始用均值填充,结果能效系数算出来完全不对。后来改用基于相邻时段数据的KNN插补,才把问题解决。记住:插补方法的选择,取决于数据的物理特性和缺失模式

知识体系总览

下面这张图,是我自己总结的数据采集与预处理的核心逻辑。你把它记在脑子里,做项目时就不会跑偏。

数据采集与预处理知识体系 数据采集 传感器部署策略 · 关键节点全覆盖 · 空间分布合理 · 冗余备份 数据清洗与异常值处理 3σ原则 · 箱线图法 · 领域知识法 · 去重去噪去异常 缺失值插补方法 简单插补 · 时间序列插补 · 模型插补(KNN/随机森林/LSTM) 高质量可用数据集 → 能效评估 注:每一步都需结合领域知识进行人工复核

嗯,数据采集与预处理这部分,说白了就是「垃圾进,垃圾出」的反面。你前面花80%的精力把数据整干净了,后面20%的评估工作就能顺风顺水。我这些年做过的项目,凡是数据基础打得牢的,后续分析基本没出过大问题。

好了,今天就聊到这儿。记住我说的:别急着算能效,先把数据伺候好。


专注资料整理