2016-06-22 5 views
10

मैं निम्नलिखित समस्यापांडस में आवेदन करते हुए कई (अस्पष्ट) स्ट्रिंग तुलनाओं को समानांतर कैसे करें?

मैं एक dataframe मास्टर कि वाक्य होता है, इस तरह के रूप

master 
Out[8]: 
        original 
0 this is a nice sentence 
1  this is another one 
2 stackoverflow is nice 

मास्टर में हर पंक्ति के लिए, मैं का उपयोग कर सबसे अच्छा मैच के लिए एक और Dataframe गुलाम में देखने की है fuzzywuzzy। मैं fuzzywuzzy का उपयोग करता हूं क्योंकि दो डेटाफ्रेम के बीच मिलान किए गए वाक्यों में थोड़ा अंतर हो सकता है (अतिरिक्त वर्ण, आदि)।

उदाहरण के लिए, गुलाम हो सकता है

slave 
Out[10]: 
    my_value      name 
0   2    hello world 
1   1   congratulations 
2   2 this is a nice sentence 
3   3  this is another one 
4   1  stackoverflow is nice 

यहाँ से कार्य करने वाले, अद्भुत, कॉम्पैक्ट काम कर उदाहरण :)

from fuzzywuzzy import fuzz 
import pandas as pd 
import numpy as np 
import difflib 


master= pd.DataFrame({'original':['this is a nice sentence', 
'this is another one', 
'stackoverflow is nice']}) 


slave= pd.DataFrame({'name':['hello world', 
'congratulations', 
'this is a nice sentence ', 
'this is another one', 
'stackoverflow is nice'],'my_value': [2,1,2,3,1]}) 

def fuzzy_score(str1, str2): 
    return fuzz.token_set_ratio(str1, str2) 

def helper(orig_string, slave_df): 
    #use fuzzywuzzy to see how close original and name are 
    slave_df['score'] = slave_df.name.apply(lambda x: fuzzy_score(x,orig_string)) 
    #return my_value corresponding to the highest score 
    return slave_df.ix[slave_df.score.idxmax(),'my_value'] 

master['my_value'] = master.original.apply(lambda x: helper(x,slave)) 

1 मिलियन डॉलर सवाल है: मैं यह कर सकते हैं उपरोक्त मेरे लागू कोड समानांतर?

सब के बाद, master में हर पंक्ति slave में सभी पंक्तियों (गुलाम एक छोटा सा डाटासेट है और मैं रैम में डेटा की कई प्रतियां हो सकते हैं) की तुलना में है।

मुझे नहीं लगता कि मैं कई तुलना क्यों नहीं चला सकता (यानी एक ही समय में कई पंक्तियों को संसाधित करता हूं)।

समस्या: मुझे नहीं पता कि यह कैसे करना है या यदि यह भी संभव है।

किसी भी मदद की बहुत सराहना की!

+1

मुझे पता है कि आपने यहां डस्क टैग जोड़ा है। क्या आपने पहले से ही कार्य का उपयोग करने की कोशिश की है और किसी समस्या में भाग लिया है? – MRocklin

+0

आपकी मदद के लिए धन्यवाद! ऐसा लगता है कि डस्क केवल नियमित कार्यों को स्वीकार करता है –

+0

भी, मेरे पास केवल एक कंप्यूटर है इसलिए मशीनों में कोई वितरित नौकरियां –

उत्तर

19

आप इसे Dask.dataframe के साथ समानांतर कर सकते हैं। यह सिवाय इसके कि आप स्तंभ असाइनमेंट उपयोग नहीं कर सकते लगभग एक ही काम करेंगे और इसके बजाय

>>> dmaster = dd.from_pandas(master, npartitions=4) 
>>> dmaster = dmaster.assign(my_value=dmaster.original.apply(lambda x: helper(x, slave), name='my_value')) 
>>> dmaster.compute() 
        original my_value 
0 this is a nice sentence   2 
1  this is another one   3 
2 stackoverflow is nice   1 

इसके अतिरिक्त assign विधि का उपयोग करने की आवश्यकता होगी, तो आप यहां प्रक्रियाओं बनाम धागे का उपयोग कर के बीच तालमेल के बारे में सोचना चाहिए। आपकी अस्पष्ट स्ट्रिंग लगभग निश्चित रूप से जीआईएल जारी नहीं करती है, इसलिए आपको एकाधिक धागे का उपयोग करने से कोई फायदा नहीं होगा। हालांकि, प्रक्रियाओं का उपयोग करने से डेटा को क्रमबद्ध करने और आपकी मशीन के चारों ओर स्थानांतरित करने का कारण बन जाएगा, जो चीजों को थोड़ा धीमा कर सकता है।

compute() विधि में get= कीवर्ड तर्क प्रबंधित करके आप धागे और प्रक्रियाओं या वितरित प्रणाली का उपयोग कर प्रयोग कर सकते हैं।

import dask.multiprocessing 
import dask.threaded 

>>> dmaster.compute(get=dask.threaded.get) # this is default for dask.dataframe 
>>> dmaster.compute(get=dask.multiprocessing.get) # try processes instead 
+0

प्रतिभा! बस एक त्वरित सवाल: मेरे पास 8 कोर ज़ीऑन मशीन है, क्या यह उस पर काम करेगी? मैं एक वितरित सिस्टम का उपयोग नहीं कर सकता क्योंकि आप सुझाव देते हैं कि –

+1

मल्टीप्रोसेसिंग आपके कम्प्यूटेशंस को तेज करेगी लेकिन इंटर-प्रोसेस डेटा ट्रांसफर से धीमा हो जाएगी। मुझे यह जानने का कोई तरीका नहीं है कि चीजें तेजी से बढ़ जाएंगी या नहीं, आपकी समस्या के बारे में और अधिक जानने के बिना मैं वास्तव में अंदर जाना चाहता हूं। मैं इसे कोशिश करने और प्रोफाइलिंग करने की सलाह देते हैं। – MRocklin

+0

धन्यवाद @MRocklin! मुझे यकीन है कि इस पोस्ट को उपयोगी लगेगा। मैं, अभी भी, http://dask.pydata.org/en/latest/install.html –

संबंधित मुद्दे