数据清洗方法、装置、设备和存储介质与流程

文档序号:18475300发布日期:2019-08-20 20:57阅读:186来源:国知局
本申请涉及数据处理
技术领域
:,尤其涉及一种数据清洗方法、装置、设备和存储介质。
背景技术
::随着计算机技术和通讯技术的飞速发展,人们可以获得越来越多的数字化信息,但同时也需要投入更多的时间对数字化信息进行组织和整理。例如在业务系统中,往往会因为代码缺陷、业务定义变更、网络延时等因素产生一些不规则数据,例如一笔订单的付款时间早于订单的创建时间,这就是一条不符合业务逻辑的数据。在对数据做统计分析之前,需要将这些不规则数据先过滤掉,以确保统计的准确性。数据清洗是一个减少数据错误和不一致性的过程,主要任务是检测并删除或改正将转入数据库的不规则数据。目前常采用的方法基本上依赖于工程师本身的技能,工程师通过学习数据的业务含义,根据自己对数据的理解,写出清洗不规则数据的代码,然后将代码提交给分布式计算平台去执行,从而丢弃不规则数据,返回符合要求的结果。然而显而易见的是,手工输写代码产出效率较低;代码运行效率依赖工程师的个人能力,优化经验难以大规模推广;不规则数据被直接丢弃了,属于不可逆的操作,对于数据追踪、查错都不利;同时不容易保证代码的规范性、一致性。技术实现要素:有鉴于此,有必要针对现有技术中数据清洗存在的问题,提供一种数据清洗方法、装置、设备和存储介质。一种数据清洗方法,包括如下步骤:获取待清洗数据,将所述待清洗数据转化为十进制数据,并根据所述待清洗数据携带的数据来源终端的标识,将转化为十进制的所述待清洗数据生成数据来源对应的待清洗数据表;调取预设的数据清洗规则文件,提取与所述待清洗数据表的表名对应的数据清洗规则后给每一所述数据清洗规则生成对应的数据清洗执行代码;将所述待清洗数据表中的每一条待清洗数据打上标签,为所述待清洗数据匹配相应的数据清洗规则;解析每一所述待清洗数据的标签,执行所述数据清洗执行代码,对所述待清洗数据进行清洗,得到待存储数据;将所述待存储数据以二进制数据形式进行存储。在其中一个可能的实施例中,所述获取待清洗数据,将所述待清洗数据转化为十进制数据,并根据所述待清洗数据携带的数据来源终端的标识,将转化为十进制的所述待清洗数据生成数据来源对应的待清洗数据表,包括:按照预设的执行周期获取数据来源终端产生的待清洗数据,将所述待清洗数据转化为十进制数据;提取所述待清洗数据中的偏移段字符串,根据所述偏移段字符串查找对应的偏移段,所述偏移段包括所述数据来源终端的标识;根据预设的待清洗数据表与数据来源终端的标识的对应关系,将转化为十进制的所述待清洗数据生成所述数据来源终端对应的待清洗数据表。在其中一个可能的实施例中,所述调取预设的数据清洗规则文件,提取与所述待清洗数据表的表名对应的数据清洗规则后给每一所述数据清洗规则生成对应的数据清洗执行代码,包括:调取所述预设的数据清洗规则文件;从所述数据清洗规则文件中提取与所述待清洗数据表的表名对应的数据清洗规则,生成临时文件;读取所述临时文件的第一条数据清洗规则,将所述数据清洗规则中的数据清洗规则伪代码作为条件判断的条件部分,生成与所述数据清洗规则对应的数据清洗执行代码;遍历所述临时文件中所有的数据清洗规则,为每一条数据清洗规则生成对应的数据清洗执行代码,组合成完整的待清洗数据表的数据清洗执行代码。在其中一个可能的实施例中,所述将所述待清洗数据表中的每一条待清洗数据打上标签,为所述待清洗数据匹配相应的数据清洗规则,包括:读取所述待清洗数据表中的一条待清洗数据作为待标记数据,为所述待标记数据设置初始标签值;遍历所述待清洗数据表的表名对应的每一条数据清洗执行代码,所述待标记数据每触发一条数据清洗执行代码,则将其标签值增加2n,其中n为被所述待标记数据触发的数据清洗执行代码对应的数据清洗规则的规则序号;按上述操作,遍历所述待清洗数据表中的每一条待清洗数据,为所述每一条待清洗数据打上标签。在其中一个可能的实施例中,所述解析每一所述待清洗数据的标签,执行所述数据清洗执行代码,对所述待清洗数据进行清洗,得到待存储数据,包括:将所述待清洗数据的标签值与2n分别做与运算;如果得到的结果为2n其本身,则说明该标签值对应的待清洗数据触发了n对应的数据清洗规则,执行所述n对应的数据清洗规则的数据清洗执行代码,对所述待清洗数据进行清洗,得到待存储数据。在其中一个可能的实施例中,所述将所述待存储数据以二进制数据形式进行存储,包括:按照预设的十进制字符与十六进制字符的映射关系,分别使用对应的十六进制字符替换所述待存储数据中的每一个十进制字符,得到与所述待存储数据对应的待存储的十六进制数据;确定所述待存储的十六进制数据以整型存储时的二进制数据,并将所述二进制数据进行存储。在其中一个可能的实施例中,所述按照预设的十进制字符与十六进制字符的映射关系,包括:将十进制的0-9数字字符分别与十六进制的0-9数字字符相对应;将十进制的符号字符分别与十六进制的a-f中的英文字母字符相对应;其中,任意一个十进制字符与一个十六进制字符相对应,且任意两个不同的十进制字符分别对应的十六进制字符均不相同。一种数据清洗装置,包括如下模块:数据获取模块,设置为获取待清洗数据,将所述待清洗数据转化为十进制数据,并根据所述待清洗数据携带的数据来源终端的标识,将转化为十进制的所述待清洗数据生成数据来源对应的待清洗数据表;清洗代码生成模块,设置为调取预设的数据清洗规则文件,提取与所述待清洗数据表的表名对应的数据清洗规则后给每一所述数据清洗规则生成对应的数据清洗执行代码;清洗规则匹配模块,设置为将所述待清洗数据表中的每一条待清洗数据打上标签,为所述待清洗数据匹配相应的数据清洗规则;数据清洗模块,设置为解析每一所述待清洗数据的标签,执行所述数据清洗执行代码,对所述待清洗数据进行清洗,得到待存储数据;数据存储模块,设置为将所述待存储数据以二进制数据形式进行存储。基于相同的构思,本申请提出一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被一个或多个所述处理器执行时,使得一个或多个所述处理器执行上述数据清洗方法的步骤。基于相同的构思,本申请提出一种存储介质,所述存储介质可被处理器读写,所述存储介质存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个所述处理器执行上述数据清洗方法的步骤。与现有技术相比,本申请中,将待清洗数据统一转化为十进制数据,便于后续对待清洗数据打上标签,提高数据清洗的准确率;根据数据清洗规则的表名,获取待清洗数据表对应的清洗规则,并自动生成数据清洗执行代码,为待清洗的每条数据打上标签,通过标签解析,分析出数据触发了哪条数据清洗规则,从而执行相应的数据清洗执行代码,对数据进行清洗,数据清洗效率高,生成的代码根据平台特性做过优化,代码具有一致性,规范,并且运行效率高;将清洗后的数据以整型进行存储,所占存储空间较以字符串存储时所占的存储空间小。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。图1为本申请在一个实施例中的一种数据清洗方法的整体流程图;图2为本申请在一个实施例中的一种数据清洗方法中的清洗代码生成过程的示意图;图3为本申请在一个实施例中的一种数据清洗方法中的给数据打标签过程的示意图;图4为本申请在一个实施例中的一种数据清洗装置的结构图。具体实施方式为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。本
技术领域
:技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。图1为本申请的一种数据清洗方法的整体流程图,如图1所示,一种数据清洗方法,包括以下步骤:步骤s1,获取待清洗数据,将所述待清洗数据转化为十进制数据,并根据所述待清洗数据携带的数据来源终端的标识,将转化为十进制的所述待清洗数据生成数据来源对应的待清洗数据表。其中,待清洗数据主要是上级平台产生的不规则数据和脏数据。上级平台产生的不规则数据包括:来自数据测试部门在数据测试过程中产生的不规则数据、来自业务部门的业务终端在进行业务操作时产生的不符合业务逻辑的数据(比如,一笔订单的付款时间早于订单的创建时间)、来自数据库中存入的不规则数据等等。上述步骤执行时,可以按照预设的执行周期从上级平台即数据来源终端获取其产生的待清洗数据,然后将所述待清洗数据统一转化为十进制数据。然后通过查找所述待清洗数据中的偏移段的方式提取所述待清洗数据携带的数据来源终端的标识,具体的,提取所述待清洗数据中的偏移段字符串,根据所述偏移段字符串查找对应的偏移段,所述偏移段包括所述数据来源终端的标识。最后,根据预设的待清洗数据表与数据来源终端的标识的对应关系,将转化为十进制的所述待清洗数据生成所述数据来源终端对应的待清洗数据表。步骤s2,调取预设的数据清洗规则文件,提取与所述待清洗数据表的表名对应的数据清洗规则后给每一所述数据清洗规则生成对应的数据清洗执行代码。上述步骤执行时,调取所述预设的数据清洗规则文件并从所述数据清洗规则文件中提取与所述待清洗数据表的表名对应的数据清洗规则,生成临时文件;先读取所述临时文件的第一条数据清洗规则,将所述数据清洗规则中的数据清洗规则伪代码作为条件判断的条件部分,生成与所述数据清洗规则对应的数据清洗执行代码;再遍历所述临时文件中所有的数据清洗规则,为每一条数据清洗规则生成对应的数据清洗执行代码,将所有的数据清洗执行代码合并,组合成完整的待清洗数据表的数据清洗执行代码。步骤s3,将所述待清洗数据表中的每一条待清洗数据打上标签,为所述待清洗数据匹配相应的数据清洗规则。上述步骤执行时,先读取所述待清洗数据表中的一条待清洗数据作为待标记数据,并为所述待标记数据设置初始标签值未0;然后,遍历所述待清洗数据表的表名对应的每一条数据清洗执行代码,所述待标记数据每触发一条数据清洗执行代码,则将其标签值增加2n,其中,n为被所述待标记数据触发的数据清洗执行代码对应的数据清洗规则的规则序号;再按上述操作,遍历所述待清洗数据表中的每一条待清洗数据,为所述每一条待清洗数据打上标签。步骤s4,解析每一所述待清洗数据的标签,执行所述数据清洗执行代码,对所述待清洗数据进行清洗,得到待存储数据。上述步骤执行时,将所述待清洗数据的标签值与2n分别做与运算;如果得到的结果为2n其本身,则说明该标签值对应的待清洗数据触发了n对应的数据清洗规则,此时,执行所述n对应的数据清洗规则的数据清洗执行代码,对所述待清洗数据进行清洗,清洗后,得到待存储数据。步骤s5,将所述待存储数据以二进制数据形式进行存储。上述步骤执行时,按照预设的十进制字符与十六进制字符的映射关系,分别使用对应的十六进制字符替换所述待存储数据中的每一个十进制字符,得到与所述待存储数据对应的待存储的十六进制数据,再确定所述待存储的十六进制数据以整型存储时的二进制数据,将所述二进制数据进行存储。本实施例,将待清洗数据统一转化为十进制数据,便于后续对待清洗数据打上标签,提高数据清洗的准确率;为待清洗的每条数据打上标签,对数据进行清洗,数据清洗效率高;将清洗后的数据以整型进行存储,所占存储空间较以字符串存储时所占的存储空间小。在一个实施例中,所述s1,获取待清洗数据,将所述待清洗数据转化为十进制数据,并根据所述待清洗数据携带的数据来源终端的标识,将转化为十进制的所述待清洗数据生成数据来源对应的待清洗数据表,包括以下步骤:按照预设的执行周期获取数据来源终端产生的待清洗数据,将所述待清洗数据转化为十进制数据;上述步骤执行时,其中,所述预设的执行周期是根据数据来源终端产生待清洗数据的频率的历史数据预先设置的。所述预设的执行周期可以作为参数值传入程序中,也可以作为固定值写在程序中。提取所述待清洗数据中的偏移段字符串,根据所述偏移段字符串查找对应的偏移段,所述偏移段包括所述数据来源终端的标识;根据预设的待清洗数据表与数据来源终端的标识的对应关系,将转化为十进制的所述待清洗数据生成所述数据来源终端对应的待清洗数据表。其中,预设的待清洗数据表与数据来源终端的标识的对应关系是预先设置的。针对每个上级平台即待清洗数据的数据来源终端产生的不规则数据会有不同的清洗规则,所以每一个数据来源终端都会对应一个待清洗数据表,而数据来源终端的标识则对应待清洗数据表的表名。本实施例,将执行周期作为参数值传入程序中,比较灵活,将执行周期作为固定值写在程序中,可以确保数值的安全性较高,而且执行周期可以根据待清洗数据产生的速度快慢灵活设置。在一个实施例中,图2为本申请在一个实施例中的一种数据清洗方法中的清洗代码生成过程的示意图,如图2所示,所述s2,调取预设的数据清洗规则文件,提取与所述待清洗数据表的表名对应的数据清洗规则后给每一所述数据清洗规则生成对应的数据清洗执行代码,包括以下步骤:步骤s201,调取所述预设的数据清洗规则文件;其中,数据清洗规则文件的字段组成包括:rule_id(规则流水号)、table_name(数据表名)、bit_offset(规则序号,为二进位偏移量,用于给数据打标签)、rule_code(数据清洗规则伪代码)、description(数据清洗规则的中文描述)、op_level(对脏数据的处理级别)、is_active(规则是否生效)。其中,每一条数据清洗规则,都设置了table_name字段,例如table_name为a时,表示该数据清洗规则应用于表名为a的待清洗数据表;同时每一条数据清洗规则还设置了规则序号bit_offset字段,对于每一个table_name,例如a,其对应的数据清洗规则的规则序号按顺序排列,相互之间不重复。但是不同的待清洗数据表名的数据清洗规则,其规则序号则不做要求。数据清洗规则文件只需要填写一次,之后可以方便的进行更新。步骤s202,从所述数据清洗规则文件中提取与所述待清洗数据表的表名对应的数据清洗规则,生成临时文件;上述步骤执行时,首先将所述数据清洗规则文件读入内存,使用系统自带的grep工具从打开的数据清洗规则文件中,查找与本次待清洗数据表的表名匹配,且当前有效的数据清洗规则,将找到的数据清洗规则保存到一个临时文件,供后续使用。其中,判断数据清洗规则是否有效,是通过表1中的最后一列,is_valid=y,表示有效,is_valid=n,表示无效。步骤s203,读取所述临时文件的第一条数据清洗规则,将所述数据清洗规则中的数据清洗规则伪代码作为条件判断的条件部分,生成与所述数据清洗规则对应的数据清洗执行代码;上述步骤执行时,将所述临时文件读入内存,从打开的临时文件中读出第一条数据清洗规则,给所述第一条数据清洗规则赋值一个变量,将该变量放入一个条件判断语句中,该条件判断语句的条件部分是数据清洗规则伪代码rule_code,判断后执行部分则为所述数据清洗规则对应的数据清洗执行代码。步骤s204,遍历所述临时文件中所有的数据清洗规则,为每一条数据清洗规则生成对应的数据清洗执行代码,组合成完整的待清洗数据表的数据清洗执行代码。上述步骤执行时,遍历所述临时文件中剩余的数据清洗规则,对每一条数据清洗规则执行步骤s203的操作,将所有的代码合并,组合成完整的数据清洗执行代码。本实施例,为每一条数据清洗规则生成对应的数据清洗执行代码,提高了数据清洗的效率和准确率。在一个实施例中,图3为本申请在一个实施例中的一种数据清洗方法中的给数据打标签过程的示意图,如图3所示,所述s3,将所述待清洗数据表中的每一条待清洗数据打上标签,为所述待清洗数据匹配相应的数据清洗规则,包括以下步骤:步骤s301,读取所述待清洗数据表中的一条待清洗数据作为待标记数据,为所述待标记数据设置初始标签值;步骤s302,遍历所述待清洗数据表的表名对应的每一条数据清洗执行代码,所述待标记数据每触发一条数据清洗执行代码,则将其标签值增加2n,其中n为被所述待标记数据触发的数据清洗执行代码对应的数据清洗规则的规则序号;步骤s303,按上述操作,遍历所述待清洗数据表中的每一条待清洗数据,为所述每一条待清洗数据打上标签。上述步骤执行时,待标记数据的初始标签的默认值是0,逐条匹配本待清洗数据表适用的数据清洗规则时,每触发一条数据清洗规则,则待标记数据的标签值增加2^bit_offset,否则其标签值不变,即如果未触发任何一条数据清洗规则,其标签值始终为0。其中,“^”是一个数学运算符,表示乘方;bit_offset表示数据清洗规则的序号,其值为1,2,3这样的自然数。对每一条待清洗数据,遍历所有的数据清洗规则,一旦触发了某条数据清洗规则,则待清洗数据的标签值增加2^bit_offset,例如,某条待清洗数据触发了第二条数据清洗规则“交易金额为空”,则该条数据的标签值增加2^2,即2的2次方,等于4。本实施例,为每一条待清洗数据打上标签,可以很容易地找到待清洗数据适用的清洗规则,提高了数据清洗的效率。在一个实施例中,所述s4,解析每一所述待清洗数据的标签,执行所述数据清洗执行代码,对所述待清洗数据进行清洗,得到待存储数据,包括:将所述待清洗数据的标签值与2n分别做与运算;如果得到的结果为2n其本身,则说明该标签值对应的待清洗数据触发了n对应的数据清洗规则,执行所述n对应的数据清洗规则的数据清洗执行代码,对所述待清洗数据进行清洗,得到待存储数据。上述步骤执行时,具体的,看下面算式,用十进制和八进制分别表示,十进制表示法:21+23+24=26;二进制表示法:21=00000010、23=00001000、24=00010000、26=00011010,在26的二进制表示中,出现1的位置有三处,分别对应21、23、24。从算式中,可以看出26是21、23、24这三个数的和,当26与21进行与运算,结果为21;当26与23进行与运算,结果为23;当26与24进行与运算,结果为24。不难发现这样的规律:26与这三个数中的任何一个进行与运算,结果均为该数字本身,而与其它任何数进行与运算时,结果则不为该任何数本身。其中,待清洗数据的标签值=21+22+...+2n,其中,n为数据清洗规则的序号。将标签值和21、22、...、2n分别做与运算,如果得到的结果为2n,则说明该标签值对应的待清洗数据触发了n对应的数据清洗规则。通过标签解析,能够分析出每一条待清洗数据数据触发了哪些数据清洗规则,将触发了数据清洗规则的待清洗数据通过执行对应的数据清洗执行代码对其进行清洗。在一个实施例中,所述将所述待存储数据以二进制数据形式进行存储,包括:按照预设的十进制字符与十六进制字符的映射关系,分别使用对应的十六进制字符替换所述待存储数据中的每一个十进制字符,得到与所述待存储数据对应的待存储的十六进制数据;上述步骤执行时,所述预设的十进制字符与十六进制字符的映射关系具体为:将十进制的0-9数字字符分别与十六进制的0-9数字字符相对应,再将十进制的符号字符分别与十六进制的a-f中的英文字母字符相对应。具体的,例如:十进制的0与十六进制的0对应、十进制的1与十六进制的1对应、十进制的2与十六进制的2对应、……、十进制的9与十六进制的9对应,“*”与十六进制的a对应、“-”与十六进制的b对应、“+”与十六进制的c对应、“#”与十六进制的d对应。在数据应用中,有些数据的首字符是“0”,如电话号码:010-62654382,如果按照上述映射关系进行映射的话,会存在准确度较低的缺陷,因此,本申请实施例中,可选的,映射关系还可以按照下述过程确定:从十六进制的1-f字符中选择10个字符;将十进制的0-9数字字符分别与选择出的10个字符相对应;将十进制的符号字符分别与十六进制的0-f字符中除选择出的10个字符之外的其他字符相对应;其中,任意一个十进制字符与一个十六进制字符相对应,且任意两个不同的十进制字符分别对应的十六进制字符均不相同;任意两个不同的十进制数字字符所对应的十六进制字符的大小关系,与任意两个不同的十进制数字字符的大小关系相同。例如:十进制的0与十六进制的1对应、十进制的1与十六进制的2对应、十进制的2与十六进制的3对应、……、十进制的9与十六进制的a对应,“*”与十六进制的b对应、“-”与十六进制的c对应、“+”与十六进制的d对应、“#”与十六进制的0对应。确定所述待存储的十六进制数据以整型存储时的二进制数据,并将所述二进制数据进行存储。本实施例,将十进制数据转换为十六进制数据,再将十六进制数据以整型进行存储,以整型存储所占的存储空间较以字符串存储所占的存储空间小,节约了存储空间。在一个实施例中,所述按照预设的十进制字符与十六进制字符的映射关系,包括:将十进制的0-9数字字符分别与十六进制的0-9数字字符相对应;将十进制的符号字符分别与十六进制的a-f中的英文字母字符相对应;其中,任意一个十进制字符与一个十六进制字符相对应,且任意两个不同的十进制字符分别对应的十六进制字符均不相同。一种数据清洗装置,如图4所示,包括如下模块:数据获取模块,设置为获取待清洗数据,将所述待清洗数据转化为十进制数据,并根据所述待清洗数据携带的数据来源终端的标识,将转化为十进制的所述待清洗数据生成数据来源对应的待清洗数据表;清洗代码生成模块,设置为调取预设的数据清洗规则文件,提取与所述待清洗数据表的表名对应的数据清洗规则后给每一所述数据清洗规则生成对应的数据清洗执行代码;清洗规则匹配模块,设置为将所述待清洗数据表中的每一条待清洗数据打上标签,为所述待清洗数据匹配相应的数据清洗规则;数据清洗模块,设置为解析每一所述待清洗数据的标签,执行所述数据清洗执行代码,对所述待清洗数据进行清洗,得到待存储数据;数据存储模块,设置为将所述待存储数据以二进制数据形式进行存储。在一个实施例中,提出了一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行计算机可读指令时实现上述各实施例中所述的数据清洗方法的步骤。在一个实施例中,提出了一种存储介质,所述存储介质可被处理器读写,所述存储介质存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述各实施例中所述的数据清洗方法的步骤。其中,所述存储介质可以为非易失性存储介质。本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取存储器(ram,randomaccessmemory)、磁盘或光盘等。以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本申请一些示例性实施例,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1