क्या आधुनिक आर और / या पायथन लाइब्रेरी SQL को अप्रचलित बनाते हैं?


14

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

कुछ हफ़्ते पहले, मैंने खुद को एक तालिका में प्रत्येक पंक्ति के लिए स्तंभ नामों की एक सूची प्राप्त करने के कार्य के साथ सामना किया, जो कुछ मानदंडों को पूरा करता था और उन्हें तार के वेक्टर में मिलाता था। एक तंग समय सीमा थी और उस समय, मैं कुछ रुकावट का अनुभव कर रहा था और समस्या के आसपास अपना सिर नहीं लपेट पा रहा था। मैंने अपने बॉस से पूछा, जिन्होंने समस्या को हल करने के लिए मेरे सहयोगी को एक स्क्रिप्ट TSQL लिखने के लिए कहा। जब वह इस पर काम कर रहा था, तो मुझे यह पता लगाने का एक तरीका मिला कि आर में एक काफी सरल फ़ंक्शन लिख रहा हूं और इसे डेटा फ्रेम पर लागू कर रहा हूं। मेरे सहयोगी लगभग दो घंटे बाद अपनी स्क्रिप्ट के साथ वापस आए। यह कम से कम 75 लाइनें थीं जिनमें दो छोरों के लिए नेस्टेड था। मैंने उसे सूचित करने के लिए कहा कि यह कब समाप्त होगा और उसने कहा कि इसमें कई घंटे लगेंगे। इस बीच मेरी आर स्क्रिप्ट लगभग 30 सेकंड में ~ 45,000 रिकॉर्ड्स को पाटने में सक्षम थी।

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


2
यदि आपका डेटाबेस काफी छोटा और स्थिर है, तो आप इसे मेमोरी में लोड कर सकते हैं और अपने पसंदीदा ईटीएल टूल का उपयोग कर सकते हैं, जैसे कि dplyr। जब आप क्लाउड में बड़ा डेटा रखते हैं तो आपका दृष्टिकोण सरलता से काम नहीं करेगा। मैं नियमित रूप से क्वेरी चलाता हूं जो BigQuery (Google) की शिकायत करता है। मैं एसक्यूएल में सीधे प्रश्न लिखता हूं, लेकिन मैं स्पार्क को डेटाफ्रेम में काम करने के लिए एक मध्य परत के रूप में उपयोग कर सकता हूं।
एमर

1
तो एसक्यूएल सर्वर डेटा संग्रहीत करने के तरीके से आर की तुलना में स्वाभाविक रूप से अधिक कुशल है, या क्या यह है कि एसक्यूएल सर्वर में अधिक अंतर्निहित मेमोरी और प्रसंस्करण शक्ति है?
AffableAmbler

1
आप एक कंबल बयान नहीं कर सकते - यह कार्यान्वयन पर निर्भर करता है - लेकिन अच्छे डेटाबेस में क्वेरी ऑप्टिमाइज़र होते हैं, और उनमें से कुछ (जैसे BigQuery) मल्टीकोर निष्पादन का समर्थन करते हैं। हो सकता है कि आप जो चाहते हैं वह एसक्यूएल से बचने के लिए अपने डेटाबेस के ऊपर एक डेटाफ्रेम या ओआरएम अमूर्तता है। ऐसा लगता है कि यह पहले से ही कुछ हद तक है (सीएफ SQL अनुवाद )। आप पता लगाने के लिए कच्चे SQL के खिलाफ dplyr में उसी क्वेरी को बेंचमार्क कर सकते हैं। कुछ लोग प्रोटोटाइप के लिए डेटा का एक छोटा सा नमूना लेने के लिए क्या करते हैं, फिर उत्पादन के लिए बड़े डेटा टूल को कोड़ा मारते हैं
Emre

जवाबों:


13

R और SQL दो पूरी तरह से अलग जानवर हैं। SQL एक ऐसी भाषा है जिसका उपयोग आप उन डेटा को क्वेरी करने के लिए कर सकते हैं जो डेटाबेस में संग्रहीत हैं जैसा कि आप पहले से ही अनुभव कर चुके हैं। SQL बनाम R का लाभ ज्यादातर डेटाबेस सर्वर (MS SQL, Oracle, PostgreSQL, MySQL, आदि) के वास्तव में देता है।

