![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Një nga aftësitë jetike të një profesionisti të arrirë të të dhënave është trajtimi efektiv i grupeve të mëdha të të dhënave, duke siguruar cilësi dhe besueshmëri të të dhënave. Të dhënat janë pjesa qendrore dhe themelore e çdo sistemi të dhënash, dhe çfarëdo aftësie të mira që keni në aspekte të tjera të tregtisë sonë, kjo është ajo që nuk mund të përballoni ta anashkaloni.
Në këtë artikull, unë eksploroj teknika të fuqishme për kryerjen e kontrolleve të QA në grupe të dhënash të mëdha duke përdorur bibliotekën Deequ dhe metodat statistikore. Duke kombinuar qasjet që shpjegoj më poshtë, ju do të jeni në gjendje të ruani integritetin e të dhënave, të përmirësoni praktikat tuaja të menaxhimit të të dhënave dhe të parandaloni problemet e mundshme në aplikacionet e rrjedhës së poshtme.
Sigurimi i cilësisë së të dhënave në shkallë është një detyrë e frikshme, veçanërisht kur kemi të bëjmë me miliarda rreshta të ruajtura në sistemet e skedarëve të shpërndarë ose në magazinat e të dhënave. Biblioteka Deequ është një kornizë e profilizimit të të dhënave me burim të hapur dhe të QA e ndërtuar në Spark që është një mjet modern dhe i gjithanshëm i krijuar për të zgjidhur këtë problem. Ajo që e veçon atë nga mjetet e ngjashme është aftësia e tij për t'u integruar pa probleme me Spark, duke shfrytëzuar fuqinë e shpërndarë të përpunimit për trajtimin efikas të grupeve të të dhënave në shkallë të gjerë.
Kur ta provoni, do të shihni se si fleksibiliteti i tij ju lejon të përcaktoni rregulla komplekse të vërtetimit të përshtatura për kërkesat tuaja specifike, duke siguruar mbulim gjithëpërfshirës. Për më tepër, Deequ përmban metrikë të gjerë dhe aftësi për zbulimin e anomalive që do t'ju ndihmojnë të identifikoni dhe adresoni në mënyrë proaktive çështjet e cilësisë së të dhënave. Për profesionistët e të dhënave që punojnë me grupe të dhënash të mëdha dhe dinamike, Deequ është një zgjidhje me thikë zvicerane. Le të shohim se si mund ta përdorim atë.
Më shumë detaje mbi konfigurimin e bibliotekës Deequ dhe rastet e përdorimit rreth profilizimit të të dhënave janë të aksesueshme këtu . Për hir të thjeshtësisë, në këtë shembull, ne sapo krijuam disa regjistrime lodrash:
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)
Shumica e aplikacioneve të të dhënave vijnë me supozime të nënkuptuara rreth atributeve të të dhënave, të tilla si vlerat jo-NULL dhe unike. Me Deequ, këto supozime bëhen të qarta përmes testeve të njësive. Këtu janë disa kontrolle të zakonshme:
Numri i rreshtave: Sigurohuni që grupi i të dhënave të përmbajë një numër specifik rreshtash.
Plotësia e atributit: Kontrolloni që atributet si id dhe emri i produktit nuk janë kurrë NULL.
Unike e atributit: Sigurohuni që disa atribute, si id, të jenë unike.
Gama e vlerave: Vërtetoni që atributet si prioriteti dhe numViews bien brenda intervaleve të pritshme.
Përputhja e modelit: Verifikoni që përshkrimet përmbajnë URL kur pritet.
Vetitë statistikore: Sigurohuni që medianaja e atributeve numerike plotëson kriteret specifike.
Ja se si mund t'i zbatoni këto kontrolle duke përdorur 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()
Pas ekzekutimit të këtyre kontrolleve, Deequ i përkthen ato në një seri punësh Spark, të cilat i ekzekuton për të llogaritur metrikat mbi të dhënat. Më pas, ai thërret funksionet tuaja të pohimit (p.sh., _ == 5 për kontrollin e madhësisë) në këto metrikë për të parë nëse kufizimet qëndrojnë mbi të dhënat. Ne mund të inspektojmë objektin "verificationResult" për të parë nëse testi gjeti gabime:
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}") } }
Nëse ekzekutojmë shembullin, marrim daljen e mëposhtme:
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!
Testi zbuloi se supozimet tona ishin shkelur! Vetëm 4 nga 5 (80%) e vlerave të atributit productName nuk janë nule dhe vetëm 2 nga 5 (dmth, 40%) vlera të atributit të përshkrimit përmbanin një URL. Për fat të mirë, bëmë një test dhe gjetëm gabimet; dikush duhet të rregullojë menjëherë të dhënat!
Ndërsa Deequ ofron një kornizë të fortë për vërtetimin e të dhënave, integrimi i metodave statistikore mund të përmirësojë më tej kontrollet tuaja të cilësisë së cilësisë, veçanërisht nëse keni të bëni me metrikë të përmbledhur të një grupi të dhënash. Le të shohim se si mund të përdorni metoda statistikore për të monitoruar dhe siguruar cilësinë e të dhënave.
Konsideroni një skenar biznesi ku një proces ETL (Nxjerrja, Transformimi, Ngarkimi) prodhon N regjistrime në një punë të planifikuar ditore. Ekipet mbështetëse mund të dëshirojnë të vendosin kontrolle të cilësisë së cilësisë për të ngritur një alarm nëse ka një devijim të konsiderueshëm në numrin e të dhënave. Për shembull, nëse procesi zakonisht gjeneron nga 9,500 deri në 10,500 regjistrime çdo ditë gjatë dy muajve, çdo rritje ose ulje e konsiderueshme mund të tregojë një problem me të dhënat themelore.
Ne mund të përdorim një metodë statistikore për të përcaktuar këtë prag se cili proces duhet të ngrejë një alarm për ekipin mbështetës. Më poshtë është një ilustrim i gjurmimit të numrit të rekordeve gjatë dy muajve:
Për ta analizuar këtë, ne mund të transformojmë të dhënat e numërimit të rekordeve për të vëzhguar ndryshimet e përditshme. Këto ndryshime përgjithësisht luhaten rreth zeros, siç tregohet në grafikun e mëposhtëm:
Kur përfaqësojmë këtë shkallë ndryshimi me një shpërndarje normale, ajo formon një kurbë zile, që tregon se të dhënat shpërndahen normalisht. Ndryshimi i pritshëm është rreth 0%, me një devijim standard prej 2.63%.
Kjo analizë sugjeron që numri i rekordeve zakonisht bie brenda intervalit -5.26% deri +5.25% me besim 90%. Bazuar në këtë, mund të vendosni një rregull për të ngritur një alarm nëse numri i të dhënave devijon përtej këtij diapazoni, duke siguruar ndërhyrjen në kohë.
Mbulimi i atributit e i referohet raportit të vlerave jo-NULL ndaj numrit total të rekordit për një pamje të çastit të të dhënave. Për shembull, nëse 8 nga 100 regjistrime kanë një vlerë NULL për një atribut të caktuar, mbulimi për atë atribut është 92%.
Le të shqyrtojmë një rast tjetër biznesi me një proces ETL që gjeneron një fotografi të tabelës së produktit çdo ditë. Ne duam të monitorojmë mbulimin e atributeve të përshkrimit të produktit. Nëse mbulimi bie nën një prag të caktuar, duhet të ngrihet një alarm për ekipin mbështetës. Më poshtë është një paraqitje vizuale e mbulimit të atributeve për përshkrimet e produkteve gjatë dy muajve:
Duke analizuar ndryshimet absolute ditore në mbulim, vërejmë se ndryshimet luhaten rreth zeros:
Paraqitja e këtyre të dhënave si një shpërndarje normale tregon se ajo shpërndahet normalisht me një ndryshim të pritshëm prej rreth 0% dhe një devijim standard prej 2.45%.
Siç e shohim, për këtë grup të dhënash, mbulimi i atributeve të përshkrimit të produktit zakonisht varion nga -4,9% në +4,9% me 90% besim. Bazuar në këtë tregues, ne mund të vendosim një rregull për të ngritur një alarm nëse mbulimi devijon përtej këtij diapazoni.
Nëse punoni me grupe të dhënash që tregojnë ndryshime të rëndësishme për shkak të faktorëve si sezonaliteti ose tendencat, metodat tradicionale statistikore mund të shkaktojnë sinjalizime të rreme. Algoritmet e serive kohore ofrojnë një qasje më të rafinuar, duke përmirësuar saktësinë dhe besueshmërinë e kontrolleve tuaja të SC.
Për të prodhuar sinjalizime më të arsyeshme, mund të përdorni ose
Le të modelojmë shitjet ditore që shfaqin modele trendi dhe sezonale duke përdorur Holt-Winters:
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)
Duke përdorur këtë metodë, ju mund të zbuloni devijime të rëndësishme që mund të tregojnë probleme të cilësisë së të dhënave, duke ofruar një qasje më të nuancuar për kontrollet e cilësisë së cilësisë.
Shpresoj se ky artikull do t'ju ndihmojë të zbatoni me efikasitet kontrollet e cilësisë së cilësisë për grupet tuaja të mëdha të të dhënave. Duke përdorur bibliotekën Deequ dhe duke integruar metoda statistikore dhe algoritme të serive kohore, ju mund të siguroni integritetin dhe besueshmërinë e të dhënave, duke përmirësuar përfundimisht praktikat tuaja të menaxhimit të të dhënave.
Zbatimi i teknikave të përshkruara më sipër do t'ju ndihmojë të parandaloni problemet e mundshme në aplikacionet në rrjedhën e poshtme dhe të përmirësoni cilësinë e përgjithshme të rrjedhës së punës tuaj të të dhënave.