徐 宁, 王艳芹, 董 祯, 王 勇
(1.国网河北省电力有限公司经济技术研究院,河北 石家庄 050000;2.国网河北省电力有限公司,河北 石家庄,050000)
随着诸如传感器、摄像头等数据采集技术的不断发展,数据采集、存储的成本越来越低,意味着各种规模的企业可以以非常低廉的价格获得大量数据。电力行业作为国民经济命脉之一,近年来不断扩大对智能设备的投资,使得配电网中的各类传感器数量不断增加。数据采集、存储的规模达到了拍字节(Petabytes)级别,形成了包括设备基本资料、运行状态监测数据、电力营销数据等多源异构的配电网大数据[1-2]。
对贯穿生产、输送、消费全过程的配电网大数据的高效分析不仅可以满足科学规划、经济调度、的工作需要,还可以解决未来分布式电源接入、需求侧响应中潜在的智能化管理问题[3]。如何挖掘海量数据中潜在的信息已成为当前学术界和产业界共同关注的研究方向。文献[4-5]构建了一套大数据平台,利用并行计算技术提高负荷预测的精确度和计算效率;文献[6]将大数据技术与人工智能结合,提出了数据驱动的配电网无功优化方案;文献[7-8]从宏观角度分析大能源思维与大数据思维的融合方式与前景。挖掘配电网大数据中包含的信息有助于配电网的管理控制精细化,为智能电网的经济稳定运行提供有力支撑[9-10]。
与此同时,数据的大规模采集和存储使得电力行业面临大数据处理的技术挑战[11-12]。各类数据在采集、传输过程中会受到外界干扰,导致系统传输错误、短暂失效等问题[13]。同时,由于硬盘散热的限制,计算机处理器的性能提升无法满足高增速的数据采集、存储技术[14-15]。传统基于单个处理器的数据分析模式无法满足体量大,并发性高的数据预处理需求。目前,配电网大数据在应用过程中存在如下挑战:
(1)数据的高并发特性:高并发配电网的运行数据使得过去基于单个处理器的预处理软件无法满足这些数据的实时处理。
(2)数据预处理计算量大:采集的运行数据包含了营销、运检、调度等各类数据,数据体量大,且大多为高精度浮点类型,数据批处理计算量大。
(3)数据质量参差不齐:数据采集的途径和设备有多种,各类通信网络质量参差不齐,不少采集的数据集中存在数据噪声,进而降低了配电网大数据的可用性。
针对目前配电网大数据应用面临的挑战,行业专家们在研究中的将大部分时间耗费在了数据预处理的工作之上[16-17]。搭建分布式集群是提高配电网大数据处理效率的主要手段。目前市场上主流的分布式计算框架包括基于MapReduce的开源分布式平台Hadoop,进程级并行的Message Passing Interface(MPI),以及基于内存计算的Apache Spark。文献[18]运用云计算环境下的Hadoop集群提供用电信息大数据的计算服务。但Hadoop的MapReduce算法是基于硬盘的,与存储方式相耦合,计算效率较低,在配电网大数据预处理这类计算密集型场合的应用受到了很大的制约[19]。MPI框架在处理进程尤其是不同机器上的进程,是相互独立的,实现分布式计算就需要通过消息通讯的方式互相传递信,因此在实时性方面表现不佳。
本文采用分布式集群的方式将数据预处理任务分布在各计算节点,并利用Apache Spark实现对配电网大数据的并行预处理。首先,介绍了基于Apache Spark的配电网大数据处理平台的基本框架。其次,针对目前配电网原始数据存在的主要问题,提出了一套结构化数据流处理方案。然后,结合并行计算平台,从数据清洗、数据去噪、以及离群点去除三方面介绍了配电网大数据预处理方案的具体流程。最后的实验证明了提出的方法在配电网大数据预处理效果和效率方面的优势。
分布式计算平台主要有两个重要内容,一个是海量数据的分布式存储,另一个是分布式并行计算。传统基于MapReduce算法的大数据处理框架可以将复杂的数据处理任务抽象为Mapper和Reducer过程,并可由数百台主机组成的集群上运行。但是,MapReduce具有高延时特性,实时任务支持的能力受到限制。为了克服上述缺点,加州伯克利大学AMPlab开发了统一分布式计算引擎Spark,已被广泛用于大数据研究分析和实际工程中,是目前最流行的开源大数据处理引擎[20]。Spark作为高性能通用分布式计算平台设计的,不仅有先进的有向无环图(DAG)任务调度引擎和基于内存的计算,而且提供了丰富的算法和高级API,可轻松访问包括关系数据库、HDFS等各类数据源,更加适合于算法设计和一般的分布式并行计算任务。Spark应用程序由一个集群驱动器进程和一组执行器进程组成,是一个高效的协调机器间工作的软件框架,可以在数以千计的服务器组成的集群上运行。同时,Spark中设计了惰性评估(lazy evaluation)的概念,即Spark中的核心数据结构在计算过程中保持不变,用户通过转换操作(transformation)建立数据的逻辑转换计划。
图1 Spark惰性评估基本流程图Fig.1 Flow chart of Spark lazy evaluation
图1为Spark惰性评估基本流程,集群驱动器进程读取用户的程序或输入后,将任务分发给若干个执行器处理,执行器负责执行驱动器分配给它的实际计算工作。Spark惰性评估首先将逻辑转换计划编译为可以在集群中高效运行的流水线式的物理执行计划,即一个有向无环图,然后等待,直到最后时刻才开始执行代码。在调用一个动作(action)操作之前,Spark不会真的执行转换操作。因此,Spark可以优化整个从输入端到输出端的数据流。例如结构化API的谓词下推(predicate pushdown),Spark会通过自动下推过滤操作来优化整个物理执行计划。基于Spark计算引擎的大数据处理效率通常要比基于Hadoop MapReduce计算引擎的效率高出很多倍。Spark生态圈成熟可靠,底层可以与其他分布式文件系统无缝衔接,在数据并行处理和分析方面具有全栈式的特点。本文提出的基于Apache Spark的配电网大数据并行计算技术框架如图2所示。
图2 配电网大数据预处理技术框架Fig.2 Technical framework of distribution system big data preprocessing
多源异构的配电网大数据由各类传感器采集,并存储在对应的数据仓库内,作为配电网大数据分析的数据基础。Spark统一计算引擎通过SQL查询将各类数据读取到分布式计算平台中,并实现以弹性分布式数据集为基础的数据并行处理API。在数据预处理过程中,既包含了诸如数据导入、数据筛选等窄依赖关系的转换,还包含了诸如排序等宽依赖关系的转换,最终的结果通过动作操作触发。提供的流式数据处理方式可以以减少结构化API的处理延迟并允许增量处理。
在配电网大数据的实际应用中,数据预处理花费的时间往往不亚于数据分析的时间。这是因为数据分析需要基于高质量的数据,在数据存在误差的情况下,再精确的分析算法,也会导致一个错误的结果,因此,高效率、高通用性的数据预处理过程是数据应用中的关键所在。在实际业务处理中,未经过数据预处理的原始数据通常包含多类错误数据。这些错误数据的类别大致可分为以下四类:
(1)数据冗余(Redundant):配电网原始数据单条记录往往包含很多属性,以支持设备连接关系管理、数据表间字段匹配、数据库维护等工作,导致属性数目超出数据分析需要的情况。原始数据属性过多往往不利于数据建模分析,因此要进行数据维度规约。
(2)数据重复(Duplicate):当配电网感知设备出现重复采集或数据存储系统自我保护而备份时,可能导致在数据集中多次出现同一条记录,虽然重复数据对数据建模结果的影响并不大,但是如果重复数据量过多,会占用运算内存,降低分布式计算性能。
(3)数据缺失(Incomplete): 分散在不同电压等级配电网的数据采集设备可能由于运行环境恶劣,设备出现故障,数据漏传,进而导致部分数据的属性值为空的情况。
(4)数据离群点(Noisy):各环节设备的制造工艺和安装缺陷以及调试和使用上的不确定性都会为数据带来各种各样的误差,这些误差会导致数据记录中某属性的值存在不合常理的情况。
值得注意的是,配电网出现短路故障而导致的大规模停电会使数据采集设备采集到暂态数据,这些数据虽然反映了配电网实际运行状态,但为诸如负荷预测等应用带来了不确定性,导致这些应用的结果不准确,因此也属于数据异常值的范围中。
不同类别的错误数据处理方式有着很大的不同,针对上述配电网原始数据存在的错误数据,本文制定的数据预处理方案如图3所示。
图3 配电网大数据预处理流程图Fig.3 Flow chart of distribution system big data preprocessing
本文提出的数据预处理方法具体流程如下:
(1)利用特征工程选择出于建模任务相关性高的属性,删去与数据分析无关的冗余样本属性;
(2)以统一标志符为关键值搜索数据集中的重复数据,去除检测到的重复数据;
(3)对于单条记录缺失属性占比很高(大于30%)的情况下,直接删除缺失数据的记录;对于单条记录缺失率较低且对总体样本影响不大的情况下,通过拉格朗日插值法补全空数据;
(4)对于单条记录中存在的离群点,利用工程中常用的限幅消抖滤波法对数据进行去噪处理,对于其他数据记录相差较大的单条数据记录,通过聚类算法对数据记录进行聚类,丢弃远离聚类簇的记录。
运用上述数据预处理方法,可以有效防止数据维数灾难和无效数据,提高了数据平滑度和规律性,为数据建模提供了良好的数据基础。
下面以配电网运行数据这类结构化数据来具体解释基于Spark的配电网大数据预处理过程的具体方法。结构化数据是指可以使用二维表结构表示和存储的数据,由于其管理、查询的方便性,在电力系统中被广泛的运用,例如用电信息采集系统的用户用电数据、配电变压器设备基本信息、配电网运行时产生的电压、电流等等。而配电网运行数据是配电网状态估计、网络重构等工作的基础数据,对高质量的配电网运行数据有利于提高配电网调度、规划部门工作的科学性。
同时,配电网运行数据是每天不断采集的,这意味着数据处理技术不仅需要支持对静态文件的批处理,还需要支持每天补充的动态数据的流处理。Spark 2.2版本后支持结构化流处理,使用结构化流处理可以减少延迟并允许增量处理。它可以使用户快速的从流式系统中提取有效的价值的信息,而且几乎不需要更改代码。利用Spark内提供的操作函数对原始配电网运行数据表进行预处理的具体过程如图4所示。
图4 基于Spark的大数据预处理流程图Fig.4 Flow chart of big data preprocessing based on Spark
如图4所示,配电网大数据并行预处理的过程分为3个部分:
Stage 1:基于map&reduce的数据降维、数去去重、数据去空/补缺。
首先将原始数据导入到Spark,形成可供并行计算的弹性分布式数据集。接着,通过特征选择去除对数据分析无效字段。然后,以配电变压器ID和记录的日期作为map函数的查重判据,并对重复的数据记录进行标记。采用Spark SQL提供的数据库操作对数据按照两个关键字段进行合并,最后返回合并后数据记录条数大于1的位置,使用reduce函数在原数组中删除对应行,得到去除重复数据的新数据集。在此基础上,利用map函数计算单条记录中属性的缺失比例,对缺失比例大于30%的记录进行去空,对缺失比例小于30%的记录通过拉格朗日插值法补缺。
Stage 2:基于限幅消抖滤波算法的数据去噪。
限幅消抖滤波法依据专家经验确定负荷数据两次采样允许的最大偏差值,通过比较连续时间片的两条数据之差,并判断数据误差是否在最大偏差值范围内。如果不在,则需要将后面时间片的数据替换为合理值,这个合理值可以是前一个时间点数值的复制,也可以是数据记录统计结果。结合Spark的具体做法是首先利用map函数对数据记录进行逐条检验,再使用reduce函数将筛选出大于偏差值的数据记录按照最近一次采样结果进行替换处理。
Stage 3:基于K-means聚类的数据离群记录筛选去除。
由于Spark生态系统提供机器学习算法库,因此可以直接通过Spark提供的API调用函数对数据进行分析而无需通过大量代码实现复杂的负荷聚类算法。具体做法是将数据转化为结构化的DataFrame以便于API计算。导入Spark MLlib算法库,通过调用KMeans函数实现负荷的聚类。聚类算法的超参数通过专家经验设定,最后,依据聚类结果使用drop函数将未划分的数据记录删去。
为验证本文提出的基于Apache Spark的配电网大数据预处理技术,在5台工作站上搭建Spark平台,一台工作站作为数据集成归档的主站(Master node),其他工作站为worker node。实验数据为华北某城市中压配电网运行数据,包括电压、负荷以及电流。运行数据涵盖了多条馈线下的配电变压器,数据采集时间跨度为2016年12月1日至2019年12月1日,采集频率为15分钟/次,数据记录总和共一亿多条,占用空间127 GB。将这些数据导入Spark后,按照上一小节所述的步骤进行数据预处理。
Stage 1:基于map&reduce的数据降维、数去去重、数据去空/补缺。
首先删去数据表中设备管理类属性,筛选配电网运行数据表中的重复数据和空数据,筛选结果见表1、2。
表1 配电网历史数据重复数据筛选结果
表2 配电网历史数据空数据筛选结果
使用drop函数剔除筛选出的重复数据记录,若某一列出现‘/N’的比例高于30%,则同样使用drop函数剔除,低于30%的采用拉个朗日插值法补齐数据,拉个朗日插值法的表达式如下:
(1)
式中:j为插值自变量的序号;x为插值函数的自变量;yj为对应序号自变量的取值;lj(x)为拉格朗日插值基函数,其表达式为
(2)
大多数含有空缺值的数据记录占比均为超过30%,因此采用拉格朗日插值将空数据补全。
Stage 2:基于限幅消抖滤波算法的数据去噪。
为了去除数据在横向上存在的异常值,利用限幅消抖滤波法对各条数据记录进行去噪。为直观展示滤波算法对数据的去噪效果,下面将以配电网负荷数据为例,选取历史中一段明显带有噪声的数据记录进行去噪。原始数据经过限幅消抖滤波算法处理后的可视化结果如图5、6所示。
图5 去噪前配电网负荷数据Fig.5 Distribution system load data before denoising
图6 去噪后配电网负荷数据Fig.6 Distribution system load data after denoising
Stage 3:基于K-means聚类的数据离群记录筛选去除。
为消除数据在纵向上存在的异常值,利用K-means聚类算法筛选出离群数据记录,配电网离群数据筛选结果如表3所示。
表3 配电网离群数据筛选结果
本文对通过聚类算法筛选出的离群数据的处理方法是删去记录。为验证本文提出的配电网大数据预处理方法的有效性,下面分别从对数据分析精确度提升和数据预处理速度两个方面进行实验。
首先,以负荷预测为验证场景,用相同的支持向量回归算法分别对未经过数据预处理的原始数据和经过预处理的数据集进行负荷预测,结果如图7所示。
图7 数据预处理对配变负荷预测结果的影响Fig.7 Effect of data preprocessing on distribution transformation load forecasting
在预测同一台配电变压器负荷时,经过数据预处理的预测结果明显比未经过预处理的结果更加精确。这是由于原始数据中包含的噪声、离群点等对预测算法影响很大的因素在数据预处理过程中被去除。因此,经过数据预处理可以提升预测算法的精确度和鲁棒性。
为验证基于Spark框架计算集群进行数据预处理的效率,下面用另外两种常用的并行计算框架MapReduce,MPI以及单台计算机上Spark对不同规模数据集进行单类预处理操作所用的时间,结果如图8所示。
图8 分布式平台对数据预处理时间的影响Fig.8 Effect of distributed computing platform on execution time of data preprocessing
伴随数据规模不断增大,基于Spark分布式计算集群相对于单台计算机以及其他两种框架的大数据平台的数据处理速度优势越发明显。这是因为Spark将任务分配到多个处理器,并且运用惰性评估优化了整个数据预处理的流程,进而能够高效迅速的完成数据预处理。同时,由于Spark框架利用对数据的高级抽象,弹性分布式数据集,进行高复用率的内存计算,相较于Hadoop和MPI节省了数据读取的时间,进而提高了数据处理的实时性。
为提高配电网海量数据分析的可靠性和科学性,以便于电网公司更加有效的利用、挖掘广泛采集的配电网数据,本文提出了基于Apache Spark统一计算引擎的配电网大数据预处理技术。通过基于Spark的大数据处理平台的搭建与使用,可以提高电力用户采集系统中的大规模数据的处理速度和效率。本文设计的一套基于统计学和机器学习算法的数据并行预处理方法,可以在大量配网数据不断采集的过程中运用流处理的方式清洗数据,并具有高扩展性和良好的性能。
通过本文提出的配电网大数据并行预处理方法可以有效减少配电网大数据的处理时间和数据分析复杂度。为电网调度、规划部门进一步高效的从历史数据中提取出对电力系统分析、预测有价值的数据提供了良好的数据基础。有利于提高配电网管理的信息化和智能化程度。