问题标签 [python-dedupe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
77 浏览

python - 加速重复数据删除 - Python?

如何加快 Python Dedupe?

我正在使用本地内存运行。当我比较“多对一”记录时,需要 20 多秒。我只是将 2 条记录与 1 条记录进行比较。当我将 600 条记录与 1 条记录进行比较时,仍然需要大约 20 秒。

它总是挂在linked_records 线上。是否有一种设置可以使较小的数据集运行得更快?

在 linker.partition 中,它声明了以下内容:

此方法仅适用于较大数据的中小型数据集,您可能需要生成自己的记录对并将它们提供给 ~score。

你是怎样做的?

0 投票
0 回答
49 浏览

python - 吐出一个用于临时使用的 json 文件的巧妙方法(并将其读回)

我在我的 python 应用程序中使用 dedupe 包。对于它的 prepare_training 方法,它需要一个指向训练数据的文件指针。IE

我将所有内容都保存在数据库中......我的所有数据和元数据用于我的应用程序中的所有其他内容。 我也想将这些训练数据保存在数据库中。所以我想我会把它保存在表中..将它吐到 JSON 文件中..让训练在使用控制台进行一些训练时改变数据..然后将文件加载回表中培训完成。

(除非我听说 dedup 已经开始支持指向训练数据表;))

那么.. 将表转储到 JSON 文件,然后在完成后刷新回表的快速方法是什么?我目前使用的是 MySQL v 5.6,所以我没有太多 JSON 功能。不过我确实计划很快升级。 对于那些不熟悉 dedup.. 这个文件可能会变得非常大.. 所以不确定读一行,写一行是否有意义.. 因为如下所示,整个文件似乎是 1 行..

训练文件基本上是一个带有两对的 JSON 字符串。匹配列表和不同列表。具有两个不同记录和两个匹配项的示例。仅使用全名字段进行匹配:

{“不同”:[[{“party_id”:“13aeae53cc201e9d5c3fc04bd12c04384730413”,“full_name”:null},{“party_id”:“c5ea6c1fefd4404a011a31029bd46cd5c39c543”,“full_name”:“xxx GOULDEN”}],[{” 18ffd01f7f3e0de6486fd259a0fbb1599712c6d", "full_name": "yyy FLOWERS"}, {"party_id": "f612d1098a8962e6c477b5a264509d1208de09d", "full_name": null}]], " match ": [[{"party_id": "dd64f638d7eda45c2a4f74514bdfb6e71e7099a", "full_name": “JAFR HAI”},{“party_id”:“f76fe6eccd55c4c1b97b8c7628a579db3db7d4e”,“全名”:“JAFER HAI”}],[{“party_id”:“8f6ca373738b222ee92c0dc22e11f3afe9a0a35", "full_name": "McMe, Dou"}, {"party_id": "fae8b1f635e4a96b30d07c0c9773c4641de83e9", "full_name": "McMe, Dou"}]]}

仅供参考。我使用 SQLAlchemy 库连接到 mySQL。我将 pandas 用于我将 excel 读入 mySQL 的其他几个领域。

至少在表中保存两条记录会很好。所以我可以使用自己的操作更轻松地添加/删除不同或匹配列表中的项目。想法?

0 投票
0 回答
62 浏览

record-linkage - 记录跨多个数据集的链接的最佳方法

我一直在尝试使用 dedupe 库来使用 2 个数据集进行记录链接。我现在想用它来链接 10 个(或更多)数据集中的记录。

没有规范的数据集。一条记录可能只出现在其中一个数据集中,最多出现在所有十个数据集中,但只会在单个数据集中出现一次(该数据集独有)。

链接记录的最佳方式是什么?记录链接同时比较两个数据集;要跨多个数据集进行比较,我需要相互比较。例如,如果我有 3 组(A、B、C),我需要比较 A&B、A&C 和 B&C。这是否正确?直觉上,我认为像这样链接数据集彼此独立可能会创建虚假链接,其中记录 A1 链接到 B1,B1 链接到 C1,但 A1 无法链接到 C1;C1 应该被认为是链接的吗?文档指出这是一个挑战。

那么将其视为一个大型数据集并在整个数据中查找重复项会更好吗?这会改善结果吗?会有什么弊端?

0 投票
0 回答
35 浏览

python - Dedupe python - '记录不符合数据模型'

使用库中的重复数据删除记录链接并不断收到有关“公司名称”字段的错误在数据模型中但不在记录中。我已经两次和三次检查它是否在两者中都没有错别字。谁能指出我正确的方向?

这就是我现在所拥有的:

记录样本:

不完全确定断开连接的位置。任何帮助表示赞赏。

0 投票
0 回答
49 浏览

python - 使用重复数据删除时从 pandas 中的数据框中删除特殊字符

我在我的数据框中使用重复数据删除我收到警告-

警告信息 :

这是什么意思?我无法理解这一点。

0 投票
1 回答
43 浏览

python - Python3 匹配、反向匹配和去重

下面的代码的目的是处理两个字典,如果值包含列表中的项目,则将symbol每个字典中的匹配值添加到pairs列表中,cur但如果值包含curpair列表中的任一项目,则不添加。

