डायथेबल पायथन पैकेज ओवरव्यू

"सभ्यता के जन्म के क्षण से 2003 तक मानवता द्वारा पांच सूचनाएँ बनाई गईं, लेकिन अब हर दो दिनों में एक ही राशि बनाई जा रही है।" एरिक श्मिट


डाटाटेबल कुशल बहु-थ्रेडेड डेटा प्रोसेसिंग करने के लिए एक पायथन लाइब्रेरी है। डेटा योग्य डेटासेट्स का समर्थन करता है जो मेमोरी में फिट नहीं होते हैं।

यदि आप R में लिखते हैं, तो आप संभवतः पहले से data.table पैकेज का उपयोग कर रहे हैं। Data.table डेटा का एक एक्सटेंशन है। R R पैकेज। इसके अलावा, जो लोग बड़े डेटा सेट को जल्दी से उपयोग करने के लिए आर का उपयोग करते हैं, वे इस पैकेज के बिना नहीं कर सकते हैं (हम बात कर रहे हैं, विशेष रूप से, रैम में लगभग 100 जीबी डेटा)।

R के लिए data.table पैकेज बहुत लचीला और शक्तिशाली है। इसका उपयोग करना आसान और सुविधाजनक है, जिन कार्यक्रमों में इसका उपयोग किया जाता है वे बहुत जल्दी लिखे जाते हैं। यह पैकेज व्यापक रूप से आर-प्रोग्रामर्स के बीच जाना जाता है। इसे महीने में 400 हजार से अधिक बार डाउनलोड किया जाता है, इसका उपयोग लगभग 650 CRAN और BioconSTR पैकेज ( स्रोत ) में किया जाता है।

पायथन के लिए डेटा माइनिंग का उपयोग क्या है? बात यह है कि एक पायथन data.table पैकेज है जो कि दुनिया के आर से data.table का एक एनालॉग है। डेटा योग्य पैकेज स्पष्ट रूप से बड़े डेटा सेट को संसाधित करने पर केंद्रित है। यह उच्च प्रदर्शन की विशेषता है - दोनों जब पूरी तरह से रैम में रखे गए डेटा के साथ काम करते हैं, और जब डेटा के साथ काम करते हैं, जिसका आकार उपलब्ध रैम की मात्रा से अधिक है। यह मल्टी-थ्रेडेड डेटा प्रोसेसिंग का समर्थन करता है। सामान्य तौर पर, डेटाटेबल पैकेज को data.table का छोटा भाई कहा जा सकता है।

datatable



आधुनिक मशीन लर्निंग सिस्टम को डेटा की राक्षसी मात्रा को संसाधित करने और कई विशेषताओं को उत्पन्न करने की आवश्यकता है। यह यथासंभव सटीक मॉडल बनाने के लिए आवश्यक है। इस समस्या को हल करने के लिए datatable पायथन मॉड्यूल बनाया गया था। यह उच्चतम कंप्यूटर पर उच्चतम संभव गति से बड़े कंप्यूटर पर (100 जीबी तक) डेटा वॉल्यूम के साथ संचालन करने के लिए उपकरणों का एक सेट है। डेटा योग्य विकास का प्रायोजक H2O.ai है , और पैकेज का पहला उपयोगकर्ता Driverless.ai है

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

स्थापना


MacOS पर, pip का उपयोग करके आसानी से स्थापित किया जा सकता है:

 pip install datatable 

लिनक्स पर, बाइनरी वितरण से इंस्टॉलेशन किया जाता है:

 #  Python 3.5 pip install https://s3.amazonaws.com/h2o-release/datatable/stable/datatable-0.8.0/datatable-0.8.0-cp35-cp35m-linux_x86_64.whl #  Python 3.6 pip install https://s3.amazonaws.com/h2o-release/datatable/stable/datatable-0.8.0/datatable-0.8.0-cp36-cp36m-linux_x86_64.whl 

