【问题标题】:Probabilistic record linkage (matching) in PostgreSQL and PythonPostgreSQL 和 Python 中的概率记录链接(匹配)
【发布时间】:2015-10-21 05:30:50
【问题描述】:

我正在尝试匹配两个表中的记录,但没有公用键并且数据中有一些错误。具体来说,我在表 A 中有给定组和日期的记录,我想与表 B 中具有相同组的记录匹配,但日期可能不同。此外,有些记录可能只存在于表 A 或 B 中。

示例表

Table A
=========================
id | group |   date | ...
---+-------+--------+----
 0 |     A | 1/1/15 | ...
 1 |     B | 1/3/15 | ...
 2 |     A | 1/5/15 | ...
 3 |     A | 1/5/15 | ...
 : |     : |      : | :::
99 |     Z | 4/5/15 | ...

Table B
=========================
id | group |   date | ...
---+-------+--------+----
 0 |     A | 1/2/15 | ...
 1 |     A | 1/5/15 | ...
 2 |     A | 1/6/15 | ...
 : |     : |      : | :::
99 |     Z | 4/5/15 | ...

这里我希望表 A 中的记录 0 与表 B 中的记录 0 匹配,即使日期不同(但很接近),表 A 中的记录 1 在表 B 中丢失,并且表 B 中可能有多个记录表 A(或 B)具有相同的组和日期(这些不是重复的)。

目前我没有匹配日期不同的记录,但我正在丢失可能有用的数据。因此,我想迭代地改进匹配,以便我有更完整的匹配。我认为概率方法比确定性方法更有意义,但我愿意就此展开争论。

我的第一个问题是什么是正确的工具。目前,这些表位于 PostgresSQL 数据库中,并且足够大,很难在本地机器上处理它们。但是我不熟悉在 Postgres 中执行概率连接的任何方式,但我希望 Python 对概率记录链接有良好(足够)的支持。

这可以(应该)在 Postgres 或其他工具(Python)中完成吗?谁能指导我使用任何资源(示例、代码等)?

【问题讨论】:

  • 我们在说多少行?你有多少内存?
  • 300,000 多行,每个表中有大约十几个感兴趣的列。 16GB 内存

标签: python postgresql match


【解决方案1】:

我已广泛使用 pg_trgm(三克)并开发了元素权重层次结构(每个组合或单个元素匹配的得分和权重因子)。如果您按三元组连接,则三元组会将“记录”放在一起,然后将分数作为排序机制进行评估。

另外,请确保在匹配之前先“标准化”数据。

PostGIS 对地址有用,一般 x-walk 对性别有用 在手机、电子邮件等上进行格式化。

从生活中选择*;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-26
    • 2016-04-15
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多