अधिकांश, यदि सभी नहीं हैं, तो आधुनिक डेटाबेस सर्वर एक से अधिक उपयोगकर्ताओं को एक ही डेटा स्रोत से डेटा क्वेरी करने और एक ही टेबल में डेटा डालने, अपडेट करने और हटाने की अनुमति देते हैं, यह सुनिश्चित करते हुए कि डेटा सुसंगत रहता है। बैंक ट्रांजेक्शन की रिकॉर्डिंग के लिए यह जरूरी है। क्या आप R पर बैंक चलाने की कल्पना कर सकते हैं? जहां डेटाबेस सर्वर आते हैं। वे डेटाबेस पर चलने वाली प्रक्रियाओं के एसीआईडी ​​गुण सुनिश्चित करते हैं। ACID का मतलब है एटोमैसी, कंसिस्टेंसी, आइसोलेशन और ड्यूरेबिलिटी (देखें विकिपीडिया पर ACID डिस्क्रिप्शन )। R एक एकल उपयोगकर्ता प्लेटफ़ॉर्म है जहाँ सब कुछ मेमोरी में होता है। इसलिए, यदि आपका कंप्यूटर एक बड़े ऑपरेशन में आधा काम करना बंद कर देता है, तो आपका डेटा संग्रहीत नहीं किया जाएगा। आप एकमात्र ऐसे व्यक्ति भी हैं जो डेटा एक्सेस कर सकते हैं। स्पष्ट होने के लिए, आर को डेटाबेस सर्वर और / या SQL के लिए एक विकल्प नहीं माना जाता है।

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

SQL भाषा में एक बहुत ही अलग सिंटैक्स होता है और मैं आपके अनुभव को साझा करता हूं कि डेटा टेबल या dplyr सिंटैक्स का उपयोग करके डेटा मुंगिंग चरण लिखना कम है। हालांकि, कभी-कभी आपका डेटा R के लिए बहुत बड़ा होता है या आपको डेटाबेस में आवधिक बैच जॉब के भाग के रूप में स्टोर करने की आवश्यकता होती है, जिसे SQL में आपके तर्क को कोड करने की आवश्यकता होगी।

मेरे अनुभव में SQL और R / Python के लिए विशेष उपयोग के मामले हैं। SQL व्यापार महत्वपूर्ण डेटा संग्रहीत करने के लिए और एक केंद्रीकृत वातावरण में कई लोगों को डेटा तक पहुँचने, संशोधित करने, सम्मिलित करने और हटाने के लिए अनुमति देता है। किसी भी एक डेटा के लिए आर और पायथन मुंग महान हैं। यदि आपके डेटा को समय-समय पर निष्पादित करने की आवश्यकता है, तो आपको अपनी R / Python स्क्रिप्ट को SQL में पोर्ट करना होगा।


3

ये भी तुलनीय नहीं हैं, वास्तव में। एसक्यूएल डेटा तक पहुँचने के लिए एक भाषा है, आर डेटा के साथ काम करने के लिए एक भाषा है।

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

मेरा वर्कफ़्लो आमतौर पर है:

  1. SQL क्वेरी से कच्चा डेटा प्राप्त करें (R में)
  2. मूंगिंग रूटीन बनाएं
  3. यदि संभव हो तो, आर में निपुण मैं पूरा करने के लिए SQL क्वेरी फिर से लिखें

यह भी महसूस करें कि डेटा के सभी उपभोक्ता आर का उपयोग नहीं करते हैं, लेकिन कई अभी भी एसक्यूएल का उपयोग करके डेटा के साथ अपनी पसंद के प्लेटफ़ॉर्म को इंटरफ़ेस करते हैं।


