የተዋጣለት የውሂብ ባለሙያ ከሚያስፈልጉት አስፈላጊ ክህሎቶች አንዱ ትላልቅ የውሂብ ስብስቦችን በብቃት መያዝ፣ የውሂብ ጥራት እና አስተማማኝነትን ማረጋገጥ ነው። መረጃ የየትኛውም የመረጃ ስርዓት ማዕከላዊ እና መሰረታዊ አካል ነው፣ እና ምንም አይነት ጥሩ ችሎታዎች ካሉዎት በሌሎች የንግድ ስራዎቻችን፣ ይህ እርስዎ ሊታለፉት የማይችሉት ነው።
በዚህ ጽሑፍ ውስጥ የዲኩ ቤተ-መጽሐፍትን እና የስታቲስቲክስ ዘዴዎችን በመጠቀም በትላልቅ የውሂብ ስብስቦች ላይ የ QA ቼኮችን ለማከናወን ጠንካራ ቴክኒኮችን እዳስሳለሁ። ከዚህ በታች የማብራራውን አቀራረቦች በማጣመር የውሂብ ታማኝነትን መጠበቅ፣ የውሂብ አስተዳደር ልምዶችን ማሻሻል እና በታችኛው ተፋሰስ መተግበሪያዎች ላይ ሊከሰቱ የሚችሉ ችግሮችን መከላከል ይችላሉ።
QA የDeeku Libraryን በመጠቀም ይፈትሻል
ለምን Deequ?
በተለይም በተከፋፈሉ የፋይል ስርዓቶች ወይም በመረጃ ማከማቻ መጋዘኖች ውስጥ የተከማቹ በቢሊዮኖች የሚቆጠሩ ረድፎችን በሚመለከት የውሂብ ጥራትን በመጠን ማረጋገጥ በጣም ከባድ ስራ ነው። የDeeku ቤተ-መጽሐፍት በስፓርክ ላይ የተገነባ የክፍት ምንጭ የመረጃ መገለጫ እና የ QA ማዕቀፍ ይህንን ችግር ለመፍታት የተነደፈ ዘመናዊ እና ሁለገብ መሳሪያ ነው። ከተመሳሳይ መሳሪያዎች የሚለየው የተከፋፈለ የማቀነባበሪያ ሃይልን በመጠቀም ትላልቅ የመረጃ ስብስቦችን በብቃት በማስተናገድ ከስፓርክ ጋር ያለምንም እንከን የመዋሃድ ችሎታው ነው።
ሲሞክሩት ፣ተለዋዋጭነቱ ለእርስዎ ልዩ መስፈርቶች የተስማሙ ውስብስብ የማረጋገጫ ህጎችን እንዲገልጹ እና አጠቃላይ ሽፋንን እንዴት እንደሚገልጹ ያያሉ። በተጨማሪም Deequ የውሂብ ጥራት ችግሮችን ለይተው እንዲያውቁ የሚያግዙዎትን ሰፊ መለኪያዎች እና ያልተለመዱ የማወቅ ችሎታዎችን ያሳያል። ከትልቅ እና ተለዋዋጭ የውሂብ ስብስቦች ጋር ለሚሰሩ የውሂብ ባለሙያዎች,Deeku የስዊስ-ቢላዋ መፍትሄ ነው. እንዴት ልንጠቀምበት እንደምንችል እንይ።
Deequ በማቀናበር ላይ
በDeeku ቤተ-መጽሐፍት ማዋቀር ላይ ተጨማሪ ዝርዝሮች እና በመረጃ መገለጫ ዙሪያ አጠቃቀም ጉዳዮች እዚህ ይገኛሉ። ለቀላልነት፣ በዚህ ምሳሌ ውስጥ፣ ጥቂት የአሻንጉሊት መዝገቦችን ፈጠርን፡-
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 ያልሆኑ እሴቶች እና ልዩነት ያሉ ስለ ውሂብ ባህሪያት ስውር ግምቶች ይዘው ይመጣሉ። ከDeeku ጋር፣ እነዚህ ግምቶች በክፍል ሙከራዎች ግልጽ ይሆናሉ። አንዳንድ የተለመዱ ቼኮች እዚህ አሉ
የረድፍ ብዛት ፡ የውሂብ ስብስብ የተወሰነ የረድፎች ብዛት መያዙን ያረጋግጡ።
የባህሪ ማሟያነት ፡ እንደ መታወቂያ እና የምርት ስም ያሉ ባህሪያት ፈጽሞ ባዶ እንዳልሆኑ ያረጋግጡ።
ልዩ ባህሪ ፡ እንደ መታወቂያ ያሉ አንዳንድ ባህሪያት ልዩ መሆናቸውን ያረጋግጡ።
የእሴት ክልል ፡ እንደ ቅድሚያ እና numViews ያሉ ባህሪያት በተጠበቀው ክልል ውስጥ የሚወድቁ መሆናቸውን ያረጋግጡ።
ስርዓተ-ጥለት ማዛመድ ፡ ሲጠበቅ መግለጫዎች ዩአርኤሎችን እንደያዙ ያረጋግጡ።
እስታቲስቲካዊ ባህሪያት ፡ የቁጥር ባህሪያት መካከለኛ የተወሰኑ መስፈርቶችን ማሟላቱን ያረጋግጡ።
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()
የመተርጎም ውጤቶች
እነዚህን ቼኮች ካከናወኗቸው በኋላ ዲኩ ወደ ተከታታይ የስፓርክ ስራዎች ይተረጉማቸዋል፣ ይህም በውሂቡ ላይ ያለውን መለኪያዎች ለማስላት ያከናውናል። ከዚያ በኋላ፣ እገዳዎቹ በመረጃው ላይ መያዛቸውን ለማየት በእነዚህ መለኪያዎች ላይ የማስረጃ ተግባራትዎን (ለምሳሌ _== 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!
ፈተናው የእኛ ግምቶች ተጥሰዋል! ከ 5 (80%) ውስጥ 4ቱ ብቻ የምርቱ ስም ባህሪ ዋጋ የሌላቸው ናቸው፣ እና ከ5 (ማለትም፣ 40%) 2 ብቻ ናቸው የመግለጫው ባህሪ እሴቶች ዩአርኤል የያዙት። እንደ እድል ሆኖ, እኛ አንድ ፈተና ሮጦ ስህተቶቹን አገኘን; አንድ ሰው ወዲያውኑ መረጃውን ማስተካከል አለበት!
QA ቼኮች በስታቲስቲክስ ዘዴዎች
Deequ ለውሂብ ማረጋገጫ ጠንካራ ማዕቀፍ ቢያቀርብም፣ የስታቲስቲክስ ዘዴዎችን ማቀናጀት የእርስዎን የQA ቼኮች የበለጠ ሊያሻሽል ይችላል፣በተለይ ከዳታ ስብስብ ልኬቶች ጋር እየተገናኙ ከሆነ። የውሂብ ጥራትን ለመከታተል እና ለማረጋገጥ የስታቲስቲክስ ዘዴዎችን እንዴት መጠቀም እንደሚችሉ እንይ።
የመዝገብ ቆጠራ መከታተያ
ETL (Extract, Transform, Load) ሂደት በየቀኑ በተያዘለት ሥራ ላይ N መዝገቦችን የሚያወጣበትን የንግድ ሁኔታ አስቡበት። በመዝገብ ቆጠራ ላይ ጉልህ የሆነ ልዩነት ካለ ማንቂያ ለማንሳት የድጋፍ ቡድኖች የ QA ቼኮችን ማዘጋጀት ይፈልጉ ይሆናል። ለምሳሌ፣ ሂደቱ በተለምዶ በሁለት ወራት ውስጥ በየቀኑ ከ9,500 እስከ 10,500 መዝገቦችን የሚያመነጭ ከሆነ፣ ማንኛውም ጉልህ ጭማሪ ወይም መቀነስ ከስር ባለው መረጃ ላይ ችግር እንዳለ ሊያመለክት ይችላል።
የትኛው ሂደት ለድጋፍ ቡድኑ ማንቂያ ማሳደግ እንዳለበት ይህንን ገደብ ለመወሰን ስታቲስቲካዊ ዘዴን መጠቀም እንችላለን። ከሁለት ወራት በላይ የተመዘገበ የቁጥጥር ክትትል ምሳሌ ከዚህ በታች አለ።
ይህንን ለመተንተን የዕለት ተዕለት ለውጦችን ለመመልከት የመዝገብ ቆጠራ ውሂብን መለወጥ እንችላለን። በሚከተለው ገበታ ላይ እንደሚታየው እነዚህ ለውጦች በአጠቃላይ በዜሮ ዙሪያ ይንከራተታሉ።
ይህንን የለውጥ መጠን ከመደበኛ ስርጭት ጋር ስንወክል፣ የደወል ጥምዝ ይፈጥራል፣ ይህም መረጃው በመደበኛነት መሰራጨቱን ያሳያል። የሚጠበቀው ለውጥ ወደ 0% አካባቢ ነው፣ ከመደበኛ ልዩነት 2.63% ጋር።
ይህ ትንታኔ እንደሚያመለክተው የመዝገብ ቆጠራው በተለምዶ ከ -5.26% እስከ +5.25% ባለው ክልል ውስጥ በ90% እምነት ይወድቃል። በዚህ ላይ በመመስረት, የመዝገብ ቆጠራው ከዚህ ክልል በላይ ከተዘዋወረ, ወቅታዊ ጣልቃገብነትን የሚያረጋግጥ ማንቂያ ለማንሳት ህግ ማቋቋም ይችላሉ.
የባህሪ ሽፋን መከታተያ
የባህሪ ሽፋን ሠ የሚያመለክተው NULL ያልሆኑ እሴቶች ሬሾን እና የውሂብ ስብስብ ቅጽበታዊ ገጽ እይታን ከጠቅላላው የመዝገብ ቆጠራ ጋር ነው። ለምሳሌ፣ ከ100 መዝገቦች ውስጥ 8ቱ ለአንድ የተወሰነ ባህሪ NULL እሴት ካላቸው፣ የዚያ ባህሪው ሽፋን 92% ነው።
በየቀኑ የምርት ሠንጠረዥ ቅጽበታዊ ገጽ እይታን በማመንጨት ሌላ የንግድ ጉዳይን በETL ሂደት እንከልስ። የምርት መግለጫ ባህሪያትን ሽፋን መከታተል እንፈልጋለን. ሽፋኑ ከተወሰነ ገደብ በታች ከወደቀ፣ ለድጋፍ ቡድኑ ማንቂያ መነሳት አለበት። ከዚህ በታች በሁለት ወራት ውስጥ ለምርት መግለጫዎች የባህሪ ሽፋን ምስላዊ ውክልና አለ፡
በሽፋን ውስጥ ያለውን ፍጹም የዕለት ተዕለት ልዩነቶችን በመተንተን፣ ለውጦቹ በዜሮ ዙሪያ ሲወዛወዙ እናስተውላለን፡-
ይህንን መረጃ እንደ መደበኛ ስርጭት በመወከል በመደበኛነት የሚሰራጨው በ0% አካባቢ በሚጠበቀው ለውጥ እና በ2.45% መደበኛ ልዩነት ነው።
እንደምናየው፣ ለዚህ የውሂብ ስብስብ፣ የምርት መግለጫው መገለጫ ባህሪ ሽፋን በተለምዶ ከ -4.9% እስከ +4.9% በ90% መተማመን ነው። በዚህ አመላካች ላይ በመመስረት, ሽፋኑ ከዚህ ወሰን በላይ ከተለያየ ማንቂያ ለማንሳት ህግን ማዘጋጀት እንችላለን.
QA ቼኮች በጊዜ ተከታታይ ስልተ ቀመር
እንደ ወቅታዊነት ወይም አዝማሚያዎች ያሉ ጉልህ ልዩነቶችን ከሚያሳዩ የውሂብ ስብስቦች ጋር አብረው ከሰሩ፣ ባህላዊ ስታቲስቲካዊ ዘዴዎች የውሸት ማንቂያዎችን ሊያስነሱ ይችላሉ። የጊዜ ተከታታይ ስልተ ቀመሮች የ 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 ቼኮችን በብቃት እንዲተገብሩ ይረዳዎታል ብዬ ተስፋ አደርጋለሁ። የDeeku ቤተ-መጽሐፍትን በመጠቀም እና የስታቲስቲክስ ዘዴዎችን እና የጊዜ ተከታታይ ስልተ ቀመሮችን በማዋሃድ የውሂብ ትክክለኛነት እና አስተማማኝነት ማረጋገጥ ይችላሉ፣ በመጨረሻም የውሂብ አስተዳደር ልምዶችዎን ያሳድጉ።
ከላይ የተገለጹትን ቴክኒኮች መተግበር በታችኛው ተፋሰስ አፕሊኬሽኖች ላይ ሊከሰቱ የሚችሉ ችግሮችን ለመከላከል እና አጠቃላይ የውሂብ የስራ ፍሰቶችዎን ጥራት ለማሻሻል ይረዳዎታል።