Я работал над двумя большими наборами данных переписи, чтобы связать их, и мне очень нужна помощь.Поскольку размер этих наборов данных достаточно велик, мне нужно распараллелить код связывания записей.Я использую инструментарий связывания записей Python для вычисления векторов признаков пар записей, используя функцию блокировки, а затем функцию сравнения, которая также включает в себя пользовательскую функцию сравнения для столбца Семейное положение.До сих пор я искал много способов, но я не мог успешно применить эти методы (даже предоставил аргумент количества рабочих мест в функции сравнения).Вот мой код (я не включил все столбцы только несколько)
def featureVectors():
df1==pd.read_csv('deduplicatedfinal71.csv',encoding='utf8')
df2=pd.read_csv('deduplicatednew81.csv',encoding='utf8',delimiter=',')
pcl = recordlinkage.index.Block(left_on=
['PR_NAME_SURN','PR_NAME_GN'],right_on=['SNAMLAST','SNAMFRST'])
pairs= pcl.index(df1,df2)
compare_cl = recordlinkage.Compare(n_jobs=16)
compare_cl.string('PR_NAME_GN', 'SNAMFRST',
method='jarowinkler',threshold=0.80,label='FirstJW')
compare_cl.string('PR_NAME_SURN', 'SNAMLAST',
method='jarowinkler',threshold=0.80,label='LastJW')
compare_cl.string('PR_NAME_SURN','SNAMLAST',
method='levenshtein',threshold=0.80,label='LastNEditD')
compare_cl.string('PR_NAME_GN','SNAMFRST',
method='levenshtein',threshold=0.80,label='FirstNEditD')
def marital_compare(s1,s2):
concat=pd.concat([s1,s2],axis=1, ignore_index=True)
def inner_apply(x):
val1=x[0]
val2=x[1]
if (val1==6 and val2==1):
return(1)
elif (val1==1 and (val2==4 or val2== 5)):
return(1)
elif(val1==val2):
return(1)
else:
return(0)
return concat.apply(inner_apply, axis=1)
compare_cl.compare_vectorized(marital_compare,'MARITAL_STATUS','MARST',
label='MARITAL_STATUS')
features = compare_cl.compute(pairs, df1,df2)
features=pd.DataFrame(features)
features.to_csv('featureVector.csv',index=False)