我的值匹配成功,cur但我不知道如何对curpair. 此外,次要问题是它似乎会创建重复项,这可能是因为forcurpair. 无论哪种方式,我都不确定是否有一种方法可以在线进行重复数据删除,或者这是否需要成为另一个例程。

我确信可能有一种方法可以做到所有这些,并同时通过列表理解简化代码,但也许不是。我试图理解列表理解只会让我放心,我的 Python 经验太短了,无法理解:)

感谢任何见解。

输出:

0 投票
0 回答
66 浏览

python-dedupe - 重用 Dedupe 训练进行地名词典匹配

我正在使用 Dedupe 库来清理一些数据。但是,一旦使用Dedupe 对象完成第一次重复数据删除,我知道我们应该使用Gazetteer 对象将任何新传入数据与集群数据进行匹配。

为了解释这个问题,我们假设:

  • 第一批数据是 50 万行餐厅,包含名称、地址和电话号码字段。
  • 例如,第二批数据是当时不存在的 1k 家新餐厅,但我现在想与前 500k 家进行匹配。

如果我描述管道,它会是这样的:

  • 步骤 1) 初始重复数据删除
    • 在 500k 餐厅的样本上训练 Dedupe 对象
    • 使用 Dedupe / Static Dedupe 对象对 500k 行进行聚类
  • 步骤 2) 增量重复数据删除
    • 在 500k 家餐厅和 1k 家新餐厅的样本上训练一个 Gazetteer 对象
    • 将传入的 1k 行与前 500k 行匹配
    • 根据实际匹配现有餐厅的 1k 行分配规范 ID

所以,问题是:

  • 管道真的正确吗?
  • 每次输入新数据时,我是否必须重新训练地名词典?
    • 我不能使用我在第一步中学到的相同的阻止规则吗?或者至少是相同的标记对?当然假设字段是相同的,并且数据经过完全相同的预处理。
  • 我知道我可以继续重做第 1 步,但从我读到的内容来看,这不是最佳做法。

@fgregg我浏览了所有 Stackoverflow 和 Github 问题(最近的一个是这个),但找不到任何有用的答案。

谢谢 !

0 投票
0 回答
59 浏览

python - python重复数据删除的高CPU和内存利用率

我正在使用 dedupe 包运行 python 重复数据删除应用程序。我已经使用烧瓶和 gunicorn 部署了与 API 相同的 API。我在具有 128GB RAM 和 40 核配置的 linux 服务器上运行该应用程序。数据大小为 900000 时,CPU 资源会很快受到限制。由于它被限制得非常快,很多时候操作系统本身正在杀死应用程序。当内存消耗达到 50% 时,CPU 消耗处于全速状态。

我正在运行部署的 gunicorn 命令是

如何解决这个 CPU 使用率问题?

0 投票
0 回答
19 浏览

python - Dedupe Labeler 上的 KeyError

我创建了一个执行 Dedupe 的函数,它运行良好。但是,我正在传递一个包含 91k 行的 DataFrame 并收到错误

错误是这样的:

更让我困惑的是,如果我删除第二个条件,data_ap3 = data_ap3.loc[data_ap3['total'] < 2],它工作正常。如果我将最后一行作为dedupe_ap3 = execute_dedupe(data_ap3.loc[:60000, dedupe_setup_ap3)and传递,它也可以正常工作dedupe_ap3 = execute_dedupe(data_ap3.loc[50000:], dedupe_setup_ap3)。我真的不知道为什么它不起作用。特别是因为它适用于数据集的重叠子集([50000:90000]、[0:60000])。

我尝试过重置索引,检查缺失值,但这些都不起作用。

0 投票
0 回答
23 浏览

fuzzywuzzy - 如何在模糊匹配熊猫重复数据删除单个数据帧中获取行索引

考虑到我有以下数据集df

指数 姓名 出生日期
0 丹尼斯·摩尔 2017-11-18
1 罗伯特·奈特 2008-04-24
2 艾丽卡·马丁内斯 1940-10-28
3 加里·吉尔 1993-05-05
4 马修冈萨雷斯 2016-07-16
5 丹尼斯·摩尔 2017-11-18
6 罗伯特·克梅特 2008-04-24

我正在使用该pandas_dedupe包通过执行以下命令来检查模糊匹配:

我希望得到以下输出:

指数 姓名 出生日期 匹配索引 匹配名称 match_BirthDate
0 丹尼斯·摩尔 2017-11-18 5 丹尼斯·摩尔 2017-11-18
1 罗伯特·奈特 2008-04-24 6 罗伯特·克梅特 2008-04-24
2 艾丽卡·马丁内斯 1940-10-28 2 艾丽卡·马丁内斯 1940-10-28
3 加里·吉尔 1993-05-05 3 加里·吉尔 1993-05-05
4 马修冈萨雷斯 2016-07-16 4 马修冈萨雷斯 2016-07-16
5 丹尼斯·摩尔 2017-11-18 0 丹尼斯·摩尔 2017-11-18
6 罗伯特·克梅特 2008-04-24 1 罗伯特·奈特 2008-04-24

我怎样才能做到这一点?