क्या पांडा अब डेटा से अधिक तेज है।


17

https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping

2014 के बाद से डेटाटेबल बेंचमार्क को अपडेट नहीं किया गया है। मैंने सुना है कि Pandasअब इससे कहीं तेज है data.table। क्या ये सच है? क्या किसी ने कोई बेंचमार्क किया है? मैंने पहले कभी पायथन का उपयोग नहीं किया है, लेकिन स्विच करने पर विचार pandasकर सकता है कि क्या वह हरा सकता है data.table?


7
यह अजगर के लिए स्विच करने के लिए एक बहुत बुरा कारण है।
मैथ्यू ड्र्यू

2
@ मैथ्यू ड्यूर्री तो कैसे? डेटा और इसका हेरफेर मेरी नौकरी का 80% है। केवल 20% फिटिंग मॉडल और प्रस्तुति के लिए है। मुझे वह क्यों नहीं चुनना चाहिए जो मुझे सबसे तेज परिणाम देता है?
xiaodai

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

3
आपके पास एक बहुत बड़ा जंगल है जो 20% काम के लिए अच्छा है? तो अपने काम का 80% एफएसटीए को पसंद न करें? कुछ भी नहीं मुझे डेटा prep और फिर आर अजगर या जूलिया में मॉडल करने के लिए पांडा का उपयोग करने से रोक रहा है। मुझे लगता है कि मेरी सोच ध्वनि है। अगर पांडा इससे तेज है तो मुझे इसे अपने मुख्य उपकरण के रूप में चुनना चाहिए।
xiaodai

1
आपको ब्याज / उपयोग के आर में रेटिकुलेट पैकेज मिल सकता है । इसके अलावा, तेजी से बहुत सारे प्रयास आर / डेटाबेस के साथ काम करने / खेलने के लिए किए जा रहे हैं (देखें जैसे dbplyr )।
स्लैकलाइन

जवाबों:


15

क्या किसी ने कोई बेंचमार्क किया है?

हां, आपने अपने प्रश्न में जो बेंचमार्क जोड़ा है, वह हाल ही में डेटाटेबल और पांडा के हालिया संस्करण के लिए अपडेट किया गया है। इसके अतिरिक्त अन्य सॉफ्टवेयर जोड़े गए हैं। आप https://h2oai.github.io/db-benchmark पर अपडेट किया गया बेंचमार्क पा सकते हैं
दुर्भाग्य से यह 125GB मेमोरी मशीन (मूल 424 जीबी के रूप में नहीं) पर निर्धारित है। परिणामस्वरूप पांडा और डैस्क groupby1e9 पंक्तियों (50GB csv) डेटा पर प्रयास करने में असमर्थ हैं क्योंकि वे डेटा पढ़ते समय मेमोरी से बाहर निकल जाते हैं। तो पंडों बनाम data.table के लिए आपको 1e8 पंक्तियों (5GB) डेटा को देखना होगा।

केवल उन सामग्रियों को लिंक करने के लिए जिन्हें आप पूछ रहे हैं मैं उन समाधानों के लिए हाल के समय को चिपका रहा हूं।

कृपया ध्यान दें कि उन समय पुराने हो गए हैं
यात्रा https://h2oai.github.io/db-benchmark अद्यतन समय के लिए

| in_rows|question              | data.table| pandas|
|-------:|:---------------------|----------:|------:|
|   1e+07|sum v1 by id1         |      0.140|  0.414|
|   1e+07|sum v1 by id1:id2     |      0.411|  1.171|
|   1e+07|sum v1 mean v3 by id3 |      0.574|  1.327|
|   1e+07|mean v1:v3 by id4     |      0.252|  0.189|
|   1e+07|sum v1:v3 by id6      |      0.595|  0.893|
|   1e+08|sum v1 by id1         |      1.551|  4.091|
|   1e+08|sum v1 by id1:id2     |      4.200| 11.557|
|   1e+08|sum v1 mean v3 by id3 |     10.634| 24.590|
|   1e+08|mean v1:v3 by id4     |      2.683|  2.133|
|   1e+08|sum v1:v3 by id6      |      6.963| 16.451|
|   1e+09|sum v1 by id1         |     15.063|     NA|
|   1e+09|sum v1 by id1:id2     |     44.240|     NA|
|   1e+09|sum v1 mean v3 by id3 |    157.430|     NA|
|   1e+09|mean v1:v3 by id4     |     26.855|     NA|
|   1e+09|sum v1:v3 by id6      |    120.376|     NA|

