पायथन का उपयोग कर प्रतिलिपि प्रस्तुत करने योग्य डेटा विज्ञान के लिए उपकरण और प्रोटोकॉल


50

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

  1. डेटा संस्करण नियंत्रण के लिए उपकरण।
  2. उपकरण चरणों और प्रयोगों को पुन: पेश करने में सक्षम करते हैं।
  3. इस तरह की परियोजना के लिए प्रोटोकॉल और सुझाए गए निर्देशिका संरचना।
  4. स्वचालित बिल्ड / रन टूल।

2
इस सवाल में सवाल कहां है ? कृपया सहायता केंद्र के दिशानिर्देशों की समीक्षा करने के लिए कुछ समय लें , विशेष रूप से: "यदि प्रश्न पूछने के लिए आपकी प्रेरणा 'मैं ______ के बारे में चर्चा में भाग लेना चाहता हूं, तो आपको यहां नहीं पूछना चाहिए।"
एयर

"आपको वास्तविक समस्याओं के आधार पर केवल व्यावहारिक, जवाबदेह प्रश्न पूछने चाहिए।"
युवल एफ

यह व्यावहारिक, जवाबदेह है और वास्तविक समस्या पर बहुत हद तक उसी तरह से आधारित है कि "मुझे बताएं कि डेटा साइंस कैसे करें" व्यावहारिक, जवाबदेह और वास्तविक समस्या पर आधारित है।
एयर

जवाबों:


46

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

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

1) डेटा संस्करण नियंत्रण के लिए उपकरण । जब तक आप (बहुत) बड़े डेटा के साथ काम करने की योजना नहीं बनाते हैं , मुझे लगता है कि इसका उपयोग करने के लिए समझ में आएगा git, जिसका उपयोग आप स्रोत संस्करण नियंत्रण के लिए करते हैं। बुनियादी ढांचा पहले से है। भले ही आपकी फाइलें बाइनरी और बड़ी हों, यह सलाह मददगार हो सकती है: https://stackoverflow.com/questions/540535/managing-large-binary-files-with-git

