आर और पायथन डेटा विज्ञान में एक दूसरे के पूरक कैसे हैं?


54

कई ट्यूटोरियल या मैनुअल में कथा का अर्थ है कि विश्लेषण प्रक्रिया के पूरक घटक के रूप में आर और अजगर सह-अस्तित्ववादी हैं। मेरी अप्रशिक्षित आंख के लिए, हालांकि, ऐसा लगता है कि दोनों भाषाएं समान कार्य करती हैं।

तो मेरा सवाल यह है कि क्या वास्तव में दो भाषाओं के लिए विशेष निचे हैं या यदि यह केवल एक व्यक्तिगत प्राथमिकता है कि क्या एक या दूसरे का उपयोग करना है?


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

4
यदि आप 10 साल पहले एक सांख्यिकीविद थे। अजगर यदि आप अपने कोड को कहीं उत्पादन में डालना चाहते हैं या उसका पुन: उपयोग करते हैं।
djechlin


3
इस q की लोकप्रियता के कारण, और झंडे के माध्यम से अनुरोधों के जवाब में, मैंने इसे फिर से खोला है लेकिन इसे CW बना दिया है।
Scortchi - मोनिका फिर से बहाल करें

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

जवाबों:


45

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

आर के पास कुछ भी आप के बारे में सोच सकते हैं के लिए पैकेज का एक smorgasbord है, लेकिन इसका मूल सांख्यिकीय विश्लेषण है - मूल ची-वर्ग से लेकर कारक विश्लेषण और खतरे के मॉडल तक, यह आसान और मजबूत है। आंकड़ों में कुछ सबसे बड़े नाम आर पैकेज बनाते हैं, और इसमें आपकी हर ज़रूरत के लिए मदद करने के लिए एक जीवंत समुदाय है। ggplot2डेटा विज़ुअलाइज़ेशन (रेखांकन आदि ..) में एक मानक है। आर एक सदिश भाषा है और कुशलता से डेटा के माध्यम से लूप के लिए बनाई गई है। यह रैम के सभी डेटा को भी संग्रहीत करता है, जो एक दोधारी तलवार है - यह छोटे डेटा सेटों पर तेज़ है (हालांकि कुछ मुझसे बहस कर सकते हैं), लेकिन यह बड़े डेटा को अच्छी तरह से संभाल नहीं सकता है (हालांकि इसे बायपास करने के लिए पैकेज हैं , जैसे ff)।

पायथन आर की तुलना में सीखना काफी आसान है - खासकर उन लोगों के लिए जो पिछले प्रोग्रामिंग अनुभव रखते हैं। R सिर्फ ... अजीब है। पायथन डेटा पुनर्प्राप्ति में महान है, और वेब स्क्रैपिंग (अद्भुत के साथ beautifulsoup) के लिए उपयोग करने के लिए भाषा है । पायथन को स्ट्रिंग पार्सिंग और पाठ हेरफेर में अपनी ताकत के लिए जाना जाता है। pandasडेटा हेरफेर, विलय, परिवर्तन, आदि के लिए एक महान पुस्तकालय है, और तेज़ है (और शायद आर से प्रेरित है)।

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


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

2
मैं इसमें से अधिकांश से सहमत हूं - लेकिन मुद्दों पर अधिक जोर देगा - आर बड़े डेटा सेट के लिए अच्छा नहीं है और विरल डेटा सेट को संभाल नहीं करता है (अधिकांश पुस्तकालय इसका समर्थन नहीं करते हैं) बहुत अच्छी तरह से (जो कि कई प्रदर्शन मशीन सीखने पर है) उदाहरण के लिए 'शब्दों का बैग' प्रकार के मॉडल जहाँ एक कारक / श्रेणीगत चर की कार्डिनैलिटी .might में हो।
seanv507

10
टिप्पणी थ्रेड में एक तर्क शुरू करने के लिए नहीं, लेकिन data.tableआर में पैकेज विशेष रूप से बड़े डेटा सेटों के आसपास कुशल काम के लिए है, और वितरित प्रसंस्करण के लिए ठीक प्लग में है।
उज्ज्वल-सितारा

