मेरे पास एक वैज्ञानिक डेटा प्रबंधन समस्या है जो सामान्य प्रतीत होती है, लेकिन मुझे मौजूदा समाधान या यहां तक कि इसका वर्णन भी नहीं मिल रहा है, जिसे मैंने लंबे समय तक परेशान किया है। मैं एक प्रमुख पुनर्लेखन (पायथन) शुरू करने वाला हूं लेकिन मैंने सोचा कि मैं मौजूदा समाधानों के लिए आखिरी बार एक बार डालना चाहता हूं, इसलिए मैं अपना खुद का स्क्रैप कर सकता हूं और जीवविज्ञान में वापस आ सकता हूं, या कम से कम बेहतर गुगलिंग के लिए कुछ उपयुक्त भाषा सीख सकता हूं ।विनिर्देश मानों द्वारा वैज्ञानिक डेटा निर्भरता ग्राफ के प्रबंधन के लिए पायथन समाधान
समस्या: मेरे पास महंगा है (गणना करने के लिए घंटों तक) और बड़े (जीबी) डेटा विशेषताओं को आम तौर पर एक या अधिक अन्य डेटा विशेषताओं के रूप में बनाया जाता है। मुझे यह ट्रैक रखने की ज़रूरत है कि यह डेटा कैसे बनाया गया है, इसलिए यदि मैं समस्या को ठीक करता हूं (सही विनिर्देश मानों के साथ बनाया गया है) या आवश्यकतानुसार नया डेटा तैयार करता है तो मैं इसे किसी अन्य परिवर्तन के लिए इनपुट के रूप में पुन: उपयोग कर सकता हूं। हालांकि इससे कोई फर्क नहीं पड़ता, मैं आम तौर पर कुछ मूल्यवान आण्विक जीवविज्ञान की जानकारी 'मूल्य वर्धित' से शुरू करता हूं, उदाहरण के लिए, अन्य शोधकर्ताओं द्वारा अन्य प्रक्रियाओं द्वारा जीन और प्रोटीन के साथ जीनोम। मुझे अपनी खुद की पहचान बनाने के लिए इन आंकड़ों को गठबंधन और तुलना करने की आवश्यकता है। कई मध्यवर्ती कदम अक्सर आवश्यक होते हैं, और ये महंगा हो सकते हैं। इसके अतिरिक्त, अंतिम परिणाम अतिरिक्त परिवर्तनों के लिए इनपुट बन सकते हैं। इन सभी परिवर्तनों को कई तरीकों से किया जा सकता है: अलग-अलग प्रारंभिक डेटा (उदाहरण के लिए विभिन्न जीवों का उपयोग करके), समान परिस्थितियों में विभिन्न पैरामीटर मानों का उपयोग करके, या अलग अनुमान मॉडल का उपयोग करके। विश्लेषण अक्सर बदलते हैं और दूसरों पर निर्माण करते हैं अनियोजित तरीकों से। मुझे यह जानने की ज़रूरत है कि मेरे पास कौन सा डेटा है (कौन से पैरामीटर या विनिर्देश इसे पूरी तरह से परिभाषित करते हैं), इसलिए यदि उचित हो, तो साथ ही सामान्य वैज्ञानिक अखंडता के लिए मैं इसका पुन: उपयोग कर सकता हूं।
सामान्य रूप से मेरे प्रयास: मैं अपने पायथन कक्षाओं को दिमाग में वर्णन की समस्या के साथ डिजाइन करता हूं। किसी वर्ग ऑब्जेक्ट द्वारा बनाए गए सभी डेटा विशेषताओं को पैरामीटर मानों के एक सेट द्वारा वर्णित किया गया है। मैं इन परिभाषित पैरामीटर या विनिर्देशों को 'def_specs' कहता हूं, और इन def_specs उनके मानों के साथ डेटा एट्स के 'आकार' के साथ। प्रक्रिया के लिए संपूर्ण वैश्विक पैरामीटर स्थिति काफी बड़ी हो सकती है (उदाहरण के लिए एक सौ पैरामीटर), लेकिन किसी एक वर्ग द्वारा प्रदान किए गए डेटा एट्स में कम से कम सीधे इनमें से केवल एक छोटी संख्या की आवश्यकता होती है। लक्ष्य यह जांचना है कि क्या पहले निर्मित डेटा एट परीक्षण द्वारा उपयुक्त हैं यदि उनका आकार वैश्विक पैरामीटर स्थिति का सबसेट है।
एक कक्षा के भीतर आवश्यक def_specs को ढूंढना आसान है जो कोड की जांच करके आकार को परिभाषित करता है। रगड़ तब उठता है जब किसी मॉड्यूल को किसी अन्य मॉड्यूल से डेटा एट की आवश्यकता होती है। इन डेटा एट्स का अपना आकार होगा, शायद कॉलिंग ऑब्जेक्ट द्वारा तर्क के रूप में पारित किया जाएगा, लेकिन अधिकतर वैश्विक पैरामीटर स्थिति से फ़िल्टर किया जाता है। अपने डेटा एट्स का पूरा विवरण बनाए रखने के लिए कॉलिंग क्लास को इसकी निर्भरताओं के आकार के साथ बढ़ाया जाना चाहिए। सिद्धांत में यह निर्भरता ग्राफ की जांच करके मैन्युअल रूप से किया जा सकता है, लेकिन यह ग्राफ गहरा हो सकता है, और कई मॉड्यूल हैं, जिन्हें मैं लगातार बदल रहा हूं और जोड़ रहा हूं, और ... मैं बहुत आलसी हूं और इसे करने के लिए लापरवाह हूं हाथ।
तो, कार्यक्रम __get__
कॉल के प्रबंधित स्टैक के माध्यम से अन्य वर्ग विशेषताओं को कॉल ट्रैक करके और कॉलर को अपने आकार को वापस दबाकर डेटा एट्स के पूर्ण आकार को गतिशील रूप से खोजता है। जैसा कि मैंने फिर से लिखा है, मुझे लगता है कि डेटा बिल्ट को प्रभावित करने से मनमाने ढंग से जानकारी को रोकने के लिए मुझे अपने बिल्डर वर्गों में विशेषता पहुंच को सख्ती से नियंत्रित करने की आवश्यकता है। सौभाग्य से अजगर वर्णनकर्ताओं के साथ यह आसान बना रहा है।
मैं डेटा एटीएस के आकार को डीबी में संग्रहीत करता हूं ताकि मैं पूछ सकूं कि उचित डेटा (यानी इसका आकार वर्तमान पैरामीटर स्थिति का सबसेट है) पहले से मौजूद है। मेरे पुनर्लेख में मैं महान एसक्यूएलकेमी के माध्यम से एक ऑब्जेक्ट डीबी (जेओडीबी या कॉचडब?) के माध्यम से mysql से आगे बढ़ रहा हूं क्योंकि प्रत्येक वर्ग के लिए तालिका को बदलना होगा जब अतिरिक्त def_specs की खोज की जाती है, जो दर्द होता है, और क्योंकि कुछ def_specs हैं पायथन सूचियों या डिक्ट्स, जो एसक्यूएल में अनुवाद करने के लिए दर्द हैं।
मुझे नहीं लगता कि सख्त विशेषता नियंत्रण की आवश्यकता के कारण इस डेटा प्रबंधन को मेरे डेटा रूपांतरण कोड से अलग किया जा सकता है, हालांकि मैं जितना संभव हो उतना करने की कोशिश कर रहा हूं। मैं उन्हें मौजूदा वर्गों का उपयोग कक्षा के साथ लपेटकर कर सकता हूं जो उनके def_specs को वर्ग विशेषताओं के रूप में प्रदान करता है, और वर्णनकर्ताओं के माध्यम से डीबी प्रबंधन प्रदान करता है, लेकिन ये कक्षाएं टर्मिनल हैं कि अतिरिक्त निर्भरता आकार की कोई और खोज नहीं हो सकती है।
यदि डेटा प्रबंधन को आसानी से डेटा निर्माण से अलग नहीं किया जा सकता है, तो मुझे लगता है कि यह संभावना नहीं है कि बॉक्स समाधान में से एक है लेकिन एक हजार विशिष्ट हैं। शायद एक लागू पैटर्न है? मैं किसी भी संकेत की सराहना करता हूं कि समस्या को देखने या बेहतर तरीके से वर्णन करने के बारे में कैसे जाना है। मेरे लिए यह एक सामान्य मुद्दा प्रतीत होता है, हालांकि गहराई से स्तरित डेटा का प्रबंधन शायद वेब की मौजूदा हवाओं के साथ बाधाओं में है।
आप जैव सूचना विज्ञान में एक आम चुनौती का सामना कर रहे:
डेटा विशेषताओं के लिए आवश्यकताओं का आपका विवरण मुझे "पेड़!" याद दिलाता है, "स्ट्रक्चरल शेयरिंग" http://www.infoq.com/presentations/Are-We-here-Yet-Rich- रिच हिकी द्वारा हिकी (क्लोजर) 0:41:10 – jfs
सुझाव के लिए धन्यवाद - जो गहरा लग रहा है इसलिए मुझे इसके साथ कुछ समय लेना होगा। – ricopan
ठीक है, इस बात को देखा और सामान्य तरीके से इसका एक उचित हिस्सा grokked। स्पष्ट रूप से समय के बारे में कभी सोचा नहीं था। मेरी विशिष्ट समस्या से आते हुए मैंने अपनी वस्तुओं को अपरिवर्तनीय वस्तुओं को प्रदान करने वाले कार्यों की तरह कार्य करने की आवश्यकता को देखा है, जिसे ज्ञात 'आकार' के साथ डेटा अखंडता की गारंटी देने का एकमात्र तरीका है। केवल थोड़ी सी सहमति के बारे में सोचा था, लेकिन इस धारणा को मजबूती मिली कि मेरे वर्गों को अनिवार्य रूप से कार्यों की तरह कार्य करना था और सख्त विशेषता नियंत्रण होना था। फिर से धन्यवाद। व्यावहारिक से चिपकने के लिए मिल गया, लेकिन यह मुझे कुछ विचार और शब्दावली का उपयोग करने के लिए, और थोड़ा विश्वास देता है। – ricopan