《Clojure数据分析秘笈》——2.4节识别并去除重复数据

2.4 识别并去除重复数据
清洗数据过程中的一个难题是如何处理重复值。如何找到它们?一旦找到了如何处理?尽管这个过程中的一些步骤是自动进行的,但整合它们通常需要手动完成,因为人们需要检查匹配到的潜在结果并确定它们是不是重复的和如何处理重复数据。当然,可以用启发式编程,但在特定时刻需要手动调用。
第一个需要回答的问题是数据的构成。如果数据有两个项,需要检查哪些域来判断是否存在重复?还有,相似程度多高的数据才可以算得上重复数据?
在本方法中,通过在命名域进行模糊匹配来检查一些数据,以判断是否存在重复。仅返回所有可能的重复对。
2.4.1 准备工作
首先,需要使用下列命令将模糊字符串匹配的库加到Leiningen project.clj文件中:

首先,就相似度而言,距离至多为fuzzy-max-diff。将之设置成2表明允许替换,通常是两种变化类型(删除和插入)。

或者最大距离可以是最短输入字符串长度的一个比例。在本例中,使用10%作为两个字符串的距离的最大值。
如果满足这两个条件之一,就可以判断两个字符串是相同的。这将导致出现两种情形。无论字符串的长度是多少,如果只有两个字符变化,它将认为是相同的。这对于很短的字符串而言是有问题的。
另外,固定的最大距离也对长字符串无效。如果是200个字符或者更多,也就是说,你想允许更多的字符不同而不是20个字符。fuzzy-percent-diff提供处理这种问题的灵活性。

2.4.4 更多信息
如前所述,这将无法处理短字符串。例如,它将认为ace和are是相同的。可以将逻辑设计得更加复杂,如果字符串的长度超过某一特定值,加入使用fuzzy-max-diff的一个条款。
在本方法中使用clj-diff.core/edit-distance。它可以计算将一个字符串转换成另一个需要做多少次单个字符的插入和删除操作。也可以选择用clj-diff.core/levenshtein-distance,它也使用单个字符的替换操作。

时间: 2025-01-21 10:55:55

《Clojure数据分析秘笈》——2.4节识别并去除重复数据的相关文章

《Clojure数据分析秘笈》——导读

目 录 第1章 导入分析数据1.1 引言1.2 新建项目 1.3 将CSV数据读入Incanter数据集1.4 将JSON数据读入Incanter数据集 1.5 使用Incanter读入Excel数据1.7 将XML数据读入Incanter数据集1.8 从网页表中抓取数据1.9 从网页中抓取文本数据1.10 读取RDF数据 1.11 使用SPARQL读取RDF数据1.12 整合不同格式的数据第2章 清洗和校验数据 2.1 引言2.2 使用正则表达式清洗数据2.3 使用同义词映射保持一致性2.4

《Clojure数据分析秘笈》——1.1节引言