3
यदि आपको लगता है कि पायथन डेटा पुनर्प्राप्ति और स्ट्रिंग पार्सिंग में आर से बेहतर है तो आप पूरे समय आर का बहुत गलत उपयोग कर रहे हैं। "R बड़े डेटा सेट के लिए अच्छा नहीं है और वही स्पार्स डेटा सेट को हैंडल नहीं करता है (ज्यादातर लाइब्रेरी इसे सपोर्ट नहीं करते हैं)"
gent

3
ट्रेवर के बढ़ावा को जोड़ने data.table; मुझे यह कहते हुए भी खुशी हो रही है कि rvestअधिकांश स्क्रैपिंग कार्यों को संभालने के लिए एक उत्कृष्ट उपकरण है, और इससे बहुत आसान है कि यह उठना और भागना आसान हैbeautifulsoup
माइकलक्रिको

21

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

डेटा विश्लेषण में वर्कफ़्लो में आमतौर पर निम्नलिखित चरण होते हैं:

  1. किसी प्रकार के स्रोत से डेटा प्राप्त करना (सबसे अधिक संभावना है कि SQL / noSQL डेटाबेस या .csv फ़ाइलें)।
  2. डेटा को एक सभ्य और उचित प्रारूप (डेटा फ़्रेम) में पार्स करना ताकि कोई भी ऑपरेशन कर सके और उसके बारे में सोच सके।
  3. कुछ कार्यों को डेटा पर लागू करना (समूहीकरण करना, हटाना, विलय करना, नाम बदलना)।
  4. डेटा (प्रतिगमन, क्लस्टरिंग, एक तंत्रिका नेटवर्क या किसी अन्य अधिक या कम जटिल सिद्धांत) के लिए किसी प्रकार का मॉडल लागू करना।
  5. अपने परिणामों को अधिक-या-कम तकनीकी दर्शकों पर नियोजित / प्रस्तुत करना।

डेटा लाया जा रहा है

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 कोड चलाता है।


8
+6, यह एक बहुत अच्छा जवाब है: विस्तृत, सटीक और संतुलित।
गंग - मोनिका

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

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

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

8
@ MarkL.Stone क्या आप प्रसिद्ध उपयोगकर्ताओं द्वारा लिखित मानक पैकेजों का एक उदाहरण प्रस्तुत करना चाहेंगे जो गलत परिणाम देते हैं?
gent

15
  • पायथन एक सामान्य प्रोग्रामिंग भाषा है: इसलिए, यह डेटा विश्लेषण के अलावा कई अन्य कार्यों को करने के लिए अच्छा है। उदाहरण के लिए, यदि हम उत्पादन मॉडल में अपने मॉडल निष्पादन को स्वचालित करना चाहते हैं, तो अजगर वास्तव में अच्छा विकल्प है। अन्य उदाहरणों में डेटा को पढ़ने के लिए हार्डवेयर / सेंसर से कनेक्ट करना, डेटाबेस के साथ बातचीत करना (रिलेशनल या गैर-संरचित डेटा जैसे JSON), डेटा पार्स करना, नेटवर्क प्रोग्रामिंग (टीसीपी / आईपी), ग्राफिकल यूजर इंटरफेस, शेल के साथ इंटरैक्ट करना, आदि (खैर, एक डेटा साइंटिस्ट इस तरह के कई काम क्यों करना चाहेगा, जिनका प्रेडिक्टिव मॉडल से कोई लेना-देना नहीं है? मुझे लगता है कि लोगों की अलग-अलग परिभाषा होती है कि डेटा साइंटिस्ट क्या होता है?कुछ संगठनों में, डेटा को पार्स करना और डैशबोर्ड के साथ वर्णनात्मक विश्लेषण करना व्यापार के लिए काफी अच्छा है और डेटा अनुमानित मॉडल करने के लिए पर्याप्त परिपक्व नहीं है। दूसरी ओर, कई छोटी कंपनियों में, लोग डेटा वैज्ञानिकों से बहुत सारी सॉफ्टवेयर इंजीनियरिंग करने की उम्मीद कर सकते हैं। अजगर को जानने से आप अन्य सॉफ्टवेयर इंजीनियरों से स्वतंत्र हो जाएंगे।)

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

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