वर्तमान में, विंडोज के तहत datatable काम नहीं करता है, लेकिन इस दिशा में काम चल रहा है, इसलिए विंडोज का समर्थन बस समय की बात है।

datatable स्थापित करने पर विवरण यहां पाया जा सकता है

इस लेख में उपयोग किया जाने वाला कोड इस GitHub रिपॉजिटरी में या mybinder.org पर यहां देखा जा सकता है।

डेटा पढ़ना


डेटा सेट जिसके साथ हम यहां प्रयोग करेंगे, कागले ( लेंडिंग क्लब लोन डेटा डेटासेट ) से लिया गया है। इस सेट में 2007-2015 में जारी किए गए सभी ऋणों पर संपूर्ण डेटा शामिल है, जिसमें ऋण की वर्तमान स्थिति (वर्तमान, देर, पूरी तरह से भुगतान, आदि) और नवीनतम भुगतान जानकारी शामिल है। फ़ाइल में 2.26 मिलियन पंक्तियाँ और 145 कॉलम हैं। datatable लाइब्रेरी की क्षमताओं को प्रदर्शित करने के लिए इस डेटासेट का आकार आदर्श है।

 #    import numpy as np import pandas as pd import datatable as dt 

आइए डेटा को Frame ऑब्जेक्ट में लोड करते हैं। एक datatable में विश्लेषण की मूल इकाई Frame । यह pandas या SQL टेबल से DataFrame के समान है। अर्थात्, हम एक दो-आयामी सरणी के रूप में संगठित डेटा के बारे में बात कर रहे हैं जिसमें पंक्तियों और स्तंभों को प्रतिष्ठित किया जा सकता है।

Atable डेटा लोड करने योग्य का उपयोग करके डेटा लोड करना


 %%time datatable_df = dt.fread("data.csv") ____________________________________________________________________ CPU times: user 30 s, sys: 3.39 s, total: 33.4 s           Wall time: 23.6 s 

उपरोक्त fread() फ़ंक्शन एक शक्तिशाली और बहुत तेज़ तंत्र है। यह स्वचालित रूप से पाठ फ़ाइलों के विशाल बहुमत के लिए मापदंडों का पता लगा सकता है और प्रक्रिया कर सकता है, .ZIP अभिलेखागार और एक्सेल फ़ाइलों से डेटा डाउनलोड कर सकता है, URL द्वारा डेटा पुनर्प्राप्त कर सकता है, और बहुत कुछ।

इसके अतिरिक्त, datatable पार्सर में निम्नलिखित विशेषताएं हैं:

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

पंडों का उपयोग कर डेटा डाउनलोड करना


अब देखते हैं कि एक ही फाइल को पढ़ने के लिए कितने लंबे pandas जरूरत होती है।

 %%time pandas_df= pd.read_csv("data.csv") ___________________________________________________________ CPU times: user 47.5 s, sys: 12.1 s, total: 59.6 s Wall time: 1min 4s 

आप देख सकते हैं कि बड़े डेटासेट पढ़ते समय pandas तुलना datatable स्पष्ट रूप से तेज़ है। हमारे प्रयोग में Pandas को एक मिनट से अधिक समय लगता है, और datatable द्वारा आवश्यक समय सेकंड में मापा जाता है।

फ़्रेम ऑब्जेक्ट रूपांतरण


एक मौजूदा numpy पैकेज Frame ऑब्जेक्ट को एक numpy या pandas DataFrame ऑब्जेक्ट में बदला जा सकता है। यह इस तरह किया जाता है:

 numpy_df = datatable_df.to_numpy() pandas_df = datatable_df.to_pandas() 

आइए एक मौजूदा Frame DataFrame को DataFrame pandas बदलने की कोशिश करें और देखें कि इसमें कितना समय लगता है।

 %%time datatable_pandas = datatable_df.to_pandas() ___________________________________________________________________ CPU times: user 17.1 s, sys: 4 s, total: 21.1 s Wall time: 21.4 s 

