डेटा विश्लेषण को डीबग कैसे करें?


10

मैं निम्नलिखित समस्या में आया हूं, कि मैं समेट रहा हूं बल्कि विशिष्ट है।

मेरे पास कुछ बड़े आंकड़े हैं, कहते हैं, कुछ मिलियन पंक्तियाँ। मैं इस पर कुछ गैर-तुच्छ विश्लेषण चलाता हूं, जैसे एक SQL क्वेरी जिसमें कई उप-प्रश्न शामिल हैं। मुझे कुछ परिणाम मिलता है, उदाहरण के लिए, बताते हैं कि समय के साथ संपत्ति X बढ़ती जा रही है।

अब, दो संभावित चीजें हैं जो उस तक ले जा सकती हैं:

  1. एक्स वास्तव में समय के साथ बढ़ रहा है
  2. मेरे विश्लेषण में एक बग है

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

केवल एक चीज जिसके बारे में मैं सोच सकता था, वह यह था कि संपत्ति के साथ एक छोटा, सिंथेटिक डेटा तैयार किया जाए जिसे मैं एक इकाई परीक्षण के रूप में उस पर विश्लेषण और चलाना चाहता हूं। क्या ऐसा करने के लिए उपकरण हैं? विशेष रूप से, लेकिन SQL तक सीमित नहीं है।


बड़ा अच्छा सवाल! मुझे लगता है कि यह एक महत्वपूर्ण और गैर-तुच्छ समस्या है।
बेन

जवाबों:


4

यहाँ एक सुझाव है:

  • अपने विश्लेषण को इस तरह से कोड करें कि इसे उप-नमूनों पर चलाया जा सके।
  • एक अनुपूरक दिनचर्या को कोड करें, जो या तो बेतरतीब ढंग से या समय के आधार पर, या क्षेत्र के आधार पर नमूना कर सकते हैं ... या यह डोमेन-विशिष्ट हो सकता है। यह वह जगह है जहाँ आपका ज्ञान प्रवेश करता है।
  • दोनों को मिलाएं और देखें कि क्या परिणाम उपसमूह में स्थिर हैं।

क्या इसका मतलब यह भी नहीं होगा कि मेरा बग सबसैम्बल में स्थिर है?
लिटिल बॉबी टेबल्स

यह एक संभावित परिणाम है, लेकिन आप केवल एक बार जब आप कोशिश करेंगे तो आपको पता चल जाएगा। और यदि हां, तो आप छोटे डेटा सेट पर कम से कम डिबग कर सकते हैं।
डिर्क एडल्डबुलेटेल

1

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

सुनिश्चित करें कि आपने पिछले चरण में कोई फ़िल्टर नहीं लगाए हैं। एक बार जब आपके पास एक सारांश स्तर पर संपूर्ण डेटा होता है, तो आप पिवट तालिकाओं में चारों ओर खेल सकते हैं और देख सकते हैं कि क्या चीजें बदल रही हैं / बढ़ रही हैं या घट रही हैं।

यदि डेटा महत्वपूर्ण मापदंडों पर भी संक्षेप में बड़ा है, तो आपको इसे 3 - 4 सबसेट में विभाजित करने की आवश्यकता है और फिर इसे फिर से करें।

आशा है ये मदद करेगा।


1

पहले आपको यह सत्यापित करने की आवश्यकता है कि एल्गोरिथ्म का आपका कार्यान्वयन सटीक है। इसके लिए डेटा के एक छोटे से नमूने का उपयोग करें और जांचें कि क्या परिणाम सही है। इस स्तर पर नमूने को जनसंख्या का प्रतिनिधि होने की आवश्यकता नहीं है।

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

आपके SQL वितरण के लिए इकाई परीक्षण रूपरेखाएँ हो सकती हैं। लेकिन आर जैसी प्रोग्रामिंग भाषा का उपयोग करना अधिक आसान होगा।


1

मुझे एक बहु कदम रणनीति पसंद है:

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

  2. छोटे कार्यों में अपने कोड को तोड़ दें, जिन्हें छोटे स्टेश में परीक्षण और मूल्यांकन किया जा सकता है।

  3. जुड़े हुए तत्वों की तलाश करें, उदाहरण के लिए एक्स के साथ मामलों की संख्या Y है - इसलिए यह क्वेरी आवश्यक रूप से वाई वापस करना चाहिए। अक्सर यह अधिक जटिल है, लेकिन उल्लेखनीय है।

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

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

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