लोग पंडों को एसक्यूएल क्यों पसंद करते हैं?


69

मैं 1996 से SQL का उपयोग कर रहा हूं, इसलिए मैं पक्षपाती हो सकता हूं। मैंने MySQL और SQLite 3 का बड़े पैमाने पर उपयोग किया है, लेकिन Microsoft SQL सर्वर और Oracle का भी उपयोग किया है।

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

एसक्यूएल के पास एक अनुकूलक और डेटा दृढ़ता होने का लाभ है। SQL में त्रुटि संदेश भी हैं जो स्पष्ट और समझने योग्य हैं। पंडों के पास कुछ हद तक गुप्त एपीआई है, जिसमें कभी-कभी एक एकल का उपयोग करना उचित होता है [ stuff ], दूसरी बार जब आपको आवश्यकता होती है [[ stuff ]], और कभी-कभी आपको आवश्यकता होती है .loc। पंडों की जटिलता का एक हिस्सा इस तथ्य से उत्पन्न होता है कि बहुत अधिक भार हो रहा है।

इसलिए मैं यह समझने की कोशिश कर रहा हूं कि पंडों की लोकप्रियता क्यों है।


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
सीन ओवेन

जवाबों:


51

असली पहला सवाल यह है कि लोग शुद्ध SQL अमूर्त की तुलना में DataFrame सार के साथ अधिक उत्पादक क्यों हैं।

TLDR; SQL (मानव) विकास और डीबगिंग प्रक्रिया के आसपास तैयार नहीं है, DataFrames हैं।

मुख्य कारण यह है कि DataFrame अमूर्त आप क्रिया और अवैध घोंसले के शिकार से बचने के लिए SQL बयानों का निर्माण करने की अनुमति देते हैं। नेस्टेड रूटीन लिखने का पैटर्न, उन्हें जाँचने के लिए टिप्पणी करना, और फिर उन्हें अनइंस्टाल करना, परिवर्तन की एकल लाइनों द्वारा प्रतिस्थापित किया जाता है। आप स्वाभाविक रूप से चीजों को एक उत्तर में (स्पार्क में भी) लाइन से चला सकते हैं और परिणाम देख सकते हैं।

एक तालिका में एक नया रूपांतरित (स्ट्रिंग मैंग्ड कॉलम) जोड़ने के उदाहरण पर विचार करें, फिर इसके द्वारा समूहीकृत करना और कुछ एकत्रीकरण करना। SQL बहुत बदसूरत हो जाता है। पंडों इसे हल कर सकते हैं लेकिन कुछ चीजें याद कर रहे हैं जब यह वास्तव में बड़े डेटा या विशेष विभाजन (शायद हाल ही में बेहतर) में आता है।

DataFrames को SQL रूटीन के लिए एक उच्च-स्तरीय API के रूप में देखा जाना चाहिए, भले ही पांडा के साथ वे कुछ SQL प्लानर को प्रदान नहीं किए गए हों।

-

आप शायद इसके आस-पास कई तकनीकी चर्चा कर सकते हैं, लेकिन मैं नीचे उपयोगकर्ता के दृष्टिकोण पर विचार कर रहा हूं।

एक साधारण कारण है कि आप पंडों के डेटा हेरफेर के आसपास बहुत अधिक प्रश्न देख सकते हैं क्योंकि एसक्यूएल का विरोध एसक्यूएल का उपयोग करने के लिए है, परिभाषा के अनुसार, डेटाबेस का उपयोग करने का मतलब है, और इन दिनों बहुत सारे उपयोग के मामलों के लिए केवल डेटा के बिट्स की आवश्यकता होती है ' एक-से-एक 'कार्य (.csv, वेब एपीआई, आदि से)। इन मामलों में, डेटाबेस से लोड करना, भंडारण, हेरफेर करना और निकालना व्यवहार्य नहीं है।

हालाँकि, ऐसे मामलों पर विचार करना, जहाँ उपयोग-मामला पंडों या एसक्यूएल के उपयोग को सही ठहरा सकता है, आप निश्चित रूप से गलत नहीं हैं। यदि आप कई दोहरावदार डेटा हेरफेर कार्यों को करना चाहते हैं और आउटपुट को जारी रखते हैं, तो मैं हमेशा एसक्यूएल के माध्यम से जाने की कोशिश करूंगा। जिस कारण से मैंने देखा है कि कई उपयोगकर्ता, इन मामलों में भी, SQL के माध्यम से दो-गुना नहीं होते हैं।

