重复数据清洗又称为数据去重。通过数据去重可以减少重复数据,提高数据质量。重复的数据是冗余数据,对于这一类数据应删除其冗余部分。去重是指在不同的时间维度内,重复一个行为产生的数据只计入一次。按时间维度去重主要分为按小时去重、按日去重、按周去重、按月去重或按自选时间段去重等。例如,来客访问次数的去重,同一个访客在所选时间段内产生多次访问,只记录该访客的一次访问行为,来客访问次数仅记录为1。如果选择的时间维度为按天,则同一个访客在当日内产生多次访问,来客访问次数也仅记录为1。
例3_4_dropDuplicates().py
删除重复行数据后的运行结果如下,原始数据序号为9(第九行)的重复数据被滤除。数据去重处理中,除了使用Dataframe.drop_duplicates()删除重复行外,还可以用count()方法统计Dataframe的总行数,distinct()实现唯一值的统计。
下面介绍几种重复数据清洗方法。
1.使用字段相似度识别重复值算法
字段之间的相似度S是根据两个字段的内容计算出的一个表示两字段相似程度的数值,S∈(0,1)。S越小,两字段相似程度越高,如果S=0,则两字段为完全重复字段。根据字段的类型不同,计算方法也不相同。布尔型字段相似度的计算,如果两字段相等,则相似度取0;如果不同,则相似度取1。数值型字段相似度计算可采用计算数字的相对差异。字符型字段相似度的计算,比较简单的一种方法是将进行匹配的两个字符串中可以相互匹配的字符个数除以二者平均字符数,然后设定阈值,当字段相似度大于阈值时,识别为重复字段,再根据实际业务理解,对重复数据做删除或其他数据清洗操作。
2.快速去重算法
根据搜索引擎的原理,在创建索引前将对内容进行简单的去重处理。面对数以亿计的网页,去重处理页方法可以采用特征抽取、文档指纹生成和文档相似性计算。其中,Shingling算法和SimHash算法是两个优秀的网页查重算法。(www.xing528.com)
1)Shingling算法
Shingling算法的思想是将文档中出现的连续汉字序列作为一个整体,对一个汉字片段进行哈希计算,形成一个数值,使得每个汉字片段都有对应的哈希值,由多个哈希值构成文档的特征集合。
例如,对“搜索引擎在创建索引前会对内容进行简单的去重处理”这句话,采用4个汉字组成一个片段,那么这句话就可以被拆分为搜索引擎、索引擎在、引擎在创、擎在创建、在创建索、创建索引……去重处理,则这句话就变成了由20个元素组成的集合A,另外一句话同样可以由此构成一个集合B,将A∩B→C,将A∪B→D,那么C/D值即两句话的相似程度。实际运用中,更多的会从效率方面考虑,对算法进行优化,此方法计算1.5亿个网页,在3个小时内就能完成。
2)SimHash算法
文本去重有多种方式,可以是整篇对比,也可以摘要比较,还可以用关键字来代替摘要。这样可以缩减比较复杂性,完成快速去重。SimHash的主要功能是降维,即将文本分词结果从一个高维向量映射成一个由0和1组成的bit指纹(fingerprint),然后通过比较这个二进制属字串的差异来表示原始文本内容的差异。SimHash算法的实现过程主要分为分词、hash、加权、合并、降维、计算相似性这六个步骤。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。