2
अच्छा जवाब लेकिन आपने 'JSON' के बजाय 'जेसन' लिखा, मुझे एक अच्छा चकल्लस दिया
par

मैं वास्तव में सांख्यिकी या "मशीन-लर्निंग" समुदायों का सदस्य नहीं हूं, लेकिन मुझे लगता है कि उन्नत पैकेज की उपलब्धता कुछ हद तक विशिष्ट है। मेरा मानना ​​है कि कई नई और अत्याधुनिक सांख्यिकीय तकनीकें आर कोड के साथ आती हैं। लेकिन जब मैं कंप्यूटर विज़न / मशीन लर्निंग / न्यूरल नेट पेपर्स देखता हूं, जो ("उच्च-स्तरीय") कोड के साथ आते हैं ... वे मतलबी या अजगर लगते हैं।
जियोमैट 22

1
+1 इस बात पर चर्चा करने के लिए कि भाषाएं किस तरह से एक विचार को प्रभावित करती हैं। आर का एक बड़ा फायदा यह है, क्योंकि यह सांख्यिकीविदों के लिए सांख्यिकीविदों द्वारा बनाया गया है, यह मॉडलिंग के संदर्भ में सोच को कैसे प्रोत्साहित करता है। प्रकटीकरण: मैं आर में धाराप्रवाह हूं, लेकिन केवल पायथन में दबंग हूं।
ऐश

उम ... किस बारे में scikit-learn? scikit-learn.org/stable
वॉरशिप 20

10

सभी धारियों के प्रोग्रामर इस बात को कम आंकते हैं कि भाषा के विकल्प सांस्कृतिक हैं । Node.js. जैसे वेब डेवलपर पाइथन जैसे वैज्ञानिक। बहुभाषाविद सॉफ्टवेयर इंजीनियर के रूप में, जो जावास्क्रिप्ट की तरलता और जावा की कठोरता को समान रूप से संभाल सकता है, मैंने महसूस किया है कि कोई आंतरिक कारण नहीं है कि ये भाषाएं एक-दूसरे की नौकरियों में खराब हैं - बस संकुल, प्रलेखन, समुदायों, पुस्तकों की भारी मात्रा में उनके आसपास आदि।

(आंतरिक कारणों से एक यादृच्छिक भाषा किसी अन्य भाषा से बेहतर है, इस उत्तर के लिए आगामी टिप्पणियां देखें।)

या बल्कि, क्या आर सकते हैं कि समर्पित प्रोग्रामर अंतराल में भरने के लिए काम कर रहे हैं के लिए पर्याप्त - - और एक है मेरा व्यक्तिगत भविष्यवाणी है कि अजगर भविष्य के रास्ते, क्योंकि यह सबसे आर कर सकते हैं कर सकते हैं है अब तक बेहतर सॉफ्टवेयर इंजीनियरिंग भाषा। सॉफ्टवेयर इंजीनियरिंग एक अनुशासन है जो निम्न से संबंधित है:

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

साथ ही स्पष्ट रूप से पायथन सीखना आसान है।

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

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


विल जूलिया, जब यह बड़ा हो जाता है, तो पायथन की तुलना में बेहतर विकल्प हो सकता है?
kjetil b halvorsen

1
@kjetilbhalvorsen "जब वह बड़ा होता है" एक "यदि" से अधिक है, तो यह एक स्थापित भाषा को दबाने के लिए बहुत कठिन है, और यह मूल रूप से एक व्यक्तिगत पसंद है कि क्या आप इसके जोखिम के मोर्चे पर प्रौद्योगिकी के साथ रहना चाहते हैं। IMO, पायथन में अब गति है। मैं जूलिया से बहुत परिचित नहीं हूँ, हालाँकि यह एक बहुत ही सामान्य राय है।
djechlin

1
पहली गोली को छोड़कर, मैं यह नहीं देख सकता कि अन्य चार बिंदुओं में से किसी में पायथन कैसे बेहतर है।
Firebug