सबसे पहले, एसक्यूएल के ऊपर प्रमुख लाभ पांडा यह है कि यह व्यापक पायथन ब्रह्मांड का हिस्सा है, जिसका अर्थ है कि मैं गिर गया, मैं अपने डेटा को लोड, साफ, हेरफेर कर सकता हूं और कल्पना कर सकता हूं (मैं पंडों के माध्यम से एसक्यूएल को निष्पादित भी कर सकता हूं ...)। दूसरा, काफी सरल है, कि सभी बहुत से उपयोगकर्ता SQL की क्षमताओं की सीमा तक नहीं जानते हैं। आपके डेटा को DB से अगली जगह पर लाने के साधन के रूप में SQL (SELECT, FROM, WHERE, इत्यादि) के 'निष्कर्षण वाक्यविन्यास' को हर शुरुआती सीखता है। कुछ अधिक अग्रिम समूहन और पुनरावृत्ति सिंटैक्स उठा सकते हैं। लेकिन उसके बाद ज्ञान में एक बहुत ही महत्वपूर्ण अंतर हो जाता है, जब तक कि आप विशेषज्ञों (डीबीए, डेटा इंजीनियर, आदि) से नहीं मिलते।

tl; dr: यह अक्सर उपयोग-केस, सुविधा या SQL की क्षमताओं की सीमा के आस-पास ज्ञान के अंतराल के लिए नीचे होता है।


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

3
मैं यह नहीं कहूंगा कि यह व्यवहार्य नहीं है। यदि आप डेटा को पंडों के डेटा फ़्रेम में प्राप्त कर सकते हैं, तो आप संभवतः इसे पोस्टग्रेसीक्यू डीबी में भेज सकते हैं। लेकिन एक और किया के लिए, यह शायद अधिक प्रयास और समय है जितना आप बचाएंगे।
jpmc26

2
मैं मानता हूं कि कुछ ईटीएल दृष्टिकोण प्रोग्रामर-केंद्रित निर्णय प्रतीत होते हैं। यही है, वे डेटा में हेरफेर करना पसंद करते हैं फिर इस "सही" पेलोड को डेटाबेस में प्रस्तुत करते हैं। हालांकि, जैसा कि आप इंगित करते हैं, यदि यह कई SQL प्रश्नों के माध्यम से किया जा सकता है, तो अतिरिक्त प्रोग्रामेटिक परत अनावश्यक है। बिल्कुल वही, जिसका मैंने हाल ही में सामना किया था। जैसा कि ओपी और आपका जवाब इंगित करता है, यह हो सकता है कि "पुराने-स्कूल" या डीबीए-केंद्रित लोग इसे देखें और कहें, यह एसक्यूएल में क्यों न करें (यहां तक ​​कि सिर्फ कई सरल प्रश्न!)। उस ने कहा, मैंने पंडों को बेहद विविध डेटा सेटों के लिए बहुत शक्तिशाली पाया है।
साल्टीबस 2

1
@SaltySub एसक्यूएम में प्रोग्रामेटिक लेयर से बाहर की चीजों को शिफ्ट करने पर बस एक बिंदु: यह एक उचित बिंदु है और पूरी तरह से वैध हो सकता है, लेकिन जहां तक ​​एसक्यूएल प्रक्रियाओं में एप्लिकेशन लॉजिक को दफनाने के लिए जा रहा है, यह सिरदर्द का अपना विशेष स्वाद ला सकता है।
इलेक्ट्रिक हेड

1
@ElectricHead मैं मानता हूं कि एक सही संतुलन बनाने की जरूरत है। यदि SQL क्वेरी की एक श्रृंखला पर्याप्त रूप से कार्य कर सकती है, तो यह निश्चित रूप से आसान और अधिक कुशल हो सकती है। इसके विपरीत, जैसा कि आप इंगित करते हैं, यदि किसी को SQL प्रक्रियाओं आदि में तर्क की एक बड़ी मात्रा को रखना है, तो पंडों का दृढ़ता से विचार किया जाना चाहिए। विशेष रूप से ऊपर के रूप में यदि आप विभिन्न डेटाबेस जायके का उपयोग कर रहे हैं - तो SQL सिंटैक्स अंतर बहुत बालों को प्राप्त कर सकते हैं।
साल्टीबस 2

29

इन दोनों चीजों के आवेदन में ओवरलैप जितना है, यह सेब की तुलना संतरे से कर रहा है।

पांडा एक डेटा विश्लेषण टूलकिट है जिसे पायथन में लागू किया गया है, जो एक सामान्य प्रयोजन प्रोग्रामिंग भाषा है। SQL रिलेशनल डेटा की क्वेरी के लिए एक डोमेन-विशिष्ट भाषा है (आमतौर पर एक रिलेशनल डेटाबेस मैनेजमेंट सिस्टम में जो SQLite, MySQL, Oracle, SQL सर्वर, PostgreSQL आदि उदाहरण हैं)।

