4. 负荷数据采集与预处理实战
负荷优化的第一步不是算法,而是拿到一条“可信”的负荷曲线。智能电表与SCADA系统是工业现场最主要的两类数据源:智能电表通常以15分钟或1分钟为间隔记录有功/无功电量与功率,适合做分项计量和峰谷电量统计;SCADA则以秒级或分钟级采集总进线、主要馈线及关键设备的功率、电流、电压等遥测量,适合刻画瞬时负荷波动与工艺启停。两者时间尺度不同、点位命名不同、时钟也可能存在偏差,因此接入阶段就要明确“以谁为主、以谁校验”。
一个可落地的接入方案是:以SCADA总进线有功功率作为负荷曲线主数据,以智能电表的分项电量作为校核与拆分依据。接入时统一采用带时区的时间戳,并约定功率正方向为“从电网流向厂区”,即负荷为正、反送为负。下面是一段典型的接入与清洗示例代码,演示如何把两个来源对齐到同一15分钟时间轴:
import pandas as pd
# SCADA: 时间戳, 总进线有功功率(kW)
scada = pd.read_csv("scada_main.csv", parse_dates=["ts"]).set_index("ts")
scada = scada["p_kw"].resample("15min").mean() # 秒级→15分钟均值
# 智能电表: 时间戳, 正向有功电量(kWh)
meter = pd.read_csv("meter_total.csv", parse_dates=["ts"]).set_index("ts")
meter_p = meter["kwh"].diff() / 0.25 # 电量差→平均功率(kW)
df = pd.concat([scada.rename("p_scada"), meter_p.rename("p_meter")], axis=1)
df = df.asfreq("15min") # 补齐完整时间轴
print(df.describe())
数据清洗的核心是处理缺失与异常。缺失常见于通信中断、点表未配置或电表换表,处理策略要区分“短缺口”和“长缺口”:连续1~2个点(15~30分钟)可用线性插值或前后均值填补;超过1小时的长缺口不宜插值,应标记为缺失并在后续统计中剔除,否则会人为削平峰谷差。异常检测则要结合物理约束与统计规则:功率为负且无分布式电源、功率超过变压器额定容量、相邻点跳变超过额定容量的30%、以及长时间恒定不变(“死值”),都属于典型异常。对异常点建议先置为缺失再统一插补,而不是直接删除整行,以保持时间轴连续。
清洗完成后应做负荷曲线可视化,这是发现问题的最后一道关口。建议至少画三张图:全日15分钟负荷曲线(看峰谷与启停)、按星期分组的日均曲线(看生产班制)、月度最大需量柱状图(看需量申报风险)。可视化时把异常点用红色标出、缺失段用灰色底纹标出,能直观暴露数据质量问题。下图展示了一条经过清洗的典型日负荷曲线及其关键特征提取逻辑:
在曲线基础上做典型日、周、月特征提取。典型日不是简单取平均,而是先按“工作日/周末/检修日”分类,再对同类日逐时刻取中位数,这样能抑制个别异常日对均值的拉偏。周特征关注生产班制:若周一至周五曲线形态一致、周六明显下降、周日接近基荷,则说明是五天工作制,负荷优化应把可转移工序安排在峰段之外的工作日。月特征则关注最大需量与月电量的关系,最大需量决定基本电费,月电量决定电度电费,两者要分开看。
特征提取的常用指标包括:最大负荷、最小负荷、平均负荷、负荷率(平均/最大)、峰谷差率((最大−最小)/最大)、峰时段电量占比。以图中示例数据为例,最大负荷约1150 kW、最小负荷约430 kW,则峰谷差率约62%,负荷率约71%,说明负荷波动较大、存在明显削峰空间。把这些指标按日、周、月分别汇总成表,就能为后续的峰谷电价套利和需量控制提供量化依据。
最后要形成可复用的数据质量检查闭环:每次接入新数据后,先检查时间轴是否连续、点表映射是否正确、功率与电量是否互相校核(15分钟平均功率×0.25小时应约等于该时段电量增量),再输出缺失率、异常率、最大需量三项关键指标。只有数据质量过关,后续的峰谷时段划分、可转移负荷识别和优化调度才有可靠基础。