ऐसा लगता है कि किसी फाइल को एक Frame DataFrame में पढ़ना और फिर इसे एक pandas डेटा में DataFrame ऑब्जेक्ट को डेटा को लोड करने की तुलना में डेटा लोड करने में कम समय लगता है। इसलिए, शायद, यदि आप pandas का उपयोग करके बड़ी मात्रा में डेटा को संसाधित करने की योजना बनाते हैं, तो उन्हें DataFrame का उपयोग करके लोड करना बेहतर होगा, और फिर इसे DataFrame परिवर्तित करें।

 type(datatable_pandas) ___________________________________________________________________ pandas.core.frame.DataFrame 

फ़्रेम ऑब्जेक्ट के मूल गुण


datatable से Frame ऑब्जेक्ट के मूल गुणों पर विचार करें। वे pandas से DataFrame ऑब्जेक्ट के समान गुणों के समान हैं:

 print(datatable_df.shape)       # ( ,  ) print(datatable_df.names[:5])   #   5  print(datatable_df.stypes[:5])  #   5  ______________________________________________________________ (2260668, 145) ('id', 'member_id', 'loan_amnt', 'funded_amnt', 'funded_amnt_inv') (stype.bool8, stype.bool8, stype.int32, stype.int32, stype.float64) 

यहां हम head() विधि का उपयोग कर सकते हैं, जो n पहली पंक्तियों को प्रदर्शित करता है:

 datatable_df.head(10) 


डिटैचेबल से फ़्रेम ऑब्जेक्ट की पहली 10 पंक्तियाँ

हेडर रंग डेटा प्रकार को इंगित करते हैं। लाल रेखाओं को इंगित करता है, हरा पूर्णांक इंगित करता है, नीला फ्लोटिंग-पॉइंट संख्या को इंगित करता है।

सारांश सांख्यिकी


pandas में सारांश आँकड़ों की गणना एक ऑपरेशन है जिसे पूरा करने के लिए बहुत सारी मेमोरी लगती है। datatable के मामले में ऐसा नहीं है। यहां वे कमांड हैं जिनका उपयोग आप विभिन्न मेट्रिक्स की गणना करने के लिए डेटाटेबल में कर सकते हैं:

 datatable_df.sum()      datatable_df.nunique() datatable_df.sd()       datatable_df.max() datatable_df.mode()     datatable_df.min() datatable_df.nmodal()   datatable_df.mean() 

हम datatable और pandas का उपयोग कर स्तंभों पर औसत मूल्य की गणना करते हैं और इस ऑपरेशन को पूरा करने के लिए आवश्यक समय का विश्लेषण करते हैं।

। डेटाटेबल का उपयोग करके औसत ढूँढना


 %%time datatable_df.mean() _______________________________________________________________ CPU times: user 5.11 s, sys: 51.8 ms, total: 5.16 s Wall time: 1.43 s 

As पांडा का उपयोग करके औसत ढूँढना


 pandas_df.mean() __________________________________________________________________ Throws memory error. 

जैसा कि आप देख सकते हैं, pandas हम परिणाम प्राप्त करने में असमर्थ थे - स्मृति से संबंधित एक त्रुटि जारी की गई थी।

डेटा हेरफेर


Frame और DataFrame डेटा संरचनाएं हैं जो टेबल हैं। datatable , डेटा को हेरफेर करने के लिए स्क्वायर ब्रैकेट का उपयोग किया जाता है। यह पारंपरिक मैट्रेस के साथ काम करने के तरीके के समान है, लेकिन यहां, वर्ग कोष्ठक का उपयोग करते समय, आप अतिरिक्त सुविधाओं का उपयोग कर सकते हैं।


वर्गाकार कोष्ठकों का उपयोग करके डेटा डेटा के साथ कार्य करना

गणित में, मेट्रिसेस के साथ काम करते समय, फॉर्म DT[i, j] निर्माण का भी उपयोग किया जाता है। इसी तरह की संरचनाएं सी, सी ++ और आर में पाई जा सकती हैं, pandas और numpy पैकेजों में, साथ ही साथ कई अन्य प्रौद्योगिकियों में भी। एक datatable में आम डेटा जोड़तोड़ करने पर विचार करें।