SQL का तात्पर्य है

  • RDBMS में डेटा के साथ काम करना * जो कार्यभार के लिए उपयुक्त हो सकता है या नहीं भी हो सकता है, भले ही यह एक छोटा SQLite डेटाबेस हो,
  • डेटाबेस डोमेन ज्ञान (एक अंतिम उपयोगकर्ता, डेवलपर और / या व्यवस्थापक के रूप में; सुझाव है कि "एसक्यूएल तेज है" मैं अक्सर देखता हूं एक बड़े पैमाने पर अति सरलीकरण है), और
  • विशेष रूप से विशेषज्ञ अनुप्रयोगों में विशेष रूप से डेटा विश्लेषण के रूप में (सरल डेटा की सरल रिपोर्ट बनाने के लिए विरोध के रूप में) एसक्यूएल का उपयोग करने में नगण्य सीखने की अवस्था पर काबू पाने।

* यह इस तथ्य को रेखांकित करने के लायक है कि SQL इतना डोमेन-विशिष्ट है, जो कि NoSQL डेटाबेस जैसे रिलेशनल डेटाबेस के लिए तेजी से सामान्य विकल्पों के साथ काम करने के लिए बहुत कम प्रासंगिक हो रहा है। यह एक मौलिक बदलाव का प्रतिनिधित्व करता है कि डेटा को कैसे संग्रहीत और संरचित किया जाता है, और इसे प्राप्त करने के उद्देश्य से SQL मानकीकरण के विकास की तरह इसे एक्सेस करने का कोई सार्वभौमिक सामान्य तरीका नहीं है।

दूसरी तरफ अजगर (पंडों को काफी "पाइथोनिक" है, इसलिए यह यहाँ सच है) विभिन्न पृष्ठभूमि के लोगों के लिए लचीला और सुलभ है। इसका उपयोग "स्क्रिप्टिंग भाषा" के रूप में किया जा सकता है, एक कार्यात्मक भाषा और पूरी तरह से चित्रित ओओपी भाषा के रूप में। विज़ुअलाइज़ेशन क्षमताओं और डेटा स्रोत इंटरऑपरेबिलिटी को पांडा में बनाया गया है, लेकिन आप पायथन को अपने वर्कफ़्लो (जो कि ज्यादातर चीजें हैं) में जो कुछ भी कर सकते हैं उसे शामिल करने के लिए स्वतंत्र हैं; वैज्ञानिक अजगर पारिस्थितिकी तंत्र जाया करें और जैसे महान उपकरण शामिल है Jupyter नोटबुक और आवश्यक scipy जैसे पुस्तकालयों matplotlib और numpy (जो पांडा पर बनाता है)। पांडा के डेटा विश्लेषण के महत्वपूर्ण तत्व आर हैं-inspired और आप आम तौर पर सांख्यिकीविदों को umming और आहिंग नहीं पाएंगे कि क्या वे डेटाबेस में सब कुछ डालने और एसक्यूएल में अपने विश्लेषण लिखने से अधिक आर (या संभवतः तेजी से पांडा!) का उपयोग करते हैं।

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


1
यह एकमात्र सही उत्तर है, इसे चुना जाना चाहिए। एसक्यूएल और पंडों दो अलग-अलग चीजें हैं, मुझे समझ में नहीं आता है कि लोग क्या तुलना करने की कोशिश कर रहे हैं।
बजे

मुझे संदेह है कि यह कुछ कोड लिखने की तरह एक अंतिम-उपयोगकर्ता का दृष्टिकोण है, जो कहीं से कुछ डेटा लाने और मालिश करने और कुछ संख्याओं को थूकने के लिए पसंद करता है। मैं पूरी तरह से हैरान नहीं हूँ; मेरे पास पहले हाथ का अनुभव है कि डेटा विश्लेषकों ने एक पुराने के साथ कैसे प्रस्तुत किया, लेकिन अन्यथा निस्संदेह ओरेकल डेटाबेस ने यह भी नहीं सोचा कि यह क्या है और इसे कैसे कनेक्ट किया जाए, अकेले डेटा को बाहर आने दें। मेरा मानना ​​है कि यह प्रौद्योगिकी की समझ की एक बुनियादी कमी को धोखा देता है - मैंने वास्तव में थोड़ा जोर देकर कहा है कि एसक्यूएल का दायरा कम होने की कितनी गलतफहमी है।
इलेक्ट्रिक हेड

