एक निपुण डाटा प्रोफेशनलको महत्त्वपूर्ण सीपहरू मध्ये एक ठूलो डाटासेटहरूको प्रभावकारी ह्यान्डलिङ हो, डाटा गुणस्तर र विश्वसनीयता सुनिश्चित गर्दै। डाटा कुनै पनि डाटा प्रणालीको केन्द्रीय र आधारभूत टुक्रा हो, र हाम्रो व्यापारका अन्य पक्षहरूमा तपाईंसँग जुनसुकै राम्रो सीपहरू छन्, यो तपाईंले बेवास्ता गर्न सक्नुहुन्न।
यस लेखमा, म Deequ पुस्तकालय र सांख्यिकीय विधिहरू प्रयोग गरेर ठूला डाटासेटहरूमा QA जाँचहरू प्रदर्शन गर्नका लागि बलियो प्रविधिहरू अन्वेषण गर्छु। मैले तल व्याख्या गर्ने दृष्टिकोणहरू संयोजन गरेर, तपाईंले डाटा अखण्डता कायम राख्न, आफ्नो डाटा व्यवस्थापन अभ्यासहरू बढाउन, र डाउनस्ट्रीम अनुप्रयोगहरूमा सम्भावित समस्याहरूलाई रोक्न सक्षम हुनुहुनेछ।
स्केलमा डाटा गुणस्तर सुनिश्चित गर्नु एक चुनौतीपूर्ण कार्य हो, विशेष गरी जब वितरित फाइल प्रणाली वा डाटा गोदामहरूमा भण्डार गरिएका अरबौं पङ्क्तिहरूसँग व्यवहार गर्दा। Deequ पुस्तकालय एक खुला स्रोत डाटा प्रोफाइलिङ र Spark मा निर्मित QA फ्रेमवर्क हो जुन यो समस्या समाधान गर्न डिजाइन गरिएको आधुनिक र बहुमुखी उपकरण हो। ठूला-ठूला डाटासेटहरूको कुशल ह्यान्डलिङका लागि वितरण गरिएको प्रशोधन शक्तिको लाभ उठाउँदै स्पार्कसँग निर्बाध रूपमा एकीकृत गर्ने क्षमता हो।
जब तपाइँ यसलाई प्रयास गर्नुहुन्छ, तपाइँ देख्नुहुनेछ कि कसरी यसको लचिलोपनले तपाइँलाई तपाइँको विशिष्ट आवश्यकताहरु अनुरूप जटिल प्रमाणीकरण नियमहरू परिभाषित गर्न दिन्छ, व्यापक कभरेज सुनिश्चित गर्दै। थप रूपमा, Deequ ले विस्तृत मेट्रिक्स र विसंगति पत्ता लगाउने क्षमताहरू प्रदान गर्दछ जसले तपाईंलाई डाटा गुणस्तर समस्याहरू पहिचान गर्न र सक्रिय रूपमा सम्बोधन गर्न मद्दत गर्दछ। ठूला र गतिशील डेटासेटहरूसँग काम गर्ने डेटा पेशेवरहरूको लागि, Deequ एक स्विस-चाकू समाधान हो। हामी यसलाई कसरी प्रयोग गर्न सक्छौं हेरौं।
Deequ पुस्तकालय सेटअप र डेटा प्रोफाइलिङ वरिपरि प्रयोग केसहरूमा थप विवरणहरू यहाँ पहुँचयोग्य छन्। सरलताको खातिर, यस उदाहरणमा, हामीले भर्खर केही खेलौना रेकर्डहरू उत्पन्न गरेका छौं:
val rdd = spark.sparkContext.parallelize(Seq( Item(1, "Thingy A", "awesome thing.", "high", 0), Item(2, "Thingy B", "available at http://thingb.com", null, 0), Item(3, null, null, "low", 5), Item(4, "Thingy D", "checkout https://thingd.ca", "low", 10), Item(5, "Thingy E", null, "high", 12))) val data = spark.createDataFrame(rdd)
धेरैजसो डेटा अनुप्रयोगहरू डेटा विशेषताहरू, जस्तै गैर-NULL मानहरू र विशिष्टताहरू बारे अस्पष्ट धारणाहरूसँग आउँछन्। Deequ संग, यी मान्यताहरू एकाइ परीक्षण मार्फत स्पष्ट हुन्छ। यहाँ केहि सामान्य जाँचहरू छन्:
पङ्क्ति गणना: डेटासेटले पङ्क्तिहरूको एक निश्चित संख्या समावेश गरेको सुनिश्चित गर्नुहोस्।
विशेषता पूर्णता: id र productName जस्ता विशेषताहरू कहिल्यै नल नभएको जाँच गर्नुहोस्।
विशेषता विशिष्टता: निश्चित विशेषताहरू, जस्तै आईडी, अद्वितीय छन् भनेर सुनिश्चित गर्नुहोस्।
मान दायरा: प्राथमिकता र numViews जस्ता विशेषताहरू अपेक्षित दायरा भित्र पर्छन् भनी प्रमाणित गर्नुहोस्।
ढाँचा मिलान: अपेक्षित हुँदा विवरणहरूमा URL हरू छन् भनी प्रमाणित गर्नुहोस्।
सांख्यिकीय गुणहरू: संख्यात्मक विशेषताहरूको मध्य निश्चित मापदण्ड पूरा गरेको सुनिश्चित गर्नुहोस्।
यहाँ तपाईंले Deequ प्रयोग गरेर यी जाँचहरू कसरी लागू गर्न सक्नुहुन्छ:
import com.amazon.deequ.VerificationSuite import com.amazon.deequ.checks.{Check, CheckLevel, CheckStatus} val verificationResult = VerificationSuite() .onData(data) .addCheck( Check(CheckLevel.Error, "unit testing my data") .hasSize(_ == 5) // we expect 5 rows .isComplete("id") // should never be NULL .isUnique("id") // should not contain duplicates .isComplete("productName") // should never be NULL // should only contain the values "high" and "low" .isContainedIn("priority", Array("high", "low")) .isNonNegative("numViews") // should not contain negative values // at least half of the descriptions should contain a url .containsURL("description", _ >= 0.5) // half of the items should have less than 10 views .hasApproxQuantile("numViews", 0.5, _ <= 10)) .run()
यी जाँचहरू चलाएपछि, Deequ ले तिनीहरूलाई Spark कार्यहरूको श्रृंखलामा अनुवाद गर्दछ, जुन यसले डेटामा मेट्रिक्स गणना गर्न कार्यान्वयन गर्दछ। पछि, यसले डेटामा अवरोधहरू समातेको छ कि छैन भनेर हेर्नको लागि यी मेट्रिक्समा तपाईंको दावी कार्यहरू (जस्तै, साइज जाँचको लागि _ == 5) आह्वान गर्दछ। परीक्षणले त्रुटिहरू फेला पार्यो कि भनेर हामी वस्तु "प्रमाणीकरण परिणाम" निरीक्षण गर्न सक्छौं:
import com.amazon.deequ.constraints.ConstraintStatus if (verificationResult.status == CheckStatus.Success) { println("The data passed the test, everything is fine!") } else { println("We found errors in the data:\n") val resultsForAllConstraints = verificationResult.checkResults .flatMap { case (_, checkResult) => checkResult.constraintResults } resultsForAllConstraints .filter { _.status != ConstraintStatus.Success } .foreach { result => println(s"${result.constraint}: ${result.message.get}") } }
यदि हामीले उदाहरण चलाउँछौं भने, हामीले निम्न आउटपुट पाउँछौं:
We found errors in the data: CompletenessConstraint(Completeness(productName)): Value: 0.8 does not meet the requirement! PatternConstraint(containsURL(description)): Value: 0.4 does not meet the requirement!
परीक्षणले हाम्रो धारणा उल्लङ्घन भएको फेला पार्यो! productName विशेषताका मानहरूमध्ये ५ मध्ये ४ (८०%) मात्र गैर-शून्य छन्, र वर्णन विशेषताका ५ मध्ये २ (अर्थात, ४०%) मानहरूमा मात्र URL समावेश छ। सौभाग्यवश, हामीले एउटा परीक्षण चलायौं र त्रुटिहरू फेला पार्यौं; कसैले तुरुन्तै डाटा ठीक गर्नुपर्छ!
जबकि Deequ ले डेटा प्रमाणीकरणको लागि एक बलियो ढाँचा प्रदान गर्दछ, सांख्यिकीय विधिहरू एकीकृत गर्नाले तपाइँको QA जाँचहरू अझ बढाउन सक्छ, विशेष गरी यदि तपाइँ डेटासेटको समग्र मेट्रिक्ससँग व्यवहार गर्दै हुनुहुन्छ। डेटाको गुणस्तर निगरानी र सुनिश्चित गर्नको लागि तपाइँ कसरी सांख्यिकीय विधिहरू प्रयोग गर्न सक्नुहुन्छ हेरौं।
एउटा व्यापार परिदृश्यलाई विचार गर्नुहोस् जहाँ ETL (Extract, Transform, Load) प्रक्रियाले दैनिक निर्धारित कार्यमा N रेकर्डहरू उत्पादन गर्दछ। यदि रेकर्ड गणनामा महत्त्वपूर्ण विचलन छ भने समर्थन टोलीहरूले अलर्ट उठाउन QA जाँचहरू सेट अप गर्न चाहन्छन्। उदाहरणका लागि, यदि प्रक्रियाले सामान्यतया दुई महिनामा दैनिक 9,500 देखि 10,500 रेकर्डहरू उत्पन्न गर्छ भने, कुनै पनि महत्त्वपूर्ण वृद्धि वा कमीले अन्तर्निहित डेटामा समस्यालाई संकेत गर्न सक्छ।
हामी यस थ्रेसहोल्डलाई परिभाषित गर्नको लागि सांख्यिकीय विधि प्रयोग गर्न सक्छौं जुन प्रक्रियाले समर्थन टोलीलाई चेतावनी दिनुपर्दछ। तल दुई महिनामा रेकर्ड गणना ट्र्याकिङको दृष्टान्त छ:
यसलाई विश्लेषण गर्न, हामी दिन-प्रतिदिन परिवर्तनहरू अवलोकन गर्न रेकर्ड गणना डेटा रूपान्तरण गर्न सक्छौं। निम्न चार्टमा देखाइए अनुसार यी परिवर्तनहरू सामान्यतया शून्यको वरिपरि घुम्छन्:
जब हामीले परिवर्तनको यो दरलाई सामान्य वितरणसँग प्रतिनिधित्व गर्छौं, यसले डेटा सामान्य रूपमा वितरण गरिएको जनाउँछ। अपेक्षित परिवर्तन 0% को आसपास छ, 2.63% को मानक विचलन संग।
यो विश्लेषणले सुझाव दिन्छ कि रेकर्ड गणना सामान्यतया 90% आत्मविश्वासको साथ -5.26% देखि +5.25% दायरा भित्र पर्दछ। यसको आधारमा, तपाईंले समयमै हस्तक्षेप सुनिश्चित गर्दै, रेकर्ड गणना यस दायराभन्दा बाहिर गएमा सतर्कता बढाउनको लागि नियम स्थापना गर्न सक्नुहुन्छ।
विशेषता कभरग e ले डेटासेट स्न्यापसटको लागि कुल रेकर्ड गणनामा गैर-NULL मानहरूको अनुपातलाई जनाउँछ। उदाहरण को लागी, यदि 100 रेकर्ड मध्ये 8 मा एक विशेष विशेषता को लागी एक NULL मान छ, त्यो विशेषता को कवरेज 92% हो।
दैनिक उत्पादन तालिका स्न्यापसट उत्पन्न गर्ने ETL प्रक्रियाको साथ अर्को व्यापार मामलाको समीक्षा गरौं। हामी उत्पादन विवरण विशेषताहरूको कभरेज निगरानी गर्न चाहन्छौं। यदि कभरेज एक निश्चित थ्रेसहोल्ड भन्दा कम हुन्छ भने, समर्थन टोलीको लागि एक चेतावनी खडा गरिनु पर्छ। तल दुई महिनामा उत्पादन विवरणहरूको लागि विशेषता कभरेजको दृश्य प्रतिनिधित्व छ:
कभरेजमा निरपेक्ष दिन-प्रतिदिन भिन्नताहरू विश्लेषण गरेर, हामीले परिवर्तनहरू शून्य वरिपरि घुम्ने देख्छौं:
यो डेटालाई सामान्य वितरणको रूपमा प्रस्तुत गर्दा यो सामान्यतया लगभग 0% को अपेक्षित परिवर्तन र 2.45% को मानक विचलनको साथ वितरण गरिन्छ।
हामीले देख्यौं, यस डेटासेटको लागि, उत्पादन विवरण विशेषता कभरेज सामान्यतया ९०% आत्मविश्वासको साथ -४.९% देखि +४.९% सम्म हुन्छ। यस सूचकको आधारमा, कभरेज यस दायराभन्दा बाहिर गएमा हामी सतर्कता बढाउनको लागि नियम सेट गर्न सक्छौं।
यदि तपाइँ डेटासेटहरूसँग काम गर्नुहुन्छ जुन मौसमीता वा प्रवृत्तिहरू जस्ता कारकहरूको कारणले महत्त्वपूर्ण भिन्नताहरू देखाउँदछ, परम्परागत तथ्याङ्क विधिहरूले गलत अलर्टहरू ट्रिगर गर्न सक्छ। टाइम शृङ्खला एल्गोरिदमहरूले तपाईंको QA जाँचहरूको शुद्धता र विश्वसनीयतामा सुधार गर्दै थप परिष्कृत दृष्टिकोण प्रस्ताव गर्छन्।
थप समझदार अलर्टहरू उत्पादन गर्न, तपाइँ या त प्रयोग गर्न सक्नुहुन्छ
होल्ट-विन्टरहरू प्रयोग गरेर प्रवृत्ति र मौसमी ढाँचाहरू प्रदर्शन गर्ने दैनिक बिक्रीलाई नक्कली मोडेल गरौं:
import pandas as pd from statsmodels.tsa.holtwinters import ExponentialSmoothing # Load and preprocess the dataset data = pd.read_csv('sales_data.csv', index_col='date', parse_dates=True) data = data.asfreq('D').fillna(method='ffill') # Fit the Holt-Winters model model = ExponentialSmoothing(data, trend='add', seasonal='add', seasonal_periods=365) fit = model.fit() # Forecast and detect anomalies forecast = fit.fittedvalues residuals = data - forecast threshold = 3 * residuals.std() anomalies = residuals[abs(residuals) > threshold] print("Anomalies detected:") print(anomalies)
यो विधि प्रयोग गरेर, तपाईले महत्वपूर्ण विचलनहरू पत्ता लगाउन सक्नुहुन्छ जसले डेटा गुणस्तर समस्याहरू संकेत गर्न सक्छ, QA जाँचहरूमा थप सूक्ष्म दृष्टिकोण प्रदान गर्दै।
मलाई आशा छ कि यस लेखले तपाईलाई तपाईको ठूला डेटासेटहरूको लागि QA जाँचहरू प्रभावकारी रूपमा लागू गर्न मद्दत गर्नेछ। Deequ पुस्तकालय प्रयोग गरेर र सांख्यिकीय विधिहरू र समय श्रृंखला एल्गोरिदमहरू एकीकरण गरेर, तपाईंले डाटा अखण्डता र विश्वसनीयता सुनिश्चित गर्न सक्नुहुन्छ, अन्ततः तपाईंको डाटा व्यवस्थापन अभ्यासहरू बढाउँदै।
माथि वर्णन गरिएका प्रविधिहरू लागू गर्नाले तपाईंलाई डाउनस्ट्रीम अनुप्रयोगहरूमा सम्भावित समस्याहरू रोक्न र तपाईंको डेटा कार्यप्रवाहको समग्र गुणस्तर सुधार गर्न मद्दत गर्नेछ।