▍ रो या कॉलम नमूने बनाना


निम्नलिखित कोड funded_amnt कॉलम से सभी पंक्तियों का चयन करता है:

 datatable_df[:,'funded_amnt'] 


वित्त पोषित_मांट कॉलम की सभी पंक्तियों का चयन करें

यहां पहले 5 पंक्तियों और 3 कॉलमों का चयन करना है:

 datatable_df[:5,:3] 


पहले 5 पंक्तियों और 3 कॉलम का चयन

डेटासेट करने के लिए डेटा का उपयोग करना


चयनित कॉलम द्वारा सेट किए गए डेटा को क्रमबद्ध करें:

 %%time datatable_df.sort('funded_amnt_inv') _________________________________________________________________ CPU times: user 534 ms, sys: 67.9 ms, total: 602 ms Wall time: 179 ms 

As पंडों का उपयोग कर डेटा को परिवर्तित करना


 %%time pandas_df.sort_values(by = 'funded_amnt_inv') ___________________________________________________________________ CPU times: user 8.76 s, sys: 2.87 s, total: 11.6 s Wall time: 12.4 s 

ध्यान देने योग्य और pandas को छांटने के लिए आवश्यक समय में महत्वपूर्ण अंतर पर ध्यान दें।

EDelete पंक्तियों और स्तंभों


यहां बताया गया है कि member_id नामक कॉलम को कैसे हटाया member_id :

 del datatable_df[:, 'member_id'] 

समूह


pandas तरह डेटा योग्य, डेटा ग्रुपिंग क्षमताओं का समर्थन करता है। आइए देखें कि funded_amound कॉलम का औसत कैसे प्राप्त किया funded_amound , जिसमें डेटा grade कॉलम द्वारा समूहीकृत किया जाता है।

डेटा योग्य का उपयोग करके डेटा का समूह बनाना


 %%time for i in range(100):   datatable_df[:, dt.sum(dt.f.funded_amnt), dt.by(dt.f.grade)] ____________________________________________________________________ CPU times: user 6.41 s, sys: 1.34 s, total: 7.76 s Wall time: 2.42 s 

यहां आप .f निर्माण का उपयोग देख सकते हैं। यह तथाकथित फ्रेम प्रॉक्सी है - एक सरल तंत्र जो आपको Frame ऑब्जेक्ट को संदर्भित करने की अनुमति देता है जिसके साथ वर्तमान में कुछ क्रियाएं की जा रही हैं। हमारे मामले में, dt.f , datatable_df के समान है।

पंडों का उपयोग करते हुए डेटा एकत्र करना


 %%time for i in range(100):   pandas_df.groupby("grade")["funded_amnt"].sum() ____________________________________________________________________ CPU times: user 12.9 s, sys: 859 ms, total: 13.7 s Wall time: 13.9 s 

लाइन छानने का काम


फ़िल्टरिंग सिंटैक्स समूहीकरण सिंटैक्स के समान है। loan_amnt उन loan_amnt लाइनों को loan_amnt करते हैं, जिनके लिए loan_amnt मान, loan_amnt अधिक है।

 datatable_df[dt.f.loan_amnt>dt.f.funded_amnt,"loan_amnt"] 

फ़्रेम ऑब्जेक्ट सहेजना


Frame ऑब्जेक्ट की सामग्री को CSV फ़ाइल में लिखा जा सकता है, जो भविष्य में डेटा के उपयोग की अनुमति देता है। यह इस तरह किया जाता है:

 datatable_df.to_csv('output.csv') 

आप यहां डेटा के साथ काम करने के लिए अन्य डेटा योग्य तरीकों के बारे में पढ़ सकते हैं।

परिणाम


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

प्रिय पाठकों! क्या आप अपनी परियोजनाओं में datatable पैकेज का उपयोग करने की योजना बना रहे हैं?



Source: https://habr.com/ru/post/hi455507/


All Articles