मैं NoSQL स्थितियों के लिए अप्रासंगिक होने के बारे में आपके बिट को चुनौती दूंगा। उदाहरण के लिए विचार करें कि PostgreSQL ने अपने JSON स्टोरेज के साथ क्या किया है।
jpmc26

मैंने अपने शब्दों को ध्यान से चुनने की कोशिश की; PostgreSQL कई चीजों को अच्छी तरह से करने के बावजूद अभी भी RDBMS है (जैसा कि SQL सर्वर रेखांकन का समर्थन करने के बावजूद है)। लेकिन, मैंने टचिंग शब्द को आराम दिया है क्योंकि यह अभी भी एक अच्छा बिंदु है: कुछ क्रॉसओवर है और, महत्वपूर्ण बात, SQL APIs कुछ NoSQL सिस्टम के लिए मौजूद हैं। यह है विदेशी हालांकि, एसक्यूएल एक सार्वभौमिक भाषा नहीं है और है कि सभी डेटा संबंधित रूप से जाना जाता है।
इलेक्ट्रिक हेड

मुझे लगता है कि आप SQL में वह सब कुछ कर सकते हैं जो पांडा में संभव है। एसक्यूएल लचीला नहीं है लेकिन इतना अनुकूलित है।
मीडिया

22

पहला, पांडा उतना लोकप्रिय नहीं है। मैं पांडा और एसक्यूएल दोनों का उपयोग करता हूं। पहले मैं कार्य को समझने की कोशिश करता हूं- अगर यह एसक्यूएल में किया जा सकता है, तो मैं एसक्यूएल को पसंद करता हूं क्योंकि यह पांडा की तुलना में अधिक कुशल है। एक बड़े डेटा (10,000,000 x 50) पर काम करने की कोशिश करें। एसक्यूएल और पांडा दोनों में कुछ ग्रुपबी ऑपरेशन करने की कोशिश करें । तुम समझ जाअोगे।

मैं पंडों का उपयोग करता हूं जहां यह काम आता है- जैसे किसी कॉलम में एक मान को विभाजित करना और उस पर कुछ सामान करना (जैसे उस सरणी से केवल कुछ मानों को चुनना)। अब इस तरह के कार्य को SQL में कोड करना अपेक्षाकृत कठिन है, लेकिन पांडा आपके कार्य को आसान बना देंगे।


क्या यह अक्षमता पांडा के लिए विशिष्ट है? मैंने C # में काफी कम इन-मेमोरी डेटा हेरफेर किया है और इसे बहुत आसान और कुशल पाया है, बशर्ते कि यह मेमोरी को फिट रखे और एक-शॉट था (यानी डेटा परिवर्तन के रूप में अनुक्रमित अपडेट करने की कोई आवश्यकता नहीं है)।
कोडइन्चोस

पांडा का मतलब तेजी से सुविधाजनक होना है, लेकिन यह कहना आसान नहीं है कि यदि आप इसे सही उपयोग करते हैं तो यह तेज नहीं हो सकता है। अंत में, डेटाबेस में डेटा पर SQL क्वेरी निष्पादित करना जादू नहीं है - इसके लिए कुछ भी जैसे संसाधनों की आवश्यकता होती है, यह सिर्फ इतना है कि (यदि यह सही है!) तो आप उम्मीद कर रहे हैं कि आप सावधानीपूर्वक कॉन्फ़िगर किए गए, बीफ डेटाबेस सर्वर पर संसाधनों का उपयोग कर रहे हैं। । पंडों या इसी तरह की अपनी पाइपलाइन को प्राप्त करना (जैसे कि मेमोरी में लोड करने के बजाय डेटा स्ट्रीमिंग करना) यह निर्धारित करने जा रहा है कि कुछ प्रयास कितने सफल हैं।
इलेक्ट्रिक हेड

@CodesInChaos में पंडों बनाम SQl - qr.ae/TUIpzE का जवाब है । वहां पंडों के उपयोग के फायदे और नुकसान का वर्णन किया गया है।
अंकित सेठ

12

मैं उन लोगों में से एक हूं, जो (मेरे मामले में) R की dplyr (भाषा, जरूरी नहीं कि उपकरण) का उपयोग करें यदि मैं अपनी SQL जानता हूं, तो भी मैं कर सकता हूं।

पंडों / dplyr / data.table पाइपलाइनों में मुझे जो प्रमुख लाभ दिखाई देता है, वह यह है कि संचालन परमाणु हैं और ऊपर से नीचे तक पढ़े जा सकते हैं।