第1章导入分析数据1.1 引言如果没有大量数据是无法进行数据分析的,因此任何项目的第一步都是评估有什么样的数据和需要什么样的数据.一旦知道需要什么样的数据,就要想办法得到它.本章和本书中的许多方法使用Incanter(http://incanter.org/)导入数据并规定使用Incanter数据集.Incanter是Clojure中完成统计分析和图形化显示的库,其作用类似于R.Incanter可能并不适用于所有任务(后面将使用Weka库进行聚类和机器学习),但它仍是在Clojure中进行数据分

《Clojure数据分析秘笈》——3.1节引言

第3章 使用并发编程管理复杂度3.1 引言 设计和创建一个计算机系统是一个均衡行为:不断地添加特性和功能并保持代码简单和系统性能合理.数据分析系统也是如此.事实上,数据分析系统问题更糟糕.通常而言,数据只是部分一致,在开始分析之前需要采取多种策略来抽取有用数据. 这会导致问题失控. Clojure有一系列可以帮助管理系统复杂性的工具.这些最强大的工具之一是并发编程.这使得可以使用另外一种方式设计程序.与之前一段代码做很多事情并且有非常直接.紧密的依赖关系不同,可以通过将许多完成不同功能的独立模块

《Clojure数据分析秘笈》——1.3节将CSV数据读入Incanter数据集

1.3 将CSV数据读入Incanter数据集 以逗号分隔值(CSV)是最简单的数据格式之一,并且这种数据格式应用非常普遍.Excel可以直接读写CSV文件,而且多数数据库也可以.由于CSV文件就是无格式的文本,因此使用任何编程语言都很容易生成或者访问它.1.3.1 准备工作 首先,确保加载了正确的库.Leiningen(https://github.com/technomancy/leiningen)的项目文件project.clj file应该包含以下依赖(也可以使用更新的版本): 这个文件

《Clojure数据分析秘笈》——1.7节将XML数据读入Incanter数据集

1.7 将XML数据读入Incanter数据集 一类非常常用的数据格式是XML,人们对其褒贬不一.但在某种情况下,几乎所有人都不得不处理它.Clojure可以使用Java的XML库,但它也有自己的包,这个包提供了一种在Clojure中使用XML的更自然的方式. 1.7.1 准备工作 首先,在Leiningen project.clj文件中引入以下依赖: 1.7.3 实现原理 本方法按以下顺序处理XML: 1. 解析XML数据文件. 2. 利用解析树抽取数据节点. 3. 将节点转换成代表数据的映射

《Clojure数据分析秘笈》——2.2节使用正则表达式清洗数据

2.2 使用正则表达式清洗数据大概最基本.最普遍的数据清洗方式就是正则表达式了.尽管有时被滥用,但是很多时候正则表达式是完成一项工作最适合的工具.而且,Clojure内置编译正则表达式的语法,因此在Clojure中使用正则表达式也很方便.本例将编写一个标准化美国电话号码的函数. 2.2.1 准备工作本方法需要在脚本或REPL中使用clojure.string库.表达式如下: 2.2.3 实现原理本方法中最复杂的部分是正则表达式,接下来对其详细讲解.(?x):这是本身并不匹配任何内容的标识符.它允

《Clojure数据分析秘笈》——1.4节将JSON数据读入Incanter数据集

1.4 将JSON数据读入Incanter数据集 另一个越来越流行的数据格式是JavaScript Object Notation(JSON,详见http://json.org/).与CSV相似,JSON也是无格式的文本,因此程序容易处理.它提供了相对于CSV文件关于数据的更多信息,但是代价是更冗长.JSON格式允许用更复杂的方式使数据结构化,例如层次结构或者序列层次结构. 由于JSON是比CSV更完善的数据模型,因此使用时可能需要转换数据.在这种情况下,可以将感兴趣的信息取出,在传入Incan

《Clojure数据分析秘笈》——2.10节修正拼写错误

2.10 修正拼写错误 拼写错误是某些时间需要处理的问题.特别是当你试图处理原始的文本数据时,拼写错误会对你的工作造成较大影响. 曾几何时,拼写检查器是进行多种优化的软件的重要部分,这些软件被限制运行于日常工作计算机环境下.现在情况不是这样了.Peter Novig在互联网上发布了一篇名为"如何编写拼写检查器程序"(http://norvig.com/spell-correct.html)的文章.它展示了如何读入被假定为拼写无误的文本并根据这些文本构建拼写检查器.他提供了一个使用Pyt

《Clojure数据分析秘笈》——1.10节读取RDF数据

1.10 读取RDF数据使用不同格式的链接数据越来越多地出现在互联网上:微格式(microformat).RDFa和RDF/XML是其中的一些常见形式.链接数据提供了更大的灵活性且功能强大,但是其处理过程比较复杂.通常,为了高效处理链接数据,需要使用某种类型的三元组存储.在本方法和接下来的三种方法中,将用到Sesame(http://www.openrdf.org/)和kr Clojure库(https://github.com/drlivingston/kr). 1.10.1 准备工作首先,需