首页 > 解决方案 > recordlinkage BaseCompareFeature 重复数据

问题描述

我正在尝试使用 BaseCompareFeature 为记录链接构建用户定义的比较功能。

我有一个dupe_data.csv包含 3 列(索引、代码、值)的数据集。查看哪些记录是欺骗性的非常简单。

由于我只有一个数据集,所以这不是链接问题,而是欺骗问题。我只传递了一个数据集,但是,当我检查BaseCompareFeature.compute的代码时,我看到该函数正在返回重复的数据集(例如 dfA 与 dfA,而不是 dfA 与 dfB)。

    if x_link is None:
        df_a = frame_indexing(x[labels_left + labels_right], pairs, 0)
        data1 = tuple([df_a[lbl] for lbl in listify(self.labels_left)])
        data2 = tuple([df_a[lbl] for lbl in listify(self.labels_right)])

data1该代码生成两个相同的数据帧data2

...: print(s1)

                values  values
index_1 index_2                
a2      a1            1       1
a3      a1            9       9
        a2            9       9
c2      c1            2       2
c3      c1            4       4
        c2            4       4
x2      x1            9       9
y2      y1           10      10

所以我不清楚比较功能应该如何工作。使用两个数据集,比较非常清晰(例如 compare dfA[column] == dfB[column])。但是,这里的比较方法我不清楚。可以使用一些帮助来了解 recordlinkage 如何期望比较仅适用于一个数据集

例如,请参见下面的代码:

import pandas as pd
import recordlinkage


data = pd.read_csv("dupe_data.csv", index_col='index')


# Indexation step
indexer = recordlinkage.Index()
indexer.block('code')
pairs = indexer.index(data)

# Comparison step
from recordlinkage.base import BaseCompareFeature

class CompareDescription(BaseCompareFeature):

    def _compute_vectorized(self, s1, s2):
        # don't do anything here,
        # just return data data
        # How should comparisons work here when s1 == s2??
        return s1, s2



feat = CompareDescription('values', 'values', label='output_values')
s1, s2 = feat.compute(pairs, data)
print(s1)

有数据,dupe_data.csv

index,code,values
a1,a,1
a2,a,1
a3,a,9
b1,b,1
c1,c,3
c2,c,2
c3,c,4
x1,x,4
x2,x,9
y1,y,9
y2,y,10

标签: pythonduplicatesrecord-linkage

解决方案


推荐阅读