2010-06-19 6 views
8

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

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

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

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

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

मैं डेटा एटीएस के आकार को डीबी में संग्रहीत करता हूं ताकि मैं पूछ सकूं कि उचित डेटा (यानी इसका आकार वर्तमान पैरामीटर स्थिति का सबसेट है) पहले से मौजूद है। मेरे पुनर्लेख में मैं महान एसक्यूएलकेमी के माध्यम से एक ऑब्जेक्ट डीबी (जेओडीबी या कॉचडब?) के माध्यम से mysql से आगे बढ़ रहा हूं क्योंकि प्रत्येक वर्ग के लिए तालिका को बदलना होगा जब अतिरिक्त def_specs की खोज की जाती है, जो दर्द होता है, और क्योंकि कुछ def_specs हैं पायथन सूचियों या डिक्ट्स, जो एसक्यूएल में अनुवाद करने के लिए दर्द हैं।

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

यदि डेटा प्रबंधन को आसानी से डेटा निर्माण से अलग नहीं किया जा सकता है, तो मुझे लगता है कि यह संभावना नहीं है कि बॉक्स समाधान में से एक है लेकिन एक हजार विशिष्ट हैं। शायद एक लागू पैटर्न है? मैं किसी भी संकेत की सराहना करता हूं कि समस्या को देखने या बेहतर तरीके से वर्णन करने के बारे में कैसे जाना है। मेरे लिए यह एक सामान्य मुद्दा प्रतीत होता है, हालांकि गहराई से स्तरित डेटा का प्रबंधन शायद वेब की मौजूदा हवाओं के साथ बाधाओं में है।

आप जैव सूचना विज्ञान में एक आम चुनौती का सामना कर रहे:

+0

डेटा विशेषताओं के लिए आवश्यकताओं का आपका विवरण मुझे "पेड़!" याद दिलाता है, "स्ट्रक्चरल शेयरिंग" http://www.infoq.com/presentations/Are-We-here-Yet-Rich- रिच हिकी द्वारा हिकी (क्लोजर) 0:41:10 – jfs

+0

सुझाव के लिए धन्यवाद - जो गहरा लग रहा है इसलिए मुझे इसके साथ कुछ समय लेना होगा। – ricopan

+0

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

उत्तर

2

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

तुम भी जैव सूचना विज्ञान के लिए खत्म हो इस सवाल का एक संस्करण लेने पर विचार हो सकता है ढेर http://biostar.stackexchange.com/

+0

धन्यवाद, बायोस्टार पर चारों ओर पोक करेगा। प्राथमिक डेटा से निपटने से यह एक अलग समस्या है, जो पार्स और जांच करने के लिए दर्द हो सकती है। प्राथमिक डेटा सस्ता है (मेरे लिए)। यह महंगा हो जाता है जब मैं इसे अधिक सम्बन्धों के साथ ले जाता हूं - उदाहरण के लिए प्रोटीन परिवारों को कुछ phylogenetic अनुमान से कुछ हद तक मनमाना मानकों के साथ असाइन करें, अलग-अलग सह-घटना प्रोफाइल बनाएं, जीनोम संदर्भ संबंध ढूंढें, जैविक प्रक्रिया का अनुमान लगाएं, सेलुलर स्थान के साथ गठबंधन करें ... आदि वास्तविक परिणामों को प्राप्त करने के लिए उन सभी चीजों की आवश्यकता होती है (प्रत्येक रूपांतरण आमतौर पर एक प्रकाशित विधि हो सकता है) ... फिर इसकी महंगी। – ricopan

2

ZODB पर विनिमय बड़े पैमाने पर डेटा को संभालने के लिए तैयार किया गया है नहीं किया गया है, यह सिर्फ वेब आधारित अनुप्रयोगों के लिए और किसी भी मामले में यह है में है एक फ्लैट फ़ाइल आधारित डेटाबेस।

मैं आपको एचडीएफ 5 फाइलों को संभालने के लिए एक पाइथन लाइब्रेरी PyTables का प्रयास करने की सलाह देता हूं, जो खगोल विज्ञान और भौतिकी में उपयोग किए जाने वाले प्रारूप को बड़ी गणनाओं और सिमुलेशन से परिणामों को संग्रहीत करने के लिए उपयोग किया जाता है। इसका उपयोग पदानुक्रमित डेटाबेस के रूप में किया जा सकता है और इसमें पाइथन ऑब्जेक्ट्स को चुनने का एक प्रभावी तरीका भी है। वैसे, pytables के लेखक ने बताया कि ZOdb was too slow जो उन्हें करने की जरूरत है, और मैं आपको इसकी पुष्टि कर सकता हूं। यदि आप एचडीएफ 5 में दिलचस्पी रखते हैं, तो एक और लाइब्रेरी भी है, h5py

आपके पास अलग-अलग गणनाओं के संस्करण के प्रबंधन के लिए एक उपकरण के रूप में, आप sumatra पर प्रयास कर सकते हैं, जो कि गिट/ट्रैक के विस्तार की तरह कुछ है लेकिन सिमुलेशन के लिए डिज़ाइन किया गया है।

आपको बायोस्टर पर इस प्रश्न से पूछना चाहिए, आपको वहां बेहतर जवाब मिलेंगे।

+0

विचारों के लिए धन्यवाद। यह वास्तव में डेटा का 'आकार' (मेटाडाटा जो इसे परिभाषित करता है) कि मैं NOSQL पर विचार कर रहा हूं, न कि डेटा स्वयं को बनाता है, हालांकि उन्हें साथ ही स्टोर करना सुविधाजनक होगा। मैं अपने डेटा एट्स को कभी-कभी सभ्य परिणामों के साथ स्टोर करने के लिए pytables का उपयोग करता हूं, हालांकि आम तौर पर वे केवल नमकीन सरणी को ढंकते हैं। – ricopan

+0

सुमात्रा के बारे में सिर के लिए धन्यवाद। यह एक महान उपकरण की तरह दिखता है कि मैं अपनी नजर रखूंगा। पहली नज़र में ऐसा लगता है कि यह मेरी समस्या के अनुरूप नहीं है: मैं प्रत्येक डेटा एट को सभी पैरामीटर (कई) के साथ स्टोर नहीं करना चाहता, लेकिन केवल उनको परिभाषित करता हूं। अन्यथा यदि मैं एक अत्याधुनिक परम के साथ बाद में विश्लेषण करता हूं, तो प्रासंगिक डेटा इस तरह नहीं देखा जाता है। तो समस्या यह परिभाषित कर रही है कि कौन से पैरा गतिशील रूप से प्रत्येक डेटा एट को परिभाषित करते हैं, जो मुझे नहीं लगता कि सुमात्रा के साथ सौदा किया जाता है। हो सकता है कि मेटाडेटा के लिए यह एक अच्छा बैक एंड स्टोरेज होगा, हालांकि, एक बार निर्धारित किया गया है, खासकर अगर सूचकांक। – ricopan

संबंधित मुद्दे