मैं उन मुख्य बिंदुओं को स्पर्श करते हुए एक उत्तर तैयार करने की कोशिश करूंगा, जहां दोनों भाषाएं डेटा साइंस / स्टैटिस्टिक्स / डेटा एनालिसिस और जैसे कि दोनों का उपयोग करने वाले लोगों के लिए खेल में आती हैं।
डेटा विश्लेषण में वर्कफ़्लो में आमतौर पर निम्नलिखित चरण होते हैं:
- किसी प्रकार के स्रोत से डेटा प्राप्त करना (सबसे अधिक संभावना है कि SQL / noSQL डेटाबेस या .csv फ़ाइलें)।
- डेटा को एक सभ्य और उचित प्रारूप (डेटा फ़्रेम) में पार्स करना ताकि कोई भी ऑपरेशन कर सके और उसके बारे में सोच सके।
- कुछ कार्यों को डेटा पर लागू करना (समूहीकरण करना, हटाना, विलय करना, नाम बदलना)।
- डेटा (प्रतिगमन, क्लस्टरिंग, एक तंत्रिका नेटवर्क या किसी अन्य अधिक या कम जटिल सिद्धांत) के लिए किसी प्रकार का मॉडल लागू करना।
- अपने परिणामों को अधिक-या-कम तकनीकी दर्शकों पर नियोजित / प्रस्तुत करना।
डेटा लाया जा रहा है
99% समय, डेटा को लाने की प्रक्रिया कुछ प्रकार के SQL या इम्पाला डेटाबेस को क्वेरी करने के लिए नीचे आती है: पायथन और आर दोनों के पास विशिष्ट ग्राहक या लाइब्रेरी हैं जो कुछ ही समय में काम करते हैं और समान रूप से अच्छी तरह से ( RImpala
, RmySQL
आर के लिए और MySQLdb
पायथन के लिए) सुचारू रूप से काम करें, वास्तव में जोड़ने के लिए बहुत कुछ नहीं)। जब बाहरी .csv फ़ाइलों को पढ़ने की बात आती है, R का data.table
पैकेज उस फ़ंक्शन को प्रदान करता है जो कुछ ही समय में किसी भी कस्टम पार्सिंग विकल्प के साथ विशाल और जटिल .csv फ़ाइलों में पढ़ता है, और परिणाम को स्तंभ नाम और पंक्ति संख्याओं के साथ डेटा फ़्रेम में सीधे रूपांतरित करता है।fread
डेटा फ़्रेम का आयोजन
हम चाहते हैं कि डेटा को किसी प्रकार की तालिका में संग्रहीत किया जाए ताकि हम किसी भी प्रविष्टि, पंक्ति या स्तंभ को आसानी से एक्सेस कर सकें।
आर पैकेज data.table
, लेबल करने के लिए नाम बदलने, हटाने और का उपयोग डेटा अपराजेय तरीके प्रदान करता है। मानक सिंटैक्स बहुत अधिक एसक्यूएल जैसा होता है dt[i, j, fun_by]
, जहां इसका उद्देश्य होता है dt[where_condition, select_column, grouped_by (or the like)]
; कस्टम उपयोगकर्ता-परिभाषित फ़ंक्शंस को वहां और साथ ही j
क्लॉज़ में रखा जा सकता है , ताकि आप डेटा में हेरफेर करने के लिए पूरी तरह से स्वतंत्र हों और समूहों या सबसेट पर किसी भी जटिल या फैंसी फ़ंक्शन को लागू कर सकें (जैसे कि i-th पंक्ति, k-th लें तत्व और इसे (k-2) -th तत्व (i-1) -th पंक्ति के लिए और यदि केवल पूरे स्तंभ का मानक विचलन क्या है, यह अंतिम स्तंभ द्वारा समूहीकृत है। बेंचमार्क पर और एसओ पर इस अन्य आश्चर्यजनक सवाल पर एक नज़र है। स्तंभों और पंक्तियों को क्रमबद्ध करना, हटाना और फिर से नामकरण करना है जो उन्हें करना है, और मानक सदिश आर विधियां apply, sapply, lapply, ifelse
पूरी तरह से प्रत्येक तत्व के माध्यम से लूप किए बिना, स्तंभों और डेटा फ़्रेमों पर सदिश संचालन करती हैं (याद रखें कि जब भी आप आर में लूप का उपयोग कर रहे हैं इसे बुरी तरह से गलत कर रहे हैं)।
पायथन का प्रतिपक्ष pandas
पुस्तकालय है। यह आखिरकार संरचना प्रदान करता है pd.DataFrame
(जो मानक पायथन की कमी है, किसी कारण से अभी भी मेरे लिए अज्ञात है) जो डेटा के लिए व्यवहार करता है वे जो हैं, अर्थात् डेटा के फ्रेम (कुछ numpy array, numpy list, numpy matrix
या जो भी हो)। समूहीकरण, पुन: नामकरण, छंटाई और इस तरह के संचालन को आसानी से प्राप्त किया जा सकता है और यहां भी, उपयोगकर्ता किसी भी कस्टम फ़ंक्शन को समूहीकृत डेटासेट में लागू कर सकता है apply
या पायथन का उपयोग करके फ़्रेम का सबसेट लगा सकता है lambda
। मैं व्यक्तिगत रूप df[df.iloc(...)]
से प्रविष्टियों का उपयोग करने के लिए व्याकरण को नापसंद करता हूं , लेकिन यह सिर्फ व्यक्तिगत स्वाद है और कोई समस्या नहीं है। समूह संचालन के लिए बेंचमार्क अभी भी आर की तुलना में थोड़ा खराब है, data.table
लेकिन जब तक आप संकलन के लिए 0.02 सेकंड नहीं बचाना चाहते हैं, प्रदर्शन में कोई बड़ा अंतर नहीं है।
स्ट्रिंग्स
आर रास्ता तार के इलाज के लिए उपयोग करने के लिए है stringr
पैकेज है कि किसी भी पाठ हेरफेर, अनाग्राम, नियमित अभिव्यक्ति की अनुमति देता है, सफेद रिक्त स्थान या आसानी से समान अनुगामी। इसका उपयोग JSON लाइब्रेरी के साथ संयोजन में भी किया जा सकता है जो JSON शब्दकोशों को अनपैक करता है और उनके तत्वों को अनलिंक करता है, ताकि किसी के पास एक अंतिम डेटा फ़्रेम हो जहां कॉलम के नाम और तत्व वे हों जो किसी भी गैर-UTF8 वर्ण या श्वेत स्थान के बिना हों। वहाँ पर।
पायथन के पंडों .str.
ने नियमित अभिव्यक्ति, अनुगामी या अपने प्रतिद्वंद्वी के रूप में अच्छे के साथ खेलने का एक ही काम किया है, इसलिए यहां भी स्वाद में कोई बड़ा अंतर नहीं है।
मॉडल लागू करना
यहाँ है, मेरी राय में, दो भाषाओं के बीच मतभेद उत्पन्न होते हैं।
आरआज तक, पुस्तकालयों का एक अपराजेय सेट, जो उपयोगकर्ता को कोड की एक से दो पंक्तियों में आवश्यक रूप से कुछ भी करने की अनुमति देता है। मानक कार्यात्मक या बहुपद प्रतिगमन वन-लाइनर्स में किए जाते हैं और आउटपुट उत्पन्न करते हैं जिनके गुणांक आसानी से पढ़ने योग्य होते हैं, उनके संगत आत्मविश्वास अंतराल और पी-वैल्यू वितरण के साथ। इसी तरह क्लस्टरिंग के लिए, रैंडम फॉरेस्ट मॉडल के लिए इसी तरह, डेंडोग्राम्स के लिए, प्रिंसिपल कंपोनेंट एनालिसिस, सिंगल वैल्यू डिकम्पोजिशन, लॉजिस्टिक फिट्स और भी बहुत कुछ। उपरोक्त सबसे अधिक संभावना में से प्रत्येक के लिए आउटपुट एक विशिष्ट प्लॉटिंग क्लास के साथ आता है जो आपके द्वारा अभी-अभी किए गए विज़ुअलाइज़ेशन को गुणांक और मापदंडों के लिए रंगों और बुलबुले के साथ उत्पन्न करता है। परिकल्पना परीक्षण, सांख्यिकीय परीक्षण, शापिरो,
अजगर को साथ रखने की कोशिश कर रहा है SciPy
और scikit-learn
। अधिकांश मानक विश्लेषण और मॉडल भी उपलब्ध हैं, लेकिन वे कोड के लिए थोड़े लंबे हैं और पढ़ने के लिए कम-सहज हैं (मेरी राय में)। अधिक जटिल मशीनरी गायब हैं, हालांकि कुछ को पहले से मौजूद पुस्तकालयों के कुछ संयोजनों में वापस खोजा जा सकता है। एक चीज जो मैं आर के बजाय पायथन में करना पसंद करता हूं वह है द्वि-ग्राम, त्रि-ग्राम और उच्चतर आदेशों के साथ शब्द-पाठ विश्लेषण।
परिणाम प्रस्तुत कर रहे हैं
दोनों भाषाओं में सुंदर प्लॉटिंग टूल हैं, आर ggplot2
सब से ऊपर और इसी पायथन समतुल्य हैं। प्रतिस्पर्धा करने के लिए वास्तव में बहुत अधिक नहीं है, वे काम को सुरक्षित और मजबूत करते हैं, हालांकि मेरा मानना है कि यदि आप परिणाम पेश कर रहे हैं तो आपको अन्य उपकरणों का उपयोग करना पड़ सकता है - वहां से बाहर फैंसी रंगीन डिजाइन उपकरण हैं और न ही पायथन और न ही आर आश्चर्यजनक रूप से हैं। फैंसी लाल और हरे रंग के ड्रैग और ड्रॉप्स वाले दर्शक। आर ने हाल ही में अपनी shiny app
विशेषताओं में बहुत सारे सुधार प्रकाशित किए हैं , जो मूल रूप से इंटरैक्टिव आउटपुट उत्पन्न करने की अनुमति देते हैं । मैं इसे कभी नहीं सीखना चाहता था, लेकिन मुझे पता है कि यह वहां है और लोग इसका अच्छी तरह से उपयोग करते हैं।
पक्षीय लेख
एक साइड नोट के रूप में, मैं इस बात पर जोर देना चाहूंगा कि दो भाषाओं के बीच प्रमुख अंतर यह है कि पायथन एक सामान्य प्रयोजन प्रोग्रामिंग लैन्गॉज है, जिसे कंप्यूटर विज्ञान, पोर्टेबिलिटी, तैनाती और इसी तरह और इसके लिए बनाया गया है। यह क्या करता है और यह जानने के लिए सीधा है पर कमाल है; ऐसा कोई नहीं है जिसे अजगर पसंद नहीं है। लेकिन यह प्रोग्रामिंग करने के लिए एक प्रोग्रामिंग भाषा है।
आरदूसरी ओर, गणितज्ञों, भौतिकविदों, सांख्यिकीविदों और डेटा वैज्ञानिकों द्वारा और इसके लिए आविष्कार किया गया था। यदि आप उस पृष्ठभूमि से आते हैं, तो सब कुछ सही समझ में आता है क्योंकि यह पूरी तरह से दर्पण है और सांख्यिकी और गणित में उपयोग की जाने वाली अवधारणाओं को पुन: पेश करता है। लेकिन अगर, इसके बजाय, आप एक कंप्यूटर विज्ञान पृष्ठभूमि से आते हैं और आर या जावा या सी का अनुकरण करना चाहते हैं तो आप निराश होने वाले हैं; यह मानक अर्थ में "ऑब्जेक्ट" नहीं है (ठीक है, यह करता है, लेकिन ऐसा नहीं है जो आम तौर पर सोचते हैं कि वे हैं ...), इसमें मानक अर्थ में कक्षाएं नहीं हैं (ठीक है, यह करता है, लेकिन आम तौर पर ऐसा नहीं है सोचता है कि वे ...), इसमें "पॉइंटर्स" या अन्य सभी कंप्यूटर विज्ञान संरचनाएं नहीं हैं - लेकिन सिर्फ इसलिए कि उन्हें इसकी आवश्यकता नहीं है। अंतिम लेकिन कम नहीं: प्रलेखन और पैकेज बनाने और पढ़ने के लिए सीधे हैं (यदि आप Rstudio का उपयोग कर रहे हैं); वहाँ एक बड़ा और भावुक समुदाय है, और यह Google को शाब्दिक रूप से पाँच सेकंड लेता है "R में इन्सर्ट-रैंडम-प्रॉब्लम कैसे करें" जिसकी पहली प्रविष्टि आपको समस्या के समाधान के लिए पुनर्निर्देशित करती है (किसी और के द्वारा) संबंधित कोड के साथ , कुछ ही समय में।
अधिकांश औद्योगिक कंपनियों के पास पाइथन (या पाइथन-अनुकूल वातावरण) में निर्मित बुनियादी ढांचा है जो पाइथन कोड के आसान एकीकरण की अनुमति देता है (बस import myAnalysis
कहीं भी और आप मूल रूप से किया जाता है)। हालाँकि, कोई भी आधुनिक तकनीक या सर्वर या प्लेटफ़ॉर्म आसानी से बिना किसी समस्या के पृष्ठभूमि R कोड चलाता है।