1
यह वही प्रक्रिया है जिसका मैं पालन करता हूं (मेरे पर्यवेक्षक की पसंद नापसंद)। मैं मानता हूं कि जटिल गूंजने वाले कार्य जैसे कि मैं ऊपर वर्णित करता हूं, यह आर (जैसे प्रशंसा की सराहना) जैसी भाषा में बहुत अधिक कुशलता से किया जाता है। लेकिन अगर एसक्यूएल का एकमात्र उद्देश्य आपके डेटा के लिए एक विशाल हार्ड ड्राइव होना है, तो बस आर सर्वर क्यों नहीं है? ऐसा लगता है कि सभी फ़ंक्शंस (मैपिंग, लिंक टेबल के लिए कीज़ सेट करना, ग्रुप बनाना और डेटा को जोड़ना) अब आर में बहुत प्रभावी ढंग से किया जा सकता है। क्या आर डेटा फ्रेम की तुलना में SQL टेबल शब्दों की मेमोरी के उपयोग में अधिक कुशल है?
AffableAmbler

1
@ नोहा क्योंकि सभी लोग R का उपयोग नहीं करते हैं
HEITZ

2

लाइब्रेरी (dbplyr) का सही तरीका है: R (tidyverse का उपयोग करके) में सब कुछ लिखें और लाइब्रेरी को बस-इन-टाइम "R" कोड को निम्न-स्तरीय SQL में संकलित करने दें।

चूंकि सभी मुंगिंग अनुवाद योग्य नहीं हैं, इसलिए एक अन्य तरीका SQL सर्वर द्वारा लिया गया है: R कोड स्निपेट को SQL "सेलेक्ट" कमांड से मंगवाया जाए।


1

1., 2., 3. HEITZ द्वारा उल्लिखित दृष्टिकोण मेरे अनुभव में 3. के लिए एक विकल्प के साथ विस्तार संभव है। जहां आप अपने डेटा को R (data.table) से MySQL में वापस लिखते हैं।

इसलिए पूर्ण चरण MySQL-> data.table-> MySQL हैं

यदि आप यह सुनिश्चित करते हैं कि आप डेटाटेबल सिंटैक्स का उपयोग करें जहाँ आप डीटी की नकल नहीं करते हैं तो रैम के अनुकूल भी।


1

एक शब्द में NOSQL संरचित अर्ध संरचित और यहां तक ​​कि असंरचित डेटा का वर्णन और सारांशित करने के लिए एक शक्तिशाली संक्षिप्त और लचीला तरीका है - जब एक उपयुक्त दुभाषिया परत को इसके ऊपर रखा जाता है। वैसे sqlतो डेटा वैज्ञानिकों के लिए इसे लगभग जरूरी माना जाता है।

SQL इसका मुख्य संचालन करने के लिए एक संक्षिप्त और शक्तिशाली तरीका है:

  • अनुमान ( चुनें ..)
  • फ़िल्टरिंग ( जहाँ ..)
  • समूहीकरण / फ़िल्टरिंग ( द्वारा समूह और होने )
  • बुनियादी एकत्रीकरण ( गणना , योग , औसत ..)
  • मिलती है

वास्तविक शक्ति तब आती है जब इनलाइन विचारों का उपयोग करके परिणाम मिलाते हैं । जब मैं ऐसा करने के लिए है कि मैं किसी एक का उपयोग होगा की जरूरत है sqldf, pandasql, pysparkSql/ sparkSqlया एक सीधे RDBMS कनेक्शन। सबसे संक्षिप्त तरीके से data.table(बहुत बेहतर data.frame) या datatable(इससे बेहतर ) के साथ लिखना pandasअभी भी अधिक क्लूनी है, बहुत अधिक क्लूनी या लगभग असंभव प्रश्नों की जटिलता पर निर्भर करता है।

डेटा मुंगिंग के लिए : यह एक अलग कहानी है: कुछ ऑपरेशन आसानी से sql में व्यक्त किए जाते हैं और कुछ में इतना नहीं होता है। हालांकि जब आप इसमें शामिल UDFहोते हैं तो जो प्राप्त किया जा सकता है उसका एक व्यापक अक्षांश है। मेरे वर्तमान कार्य में UDFग्राहक चौराहे के संचालन, कस्टम एकत्रीकरण और कस्टम स्कोरिंग विधियों जैसे कार्यों को करने के लिए कई प्रकार शामिल हैं ।

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