本发明涉及数据挖掘,具体涉及数据关联关系网络构建方法。
背景技术:
关联规则挖掘,率先是由rabeshagrawal等人在1993年提出,是数据挖掘技术中一个非常重要的研究方向,借助它可以从海量的数据中发现数据项之间的关联关系,而某些关联关系可以辅助企业制定相关的决策。国内外学者对于关联关系进行了大量的研究,成果丰硕。
过去在关联关系网络构建方面主要使用爬虫技术从网页上爬取所需网页,然后对网页内容进行加工清洗得到可以分析的文本语料库,然后基于单张表进行关联规则挖掘,最终生成关联关系网络。但是目前单表数据挖掘已经不满足分析需求,对多表间关联规则挖掘的研究也有一些探讨,但对多表间多概念多层次的研究尚没有见到相关的研究报道。
技术实现要素:
本发明通过加入图算法和文本相似度映射,通过对数据进行关联关系构建,使不同业务系统的数据最大化关联,达到了数据表自动关联技术效果。具体技术方案如下:
数据关联关系网络构建方法,包括如下过程:
步骤1:数据的采集和预处理阶段:选取不同业务系统中部分数据,并对数据进行清洗、整合,人工标注每张表的主外键关系,生成数据字典;
步骤2:构建数据关联算法:以图论中的最小生成树作为多表之间连接模型,将数据库中表的个数表示为无向连通图g(v,e)中的顶点数v,以欧式距离作为边上的权值,所有边上的权值都为1,从连通图g中的任一个顶点出发进行遍历,各个顶点间的边以表的主键和外键间的关系、字段等同关系作为生成边的条件;
步骤3:基于上述算法的数据流程构建了表间关联数据模型,该模型主要对表间各列存在的关联关系进行识别,并计算字段注释文本相似度和数据的关联强度,依据某个阈值确定各表之间的关联关系。
优选方案一,所述步骤2的具体过程如下:
步骤2.1:初始化,得到数据库中两两表之间的关系;
步骤2.1:根据所连接的数据库,利用_com_ptr_t对象pset,得到所有表名,并保存在m_tabarray数组中;
步骤2.3:利用adox中的函数接口,将所有的关键字对应的字段,以[表名].[关键字]的形式保存在coblist链表中;
步骤2.4:得到所有表与表之间的关系,步骤如下:
步骤2.4.1:从链表prmkeyobj中循环读取表名和关键字;
步骤2.4.2:form∈m_tabarray比较数组中表与链表中的表是否一致;
步骤2.4.3:if两表关键字段相同(两表不同);
步骤2.4.4:生成连接穿串:[表1.关键字字段名]=[表2.关键字字段名]
步骤2.4.5:数组m_joinarray保存连接串;
步骤2.5:利用上述m_joinarray数组中的元素作为节点,求最小生成树;输入:输入节点,输出:求最小生成树,即whereu1.m=......=um.m的表达式;具体过程包括:
步骤2.5.1:初始化树节点,用函数inittree实现;
步骤2.5.2:形成初始化的树,在这一步中使用递归算法调用form_tree函数;
步骤2.5.3:对初始化的树进行编辑和修剪,用edittree函数实现;生成最终的树。
优选方案二,所述步骤3的具体过程如下:
步骤3.1:数据采集处理,主要是对数据源中的表进行列抽取,然后提取其中的表头与实例,将第一列文本作为目标文档,第二列作为测试文档,使用jieba对目标文档进行分词,计算出词语的词频,对词频低的词语进行过滤,建立语料库词典;
步骤3.2:统计,统计目标文档总列m,统计目标文本词数n,计算目标文本第一个词在该文本中出现的次数n,再找出该词在所有文本中出现的次数m,则该词的tf-idf为:n/n*1/(m/m),根据目标文档的数据,计算测试文档中每个词的tf-idf值;
步骤3.3:计算,使用余弦相似度来计算测试文档和每个目标文档之间的夹角;夹角越小,越相似;
步骤3.4:输出,把相似度存储成数组进行输出,通过设定的阈值判断目标文档和测试文档是否存在关联关系。
优选方案三,还包括后续的步骤4,步骤4用于验证步骤3已经确定关联的两列数据,两列数据定义为第一列数据、第二列数据,具体过程包括:
步骤4.1:对第一列数据的所有文本进行分词,建立语料库词典;
步骤4.2:对第二列的第一行文本进行分词,得到如下分词列表;
步骤4.3:制作语料库,语料库是一组向量,向量中的元素是一个二元组,分别为编号、频次数,对应分词后的文本中的每一个词;
步骤4.4:使用tf-idf模型对语料库建模,获取第二列第一行文本中每个词的tf-idf值;
步骤4.5:将第一列转换成稀疏矩阵,利用余弦方法计算第二列第一行文本和第一列每一行文本的相似度,以向量的夹角为考量角度,以向量的内积(各对应元素相乘求和)比两个向量的模的积为计算结果;余弦相似度计算公式:
步骤4.6:对第一列的每一行文本,分析与第二列第一行文本的相似度,根据相似度排序;
步骤4.7:重复步骤4.2-步骤4.6,计算第二列的其它行文本和第一列文本的相似度。
优选方案三的进一步优选方案,所述tf-idf值是文本相似度计算方法,tf-idf=tf*idf;tf指一篇文档中单词出现的频率,idf指语料库中出现某个词的文档数,取对数,具体公式如下:
tf=词在文档中出现的次数/文档中所有词的个数
idf=log(语料库的文档总数/语料库中出现某单词的不同文档个数)。
本发明相对于现有技术的进步在于:
(一)科学的定量分析方法,通过采取简单文本映射和图算法能够发现部分关联关系,通过引入文本相似度作为量化指标,大大提高了匹配判断的准确性。
(二)可较为高效的挖掘多关系序列模式,通过指定关键业务字段解决了基于虚拟连接表的统计偏斜问题。
(三)实施例中,通过对电力行业部分数据进行关联关系构建,使不同业务系统的数据最大化关联,达到了数据表自动关联技术效果,具有表间关联度高的优势,和有效挖掘潜在业务价值的意义。
附图说明:
图1是本发明实施例中数据关联关系网络构建方法流程示意图。
图2是本发明实施例中数据的采集和预处理的流程示意图。
图3是本发明实施例中构建表间关联数据模型的流程示意图。
具体实施方式:
实施例:
以电力行业部分数据为例说明本发明的实施过程。
数据关联关系网络构建方法,包括以下步骤:
步骤1:数据的采集和预处理阶段
考虑到业务需求,本实施例选取了电网行业的基础支撑平台、业务支持系统、智能互动网站等系统的43张数据表作为研究对象,因为数据来自不同系统为了数据更好的关联,我们需要剔除一部分影响关联效果字段(目标端写入时间、变更时间、省市编码等),重新确定表的主外键,依据数据表的主外键和等同关系建立数据字典,如下表所示:
步骤2:构建数据关联算法
步骤2.1:初始化,得到数据库中两两表之间的关系;
步骤2.1:根据所连接的数据库,利用_com_ptr_t对象pset,得到所有表名,并保存在m_tabarray数组中;
步骤2.3:利用adox中的函数接口,将所有的关键字对应的字段,以[表名].[关键字]的形式保存在coblist链表中;
步骤2.4:得到所有表与表之间的关系,步骤如下:
步骤2.4.1:从链表prmkeyobj中循环读取表名和关键字;
步骤2.4.2:form∈m_tabarray比较数组中表与链表中的表是否一致;
步骤2.4.3:if两表关键字段相同(两表不同);
步骤2.4.4:生成连接穿串:[表1.关键字字段名]=[表2.关键字字段名]
步骤2.4.5:数组m_joinarray保存连接串;
步骤2.5:利用上述m_joinarray数组中的元素作为节点,求最小生成树;输入:输入节点,输出:求最小生成树,即whereu1.m=......=um.m的表达式;具体过程包括:
步骤2.5.1:初始化树节点,用函数inittree实现;
步骤2.5.2:形成初始化的树,在这一步中使用递归算法调用form_tree函数;
步骤2.5.3:对初始化的树进行编辑和修剪,用edittree函数实现;生成最终的树;
步骤3:构建表间关联数据模型,
步骤3.1:数据采集处理,主要是对数据源中的表进行列抽取,然后提取其中的表头与实例,将第一列文本作为目标文档,第二列作为测试文档,使用jieba对目标文档进行分词,计算出词语的词频,对词频低的词语进行过滤,建立语料库词典;
步骤3.2:统计,统计目标文档总列m,统计目标文本词数n,计算目标文本第一个词在该文本中出现的次数n,再找出该词在所有文本中出现的次数m,则该词的tf-idf为:n/n*1/(m/m),根据目标文档的数据,计算测试文档中每个词的tf-idf值;
步骤3.3:计算,使用余弦相似度来计算测试文档和每个目标文档之间的夹角;夹角越小,越相似;
步骤3.4:输出,把相似度存储成数组进行输出,通过设定的阈值判断目标文档和测试文档是否存在关联关系;
步骤4:方法验证及分析
为了检验表间关联数据创建算法的有效性和科学性,本实施例设计了以下实验流程:
首先,从已经建立关联关系的任意两列数据为研究对象,这里选取了已经建立关联关系的客户地址和联系地址两列为例对实验结果进行了分析;其次,人工对这个列对进行关联,借助分析人员的判断来确定这些数据的相关性,接着,利用本文提出的表间关联数据创建模型中的方法进行计算,最终得到文本分析结果(文本相似度),最终判断是不是能作为表间关联条件。
表1:
分析步骤:
步骤4.1:对客户地址进行分词,建立语料库词典(为了简化问题,本文没有剔除停用词“stop-word”),得到如下分词列表:
['江西省','赣州市','赣县','梅林','镇','城东','居委会','花园路','702','号']
['浙江省','温州市','永嘉县','桥下','镇梅岙下','村','沿江','西路']
['北京市','朝阳区','呼家楼','街道','南里','8','号楼']
['北京市','石景山区','京原','路京源','路','5','号','1','号楼']
['安徽省','合肥市','庐阳区','寿春路','318','号','4','号楼']
['上海市浦东新区','德州','路','380','弄','59','号','5','楼']
['河北省','秦皇岛市','抚宁县','察院','口','74','号']
步骤4.2:对联系地址的第一条数据进行分词,得到如下分词列表:
['江西省','赣州市','赣县','梅林','镇','城东','居委会','花园路','702','房号']
步骤4.3:制作语料库,使用doc2dow制作语料库,语料库是一组向量,向量中的元素是一个二元组(编号、频次数),对应分词后的文档中的每一个词;
编号与词之间的对应关系:
{'朝阳区':23,'德州':41,'号楼':21,'380':37,'河北省':47,'合肥市':33,'京原':27,'桥下':11,'江西省':5,'路':29,'街道':24,'赣县':7,'1':25,'村':10,'石景山区':28,'抚宁县':46,'4':32,'赣州市':8,'花园路':6,'号':1,'庐阳区':36,'西路':16,'口':44,'安徽省':34,'5':26,'寿春路':35,'镇梅岙下':17,'702':0,'秦皇岛市':48,'74':43,'楼':42,'沿江':13,'察院':45,'城东':2,'南里':20,'呼家楼':22,'梅林':4,'59':38,'温州市':15,'永嘉县':12,'北京市':19,'318':31,'8':18,'弄':40,'居委会':3,'路京源':30,'上海市浦东新区':39,'镇':9,'浙江省':14}
语料库:[[(0,1),(1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1)];[(10,1),(11,1),(12,1),(13,1),(14,1),(15,1),(16,1),(17,1)];[(18,1),(19,1),(20,1),(21,1),(22,1),(23,1),(24,1)];[(1,1),(19,1),(21,1),(25,1),(26,1),(27,1),(28,1),(29,1),(30,1)];[(1,1),(21,1),(31,1),(32,1),(33,1),(34,1),(35,1),(36,1)];[(1,1),(26,1),(29,1),(37,1),(38,1),(39,1),(40,1),(41,1),(42,1)];[(1,1),(43,1),(44,1),(45,1),(46,1),(47,1),(48,1)]]
以同样的方法把测试文档也转换为二元组的向量;
[(0,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1)]
步骤4.4:使用tf-idf模型对语料库建模,获取测试文档中每个词的tf-idf值;
tf-idf算法:tf-idf是最基础的文本相似度计算方法,tf-idf=tf*idf。tf(termfrequency)指一篇文档中单词出现的频率,idf(inversedocumentfrequency)指语料库中出现某个词的文档数,取对数;
tf=词在文档中出现的次数/文档中所有词的个数
idf=log(语料库的文档总数/语料库中出现某单词的不同文档个数)
[(0,0.33),(2,0.33),(3,0.33),(4,0.33),(5,0.33),(6,0.33),(7,0.33),(8,0.33),(9,0.33)]
步骤4.5:将目标文档转换成稀疏矩阵,利用余弦方法计算测试文档和每一条目标文档的相似度;以向量的夹角为考量角度,以向量的内积(各对应元素相乘求和)比两个向量的模的积为计算结果;余弦相似度计算公式:
步骤4.6:对每个目标文档,分析测试文档的相似度,根据相似度排序。[(0,0.998),(1,0.0),(2,0.0),(3,0.0),(4,0.0),(5,0.0),(6,0.0)]
步骤7:重复上述的步骤分别其他测试数据和目标文档的相似度。
结果分析:数据相似度分析结果如表1所示,由于页面限制,本文只展示了部分文本相似结果。从表一可以看出,相似度结果在0.93以上的数据对基本可以确定是同一地址,根据相似度确定这两列数据中能匹配成功的数据对个数,再统计目标表的数据量,计算比值,根据比值确定数据关联强度,最终确定这两列可以作为关联条件进行关联。