एसक्यूएल में आपको पूरी स्क्रिप्ट को पार्स करने की जरूरत है, चारों ओर कूदते हुए (जिसे संक्षेप में प्रस्तुत किया जा रहा है, क्या शामिल हो रहा है और कैसे - बाएं? इनर? सही ?, क्या कोई फ़िल्टर लागू हैं?) पूरी तरह से समझ पाने के लिए कि क्या हो रहा है।

पांडस एट अल में पाइपलाइन का प्रत्येक चरण स्वयं समाहित है, यह इनपुट डेटा के साथ कुछ करता है और आउटपुट डेटा देता है, यह अनुक्रमिक प्रक्रिया इस कारण के बारे में आसान बनाता है कि क्या हो रहा है क्योंकि प्रत्येक ऑपरेशन के लिए स्पष्ट रूप से परिभाषित राज्य है न कि केवल पर एक क्वेरी स्तर।

और हाँ आप WITHस्टेटमेंट्स और ऐसे कर सकते हैं लेकिन इसके लिए बहुत अधिक कोड की आवश्यकता होती है और यह स्पष्ट नहीं होता है कि पाइपिंग की तुलना में किस ऑब्जेक्ट का उपयोग किया जा रहा है।


6

मैं पंडों / पायथन के लिए काफी नया हूं, लेकिन एक SQLServer DBA, वास्तुकार, प्रशासक, आदि के रूप में 20+ वर्ष है .. मुझे पंडों से प्यार है और मैं अपने कम्फ़र्ट में लौटने से पहले हमेशा पंडों में काम करने की कोशिश करने के लिए खुद को आगे बढ़ा रहा हूं, आरामदायक SQL दुनिया।

RDBMS बेहतर क्यों हैं: RDBMS का लाभ क्वेरी गति और डेटा रीड ऑपरेशन के अनुकूलन के उनके वर्षों के अनुभव हैं। प्रभावशाली यह है कि वे लेखन गति को अनुकूलित करने और अत्यधिक समवर्ती पहुंच का प्रबंधन करने की आवश्यकता को संतुलित करते हुए ऐसा कर सकते हैं। कभी-कभी ये अतिरिक्त ओवरहेड सरल, एकल-उपयोगकर्ता उपयोग के मामलों में पंडों को लाभ झुकाते हैं। लेकिन फिर भी, एक अनुभवी डीबीए एक डेटाबेस को ट्यून कर सकता है जिसे लिखने की गति पर पढ़ने की गति के लिए अत्यधिक अनुकूलित किया जा सकता है। DBA की डेटा स्टोरेज को ऑप्टिमाइज़ करने, स्ट्रेटेजिक डिस्क पेज साइज़िंग, पेज फिलिंग / पेडिंग, डेटा कंट्रोलर और डिस्क पार्टीशनिंग स्ट्रेटजी, ऑप्टिमाइज़्ड I / O प्लान्स, इन-मेमोरी डेटा पिनिंग, प्री-डिफाइंड एक्जीक्यूशन प्लान्स, इंडेक्सिंग, डेटा कम्प्रेशन जैसी चीज़ों का फायदा उठा सकता है। , और बहुत सारे। मुझे कई पंडों के डेवलपर्स से आभास होता है कि वे डॉन ' t वहां मौजूद गहराई को समझें। मुझे लगता है कि आम तौर पर ऐसा होता है कि अगर पंडों के डेवलपर के पास कभी ऐसा डेटा नहीं होता है जो इन अनुकूलन की आवश्यकता के लिए पर्याप्त हो, तो वे इस बात की सराहना नहीं करते हैं कि वे आपको बॉक्स से बाहर कितना समय बचा सकते हैं। RDBMS दुनिया में 30 साल का अनुभव है जो इसे अनुकूलित करता है ताकि अगर बड़े डेटासेट पर कच्ची गति की आवश्यकता हो, तो RDBMS को हराया जा सकता है।

