【问题标题】:data matching multiple columns with fuzzy matching criteria使用模糊匹配条件匹配多列的数据
【发布时间】:2018-08-30 01:34:01
【问题描述】:

我正在做一个类似的项目:Data matching algorithm

其中,我有一个包含客户详细信息的数据框 (dataset1),没有特殊的唯一 ID,然后将其与具有相同字段和特殊唯一 ID 的数据框 2 (dataset2) 进行匹配。

示例: Dataset1 列包括:

头衔、姓氏、名字、中间名/其他名字、地址、出生日期、性别、医疗​​号码

dataset2 列包括:

唯一 ID、头衔、姓氏、名字、中间名/其他名称、地址、出生日期、性别、医疗​​号码

我的计划:

我的数据集 1 约为 500,000 行,大约 11 列 - 如果需要,可以拆分行数。数据集 2 约为 2,000,000

基于来自企业的匹配标准,例如。 >5 列必须匹配,并且可能是一个模糊组件,例如在一个数据集中连字符(包括其他特殊字符)但在另一个数据集中没有连字符的名称。

根据近似匹配,此 ID 和数据集 2 中的字段被复制到相邻列中的数据集 1 中,以及整体匹配百分比。

然后,企业可以提取和检查整体匹配百分比范围。

我计划将 Panda 与 Fuzzywuzzy 一起使用。 我无法根据代码逻辑规划我的技术方法。

我是否应该在第一个字段中查找匹配项,然后过滤下一列,等等?我认为是这样,但是循环如何在两个比较数据集中的列之间移动? 我需要将每个比较操作写回数据集中存储还是可以保存在其他地方?

另一种可行的方法是,我将所有列连接到一个列中,然后匹配这些列,并返回匹配的 ID、其他字段和匹配的 %。

我正在寻找最佳的前进方向,以及最佳方式的一般逻辑。

【问题讨论】:

    标签: python pandas dataset fuzzywuzzy


    【解决方案1】:

    一般来说:尝试、观察、调整和重复。

    在使用 Fuzzywuzzy 之前,可能值得探索任何小的调整以标准化和使数据尽可能一致。

    • 某些数据集可以使用 555-555-5555, 0 或 - 用于空电话号码或 1970 年 1 月 1 日用于空白 DOB。 Dataframe.replace({column:{to_replace:replace_val}) 可以帮助清理这些。

    • Python 的 dateutil.parser 有助于标准化各种日期格式。

    • 在分析之前尝试包装模糊比率并从姓氏中删除标点符号。

    • 地址:Pandas.column.str.upper() 可用于应用一致的大小写。也可以尝试不使用标点符号。

    • 连接所有字段可能是精确匹配的良好第一步。第二遍可以评估不太重要的字段,例如缺失数据的性别和标题。

    一般而言,您可能希望分层处理,删除直接匹配,然后删除最确定的匹配,重新评估,直到下一波所需的工作量接近您认为该项目的收益递减量。

    如果您按列进行处理,您可能希望删除某些匹配项,然后从姓氏开始,然后创建下一个最具确定性的列的选择列表,并使用fuzzywuzzy 的process.extract 来协助决策树。可能还有我不知道的更好的方法!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 2021-01-26
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      相关资源
      最近更新 更多