5 में से 4 प्रश्नों में डेटाटेबल तेज है, और हम इसे बेहतर तरीके से देख सकते हैं।
बस ध्यान दें कि यह समय अभी के अनुसार है , जहाँ id1, id2और id3चरित्र क्षेत्र हैं। इन्हें जल्द ही श्रेणीबद्ध DONE में बदल दिया जाएगा । इसके अलावा अन्य कारक भी हैं जो निकट भविष्य में उन समयावधि को प्रभावित करने की संभावना रखते हैं (जैसे समानांतर DONE में समूह बनाना )। हम यह भी के लिए अलग मानदंड जोड़ने के लिए जा रहे हैं NAS होने डेटा , और विभिन्न cardinalities किया

अन्य कार्यों यह निरंतर बेंच मार्किंग परियोजना के लिए आ रहे हैं, इसलिए यदि आप में रुचि कर रहे हैं join, sort, readऔर दूसरों को यकीन है कि बाद में यह जांच करने के लिए किया जाना है।
और निश्चित रूप से परियोजना रेपो में प्रतिक्रिया प्रदान करने के लिए आपका स्वागत है!


1
जूलियाडीबी के बारे में क्या?
स्कैन


1
अच्छा जवाब - AFAICT आपके द्वारा लिंक किए गए बेंचमार्क सभी एक ही वीएम पर चलाए गए थे? यही है, एक ही शर्तों के तहत, 50GB टेबल के लिए पांडा और डैस्क को 128GB रैम से अधिक की आवश्यकता होती है, जबकि अन्य इस बाधा के तहत प्रदर्शन कर सकते हैं? अगर ऐसा है तो यह मेरे अनुभवों को मध्यम (~ 10 जीबी) तालिकाओं पर सामान्य रोजमर्रा के सामान के लिए बहुत अधिक रैम अक्षम होने के साथ मेरे अनुभवों को दर्शाता है, और निष्पादन गति की तुलना में यह बहुत बड़ा मुद्दा है। (जो विशिष्ट कार्यभार के आधार पर किसी भी घटना में बहुत करीब और ट्रेडों को बंद करता है।)
जेकेएफ

@jkf हां, बिल्कुल। मशीन 128 जीबी मेमोरी है क्योंकि हम 500 जीबी डेटासेट (10e9 पंक्तियों) पर मेम प्रोसेसिंग से टेस्ट करने की योजना बना रहे हैं। वर्तमान में केवल चिंगारी और pydatatable समर्थन करेगा, जल्द ही क्लिकहाउस भी जोड़ा जाएगा।
जंगोरकी

@jangorecki यह एक अत्यंत उपयोगी बेंचमार्क है। प्रयास के लिए बड़ा धन्यवाद। मैं 50GB डेटासेट को पचाने के लिए नहीं होने के बारे में थोड़ा हैरान हूं। Dask मानकों में से एक (उदाहरण के लिए के रूप में विभाजन आकार की है blocksizeमें read_csv)। क्या आपने compute()मेमोरी में पूरे आउटपुट टेबल को असेंबल करने से बचने के लिए डिस्क पर कॉलिंग और डंप आउटपुट से बचने की कोशिश की?
मिशा लिसोवी

14

एक सहकर्मी और मैंने पंडों और data.table के बीच प्रदर्शन के अंतर पर कुछ प्रारंभिक अध्ययन किए हैं। आप हमारे ब्लॉग पर अध्ययन (जिसे दो भागों में विभाजित किया गया था) पा सकते हैं (आप भाग दो यहां पा सकते हैं )।

हमें लगा कि कुछ कार्य हैं जहाँ पांडा स्पष्ट रूप से data.table से बेहतर प्रदर्शन करते हैं, लेकिन ऐसे मामले भी हैं जिनमें data.table बहुत तेज है। आप इसे स्वयं देख सकते हैं और हमें बता सकते हैं कि आप परिणामों के बारे में क्या सोचते हैं।

संपादित करें:
यदि आप ब्लॉग को विस्तार से नहीं पढ़ना चाहते हैं, तो यहां हमारे सेटअप और हमारे निष्कर्षों का संक्षिप्त सारांश है:

सेट अप

