![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Datuen profesional bikain baten ezinbesteko trebetasunetako bat datu-multzo handien kudeaketa eraginkorra da, datuen kalitatea eta fidagarritasuna bermatuz. Datuak edozein datu-sistemaren zati nagusia eta funtsezkoa dira, eta gure merkataritzako beste alderdi batzuetan dituzun trebetasun onak edozein direla ere, hau da ahaztu ezin duzuna.
Artikulu honetan, Deequ liburutegia eta metodo estatistikoak erabiliz QA egiaztapenak egiteko teknika sendoak aztertzen ditut datu multzo handietan. Jarraian azaltzen ditudan planteamenduak konbinatuz, datuen osotasuna mantendu ahal izango duzu, zure datuak kudeatzeko praktikak hobetu eta beherako aplikazioetan arazo potentzialak saihestu ahal izango dituzu.
Datuen kalitatea eskalan ziurtatzea lan izugarria da, batez ere banatutako fitxategi-sistemetan edo datu biltegietan gordetako milaka milioi errenkaden aurrean. Deequ liburutegia Spark-en eraikitako datuen profil irekiko eta QA esparru bat da, arazo hau konpontzeko diseinatutako tresna moderno eta polifazetikoa da. Antzeko tresnetatik bereizten duena Spark-ekin ezin hobeto integratzeko gaitasuna da, prozesatzeko ahalmen banatua aprobetxatuz, eskala handiko datu multzoak eraginkortasunez kudeatzeko.
Probatzen duzunean, bere malgutasunak zure eskakizun zehatzetara egokitutako baliozkotze-arau konplexuak definitzeko aukera ematen dizun ikusiko duzu, estaldura integrala bermatuz. Gainera, Deequ-ek datuen kalitate-arazoak identifikatzen eta modu proaktiboan konpontzen lagunduko dizuten neurketa eta anomaliak detektatzeko gaitasun zabalak ditu. Datu-multzo handi eta dinamikoekin lan egiten duten datu-profesionalentzat, Deequ Suitzako labana irtenbide bat da. Ea nola erabil dezakegun.
Deequ liburutegiaren konfigurazioari eta datuen profilaren inguruko erabilera kasuei buruzko xehetasun gehiago hemen daude eskuragarri. Sinpletasunaren mesedetan, adibide honetan, jostailu-erregistro batzuk sortu ditugu:
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)
Datu-aplikazio gehienek datu-atributuei buruzko hipotesi inplizituekin datoz, hala nola NULL ez diren balioak eta berezitasuna. Deequ-ekin, hipotesi horiek esplizitu egiten dira unitate-testen bidez. Hona hemen ohiko egiaztapen batzuk:
Errenkada kopurua: Ziurtatu datu multzoak errenkada kopuru zehatz bat duela.
Atributuen osotasuna: egiaztatu id eta productName bezalako atributuak ez direla inoiz NULL.
Atributuen berezitasuna: ziurtatu atributu batzuk, hala nola id, bakarrak direla.
Balio-barrutia: balioztatu lehentasuna eta numViews bezalako atributuak espero diren barrutietan sartzen direla.
Eredu bat etortzea: egiaztatu deskribapenek URLak dituztela espero denean.
Propietate estatistikoak: Ziurtatu zenbakizko atributuen medianak irizpide zehatzak betetzen dituela.
Hona hemen Deequ erabiliz egiaztapen hauek nola ezar ditzakezun:
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()
Egiaztapen hauek exekutatu ondoren, Deequ-ek Spark lan-sail batean itzultzen ditu, eta datuen neurketak kalkulatzeko exekutatzen ditu. Ondoren, zure baieztapen-funtzioak deitzen ditu (adibidez, _ == 5 tamaina egiaztatzeko) metrika hauetan mugak datuei eusten dien ikusteko. "VerificationResult" objektua ikus dezakegu probak akatsak aurkitu dituen ikusteko:
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}") } }
Adibidea exekutatzen badugu, irteera hau lortuko dugu:
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!
Probak aurkitu zuen gure hipotesiak urratu zirela! ProductName atributuaren balioetatik 4 (% 80) baino ez dira nuluak, eta deskribapen atributuaren 5etik 2 (hau da, % 40) balioek URL bat zuten. Zorionez, proba bat egin genuen eta akatsak aurkitu genituen; Norbaitek berehala konpondu beharko lituzke datuak!
Deequ-ek datuak baliozkotzeko esparru sendoa eskaintzen duen arren, metodo estatistikoak integratzeak zure QA egiaztapenak areagotu ditzake, batez ere datu-multzo baten metrika agregatuekin ari bazara. Ikus dezagun nola erabil ditzakezun estatistika-metodoak datuen kalitatea kontrolatzeko eta ziurtatzeko.
Demagun negozio-eszenatoki bat non ETL (Atera, Eraldatu, Kargatu) prozesu batek N erregistro sortzen dituen eguneroko programatutako lan batean. Baliteke laguntza-taldeek QA egiaztapenak konfiguratu nahi izatea alerta bat pizteko, erregistroen zenbaketaren desbideratze nabarmena badago. Esate baterako, prozesuak normalean 9.500 eta 10.500 erregistro artean sortzen baditu egunero bi hilabetetan, edozein igoera edo beherakada esanguratsuak azpiko datuekin arazo bat adieraz dezake.
Metodo estatistiko bat erabil dezakegu atalase hori definitzeko zein prozesutan alerta bat piztu behar zaion laguntza-taldeari. Jarraian, bi hilabetetan zehar erregistro kopuruaren jarraipenaren ilustrazioa dago:
Hori aztertzeko, erregistroen zenbaketaren datuak eraldatu ditzakegu eguneroko aldaketak behatzeko. Aldaketa hauek, oro har, zero inguruan oszilatzen dute, hurrengo grafikoan erakusten den moduan:
Aldaketa-tasa hori banaketa normal batekin adierazten dugunean, kanpai-kurba bat osatzen du, datuak normal banatuta daudela adieraziz. Espero den aldaketa %0 ingurukoa da, %2,63ko desbideratze estandarrarekin.
Azterketa honek iradokitzen du erregistro-zenbaketa normalean -5,26 eta +% 5,25 bitarteko tartean sartzen dela, % 90eko konfiantzarekin. Horretan oinarrituta, alerta bat pizteko arau bat ezar dezakezu erregistro-zenbaketa tarte horretatik kanpo desbideratzen bada, esku-hartze puntuala bermatuz.
Atributuen estaldurak NULL ez diren balioen eta datu-multzoaren argazki baten erregistro-kopuru osoaren arteko erlazioari egiten dio erreferentzia. Adibidez, 100 erregistrotik 8k atributu jakin baterako NULL balio bat badute, atributu horren estaldura % 92koa da.
Berrikus dezagun beste negozio kasu bat egunero produktuen taularen argazkia sortzen duen ETL prozesu batekin. Produktuen deskribapen-atributuen estaldura kontrolatu nahi dugu. Estaldura atalase jakin batetik behera jaisten bada, alerta bat piztu behar zaio laguntza-taldeari. Jarraian, bi hilabetetan zehar produktuen deskribapenetarako atributuen estalduraren irudikapen bisuala dago:
Estalduraren eguneroko desberdintasun absolutuak aztertuta, aldaketak zero inguruan oszilatzen direla ikusten dugu:
Datu hauek banaketa normal gisa irudikatzeak erakusten du normalean banatzen dela espero den aldaketa %0 ingurukoa eta %2,45eko desbideratze estandarra.
Ikusten dugunez, datu-multzo honetarako, produktuaren deskribapen-atributuen estaldura normalean %-4,9tik +4,9ra bitartekoa da, %90eko konfiantzarekin. Adierazle honetan oinarrituta, arau bat ezar dezakegu alerta bat pizteko estaldura tarte horretatik kanpo desbideratzen bada.
Urtarotasuna edo joerak bezalako faktoreen ondorioz aldakuntza handiak erakusten dituzten datu multzoekin lan egiten baduzu, estatistika-metodo tradizionalek alerta faltsuak eragin ditzakete. Denbora serieko algoritmoek ikuspegi finduagoa eskaintzen dute, zure QA egiaztapenen zehaztasuna eta fidagarritasuna hobetuz.
Alerta zentzuzkoagoak sortzeko, erabil dezakezu
Joera eta sasoiko ereduak erakusten dituzten eguneroko salmentak maketa ditzagun Holt-Winters erabiliz:
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)
Metodo hau erabiliz, datuen kalitate-arazoak adieraz ditzaketen desbideratze esanguratsuak hauteman ditzakezu, QA egiaztapenei ikuspegi ñabarduratsuagoa eskainiz.
Artikulu honek zure datu multzo handietarako QA egiaztapenak eraginkortasunez ezartzen lagunduko dizula espero dut. Deequ liburutegia erabiliz eta metodo estatistikoak eta denbora serieko algoritmoak integratuz, datuen osotasuna eta fidagarritasuna berma ditzakezu, azken finean, zure datuak kudeatzeko praktikak hobetuz.
Goian deskribatutako teknikak ezartzeak beheko aplikazioetan arazo potentzialak saihesten lagunduko dizu eta zure datuen lan-fluxuen kalitate orokorra hobetzen lagunduko dizu.