4
"अजगर वह सब कुछ कर सकता है जो R कर सकता है" झूठा है। "आर क्या पर्याप्त है कि समर्पित प्रोग्रामर अंतराल में भरने के लिए काम कर रहे हैं" , यह दुनिया में किसी भी चीज के लिए सही होगा - जब तक कोई व्यक्ति इस पर काम करता है तब तक कुछ भी करने के लिए कुछ भी किया जा सकता है।
gent

2
@djechlin पूरी तरह से नहीं। विश्वसनीयता के लिए आपका उदाहरण "किसी भी मशीन लर्निंग मॉडल है जो वास्तविक समय में उपयोगकर्ताओं की सेवा करता है"। पायथन इस पर बेहतर है क्योंकि यह आर की तुलना में बहुत आसानी से तैनाती का समर्थन करता है, और केवल यही। इकाई परीक्षण, पठनीयता, संगठन और प्रलेखन अंतर्निहित गुण नहीं हैं। आप अपने स्वयं के परीक्षणों को लागू कर सकते हैं, अपने कोड को पढ़ने में आसान बना सकते हैं, इसे व्यवस्थित कर सकते हैं और आर प्रलेखन वास्तव में समझना आसान है।
Firebug

8

मैं एक आर उपयोगकर्ता हूं लेकिन मुझे लगता है कि पायथन भविष्य है (मुझे नहीं लगता कि यह सिंटैक्स है)

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

लेकिन आर खराब नहीं है
कई लोगों को "आर में खराब सिंटैक्स" बैंडवागन पर कूदना पसंद है।
मैं एक अच्छी बात होने के लिए आर के वाक्यविन्यास का प्रस्ताव करना चाहता हूं! आर। का उपयोग करते समय
असाइनमेंट फ़ंक्शंस, आलसी मूल्यांकन, गैर मानक मूल्यांकन और सूत्र बहुत बड़े लाभ हैं ।
यह सिर्फ इतना समय बचाता है कि आपके सारांश में संदर्भित चर नामों से बचने के बारे में चिंता न करें या क्या के खिलाफ मॉडलिंग की गई चीज़ों के तर्क का निर्माण करें। नामों के साथ names()देखना और फिर जोड़कर नए नाम निर्दिष्ट करना <- c("A", "B", "C")
जब लोग R के अजीब सिंटैक्स के बारे में शिकायत करते हैं तो वे इसे एक प्रोग्रामिंग भाषा के रूप में देखते हैं, न कि डेटा साइंस टूल के रूप में।
जैसा कि R से आने वाला और प्यार करने वाला कोई है, मुझे तुलना में थोड़ा सा अनाड़ी pandas का सिंटैक्स लगता है।
हां यह थोड़ा अधिक लचीला है, लेकिन अधिकांश कार्यों के लिए आप आर की तुलना में एक साधारण कमांड करने के लिए बहुत अधिक कीस्ट्रोक्स लेते हैं जो केवल पायथन के पार्सर को संतुष्ट करने के लिए हैं, न कि आपके विचार को व्यक्त करने के लिए।

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


4

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

मुझे लगता है कि आर के साथ निराशा तब होती है जब वे खेलने वाले लोग आर सीखने और समझने की कोशिश करते हैं; लेकिन यह सांख्यिकीय पृष्ठभूमि के माध्यम से आर में आने वाले लोगों के लिए एक महान उपकरण है।

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


3

कुछ पूर्व उत्तरों में जोड़ना:

मेरे अनुभव में, कच्चे डेटा को प्रस्तुत करने योग्य परिणामों से प्राप्त करने में R के dplyr + tidyr, ggplot और Rmarkdown का उपयोग करने से आसान कुछ भी नहीं है। पायथन बहुत कुछ प्रदान करता है, और मैं इसे अधिक से अधिक उपयोग कर रहा हूं, लेकिन मुझे यकीन है कि जिस तरह से हैडली के पैकेज एक साथ टाई करते हैं।


2

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

मैं कहूंगा कि आज आर में दो मुख्य ताकतें हैं: कुछ क्षेत्रों में कुछ वास्तव में परिपक्व अति विशिष्ट पैकेज, और अत्याधुनिक प्रजनन पैकेज अनुसंधान पैकेज निट।