हमने निम्नलिखित ऑपरेशन (अब तक) पर 12 अलग-अलग सिम्युलेटेड डेटा सेटों की तुलना की pandasऔर data.table, जिन्हें हमने परिदृश्य कहा।

  • डेटा का चयन एक ऑपरेशन की तरह के साथ पुनर्प्राप्ति
  • सशर्त चयन ऑपरेशन के साथ डेटा फ़िल्टरिंग
  • डेटा सॉर्ट ऑपरेशन
  • डेटा एकत्रीकरण संचालन

एक मशीन पर Intel i7 2.2GHz के साथ 4 भौतिक कोर, 16GB रैम और एक SSD हार्ड ड्राइव के साथ संगणनाएँ की गई थीं। सॉफ्टवेयर संस्करण ओएस एक्स 10.13.3, पायथन 3.6.4 और आर 3.4.2 थे। संबंधित लाइब्रेरी संस्करणों का उपयोग पांडा के लिए 0.22 और डेटा के लिए 1.10.4-3 था

संक्षेप में परिणाम

  • data.tableस्तंभों का चयन करते समय तेज़ी से लगता है ( pandasऔसतन 50% अधिक समय लगता है)
  • pandas फ़िल्टरिंग पंक्तियों में तेज़ है (औसतन लगभग 50%)
  • data.tableलगता है कि छँटाई में काफी तेज है ( pandasकभी-कभी 100 गुना धीमा था)
  • एक नया कॉलम जोड़ने के साथ तेजी से प्रकट होता है pandas
  • कुल परिणाम पूरी तरह मिश्रित हैं

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


1
जैसा कि आप मेरे जवाब से पढ़ सकते हैं, मैं पहले से ही कहता हूं कि परिणाम मिश्रित हैं। कृपया स्पष्ट करें कि क्या मैं अपने उत्तर में अधिक विशिष्ट होगा, संभवतः कुछ नंबरों पर विस्तृत।
टोबियास क्रैबेल

1
"इस साइट पर आपकी पहुंच सीमित है।" मैं अपने फोन पर और न ही अपने काम के कंप्यूटर पर साइट का उपयोग कर सकता हूं।
xiaodai

1
मुझे यह पढ़कर दुख हुआ। मैंने इसे अपने फोन पर खुद चेक किया है और इसमें कोई समस्या नहीं है। जिस देश से आप जुड़ने की कोशिश करते हैं, उसके साथ कुछ करना हो सकता है?
टोबियास क्रैबेल

1
"4 भौतिक कोर" = 8 तार्किक कोर। यह भी कहने में मदद करता है कि कौन सा विशिष्ट इंटेल i7 2.2GHz (कौन सी पीढ़ी? कौन सा संस्करण? -HQ?) और क्या कैश आकार। और SSD के लिए, क्या गति पढ़ें और लिखें?
sms

वे जूलिया डेटाफ्रेम और जूलियाडीबी की तुलना कैसे करते हैं?
स्कैन

3

नहीं, वास्तव में अगर डेटासेट का आकार इतना बड़ा है कि पांडा दुर्घटनाग्रस्त हो जाता है, तो आप मूल रूप से डस्क से चिपक जाते हैं, जो बेकार है और आप एक साधारण समूह-योग भी नहीं कर सकते। dplyr तेज नहीं हो सकता है, लेकिन यह गड़बड़ नहीं करता है।

मैं वर्तमान में कुछ 2G डेटासेट पर काम कर रहा हूं और एक साधारण print(df.groupby(['INCLEVEL1'])["r"].sum())दुर्घटनाग्रस्त है।

इस त्रुटि को dplyr के साथ अनुभव नहीं किया।

इसलिए, अगर पांडा डेटासेट को संभाल सकता है, तो मैं पांडा का उपयोग करता हूं, यदि नहीं, तो आर डेटा टेबल पर चिपका दें।

और हाँ, आप एक साधारण से पंडों के डेटाफ़्रेम में वापस बदल सकते हैं df.compute() लेकिन इसमें काफी लंबा समय लगता है, इसलिए आप पंडों को लोड करने या पढ़ने के लिए उपयुक्त होने के लिए धैर्यपूर्वक प्रतीक्षा करें।


1
नहीं पता था कि नकाब इतना खराब था। शायद आप R की disk.frame को आज़माना चाहते हैं? github.com/xiaodaigh/disk.frame मैं लेखक हूँ
xiaodai

1

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

देखिए पंख का गीथूब पेज


मध्यम और बड़े डेटासेट के लिए segfaults
jangorecki
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.