Индивидуальное сравнение Python RecordLinkage - PullRequest
0 голосов
/ 14 марта 2019

Я пытался использовать настраиваемое сравнение дат с привязкой записей Python. Я нашел этот сайт полезным для разработки алгоритмов сравнения. К сожалению, я считаю, что подход, изложенный здесь, больше не поддерживается. Ссылка на запись веб-сайт дает инструкции по перезаписи compute_vectorize:

from recordlinkage.base import BaseCompareFeature

class CustomFeature(BaseCompareFeature):

    def _compute_vectorized(s1, s2):
        # algorithm that compares s1 and s2

        # return a pandas.Series
        return ...

feat = CustomFeature()
feat.compute(pairs, dfA, dfB)

После этого я попытался написать сравнение (которое работает как отдельная функция), но я не знаком с классами и получил ошибку (ниже).

class DateAppr(BaseCompareFeature):

    def _compute_vectorized(d1, d2, day_margin = 7):
        # Absolute time difference in days
        tdelta = d1 - d2
        tdays = abs(tdelta.days)
        score = 0
        if tdays <= day_margin:
            score += 1
        else:
            days_out = min(tdays - day_margin, 100)
            penalty = (100-days_out)**2 / 100**2
            score += penalty
        return pd.Series(score, dtype='float64')

indexer = recordlinkage.Index()
indexer.block(left_on=('district'), right_on=('District'))
candidate_links = indexer.index(df1, df2)

feature = DateAppr('dob', 'min_dob')
date_vectors = feature.compute(candidate_links, x = df1, x_link = df2)

Error

  File "/anaconda3/lib/python3.6/site-packages/pandas/core/arrays/datetimelike.py", line 1325, in __rsub__
    return -(self - other)

TypeError: unsupported operand type(s) for -: 'DatetimeArray' and 'DateAppr'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...