发明内容
为了实现电力交易和数据增值服务,需要多种挖掘电力市场大数据价值的方法和技术。面对数据量的激增,很多以往处理非大数据的算法遇到了瓶颈,这些算法的运行时间不能与大数据量的规模呈线性 关系,很多情况下,这些算法在挖掘大规模数据集时不能在多项式时间内获得高质量的挖掘结果,甚至受制于计算机的内存空间,算法不能正常的运行,必须借助于云计算的大数据挖掘技术。对此庞大的数据集进行分析,可以提高电力负荷预测的准确性,能够指导电力营销的方向,促进区域电力消费的经济发展。
本发明的技术方案如下:
1、基于正则表达式的信息采集技术
电力数据的采集主要针对结构化数据和非结构化数据两种情况,目前电力市场统一交易平台上的数据属于结构化数据,底层的DB数据库一般为Oracle、DB2、SQL Server、MySQL等,通过Sqoop API工具自定义数据表中的字段和属性,把结构化的数据表抽取到基于Hadoop架构的分布式数据仓库Hive中;电力非结构化的数据一般为互联网的客户端采集的网页信息,包括文本、图片、音频、视频、JSP动态数据等,通过Nutch工具定义正则表达式,把电力市场交易相关的经济指标、环境气象、社会统计、电力政策等方面的网页爬取到本地服务器,从网络客户端爬取的信息数据一般为数值、符号、文本等形式,都以文档的形式存储到基于Hadoop架构的分布式数据库HBase中。非结构化数据应用爬虫技术,采用JAVA设计,多线程处理。爬取规则可以按照广度优先、深度优先的策略进行,最优的策略暂不考虑。目标以域名为基准,不考虑IP。系统统一维护一份URL列表,所有搜索过的URL方在此处。
2、多级存储技术
HBase作为电力市场大数据的存储层,HBase分布式数据库的表定义为华中电力市场大数据采集、抽取、清洗、转换(ETL)的统一表格式,即以列族存储方式定义数据属性格式。Hadoop HDFS(分布式文件系统)为HBase提供了高可靠性的底层存储支持。Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。HBase、华中电力市场大数据转换器(ETL)、HDFS、Zookeeper与MapReduce构成分布式存储层。
3、电力市场大数据主成分分析方法
电力市场交易数据库的售电事务信息包括交易价格、区域经济指标、天气气候、机组出力、环保指标、燃料价格等,其中电力交易价格、经济指标、天气气候等信息因素构成了三维空间,它们之间存在非正交关系。电力市场大数据主成分分析方法主要是解决售电事务多维空间中各个轴之间的耦合关系,采用基于主成分分析的多元回归方法建立售电量事务信息模型,能够有效分析电力市场大数据的耦合关系。多维关系主成分分析在代数上的表示是n个随机变量X1,X2,…,Xn的线性组合,其几何意义是对原空间进行线性变换,用新的坐标系重新表示原空间,新坐标系是由原坐标系旋转后得到的,新坐标系的坐标轴相互正交并代表数据变异性最大的方向,提供一个对协方差结构的较为简单但更为精炼的刻画。
基于上述,本发明的模型建立如下:
1、基于正则表达式的数据采集方式
电力信息采集的大数据主要格式分为:结构化、半结构化和非结 构化数据。(1)结构化:指在网页上发布的表格,内涵标准的数据库数据,可直接读取存储进关系数据库中。(2)半结构化:指虽然用表格显示在网页中,但是内容行或者列之间的数据不一致,需要逐行或者逐列处理;或者将结构化的数据以文本行的形式显示,中间用分隔符分割等情况。(3)非结构化:纯文本数据,需要从文本中按照一定的规则查找匹配需要的数据。
采集的数据按照数据类型可分类:文本、图像(视频、音频)、表格等。爬虫将网页下载之后,根据HTML的语法规则,从中找出标题、主体中的文本内容,找出多媒体链接、以及内嵌的表格,分别对文本、多媒体、表格进行处理。
在所采集的信息中,以文本类型为主。本研究中,文本采集模式采用正则表达式进行匹配,JAVA内置的正则表达式基本满足要求,也可将匹配规则写成PERL脚本,其对文本的处理更加全面。模式数据库中存储的是正则表达式的模板,其中的关键词可以成组进行,使用正则表达式中的[]进行多选匹配,也可逐一进行。但是这些具体的匹配表达式中的关键词需要程序根据数据库中指定的关键词进行动态修改后再进行匹配。匹配时要考虑到数字的大写(一二三四),年份的简写,比如匹配“2010年”,有可能网页中写成“10年”,但是如果是“10年来”也可能被匹配,因此需要考虑很多的特殊情况。因此匹配模式是需要经常修改的,尤其在前期的测试维护中,先大范围的搜索,再去除不符合的特殊情况。要考虑到书面用语中的同义词,比如“年均”、“年平均”、“年均值”等词语的匹配。要考虑到关键词 位置的变换,这需要通过实际阅读网络文章,搜集可能出现的情况进行整理,才能匹配到最全的数据。
图像采集方式。有些数据是以图片的是发布的,也可能有些照片是需要搜集的,因此图像的采集只是按照指定的格式、尺寸、文件大小等进行抓取即可。由于不同的网站可能对图像添加了水印或者重新进行了编码压缩,导致检测图像的重复会很困难。因此只能检测绝对重复的图像,而不检测相似图像。每张图片保存其MD5值即可,重复的一律删除。
表格的采集最为复杂,先要在网页源文件中获取内置表格,并对表格的名称或者其中的文字进行快速检索,发现关键词才进行采集。
数据采集完毕后,需要对采集的数据再次进行过滤,主要过滤掉重复、错误的数据,将数据进行分类,以便存入数据库中。不同的网页显示的数据值可能有出入,这就需要制定规则,如何处理不同的数据,比如采取平均值、或者去掉最高和最低在平均抑或取相同值出现频率最高的一组等,具体的情况要视情而定。有些值是整数值,不能取平均数,那么取最大出现次数则比较可靠。有些是汇总的值,进行了四舍五入,那么将按照最大的单位进行四舍五入。比如电量可以是千瓦,也可以是百万千瓦,那么采集的数据按照哪一种需要根据实际情况处理。将所有的过滤及融合的模式设定好,程序会自动进行。如果出现特殊情况,则需要人工判断处理。
2、多级存储技术
电力交易的结构化和非结构化的大数据经过抽取后,都以文件形 式存储在分布式文件系统HDFS中。其中,Oracle、DB2、SQL Server、MySQL等结构化的大数据存储在分布式数据仓库Hive中,从网络客户端得到的非结构化数据存储在分布式数据库HBase中,以列族为组织形式,一个列族里的所有列成员都将最终存储在同一个HDFS文件中,而不同的列族有着各自对应的HDFS文件。存储在HDFS上的文档支持超大文件,它通常为数百GB、甚至数百TB大小的文件。
HDFS是一个高容错性的分布式文件系统,适合部署在廉价的机器上,能够提供高吞吐量的数据访问,适合大规模数据集上的应用。电力市场大量的非结构化数据可以存储在分布式文件系统HDFS上,供分析使用。
图4所示的HDFS系统由Client、NameNode、DataNode构成。
(1)Client通过与NameNode和DataNode交互访问HDFS中的文件。提供了一个类似POSIX文件系统的接口供用户调用。
(2)NameNode是整个文件系统管理者,负载管理HDFS的目录树和相关的文件元数据信息,负责监控各个DataNode的健康状态,一旦发现DataNode挂掉,则将该DataNode移出HDFS并重新备份上面的数据,保证系统的高容错性。
(3)DataNode负责实际的数据存储,并将数据信息定期汇报给NameNode。DataNode以固定大小的block块为基本单位组织文件内容,默认情况下block大小为64M。当客户端上传一个大的文件到HDFS上时,文件会被分割成若干个block,分别存储在不同的DataNode。同时为了数据局的可靠性会将每个block写到若干个不同的 DataNode上,这种文件切割后存储的过程对用户是透明的。
HBase介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。与hadoop一样,HBase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
HBase系统架构由HBase Client、Hmaster和HRegionServer组成,底层为Hadoop分布式系统。
3、电力市场大数据主成分分析方法
对从电力交易中心获取及基于正则表达式采集的电力信息数据进行分析,以得到不同相关数据之间的关系。电力市场交易数据库的售电事务信息包括交易价格、区域经济指标、天气气候、机组出力、环保指标、燃料价格等,其中电力交易价格、经济指标、天气气候等信息因素构成了三维空间,它们之间存在非正交关系。如图4所示。电力市场大数据主成分分析方法主要是解决售电事务多维空间中各个轴之间的耦合关系,采用基于主成分分析的多元回归方法建立售电量事务信息模型,能够有效分析电力市场大数据的耦合关系。
多维空间主成分分析方法
多维关系主成分分析在代数上的表示是n个随机变量X1,X2,…,Xn的线性组合,其几何意义是对原空间进行线性变换,用新的坐标系重新表示原空间,新坐标系是由原坐标系旋转后得到的,新坐标系的坐标轴相互正交并代表数据变异性最大的方向,提供一个 对协方差结构的较为简单但更为精炼的刻画。
主成分,设X=(X1,X2,…,Xn)T为一n维随机向量,其主成分为Yi(i=1,2,…,k,k≤n),则Yi满足以下条件:
(1)
(2)Y1,Y2,…,Yk互不相关
(3)ai的取值使得Var(Yi)最大
图5所示是在原售电事务空间中原有的信息,如气象,经济,电价等因素,内部由于自相关,相互不正交,经过主成分分析后,将变换成相互正交的轴,这样可以在新的坐标系中先建立售电量的分布函数,再将原始的轴在新坐标方程回代,就可以得到反映各因素之间耦合的售电量分布函数。
主成分法分析的基本步骤如下:
设R是随机向量X=(X1,X2,…,Xp)T的协方差矩阵。它有特征值和特征向量对(λ1,e1),(λ2,e2),…,(λp,ep),其中λ1≥λ2≥…≥λp≥0。则第i主成分是:
此时:
其中,由于经过标准化以后的样本Y*=(yij *)N*J中的每个因素的观测值ytj,都服从正态分布,所以协方差矩阵为
特征值的大小反映了与之相关的主成分所包含新信息的比重大 小,即样本在这一方向上变异程度的大小。所以当特征值接近零时与之相关的主成分已经不包含新的信息,引入其将会增大空间的自相关性。
累计贡献率,第i主成分的累计贡献率定义为:
若当βs≥α,Y1,Y2,…,Ys称为样本X1,X2,…,Xp的显著性水平为a的主成分,以Y1,Y2,…,Ys来代替X1,X2,…,Xp,对原空间在给定显著性水平下进行重新表示。βs是表征前s个主成分所含信息的比重。图6说明了求解一个样本的主成分算法的流程。
本发明的有益效果如下:
本研究基于电力市场应用,提供了应用正则表达式的信息采集技术及多级存储的方法。电力交易的结构化和非结构化的大数据经过抽取后,都以文件形式存储在分布式文件系统HDFS中,可以将超大规模的数据都存储到服务器中,HBase将数据存储在分布式文件系统HDFS的索引上,可以进行web文本的分类和聚类,执行语义分析,以便高速查询。利用主成分分析的多元回归方法建立售电量事务信息模型,有效分析电力市场大数据的耦合关系。为了实现电力交易业务的数据增值服务,研究挖掘电力市场大数据价值的方法和技术,提取电力交易中心的交易业务大数据,分析典型应用场景,利用数据集成 管理、数据存储、数据计算、分析挖掘等技术,实现面向典型业务场景的模式创新及应用提升。
具体实施方式
本实例以华中电力市场为研究对象,通过正则解析采集华中电力市场的相关数据,将相关大数据以多级存储的方式存储在服务器中,应用主成分分析法分析数据关联,及电力市场大数据的耦合关系。
1.华中电力市场信息采集
针对华中电力市场的相关结构化、半结构化和非结构化数据,采用JAVA设计,多线程处理。爬取规则可以按照广度优先、深度优先的策略进行,最优的策略暂不考虑。目标以域名为基准,不考虑IP。系统统一维护一份URL列表,所有搜索过的URL方在此处。爬虫将网页下载之后,根据HTML的语法规则,从中找出标题、主体中的文本 内容,找出多媒体链接、以及内嵌的表格。分别对文本、多媒体、表格进行处理。
2.华中电力爬取数据的分布式存储(Hive)
(1)从本地文件系统中导入数据到Hive表
从本地文件系统中将数据导入到Hive表的过程中,其实是先将数据临时复制到HDFS的一个目录下,然后再将数据从那个临时目录下移动(是移动,不是复制)到对应的Hive表的数据目录里面。(例如:hive>LOAD DATA LOCAL INPATH‘/home/work/test.txt’INTO TABLE Test;)
(2)从HDFS上导入数据到Hive表
第一步,将文件复制到HDFS某个文件夹中(hadoop fs-put test.txt/data/test);
第二步,将文件导入到Hive已建好的表中(hive>LOAD DATA INPATH'/data/test/test.txt'INTO TABLE Test;)。
Hive默认可以直接加载文本文件(TextFile),这种方式通用性较好。
(3)程序导入数据到Hive
网页数据抓取的数据可以直接导入到Hive,需要调用Hadoop Java包的TextFile类,以数据流形式导入,需要分析数据间隔方式。程序实现的方式通用性不强,但针对特定网页进行爬取数据后,直接存储到Hive的专用性较好。
(4)分布式系统与传统数据库的数据互导
(a)Mysql与HDFS互导数据
环境:宿主机器操作系统为Win7,Mysql安装在宿主机上,宿主机地址为192.168.10.10
三台虚拟机操作系统为Ubuntu-12.04.1-32位
三台虚拟机已成功安装Hadoop,并实现免密钥互访,配hosts为:
192.168.10.11masternode
192.168.10.12slavenode1
192.168.10.13slavenode2
/etc/profile已配置好必备环境变量HADOOP_HOME,JAVA_HOME
实验在masternode上进行,已成功连接mysql
步骤一,下载安装包:
安装的Hadoop版本是原生hadoop-0.20.203.0,SQOOP不支持此版本,可使用CDH3版本hadoop,也可以通过拷贝相应的包到sqoop-1.2.0-CDH3B4/lib下,依然可以使用。
下载相关文件:
http://archive.cloudera.com/cdh/3/hadoop-0.20.2-CDH3B4.tar.gz
http://archive.cloudera.com/cdh/3/sqoop-1.2.0-CDH3B4.tar.gzsqoop-1.2.0-CDH3B4依赖hadoop-core-0.20.2-CDH3B4.jar,所以你需要下载hadoop-0.20.2-CDH3B4.tar.gz,解压缩后将hadoop-0.20.2-CDH3B4/hadoop-core-0.20.2-CDH3B4.jar复制到 sqoop-1.2.0-CDH3B4/lib中。
另外,sqoop导入mysql数据运行过程中依赖mysql-connector-java-*.jar,所以需要下载mysql-connector-java-*.jar并复制到sqoop-1.2.0-CDH3B4/lib中。
步骤二,相关配置:
修改SQOOP的文件configure-sqoop,注释掉hbase和zookeeper检查(除非你准备使用HABASE等HADOOP上的组件)#if[!-d"${HBASE_HOME}"];then
#echo“Error:$HBASE_HOME does not exist!”
#echo‘Please set$HBASE_HOME to the root of your HBase installation.’
#exit 1
#fi
#if[!-d"${ZOOKEEPER_HOME}"];then
#echo“Error:$ZOOKEEPER_HOME does not exist!”
#echo‘Please set$ZOOKEEPER_HOME to the root of your ZooKeeper installation.’
#exit 1
#fi
修改/etc/profile环境变量文件(su root之后,sudo gedit/etc/profile):
添加export SQOOP_HOME=/home/grid/sqoop
在原有PATH后添加:$SQOOP_HOME/bin
步骤三,在mysql中建立测试用户,测试表和数据,并测试sqoop连接mysql:
创建用户sqoop并授权:
grant all privileges on*.*to'sqoop''%'identified by'sqoop'with grant option;
创建表空间(schema)sqoop,并创建测试表:
create table students(
id int not null primary key,
name varchar(20),
age int)
插入测试数据:
insert into students values('10001','liyang',29);
insert into students values('10002','lion',28);
insert into students values('10003','leon',26);
在masternode测试sqoop能否成功连接宿主机器上的mysql:sqoop list-tables--connectjdbc:mysql://192.168.66.96:3306/sqoop--username sqoop--password sqoop
如果能正确显示出sqoop表空间中的students表,就说明sqoop已经可以成功连接mysql!
步骤四,将mysql中sqoop表空间的students表的三行数据导 入HDFS:
启动hadoop:
start-all.sh
用jps验证启动是否成功
显示正在运行以下进程即为启动成功:
2820 SecondaryNameNode
4539 Jps
2887 JobTracker
2595 NameNode
从mysql导入数据,运行如下命令:
sqoop import--connect jdbc:mysql://192.168.66.96:3306/sqoop--username sqoop--password sqoop--table students-m 1
验证导入数据是否成功:
若导入成功,运行hadoop dfs-ls将能看到根目录/user/grid/下有以表名命名的文件夹students
运行hadoop dfs-ls/user/grid/students能看到该文件夹中包含文件:/user/grid/students/part-m-00000
运行hadoop dfs-cat/user/grid/students/part-m-00000就能看到该文件已经包含mysql中students表的三行数据:
10001,liyang,29
10002,lion,28
10003,leon,26
步骤五,将HDFS中的数据导入Mysql的students表中:
首先将mysql的students表数据清空:
delete from students;
然后在masternode上执行导出数据命令:
sqoop export--connect jdbc:mysql://192.168.66.96:3306/sqoop--username sqoop--password sqoop--table students--export-dir
hdfs://masternode:9000/user/grid/students/part-m-00000
若成功,在mysql中会看到students表中的数据恢复了。
注意:过程中可能会因为slavenode的50010端口没打开而报错,需用root用户通过sudo ufw allow 50010命令打开端口。
(b)Mysql与Hbase互导数据
将mysql的数据导入hbase的命令格式为:
sqoop import--connect jdbc:mysql://mysqlserver_IP/databaseName--username--password password--table datatable--hbase-create-table--hbase-table hbase_tablename--column-family col_fam_name--hbase-row-key key_col_name
其中,databaseName和datatable是mysql的数据库和表名,hbase_tablename是要导成hbase的表名,key_col_name可以指定datatable中哪一列作为hbase新表的rowkey,col_fam_name是除rowkey之外的所有列的列族名。
例如:可通过如下命令将Mysql中的students表导入到Hbase中:
/home/grid/sqoop/bin/sqoop import--connect jdbc:mysql://192.168.66.96/sqoop--username sqoop--password liyang16--table students--hbase-create-table--hbase-table students--column-family stuinfo--hbase-row-key id
成功执行后,可在hbase中用以下命令查看结果:
hbase(main):011:0>scan'students'
ROW COLUMN+CELL
10001column=stuinfo:age,timestamp=1356759994058,value=2910001column=stuinfo:name,timestamp=1356759994058,value=liyang
10002column=stuinfo:age,timestamp=1356760044478,value=2810002column=stuinfo:name,timestamp=1356760044478,value=lion
10003column=stuinfo:age,timestamp=1356760044478,value=2610003column=stuinfo:name,timestamp=1356760044478,value=leon
3row(s)in 0.0900seconds
(c)Oracle与Hbase互导数据
将Oracle中的dept表(列为id,name,addr)导出至hbase中的dept表(行键为id,列族为deptinfo)
sqoop import--append--connect jdbc:oracle:thin:192.168.66.90:1521:orcl--username test--password test--m 1--table dept--columns id,name,addr--hbase-create-table--hbase-table dept--hbase-row-key id--column-family deptinfo
电力数据的主成分分析法
通过以上的采集、存储步骤,可以将与华中电力市场相关的数据以多级存储的方法存在服务器中。通过信息挖掘存储在服务器端的大数据,发现隐藏在大型数据集中潜在的数据模式和数据规律,将数据转换成有用的信息和知识,帮助电力交易的决策者分析历史数据及当前数据,并从中发现隐藏的关系和模式,预测未来可能发生的电力交易行为和市场导向。下面以一个华中电力市场交易例子,应用主成分分析法分析电量与气候及时间的关系。
华中电力市场交易的主要因素包括电量、月份(时间)、电价、最高气温、最低气温、平均气温、降水量等,其他因素可以依据此分析展开应用。
表1.华中某电力市场交易的历史数据
表1所示的内容是华中某电力市场交易数据库中抽取的部分历史数据样本。当数据量累积到百万条以上时,数据的查询与分析工作必须移植到Hadoop云平台HBase进行海量存储,通过Hadoop生态系统的Sqoop工具,把数据迁移到Hive数据仓库中,使用SQL语言抽取组成表1的大数据表(数据文件达到TB级)进行分析。采用基于MapReduce框架,对电力市场交易大数据进行分布式主成分回归分析与预测,其分析流程如图5所示。
图7中,华中电力市场大数据分析经过了Map和Reduce两个阶段,其中Map阶段大数据被分割为大量的小样本数据文件,对每个小样本数据基于主成分分析的回归分析,最后经过Reduce阶段输出最优回归模型进行交易量预测。具体的步骤如下:
(1)华中电力市场交易大数据通过SQL语言,组成需要分析的视图表。基于Hadoop平台的MapReduce编写数据样本分块程序,使待 分析的数据样本分割为固定大小的数据块,数据分别存储在网络中的计算机中,启动Map阶段。
(2)Map阶段:对各个数据块使用主成分法。首先对各个相关因素(电量、月份,电价,最高气温,最低气温,平均温度,降水量等)进行标准化,计算各数据样本的协方差矩阵R,计算协方差矩阵的特征值和特征向量,计算各数据样本的累计贡献率,迭代排序,取前n个正交向量特征作为主成分。对主成分特征变量建立六种回归模型,进行F检验,获得最满意的回归模型,使用样本历史数据计算预测的电量交易。启动Reduce阶段。
华中电力大数据的分析最常用的方法是根据以往各因素的历史数据,通过线性回归的方法,拟合并预测交易信息。多元线性回归模型如下式所示:
Y=a0+a1x1+a2x2+…+anxn+ε (4)
式中的线性表达式能较好的反映Y与因素x1,x2,…xn之间的线性关系。华中电力市场各因素与预测量之间很少呈现简单的线性关系,为了拓广回归模型的适用范围,采用了以下几种因素函数变换方法。函数表达式及函数说明如表2所示。
表2回归函数及函数描述
将Y与Xi,i=1,2,…,n分别建立上述六种回归模型,然后分别进行F检验,选择最大F值对应的回归模型作为Xi对应的函数变换形式,记为下式:
yi=fi(xi),i=1,2,…,n (5)
将Y对y1,y2,…,yn进行逐步回归,将上式回代,即得Y对x1,x2,…,xn的非线性多元回归模型。
(3)Reduce阶段:每样本数据获得的电量交易提交到Namenode服务器,建立六种回归模型,进行Reduce阶段的F检验,获得全样本大数据的最优回归模型,计算预测电量交易。
对于每一个x值,在Y~N(A+Bx,σ2)的假定下,有:
服从F(1,n-2)分布 (6)
从上式得出,对于给定显著性水平α,由P{F>F1-a(1,n-2)}=α得到,H0的拒绝域为F>F1-a(1,n-2)并且F值越大表明所得回归模型越准确。F值的大小标志着所建立模型的准确和实用程度。
通过对上述复合函数建立电量y与各种因素x1,x2,…x6之间的综合表达式,按照前面利用F检验对上面模型进行评估,所得的模型为95%的置信度。通过基于Hadoop系统MapReduce框架的综合表达 式及其梯度函数,可以对华中电力市场的不同因素进行预测和灵敏度分析。