क्यों अजगर / पंडों बेहतर है: उस ने कहा, गति सब कुछ नहीं है और कई मामलों में ड्राइविंग कारक नहीं है। यह इस बात पर निर्भर करता है कि आप डेटा का उपयोग कैसे कर रहे हैं, क्या यह साझा किया गया है, और क्या आप प्रसंस्करण की गति के बारे में परवाह करते हैं। RDBMS आम तौर पर अपने डेटा संरचनाओं में अधिक कठोर होते हैं और डेटा आकृतियों के साथ अधिक निर्धारक होने के लिए डेवलपर पर बोझ डालते हैं। पंडों की मदद से आप यहाँ अधिक ढीले हो सकते हैं। इसके अलावा, और यह मेरा पसंदीदा कारण है, आप एक वास्तविक प्रोग्रामिंग भाषा में हैं। प्रोग्रामिंग लैंग्वेज आपको डेटा में उन्नत तर्क को लागू करने के लिए असीम रूप से अधिक लचीलापन देती हैं। बेशक वहाँ भी मॉड्यूल और 3 पार्टी चौखटे की समृद्ध पारिस्थितिकी तंत्र है कि एसक्यूएल के करीब नहीं आ सकता है। कच्चे डेटा से वेब प्रेजेंटेशन या डेटा विज़ुअलाइज़ेशन के लिए एक कोड बेस में सभी तरह से सक्षम होने के कारण बहुत सुविधाजनक है। यह बहुत अधिक पोर्टेबल है। आप जनता नोटबुक्स सहित पाइथन को लगभग कहीं भी चला सकते हैं जो लोगों को अधिक तेज़ी से प्राप्त करने के लिए आपके परिणामों की पहुंच बढ़ा सकते हैं। डेटाबेस इस पर उत्कृष्ट नहीं है।

मेरी सलाह? यदि आप अपने आप को बड़े और बड़े डेटासेट में स्नातक पाते हैं तो आप इसका लाभ उठाने के लिए इसका श्रेय लेते हैं और सीखते हैं कि RDBMS कैसे मदद कर सकता है। मैंने 5 मिलियन पंक्ति, मल्टी-टेबल जॉइन, सारांशित प्रश्नों को 5 मिनट से 2 सेकंड तक नीचे देखा है। अपने टूल बेल्ट में इस समझ के होने से आपको और अधिक अच्छी तरह से गोल डेटा वैज्ञानिक बनाया जा सकता है। आप आज पंडों में सब कुछ करने में सक्षम हो सकते हैं लेकिन किसी दिन आपके पास असाइनमेंट हो सकता है जहां RDBMS सबसे अच्छा विकल्प है।


5

चीजें जो पांडव कर सकते हैं, वह एसक्यूएल नहीं कर सकता

  1. df.describe()
  2. प्लॉटिंग, जैसे; df['population'].plot(kind='hist')
  3. प्रशिक्षण मशीन लर्निंग एल्गोरिदम के लिए सीधे डेटाफ़्रेम का उपयोग करें

चीजें पंडों कर सकते हैं, मुझे पता नहीं था कि एसक्यूएल भी कर सकता है

  1. सीएसवी को निर्यात करें df.to_csv('foobar.sv'):। यह महत्वपूर्ण है जब आप एक व्यवसाय के मालिक को कुछ दिखाना चाहते हैं जो एक्सेल के साथ काम करना चाहता है। और वहाँ df.to_excelभी है। लेकिन SQL में, आप कर सकते हैं SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;(धन्यवाद, vy32!)

1
अच्छा लगा। हालाँकि इनमें से अधिकांश ऐसे कार्य हैं जो SQL में लागू किए जा सकते हैं। (SQL में सीधे CSV एक्सपोर्ट है।)
vy32

क्या आप कृपया मुझे एक प्रश्न भेज सकते हैं जो सीएसवी को निर्यात करता है? (मैं केवल ऐसे उपकरण जानता हूं जो कुछ SQL- आधारित डेटाबेस के लिए ऐसा करते हैं, लेकिन मैंने कभी कोई क्वेरी नहीं देखी है ... इसलिए मुझे संदेह है कि यह SQL विनिर्देशन का हिस्सा है)
मार्टिन थोमा

1
SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table; देखें dev.mysql.com/doc/refman/8.0/en/select-into.html
vy32

बहुत बहुत धन्यवाद, vy! मुझे लगता है कि जब मैं घर आऊंगा तो मैं अपना जवाब समायोजित कर लूंगा
मार्टिन थोमा

ज़रूर। याद रखें, फ़ाइल क्लाइंट पर नहीं, SQL सर्वर पर समाप्त होती है।
vy32

3

