实例层数据清洗技术研究
2022-05-30胡文瑜应康辉
胡文瑜,应康辉*
(1.福建工程学院 计算机科学与数学学院,福建 福州 350118;2.福建省大数据挖掘与应用技术重点实验室,福建 福州 350118)
0 引 言
随着信息技术的高速发展,生成、收集和存储大型数据集变得越来越容易。虽然通过大数据分析可获得有价值的信息与智慧见解,但这是建立在数据可用性或脏数据被充分清洗的基础上。影响数据可用性的因素包括:不一致值、重复值、空值和拼写问题等。数据清洗是清洗数据中存在的错误和不一致等问题来提高数据质量[1]。数据质量问题分为数据模式和实例数据,数据清洗也分为模式层清洗和实例层清洗。模式层的清洗主要是完整性约束、异构模式设计和结构冲突,需要通过程序自动发现或者人工实现清洗。实例层的清洗主要对属性值和重复记录进行清洗[2]。数据集中的属性和重复记录问题是脏数据的主要构成,均属于实例层数据清洗目标,所以对实例层数据清洗技术的研究是有意义和价值的。
1 实例层数据清洗
数据清洗主要在数据仓库、数据库知识发现和决策支持这三个领域研究。数据仓库领域中,数据清洗是构建数据仓库的第一步。作为数据清洗中重要的组成部分,实例层数据清洗显得更加重要。实例层数据清洗有以下两个方面研究:(1)属性错误检测与消除:文献[3]采用统计方法来检测数值型属性;聚类方法来寻找出字段级检查不出的孤立点;分箱方法用于清洗异常数据。文献[4]对关系中的数据进行插入、删除等操作来消除数据冗余问题。(2)重复记录检测与消除:采用基于语义和字面的检测方法来检测重复记录;优先队列、近邻排序等方法消除重复记录[5-6]。表1介绍了一些国内外研究方法。图1描述了实例层数据清洗算法分类。
表1 现有的一些国内外实例层数据清洗方法
图1 实例层数据清洗算法分类
1.1 属性错误检测
自动检测属性错误方法减少了人工操作且效率高,具体的方法有基于统计的方法[12]、聚类方法[13]和关联规则方法[14]。表2对上述三种方法进行了比较。
表2 自动检测属性错误方法的比较
1.2 属性错误清洗
属性错误清洗包括3个方面:(1)清洗空缺值:采用忽略元组、全局变量、属性的平均值和中间值等统计值来填充空缺值[15]。(2)清洗噪声数据:采用分箱法,“箱的深度”表示不同的箱里有相同个数的数据,“箱的宽度”表示每个箱中数值的取值区间为常数,把属性值分配到等深或等宽的“箱”中,用箱中属性值的平均值来替换“箱”中的属性值[16]。(3)清洗不一致数据:采用条件函数依赖、标准函数库和汇总分解函数来清洗。例如属性之间的关系采用函数依赖来清洗不一致数据。表3是关于属性错误清洗方法的比较。
表3 属性错误清洗方法的比较
1.3 重复记录检测
检测重复记录的方法有:基本的字段匹配方法[17]、Smith-Waterman算法、R-S-W算法、编辑距离方法[18]、基于N-gram的字符串匹配算法、中文字段匹配算法和余弦相似度函数[19]、基于统计的词语相似度算法、基于语义资源的算法。
基本的字段匹配方法是把两个分词串中顺序匹配的分词个数除以所有分词个数的平均值,计算出匹配度。如表4中两条记录中的地址字段值,字段匹配度=k/((|A|+|B|)/2)=0.85,|A|和|B|分别为A,B中分词的个数。
表4 重复记录例子
文献[19]提出改进后的Smith-Waterman算法(R-S-W),该算法对拼写错误和字符串的顺序以及缩写有着深入研究,却无法应用在中文。文献[20]提出基于N-gram的字符串匹配算法,对两个字符串中n个字符进行排序组合及比较两个字符串的极限阈值,从而得出两个字符串是否相同。文献[21]采用改进编辑距离方法来计算中文句子的相似度。文献[22]提出了基于PMI-IR算法,该方法是搜索引擎来获取数据并采用点互信息作为词语相似度计算的指标。文献[22]提出一种基于知网、面向语义的词汇语义相似度计算方法,该方法通过概念切分解决知网中未登录的语义相似度问题。表5是关于常用重复记录检测算法的比较。
表5 常用重复记录检测算法的比较
1.4 重复记录清洗
消除重复记录的算法有:优先队列算法[23]、近邻排序算法(SNM)、多趟近邻排序(MPN)、优化的多趟近邻排序算法(OMPN)[24]。优先队列法是由Monge提出,首先数据集会根据关键词进行排序,再对排序后的顺序依次扫描数据集。Hernandez[24]提出近邻排序法,该方法通过关键字进行排序,采用固定大小的滑动窗口在排序后的数据集上滑动并重复检测窗口,减少记录的比较次数。文献[13]提出多趟近邻排序法。该方法要求在排序的数据集上使用近邻排序方法,但使用的是不同的关键词和较少的窗口,而且还要对MPN算法的结果求传统闭包。文献[25]改进了近邻排序算法,通过比较相似度与阈值来调整窗口值的大小,并加入有效权值来减少字段缺失的影响。文献[25]中OMPN算法对MPN算法在选取排序关键字时过于依赖专家经验的缺陷进行了改进。衡量三种近邻排序算法的标准是召回率、误识别率和精确度。表6是上述各种算法的比较。
表6 常用重复记录清洗算法比较
上面分别对实例层数据清洗中属性错误、重复记录各自对应的方法进行比较和分析,属性错误检测中主要针对结构化和半结构化数据,还需要对非结构化数据进行研究。属性错误清洗中分箱和回归的方法都相对简单,容易解决,但准确性不高。重复记录检测中的算法都比较简单直观,但是中英文和语义的关系不能两者都实现,下一步还需要实现中英文和语义的结合。重复记录清洗中近邻排序、多趟近邻排序和优化的多趟近邻排序都是基于窗口大小和排序关键字来判别,而优先队列只是运用关键字排序来判定,效果没有排序算法的好。
2 数据清洗与其他领域的结合
数据清洗可以和其他领域进行结合,获得更好的应用发展。例如,数据清洗中重复记录技术或方法应用于电气工程领域的数据汇聚与数据清洗中。随着数字电厂的不断建设、大数据平台的逐步完善和智能设备的进一步推广,电力系统数据量急剧增长,需要展开大量的数据分析,然而电力数据在采集、汇聚过程中会出现数据质量问题,造成数据融合困难,这就需要结合数据清洗方法,对电力数据进行实时校验和清洗,提高数据的可用性[26]。下面介绍了数据清洗的一些应用领域,表7对实例层数据清洗与其他领域的结合情况进行了阐述。
2.1 医疗领域
医疗领域数据是需要进行数据清洗的一个领域,尤其在医疗体检数据方面,由于医疗体检中心只对受检者提供当次的体检报告,缺乏对受检者历史数据的分析,导致医疗机构体检数据库中存在基本信息缺失、体检项目名称不同、体检指标参考值范围不同的问题[27],因此需要对上述出现的问题进行数据清洗,从而保证数据的干净。林予松等人[28]提出基于分词和权重的字段匹配算法,解决了体检数据不一致的问题,但还需要综合考虑部分重心词前移和算法准确性不高的情况。此外医疗体检中数据容易出现唯一标志码缺失问题,是数据清洗的主要障碍之一。
2.2 电气领域
随着电力系统信息化程度的提高和智能电网的加速建设,用户电力数据量呈指数型增长状态,但是电力数据量的增长而导致电力数据也出现诸多问题。文献[29]将电力数据看成时间序列,用ARIMA拟合并迭代检验的方法修复缺失数据,但是该方法利用的信息较少,且不适合修复缺失点连续分布的情况。文献[30]通过训练RBF神经网络作为状态转移方程,再利用卡尔曼滤波方法对数据进行滤波并修复,但是该方法计算量较大,在细节上把握不够精确。田英杰等人[31]提出函数型数据分析对错误和缺失数据进行修正和补全。通过函数估计方法,将原有观测个体的离散数据映射到一个新的函数空间,将数据中缺失的成分利用相似的方法修复缺失数据,但是该方法利用的信息较少,且不适合修复缺失点连续分布的情况。随着用户电力数据量逐步的增长,使得该领域数据清洗的任务变得更加困难和富有挑战性。
2.3 交通领域
交通数据的采集和处理技术是智能交通系统的关键性技术,无线电和计算机技术的蓬勃发展使得RFID检测技术作为一种新型检测技术广泛应用于道路交通数据采集。由于RFID检测设备故障、通信系统故障及环境等异常原因,采集到的交通数据存在冗余、遗漏、错误和不精确的现象,将导致产生不稳定因素,影响交通状态估计、预测及评价,进一步影响交通管理和公众出行信息服务的质量。文献[32]提出一种基于最大频繁模式因子的高位孤立点挖掘算法,能解决孤立点挖掘算法中存在的不容易获取完全频繁模式和时间复杂度高等问题,并且可以减少占用内存,提高运行效率。为了减少数据的错误和冗余,对交通数据的数据清洗得更全面和准确。
表7 实例层数据清洗的领域应用情况
3 实例层数据清洗面临的挑战及应用研究展望
实例层数据清洗在某些特定领域的数据质量工程中有许多应用需求和应用研究,这些应用研究针对的是特定行业背景的数据清洗任务,但存在着技术局限和不足。文献[36]采用四分位法和K-means算法消除异常值,由于K-means算法是一种聚类算法,可能会导致正常数据的错误删除,此外K值的选择比较复杂,对数据清洗的处理结果有不利影响。文献[37]采用基于密度的局部离群因子算法将足够高密度的区域划分为簇,可以有效地检测出散乱的离群点,但不适用于高密度的堆积离群点。文献[38]是根据异常值的位置分布来检测异常值,它不需要数据样本训练而且是普遍适用的。但是对大量堆积离群值的检测和清除还需要改进,对风速功率曲线离群点的空间分布和形状研究还待深入。文献[39]分析了风力涡轮机中风电异常值的分布特征和分类,并提出了一种基于变点分组和四分位算法的联合数据清理算法。该方法识别风电曲线的叠加异常值和散乱离群值,清洗效果好,效率高,通用性强,可以处理影响数据完整性的异常数据,但是没有考虑数据校正和数据插值来提高数据质量,没有根据实际情况来进行数据修正。文献[40]的方法可以通过文本的重要关键词在一定程度上体现文本的主题,而且统计词频处理相对简单。但词频类算法只统计词语出现的次数,却忽略了关键词所在文档结构上的位置情况和上下文关键词的关联信息。文献[41]提出结合众包数据库的集成机器学习算法,将人类标签的准确性与机器学习分类器的速度与成本效益相结合,该方法可以提取半结构数据中的有效信息,在一定程度上可以更正数据中存在的缺陷,但是对半结构化数据进行规格化还是无能为力。文献[42]提出非结构化数据融合方法,该方法降低数据噪声的干扰,提取剩余数据,整合相关的数据,但是由于非结构化数据本身的特点,多源数据融合分析有很大的难度。
3.1 问题与挑战
通过研究发现,实例层数据清洗是一个相对成熟但又期待有更多突破和创新的领域,技术发展的空间还很大,包括:
(1)数据相似度检测的对象主要是数据库中的短文本,对长文本的数据没有进行充分研究,主要是长文本语言本身的复杂性和文本中的词表结构数据有很强的依赖性。
(2)目前的研究成果主要适用于结构化数据,然而待处理的半结构化数据和非结构化数据的规模远远大于结构化数据。半结构化数据处理难度大且非结构化数据格式多样、缺乏实效性、数据含义比较隐性不容易察觉。
(3)实例层数据清洗的算法目前人工参与度较高,不适合大规模数据的清洗。因此需要普适性好、通用性强、计算机能自动识别的实例层数据清洗算法。
(4)通用的数据清洗算法在专用数据集上都需要结合领域知识,因此需要逐步建立起电气工程、光电技术等特定领域的数据清洗标准规则库。
3.2 未来展望
就现阶段的数据清洗研究工作取得的成绩和存在的问题而言,未来可以通过以下几个方面对数据清洗进行研究:
(1)长文本的相似度检测:随着文本信息的增多,长文本的检测变得越来越需要,例如论文查重、新闻、大规模网页去重等,采用基于语义信息的相似度检测算法来去除长文本中多余的内容,并且能够解决文本中同义词替换以及一词多义的问题,但是对可利用的信息数量与质量的要求比较高。因此可以结合已有的语义网、深度学习算法和半监督学习算法来提高数据质量。
(2)半结构化和非结构化数据的处理:目前数据结构多种多样,不只是结构化数据的情况,非结构化和半结构化数据现在变得越来越多。采用基于正则表达式的属性集识别方法来识别半结构化数据中的属性集,并进行规则化操作。其实可以将主动学习优化成果应用在基于正则表达式的属性集识别方法中,通过该方法加强机器的学习能力,进一步缩减人工参与。非结构化数据采用非结构化数据分析与决策系统能快速分析出来且发现其中隐藏的价值。可以结合Hadoop和机器学习方法来处理非结构化数据中低容错率以及识别活动数据的情况。
(3)自动识别的数据清洗算法:自动的Web页面清洗方法可以对相同或相似布局特征的海量Web页面进行自行清洗,保存有价值的文本和内容。采用树编辑距离的方法对Web页面结构进行分类,可以更好地提高Web页面清洗的准确率。
(4)特定领域的数据清洗标准库:目前提出的基于编程语言的反射技术和python脚本的银行领域数据清洗规则库,有效降低了数据清洗的复杂度。再结合基于分级规则库的方法来构建规则库的逻辑关系,可以更好地减少数据清洗出错率。
综上所述,需要找到能适用于大数据、流数据、半结构化和非结构化数据集的实例层数据清洗解决方案,能在现有实例层数据清洗技术上找到时空效率高且通用性好的自动化数据错误检测和错误纠正算法,能根据应用领域和数据集特点自动的选择合适的实例层数据清洗技术,允许用户在通用数据清洗技术上定制特定应用领域(比如电气工程领域)的专用数据清洗规则。传统的实例层数据清洗技术仍有研究和发展空间,期待着技术创新、应用创新和突破性进展。