अजगर सब कुछ के लिए बेहतर अनुकूल प्रतीत होता है।

यह निश्चित रूप से एक राय है, जैसा कि इस धागे में लगभग सब कुछ है। मैं चकित हूं कि यह धागा अभी भी जीवित है।


2

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

संपादित करें : मैं किसी को भी प्रोत्साहित करता हूं जो इस उत्तर पर टिप्पणी करने के बजाय जुड़े निबंध के लेखकों से बात करना चाहते हैं।


8
यह है कि आरग्रेग गाइड, मैंने कभी आर (और मैंने कई पढ़े हैं) के बारे में सबसे अधिक आलोचनात्मक आलोचना की है।
Firebug

10
"प्रलेखन असंगत रूप से खराब है", यह अस्पष्ट है। गैर-प्रोग्रामर, और इसके विशाल प्रलेखन के लिए आर ताकत इसकी सादगी है। "चूँकि R का नाम बेवकूफ है, इसलिए Google R को एक उपयोगी तरीके से देखना बहुत कठिन है। क्षमा करें। R में आपका स्वागत है!", यह अस्पष्टता है। मैंने कभी भी किसी भी समस्या का सामना करने की कोशिश नहीं की, जो आस-पास के सबसे अस्पष्ट पैकेजों में दस्तावेज़ीकरण खोजने की कोशिश कर रही थी। "आप स्तंभों का नाम बदलकर, सहजता से, नाम (फ्रेम) में निर्दिष्ट करते हैं। क्या आप जानते हैं कि यह कैसे और क्यों काम करता है, मुझे शिक्षित करता है।", c'mmon, वह भी कोशिश नहीं कर रहा है।
फायरबग

8
R, C की तुलना में Google के लिए कितना कठिन है? Google स्मार्ट है। यह सीखता है कि आप प्रोग्रामिंग भाषा में रुचि रखते हैं। आर। को ज्यादातर अन्य प्रोग्रामिंग भाषाओं की पृष्ठभूमि वाले लोगों द्वारा आलोचना की जाती है। क्षमा करें, लेकिन इसे इन भाषाओं के विकल्प के रूप में विकसित नहीं किया गया था। इसका विकास और सांख्यिकीविदों द्वारा किया गया था। नतीजतन, कुछ डिजाइन निर्णय इष्टतम नहीं थे, लेकिन यह कहना कि गंभीर खामियां थोड़ी मजबूत हैं। प्रत्येक प्रोग्रामिंग भाषा को अपनी ताकत और कमजोरियां मिलीं।
रोलैंड

5
पैकेज बनाना वास्तव में बहुत आसान है। यह केवल तभी जटिल हो जाता है जब आप CRAN द्वारा लागू नियमों (सही) का पालन करते हैं। यदि आप पैकेज बनाते हैं तो आप पैकेज से चुनिंदा आयात कर सकते हैं। वेक्टर रीसाइक्लिंग वास्तव में एक ताकत है। उप-सूची और वैक्टर के बीच कोई विसंगतियां नहीं हैं। बाकी में से कुछ को वास्तव में दोष माना जा सकता है।
रोलैंड

6
आर में स्पष्ट रूप से मौसा है, कुछ अक्षम्य "वाट" किस्म (स्ट्रिंग्सएफ़एक्टर्स)। लेकिन इसमें सांख्यिकीय पुस्तकालय भी हैं जिनकी कोई समानांतर, किसी अन्य भाषा में भी दूरस्थ रूप से नहीं है इन पुस्तकालयों को बनाने के लिए आवश्यक प्रोग्रामिंग हमारे द्वारा किए जाने वाले विशाल बहुमत से अधिक गंभीर है। एक कंबल बयान के रूप में, "आर एक गंभीर भाषा नहीं है" कहीं न कहीं क्लूलेस, निराशाजनक रूप से पारोचियल, अनपढ़ और खट्टे अंगूर के बीच है। और मैं इसे किसी ऐसे व्यक्ति के रूप में कहता हूं जो चाहता है कि आर मूल रूप से आर के पुस्तकालयों के साथ पायथन थे।
पॉल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.