केवल एक ही बात इन उत्तरों में शामिल नहीं है जिसका मैं उल्लेख करना चाहूंगा कि यह इस बात पर भी निर्भर करता है कि आप SQL का उपयोग कैसे कर रहे हैं। उदाहरण के लिए आर्कपी लें। किसी कारण के लिए कोई भी arcpy.da फ़ंक्शन में कोई विशेषता निष्पादित नहीं होती है। यह वास्तव में अजीब है क्योंकि बहुत ज्यादा हर दूसरे अजगर एसक्यूएल लाइब्रेरी करता है। जहाँ आर्कपी.डा कार्यों में कथन भी लगभग 120 वर्णों तक सीमित है। यह अनिवार्य रूप से इसका मतलब है कि यदि आपके पास अपने डेटाबेस के साथ काम करने की कोई अपेक्षाकृत अधिक संख्या है तो आपकी एकमात्र वास्तविक पसंद कई बार आपके चुने हुए आर्कपी.डा फंक्शन को कॉल करना है, जहां हर बार आप स्टेटमेंट बदलते हैं। इस प्रक्रिया को तेज़ी से आगे बढ़ाने के लिए आप कुछ ट्रिक्स का उपयोग कर सकते हैं - उदाहरण के लिए, आप अपने डेटासेट के विखंडू पर पुनरावृति कर सकते हैं - लेकिन शाब्दिक रूप से इनमें से हर एक ट्रिक केवल एक आर्कपी.एडा का उपयोग करने की तुलना में बहुत धीमी है। खोजकर्ता आपकी पूरी तालिका को पंडों के डेटा फ्रेम में लोड करने के लिए, और फिर पंडों, सुन्न और, का उपयोग करके हेरफेर करता है, यदि आपका डेटा वास्तव में यह बड़े पैमाने पर है, तो मास्क। मुझे यहाँ इस बात पर ज़ोर देने की ज़रूरत है कि पांडा इस मामले में थोड़े तेज़ नहीं हैं। यह घृणित तेजी से है। यह इतना तेज़ है कि मैं इसे जल्दी नहीं करने के लिए सचमुच खुद पर हंस रहा था। पांडा के उपयोग से एक स्क्रिप्ट निष्पादन का समय एक घंटे से अधिक समय तक नीचे चला गया - मैं भूल जाता हूं कि क्या यह 3.5 घंटे या 1.5 घंटे से कूदना था - शाब्दिक रूप से 12 मिनट। इतनी तेजी से कि मैं सचमुच अपने आप पर हँस रहा था कि यह जल्दी न हो। पांडा के उपयोग से एक स्क्रिप्ट निष्पादन का समय एक घंटे से अधिक समय तक नीचे चला गया - मैं भूल जाता हूं कि क्या यह 3.5 घंटे या 1.5 घंटे से कूदना था - शाब्दिक रूप से 12 मिनट। इतनी तेजी से कि मैं सचमुच अपने आप पर हँस रहा था कि यह जल्दी न हो। पांडा के उपयोग से एक स्क्रिप्ट निष्पादन का समय एक घंटे से अधिक समय तक नीचे चला गया - मैं भूल जाता हूं कि क्या यह 3.5 घंटे या 1.5 घंटे से कूदना था - शाब्दिक रूप से 12 मिनट।

ध्यान देने वाली एक बात यह है कि जब मैं एसक्यूएल के साथ ऐसा कर सकता था तो मुझे सीखने में बहुत समय लगता था। मुझे या तो एक्सेस में विशेष रूप से sql के लिए संचालन सीखना होगा - यही वह जगह है जहाँ इस स्क्रिप्ट के लिए डेटा समाप्त हो गया - - Access में sql उतना मजबूत नहीं था जितना मुझे इसकी आवश्यकता थी जब मैं वास्तव में ऐसा करने में देख रहा था - या मुझे अपने सभी डेटा को एक sqlite3 डेटाबेस में लिखना होगा, इसे वहां हेरफेर करना होगा, और फिर इसे एक्सेस में डालना होगा। हालांकि इससे मुझे समान प्रदर्शन परिणाम मिल सकते हैं, इसने मेरी स्क्रिप्ट को भविष्य में संशोधित करने के लिए कठिन बना दिया होगा।

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

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

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


5
शायद दुख की बात है कि जब यह आधुनिक नौकरियों की बात आती है, तो यह आपके रिज्यूमे में सही buzzwords होने के रूप में होता है, जो किसी समस्या को हल करने के लिए आपके द्वारा उठाए गए दृष्टिकोणों के विपरीत होता है (यह मानते हुए कि आप buzzword को अपेक्षाकृत तेज़ कह सकते हैं)। यह ऐसा है जैसे समस्या को हल करने की तुलना में buzzword अधिक महत्वपूर्ण है। जब एक्स के लिए हल करने वाली समस्या में ए, बी, सी को सीखना और प्रयोग करना शामिल होना चाहिए, न कि रिवर्स। मुझे आश्चर्य है कि अगर अधिकांश विकास दल अब buzzword-ism और trendiness के कारण चीजों को नष्ट कर देते हैं, तो एक माध्यमिक, या "पुराने-स्कूल" के रूप में समस्या को हल करने के बारे में सोचें क्योंकि आप buzzword को नहीं जानते / उपयोग करते हैं।
साल्टीबस 2

