python

时间:2018-10-17 00:47:43

标签: parallel-processing record-linkage

我一直在研究两个大型人口普查数据集,以便将它们链接在一起,并且急需帮助。由于这些数据集的大小很大,因此我需要并行化记录链接代码。我正在使用python记录链接工具包,使用阻止和比较功能(包括针对婚姻状况列的自定义比较功能)来计算记录对的特征向量。到目前为止,我已经寻找了很多方法,但是我无法成功应用这些方法(即使在比较函数中提供了Jobs参数的数量)。这是我的代码(我并没有包括所有的列)

 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)

0 个答案:

没有答案