2) आरआर वर्कफ़्लो और प्रयोगों के प्रबंधन के लिए उपकरण । इस श्रेणी में सबसे लोकप्रिय उपकरणों की एक सूची है, मेरे ज्ञान का सबसे अच्छा करने के लिए (लोकप्रियता के अवरोही क्रम में):

  • टवेर्ना वर्कफ़्लो मैनेजमेंट सिस्टम ( http://www.taverna.org.uk ) - बहुत ठोस, यदि थोड़ा बहुत जटिल, उपकरणों का सेट। प्रमुख उपकरण जावा-आधारित डेस्कटॉप सॉफ्टवेयर है। हालाँकि, यह ऑनलाइन वर्कफ़्लो रिपॉजिटरी पोर्टल myExperiment ( http://www.myexperiment.org ) के साथ संगत है , जहाँ उपयोगकर्ता अपने RR वर्कफ़्लो को स्टोर और साझा कर सकते हैं। वेब आधारित आरआर पोर्टल, साथ पूरी तरह से संगत Taverna कहा जाता है Taverna ऑनलाइन है, लेकिन यह विकसित और रूस में पूरी तरह से अलग संगठन द्वारा बनाए रखा जा रहा है (के रूप में करने के लिए वहाँ के लिए भेजा OnlineHPC : http://onlinehpc.com )।

  • केपलर प्रोजेक्ट ( https://kepler-project.org )

  • VisTrails ( http://vistrails.org )

  • मेडागास्कर ( http://www.reproducibility.org )

उदाहरण देंकेप्लर और myExperiment परियोजनाओं का उपयोग करने के आधार पर वास्तविक वर्कफ़्लो डिज़ाइन और डेटा विश्लेषण के एक उदाहरण के साथ वैज्ञानिक वर्कफ़्लो पर एक दिलचस्प लेख यहां दिया गया है: http://f1000research.com/articles/3-110/v1

कई आरआर उपकरण हैं जो साक्षर प्रोग्रामिंग प्रतिमान को लागू करते हैं , LaTeXसॉफ्टवेयर परिवार द्वारा अनुकरणीय हैं । रिपोर्ट जनरेशन और प्रेजेंटेशन में मदद करने वाले उपकरण भी एक बड़ी श्रेणी है, जहाँ पर Sweaveऔर knitrशायद सबसे प्रसिद्ध व्यक्ति हैं। Sweaveएक उपकरण है, जो R पर केंद्रित है, लेकिन इसे कुछ अतिरिक्त प्रयासों ( https://stackoverflow.com/questions/2161152/sweave-for-python ) के साथ पायथन-आधारित परियोजनाओं के साथ एकीकृत किया जा सकता है । मुझे लगता है कि knitrयह एक बेहतर विकल्प हो सकता है, क्योंकि यह आधुनिक है, लोकप्रिय उपकरणों (जैसे RStudio) द्वारा व्यापक समर्थन है और यह भाषा-तटस्थ ( http://yihui.name/knitr/demo/engines ) है।

3) प्रोटोकॉल और सुझाए गए निर्देशिका संरचना । यदि मैं सही तरीके से समझ गया हूँ कि आपने टर्म प्रोटोकॉल ( वर्कफ़्लो ) का उपयोग करके क्या निहित किया है , तो आमतौर पर मुझे लगता है कि मानक आरआर डेटा विश्लेषण वर्कफ़्लो में निम्नलिखित अनुक्रमिक चरण होते हैं: डेटा संग्रह => डेटा तैयार करना (सफाई, परिवर्तन, विलय, नमूनाकरण) => डेटा विश्लेषण => परिणामों की प्रस्तुति (रिपोर्ट और / या प्रस्तुतिकरण उत्पन्न करना)। फिर भी, प्रत्येक वर्कफ़्लो प्रोजेक्ट-विशिष्ट है और इस प्रकार, कुछ विशिष्ट कार्यों के लिए अतिरिक्त चरणों को जोड़ने की आवश्यकता हो सकती है।

नमूना निर्देशिका संरचना के लिए, आप डेटा विश्लेषण वर्कफ़्लो और परियोजनाओं को स्वचालित करने के प्रयास के रूप में, आर पैकेज ProjectTemplate( http://projecttemplate.net ) के लिए दस्तावेज़ देख सकते हैं :

यहाँ छवि विवरण दर्ज करें

4) स्वचालित बिल्ड / रन टूल । चूंकि मेरा उत्तर सार्वभौमिक (भाषा-तटस्थ) आरआर टूल पर केंद्रित है, इसलिए सबसे लोकप्रिय उपकरण है make। निम्नलिखित लेखों makeको पसंदीदा आरआर वर्कफ़्लो ऑटोमेशन टूल के रूप में उपयोग करने के कुछ कारणों के लिए पढ़ें : http://bost.ocks.org/mike/make । निश्चित रूप से, अन्य समान उपकरण हैं, जो या तो कुछ पहलुओं में सुधार करते हैं make, या कुछ अतिरिक्त सुविधाएँ जोड़ते हैं। उदाहरण के लिए: ant(आधिकारिक तौर पर, अपाचे चींटी: http://ant.apache.org ), Maven("अगली पीढ़ी ant": http://maven.apache.org ), rake( https://github.com/ruby/rake ) , Makepp( http://makepp.sourceforge.net)। इस तरह के उपकरणों की एक व्यापक सूची के लिए, http://en.wikipedia.org/wiki/List_of_build_automation_software देखें ।


यहां साक्षर प्रोग्रामिंग के बारे में एक लिंक : मूल रूप से, यह कोड को पर्याप्त रूप से टिप्पणी करने के बारे में है ताकि कोड एक स्टैंडअलोन प्रलेखन बन जाए।
गाबोरस

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

1
मैंने यह अनुमान लगाया, इसीलिए मैंने इस जानकारी को इच्छुक पाठक के लिए एक टिप्पणी के रूप में जोड़ा :)
gaborous

4
यह एक बहुत व्यापक उत्तर है, लेकिन मुझे आश्चर्य है कि एक पहलू याद आ रहा है। क्रॉस सत्यापन अधिकांश डीएस परियोजनाओं का एक महत्वपूर्ण घटक है और आमतौर पर एक यादृच्छिक नमूने की आवश्यकता होती है, जो प्रजनन क्षमता को मुश्किल बना सकता है। मेरा सुझाव है कि आप यादृच्छिक जनरेटर के लिए एक ही बीज का उपयोग करने पर संक्षिप्त रूप से स्पर्श करें ताकि सांख्यिकीय भिन्नता की परवाह किए बिना परिणामों को पुन: पेश करने में सक्षम हो। धन्यवाद!
AN6U5

@ AN6U5: दयालु शब्दों के लिए धन्यवाद! मैं सहमत हूं - मैंने उस पहलू (+1) को याद किया। कृपया क्रॉस-वेलिडेशन पर प्रासंगिक संक्षिप्त जानकारी जोड़कर, मेरे उत्तर को अपडेट करने के लिए स्वतंत्र महसूस करें।
अलेक्सांद्र ब्लेक जूल

23

जब से मैंने एकेडमिया में शोध करना शुरू किया है मैं लगातार एक संतोषजनक वर्कफ़्लो की तलाश में था। मुझे लगता है कि मुझे आखिरकार कुछ मिला है जिससे मैं खुश हूं:

1) संस्करण नियंत्रण के तहत सब कुछ रखो, उदाहरण के लिए, Git:

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

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

मैंने IPython और IPython पुस्तिकाओं के लिए एक छोटा सा सेल-मैजिक एक्सटेंशन लिखा है, जिसे "वॉटरमार्क" कहा जाता है, जिसका उपयोग मैं आसानी से टाइम स्टैम्प बनाने के लिए करता हूं और मेरे द्वारा उपयोग किए गए विभिन्न पैकेज संस्करणों का ट्रैक रखता है और Git हैश भी करता है।

उदाहरण के लिए


%watermark

29/06/2014 01:19:10

CPython 3.4.1
IPython 2.1.0

compiler   : GCC 4.2.1 (Apple Inc. build 5577)
system     : Darwin
release    : 13.2.0
machine    : x86_64
processor  : i386
CPU cores  : 2
interpreter: 64bit


%watermark -d -t

29/06/2014 01:19:11 


%watermark -v -m -p numpy,scipy

CPython 3.4.1
IPython 2.1.0

numpy 1.8.1
scipy 0.14.0

compiler   : GCC 4.2.1 (Apple Inc. build 5577)
system     : Darwin
release    : 13.2.0
machine    : x86_64
processor  : i386
CPU cores  : 2
interpreter: 64bit

अधिक जानकारी के लिए, यहां दस्तावेज देखें ।


2
मुझे वॉटरमार्क जादू पसंद है। अनजान लोगों के लिए, GitHub अब शैक्षणिक संस्थानों से जुड़े उपयोगकर्ताओं के लिए 5 नि: शुल्क निजी रिपॉजिटरी प्रदान करता है।
बोगट्रॉन

19

सबसे अच्छा reproducibility उपकरण आपके कार्यों का एक लॉग बनाने के लिए है, कुछ इस तरह से:

experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported

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

कम सीखने की अवस्था वाले पायथन के लिए एक महान प्रजनन उपकरण निश्चित रूप से IPython / Jupyter Notebook है ( % logon और% logstart magics मत भूलना )। युक्ति: यह सुनिश्चित करने के लिए कि आपकी नोटबुक प्रतिलिपि प्रस्तुत करने योग्य है, कर्नेल को पुनरारंभ करें और सभी कोशिकाओं को ऊपर से नीचे (बटन रन ऑल सेल) चलाने की कोशिश करें: यदि यह काम करता है, तो एक संग्रह फ़ाइल ("ठंड") में सब कुछ बचाएं, अन्यथा, विशेष रूप से यदि आपको त्रुटियों से बचने के लिए गैर -रैखिक और गैर-अनुक्रमिक और गैर-स्पष्ट फैशन में सेल चलाने की आवश्यकता है , तो आपको थोड़ा सा काम करने की आवश्यकता है।

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

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

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

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

  • आपके द्वारा प्रदान किए गए सभी पैरामीटर;
  • आपके संपूर्ण प्रायोगिक एप्लिकेशन और कॉन्फ़िगर फ़ाइलों की सटीक सोर्सकोड स्थिति;
  • आउटपुट / प्लॉट / परिणाम और आपके प्रायोगिक अनुप्रयोग द्वारा निर्मित कोई भी फ़ाइल।

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

एक और भयानक उपकरण GNOME का Zeitgeist है (पहले पायथन में कोडित था, लेकिन अब Vala में पोर्ट किया गया है), एक कम्पासिंग एक्शन जर्नलिंग सिस्टम है, जो आपके द्वारा किए जाने वाले सभी चीज़ों को रिकॉर्ड करता है और यह मशीन लर्निंग का उपयोग कर उस समय के लिए सारांशित कर सकता है जो आप आइटम आधारित संबंधों के बीच चाहते हैं। समानता और उपयोग के पैटर्न पर, उदाहरण के लिए जैसे सवालों का जवाब "मेरे लिए सबसे अधिक प्रासंगिक था, जबकि मैं पिछले साल एक महीने के लिए प्रोजेक्ट एक्स पर काम कर रहा था?" । दिलचस्प बात यह है कि एवरनोट के समान एक नोट लेने वाला ऐप Zim Desktop Wiki , Zeitgeist के साथ काम करने के लिए एक प्लगइन है।

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

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

व्यक्तिगत रूप से, पायथन के साथ वैज्ञानिक कंप्यूटिंग में, मैंने पाया है कि पुस्तकालयों के साथ-साथ एक एप्लिकेशन को पैकेजिंग करना बहुत दर्दनाक है, इस प्रकार मैं अब केवल एनाकोंडा जैसे महान वैज्ञानिक प्रबंधक पैकेज ( ऑल-इन-वन वैज्ञानिक पैकेज का उपयोग करता हूं ) और बस उपयोगकर्ताओं को उसी पैकेज का उपयोग करने की सलाह देते हैं। एक अन्य समाधान एक स्क्रिप्ट स्वचालित रूप से एक उत्पन्न करने के लिए प्रदान करने के लिए हो सकता है virtualenv , या व्यावसायिक उपयोग करते हुए सब कुछ पैकेज डोकर आवेदन के रूप में dsign द्वारा उद्धृत या खुले स्रोत Vagrant (उदाहरण के लिए pylearn2 में एक बॉक्स जो Vagrant का उपयोग एक आसानी से पुनर्वितरण का उत्पादन करने के आभासी पर्यावरण पैकेज)।

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

/ EDIT2: यहां एक शानदार वीडियो सारांश दिया गया है (डिबगिंग के लिए लेकिन यह शोध पर भी लागू किया जा सकता है) प्रतिलिपि प्रस्तुत करने योग्य शोध करने के लिए क्या मौलिक है: अपने प्रयोगों और वैज्ञानिक पद्धति के अन्य चरणों को लॉग करना, एक प्रकार का "स्पष्ट प्रयोग"


14

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

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

यहाँ है जहाँ मुझे docker उपयोगी लगता है। डॉकर द्विआधारी वातावरण के लिए व्यंजनों को औपचारिक बनाने और संकलित करने का एक तरीका है। आप निम्नलिखित को डॉकटराइल में लिख सकते हैं (मैं यहां डॉकरफाइल सिंटैक्स के बजाय सादे अंग्रेजी का उपयोग कर रहा हूं):

  • एक बुनियादी द्विआधारी पर्यावरण से शुरू करें, जैसे कि उबंटू
  • Libsparse-dev स्थापित करें
  • (पिप) सुन्न और डरावना स्थापित करें
  • X स्थापित करें
  • LibX-dev स्थापित करें
  • (पिप) पायथन-एक्स स्थापित करें
  • IPython- नोटबुक स्थापित करें
  • मेरे बाइनरी वातावरण, इन डेटाफाइल्स और इन कॉन्फ़िगरेशन को अन्य विविध चीजों को करने के लिए मेरी अजगर लिपियों / नोटबुक की प्रतिलिपि बनाएँ। प्रजनन क्षमता सुनिश्चित करने के लिए, उन्हें स्थानीय फ़ाइल के बजाय नामित यूआरएल से कॉपी करें।
  • शायद IPython- नोटबुक चलाते हैं।

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

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

docker run dockerregistery.thewheezylab.org/nowyouwillbelieveme

या यदि वे आपकी लिपियों में इधर-उधर ताकना चाहते हैं:

docker run -i -t dockerregistery.thewheezylab.org/nowyouwillbelieveme /bin/bash

8

दुर्भाग्य से, मेरे पास प्लैंक द्वारा पोस्ट का जवाब देने के लिए पर्याप्त प्रतिष्ठा अंक नहीं हैं, इसलिए पूरे धागे का जवाब देना होगा - इसके बारे में खेद है।

मैं वास्तव में ऊपर उल्लिखित ओपन-सोर्स कलेक्टिव नॉलेज फ्रेमवर्क का डेवलपर हूं। यह एकीकृत JSON एपीआई और GSONH के माध्यम से साझा किए गए JSON मेटा के साथ पुन: प्रयोज्य और प्रतिलिपि प्रस्तुत करने योग्य पायथन घटकों के रूप में कलाकृतियों और प्रयोगात्मक वर्कफ़्लो के साझाकरण को आसान बनाने का प्रयास करता है। वे एक ही एकीकृत JSON एपीआई के साथ भविष्य कहनेवाला विश्लेषिकी से भी जुड़े हो सकते हैं।

हमने अभी नया संस्करण V1.8.1 जारी किया है और व्यापक प्रलेखन प्रदान किया है, इसलिए उम्मीद है कि अब अवधारणाओं को समझना आसान होगा: http://github.com/ctuning/ck/wiki

अब हमारे पास इस ढांचे के आधार पर कई शैक्षणिक और औद्योगिक परियोजनाएं हैं, इसलिए आप उनमें से एक की जांच कर सकते हैं - स्वयंसेवकों द्वारा एक प्रतिलिपि प्रस्तुत करने योग्य तरीके से प्रदान किए गए मोबाइल उपकरणों पर क्राउडसोर्सिंग कार्यक्रम का अनुकूलन: http://domledge.org/repo

हम यहां प्रतिलिपि प्रस्तुत करने योग्य विज्ञान से संबंधित विभिन्न संसाधनों पर भी नज़र रखते हैं: https://github.com/ctuning/ck/wiki/Eneable-open-science

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


1
इस गर्मी प्रतिलिपि प्रस्तुत करने योग्य अनुसंधान (संबंधित उपकरणों के लिए लिंक, डेटा सेट, लेख और घटनाओं सहित) पर पचाने भी ब्याज की हो सकती है: github.com/ctuning/ck/wiki/Enabling-open-science-blog-20160919
gfursin

7

एक संपूर्ण पाठ्यक्रम है जो प्रतिलिपि प्रस्तुत करने योग्य अनुसंधान के लिए समर्पित है। https://www.coursera.org/learn/reproducible-research यह पाठ्यक्रम R पर आधारित है, लेकिन अंतर्निहित विचार को सीखा जा सकता है।

एक सरल तरीका है कि Ipython नोटबुक है और अपने द्वारा किए जाने वाले हर गंदे काम को सहेज कर रखें, यह डेटा की सफाई, खोजपूर्ण विश्लेषण या मॉडल का निर्माण करना है।


6

मैं हाल ही में निम्नलिखित टूल पर आया हूं - http://github.com/ctuning/ck । यह पहले से ही पायथन में लिखा गया है और इसमें शामिल है कि आपको क्या चाहिए (मेरे सहकर्मी इसे पायलट प्रोजेक्ट में छवि मान्यता को स्वचालित करने के लिए उपयोग कर रहे हैं)।

पेशेवरों:

  1. बहुत छोटा, पोर्टेबल और अनुकूलन योग्य
  2. प्रयोगों को वितरित करने और भविष्य कहनेवाला विश्लेषण का उपयोग करके उन्हें संसाधित करने के लिए वेब सर्वर शामिल है
  3. क्राउडसोर्स के लिए एक शांत उपयोग उदाहरण है और कंपाइलर ऑप्टिमाइज़ेशन को पुन: उत्पन्न करता है - http://domledge.org/repo

विपक्ष:

  1. थोड़ा निम्न स्तर - आपको JSON API या कमांड लाइन का उपयोग करके GitHub के माध्यम से साझा किए गए पायथन घटकों से अपने स्वयं के वर्कफ़्लो को लागू करने की आवश्यकता है
  2. प्रलेखन कुछ जटिल है - मुझे वास्तव में उम्मीद है कि वे इसे जल्द ही अपडेट करने का समय पाएंगे।

6

मैंने एक ओपन सोर्स टूल http://dvc.org या DVC बनाया है और हाल ही में रिलीज़ किया है, जो वास्तव में आप तक पहुँचने की कोशिश कर रहे हैं:

  1. [डेटा संस्करण नियंत्रण के लिए उपकरण।] डीवीसी गिट के शीर्ष पर काम करता है, डेटा फ़ाइल संस्करण नियंत्रण जोड़ता है (फाइलें गिट के बाहर संग्रहीत होती हैं) और कोड और डेटा फ़ाइलों के बीच निर्भरता को ट्रैक करता है। DVC कोड और डेटा के लिए स्वचालित रूप से निर्भरता ग्राफ (DAG) प्राप्त करता है।
  2. [उपकरण चरणों और प्रयोगों को पुन: पेश करने में सक्षम करते हैं।] dvc repro data/scores.csvDAG के बारे में सभी आवश्यक चरणों को पुन: पेश करते हैं।
  3. [प्रोटोकॉल और ऐसी परियोजना के लिए निर्देशिका संरचना का सुझाव दिया।] डीवीसी को एक डेटा निर्देशिका ( dataडिफ़ॉल्ट रूप से) की आवश्यकता होती है, जहां आप सभी डेटा फ़ाइलों को संग्रहीत करना चाहते थे। हालांकि, डीवीसी पारदर्शी रूप से वास्तविक सामग्री को .cacheनिर्देशिका में ले जाता है और सीमलिंक बनाता है (हाँ, मैंने इसे विंडोज पर भी काम करने के लिए बनाया है)। .cacheनिर्देशिका Git से सिंक नहीं है, लेकिन यह बादल के माध्यम से सिंक किया जा सकता है (एस 3 या GCP) आदेश द्वारा dvc sync data/scores.csv(यह corresponded डेटा फ़ाइल की तरह कैश से सिंक करता है .cache/scores.csv_29de545)
  4. [स्वचालित बिल्ड / रन टूल।] ऊपर से देखें।

डीवीसी ट्यूटोरियल एक अच्छा प्रारंभिक बिंदु है - "डेटा संस्करण नियंत्रण: पुनरावृत्ति मशीन सीखने"


5

अस्वीकरण: मैं एक कंपनी, डाटमो में काम करता हूं , जो ऐसा करने के लिए एक ओपन-सोर्स टूल बनाता है।

प्रतिलिपि प्रस्तुत करने के लिए सबसे अच्छा अभ्यास निम्नलिखित है:

1) सबसे पहले अपने वातावरण को एक डॉकरफाइल में डॉकफाइल बनाकर और सुनिश्चित करें कि सभी निर्भरताएं उस फाइल में शामिल हैं। मुझे यह संसाधन सबसे अच्छा लगा ( https://arxiv.org/pdf/1410.0846.pdf )

2) एक बार आपके पास यह तय करने के लिए कि आप प्रदर्शन मेट्रिक्स और कॉन्फ़िगरेशन के सभी हिस्सों को ट्रैक कर सकते हैं (ताकि आप इसे भविष्य के प्रयोग के लिए फिर से देख सकें)

3) अंत में, कुछ डॉक्यूमेंटेशन लिखें ताकि एक नया प्रयोगकर्ता / डेवलपर आपके कोड को फिर से लिखने में सक्षम हो, इसे पर्यावरण के साथ दोहराएं और देखें कि आपने अपने कॉन्फ़िगरेशन और प्रदर्शन मीट्रिक कहाँ रखे हैं।

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