1
मेरे अनुभव में @ElectricHead यदि आप अजगर में sql को शामिल करते हुए अपना स्वयं का फ़ंक्शन लिख रहे हैं, तो यह आसान है कि आप अपने कर्सर का दुरुपयोग करें और खराब प्रश्नों को लिखें, जैसे कि पांडा / सुन्न का उपयोग कर रहे हैं। यह याद रखें कि सभी sql मॉड्यूल / पुस्तकालयों को एक समान नहीं बनाया गया है। मेरे मामले में, arcpy.da.SearchCursors और पसंद के साथ, अजीब सीमाओं के कारण कुशलतापूर्वक रिकॉर्ड के एक समूह के लिए कुछ करने का एक अच्छा तरीका नहीं है। अगर मैं पांडा / सुन्न का उपयोग करता हूं तो चीजों को करने का एक अच्छा तरीका बन जाता है, और यही मैं अजगर का उपयोग करते समय चाहता हूं।

1
आह ठीक। आप मतलब है कि अजवायन की पत्ती dbapi कार्यान्वयन के माध्यम से एक होमस्पून एसक्यूएल पाइपलाइन का उपयोग करना है? किस मामले में, हाँ, मुझे कोई तर्क नहीं मिला; देखभाल की आवश्यकता है! यह मेरे लिए सादा एसक्यूएल के रूप में पढ़ा जाता है जिसे आपको स्पष्ट रूप से सेट ऑपरेशंस को समझने की आवश्यकता होती है, लेकिन यह पता चलेगा कि डेटाबेस क्लाइंट से मूर्खतापूर्ण प्रश्न चलाने पर यह बहुत जल्दी हो जाएगा।
इलेक्ट्रिक हेड

1
@ हां, यह बंद नहीं करेंगे कि लोग पंडों या इससे मिलते-जुलते छोरों में गतिशील रूप से बदलाव करने की कोशिश कर रहे हैं :) मुझे लगता है कि एसक्यूएल समझने से पांडा को प्रभावी ढंग से काम करने में मदद मिलती है (ऐसा नहीं है कि वे कुछ अवधारणाओं में समानता को छिपाते हैं)।
इलेक्ट्रिक हेड

1
@ सच में पांडा भी शक्तिशाली है ... मुझे लगता है कि मेरी कुंठाओं में से एक डेवलपर्स और प्रबंधन दोनों है, जिसमें स्वयं, समाधानों का मूल्यांकन करने और रुझानों का पीछा करने के लिए पर्याप्त समय नहीं खर्च करना (जहां पैसा स्वयं / कंपनी को बढ़ावा देने के लिए शामिल है)। लेकिन दुबले-पतले प्रोटोटाइप / एमवीपी में भी स्केलिंग के लिए उपयुक्त जमीनी कार्य करना होगा। SQL, noSQL और पंडों ... सभी के पास विभिन्न चरणों में उपयुक्त कार्यों और परियोजनाओं के लिए अपने उद्देश्य हैं। पिछले एक साल के लिए, एक दुबला प्रोटोटाइप / एमवीपी के लिए noSQL ने निश्चित रूप से एक से अधिक तरीकों से मेरी मदद की। SQL उसके लिए ओवरकिल हो गया होगा।
साल्टीबस 2

3

मैंने सोचा कि मैं जोड़ूंगा कि मैं बहुत समय की श्रृंखला आधारित डेटा विश्लेषण करता हूं, और ऐसा करने के लिए पांडा resampleऔर reindexविधियां अमूल्य हैं। हां, आप एसक्यूएल में समान काम कर सकते हैं (मैं DateDimensionतारीख-संबंधित प्रश्नों के साथ मदद करने के लिए एक तालिका बनाता हूं), लेकिन मुझे सिर्फ पांडा के तरीकों का उपयोग करना बहुत आसान लगता है।

साथ ही, जैसा कि अन्य लोगों ने कहा है, मेरी बाकी मॉडलिंग पायथन में है, और मेरे पास अक्सर वेब कॉल या सीएसवी फाइलें होती हैं।


2

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

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

बी+

एक और अंतर यह है कि Sql में CRUD संचालन को विभिन्न प्राधिकरण नीतियों के साथ वितरित किया जा सकता है जो पांडा में संभव नहीं हैं।

यह कहने के लिए नहीं है कि कौन बेहतर है, यह सब आपके कार्य पर निर्भर करता है। बड़े पैमाने पर गणना के लिए मैं Sql पसंद करता हूं और छोटे लोगों के लिए, मैं पांडा पसंद करता हूं।

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


1

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


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