![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
E nngwe ya mabokgoni a bohlokwa a setsebi sa datha seo se fihleletšego ke go swara ka mo go atlegilego ga disete tše kgolo tša datha, go netefatša boleng bja datha le go botega. Datha ke seripa sa bogareng le sa motheo sa tshepedišo efe goba efe ya datha, gomme bokgoni le ge e le bofe bjo bobotse bjo o nago le bjona dikarolong tše dingwe tša kgwebo ya rena, ye ke yeo o ka se kgonego go e hlokomologa.
Sehlogong se, ke hlahloba dithekniki tše di tiilego tša go dira ditlhahlobo tša QA go di-dataset tše kgolo ka go diriša bokgobapuku bja Deequ le mekgwa ya dipalopalo. Ka go kopanya mekgwa yeo ke e hlalošago ka mo tlase, o tla kgona go boloka botshepegi bja datha, wa godiša mekgwa ya gago ya taolo ya datha, le go thibela ditaba tšeo di ka bago gona ka dikgopelong tša ka tlase.
Go netefatša boleng bja datha ka tekanyo ke mošomo wo o boifišago, kudu ge o šomana le dibilione tša methaladi yeo e bolokilwego ka ditshepedišong tša difaele tše di phatlalatšwago goba mafelong a polokelo ya datha. Bokgobapuku bja Deequ ke tlhako ya go dira diprofaele ya datha ya mohlodi wo o bulegilego le QA yeo e agilwego go Spark yeo e lego sedirišwa sa sebjalebjale le sa go fetofetoga seo se hlamilwego go rarolla bothata bjo. Seo se e aroganyago le didirišwa tše di swanago ke bokgoni bja yona bja go kopanya ka ntle le mathata le Spark, go diriša maatla a go šoma ao a phatlalatšwago bakeng sa go swara ka bokgoni di-dataset tša tekanyo e kgolo.
Ge o e leka, o tla bona ka fao go fetofetoga ga yona go go dumelelago go hlaloša melawana ye e raraganego ya netefatšo yeo e rulagantšwego go ya ka dinyakwa tša gago tše di itšego, go netefatša khupetšo ye e feletšego. Go tlaleletša, Deequ e na le dimetriki tše di nabilego le bokgoni bja go utolla go se swane bjo bo tlago go thuša go šupa le go rarolla ka mafolofolo ditaba tša boleng bja datha. Bakeng sa ditsebi tša data tšeo di šomago ka di-dataset tše dikgolo le tše di fetogago, Deequ ke tharollo ya Thipa ya Switzerland. Anke re boneng kamoo re ka e dirišago ka gona.
Dintlha tše dingwe ka ga peakanyo ya bokgobapuku bja Deequ le melato ya tšhomišo go dikologa profaele ya datha di fihlelelwa mo . Ka lebaka la go ba bonolo, mohlaleng wo, re sa tšwa go tšweletša direkhoto tše mmalwa tša dibapadišwa:
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)
Bontši bja dikgopelo tša datha di tla le dikakanyo tše di sa kwagalego mabapi le dika tša datha, go swana le dikelo tšeo e sego tša NULL le go ikgetha. Ka Deequ, dikakanyo tše di ba pepeneneng ka diteko tša yuniti. Ditšheke tše dingwe tše di tlwaelegilego ke tše:
Palo ya Methaladi: Netefatša gore sete ya datha e na le palo ye e itšego ya methaladi.
Go Felela ga Sebopego: Lekola gore dika tša go swana le id le productName ga di ke di NULL.
Boikgethelo bja Sebopego: Netefatša gore dika tše itšego, go swana le id, ke tša moswananoši.
Boleng Range: Netefatša gore dika tša go swana le priority le numViews di wela ka gare ga meelo ye e letetšwego.
Go Nyalantšha Paterone: Netefatša gore ditlhalošo di na le di-URL ge go letetšwe.
Dithoto tša Dipalopalo: Netefatša gore magareng a dika tša dipalo a fihlelela dikelo tše di itšego.
Mona ke ka moo o ka phethagatšago ditlhahlobo tše ka go šomiša 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()
Ka morago ga go sepetša ditšheke tše, Deequ e di fetolela go letoto la mešomo ya Spark, yeo e e phethagatšago go bala dimetriki godimo ga datha. Ka morago ga moo, e bitša mešomo ya gago ya tiišetšo (mohlala, _ == 5 bakeng sa go hlahloba bogolo) go dimetriki tše go bona ge e ba dithibelo di swere godimo ga datha. Re ka hlahloba selo "verificationResult" go bona ge e ba teko e hweditše diphošo:
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}") } }
Ge re ka sepetša mohlala, re hwetša ditšweletšwa tše di latelago:
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!
Teko e ile ya hwetša gore dikakanyo tša rena di ile tša gatakelwa! Ke 4 fela go tšwa go 5 (80%) ya boleng bja seka sa productName yeo e sego ya lefeela, gomme ke 2 fela go tšwa go 5 (ke gore, 40%) ya boleng bja seka sa tlhalošo yeo e nago le URL. Ka mahlatse, re ile ra kitima teko gomme ra hwetša diphošo; motho yo mongwe o swanetše go lokiša ya data ka pela!
Le ge Deequ e fana ka tlhako ye e tiilego ya netefatšo ya datha, go kopanya mekgwa ya dipalopalo go ka godiša gape ditlhahlobo tša gago tša QA, kudu ge o šomana le dimetriki tše di kgobokeditšwego tša sete ya datha. A re boneng gore o ka thwala bjang mekgwa ya dipalopalo go hlokomela le go netefatša boleng bja datha.
Ela hloko boemo bja kgwebo moo tshepedišo ya ETL (Extract, Transform, Load) e tšweletšago direkhoto tše N mošomong wo o rulagantšwego wa letšatši le letšatši. Dihlopha tša thekgo di ka nyaka go hloma ditšheke tša QA go tsoša temošo ge go na le go fapoga mo gogolo ka go palo ya direkhoto. Ka mohlala, ge e ba tshepedišo yeo ka tlwaelo e tšweletša direkhoto tša magareng ga tše 9 500 go ya go tše 10 500 letšatši le letšatši ka dikgwedi tše pedi, koketšego goba go fokotšega le ge e le gofe mo gogolo go ka bontšha taba ka ya data yeo e lego motheo.
Re ka šomiša mokgwa wa dipalopalo go hlaloša moedi wo gore ke tshepedišo efe yeo e swanetšego go rotoša temošo go sehlopha sa thekgo. Ka fase ke seswantšho sa go latela palo ya direkhoto ka dikgwedi tše pedi:
Go sekaseka se, re ka fetoša datha ya palo ya direkhoto go lebelela diphetogo tša letšatši le letšatši. Diphetogo tše ka kakaretšo di thekesela go dikologa lefela, bjalo ka ge go bontšhitšwe tšhateng ye e latelago:
Ge re emela seelo se sa phetogo ka kabo ye e tlwaelegilego, e bopa koba ya tšhipi, yeo e laetšago gore datha e phatlalatšwa ka tlwaelo. Phetogo ye e letetšwego e ka ba 0%, ka go fapoga ga maemo ga 2.63%.
Tshekatsheko ye e šišinya gore palo ya direkhoto ka tlwaelo e wela ka gare ga tekanyo ya -5.26% go ya go +5.25% ka boitshepo bja 90%. Go ya ka se, o ka hloma molao wa go tsoša temošo ge e le gore palo ya direkhoto e fapoga go feta tekanyo ye, go netefatša tsenogare ya nako.
Kgašo ya seka e šupa tekanyo ya boleng bjo e sego bja NULL go palomoka ya palo ya rekoto ya seswantšho sa sete ya datha. Go fa mohlala, ge e le gore direkhoto tše 8 go tšwa go tše 100 di na le boleng bja NULL bja seka se se itšego, khupetšo ya seka seo ke 92%.
A re hlahlobeng taba ye nngwe ya kgwebo ka tshepedišo ya ETL yeo e tšweletšago seswantšho sa tafola ya setšweletšwa letšatši le letšatši. Re nyaka go hlokomela khupetšo ya dika tša tlhalošo ya setšweletšwa. Ge khupetšo e wela ka fase ga moedi wo o itšego, temošo e swanetše go tsošwa bakeng sa sehlopha sa thekgo. Ka fase ke boemedi bja pono bja khupetšo ya seka bakeng sa ditlhalošo tša setšweletšwa mo dikgweding tše pedi:
Ka go sekaseka diphapano tše di feletšego tša letšatši le letšatši tša khupetšo, re lemoga gore diphetogo di thekesela go dikologa lefela:
Go emela datha ye bjalo ka kabo ye e tlwaelegilego go bontšha gore ka tlwaelo e phatlalatšwa ka phetogo ye e letetšwego ya go lekana 0% le go fapoga ga maemo ga 2.45%.
Bjalo ka ge re bona, bakeng sa dataset ye, khupetšo ya seka sa tlhalošo ya setšweletšwa ka tlwaelo e tloga go -4.9% go ya go +4.9% ka 90% ya boitshepo. Go ya ka sešupo se, re ka bea molao wa go tsoša temošo ge e ba khupetšo e fapoga go feta tekanyo ye.
Ge o šoma ka disete tša datha tšeo di bontšhago diphapano tše bohlokwa ka lebaka la mabaka a go swana le sehla goba ditshekamelo, mekgwa ya setšo ya dipalopalo e ka hlohleletša ditemošo tša maaka. Dialgoritmo tša letoto la nako di fa mokgwa wo o hlwekišitšwego kudu, di kaonafatša go nepagala le go tshepagala ga ditlhahlobo tša gago tša QA.
Go tšweletša ditemošo tše di nago le tlhaologanyo kudu, o ka diriša e ka ba
A re mock-model thekiso ya letšatši le letšatši yeo e bontšhago bobedi mokgwa le dipaterone tša sehla re diriša 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)
Ka go šomiša mokgwa wo, o ka lemoga dikgelogo tše bohlokwa tšeo di ka laetšago ditaba tša boleng bja datha, go fa mokgwa wa go ba le mahlakore a mannyane kudu go ditlhahlobo tša QA.
Ke tshepa gore sehlogo se se tla go thuša go phethagatša ka bokgoni ditlhahlobo tša QA bakeng sa di-dataset tša gago tše dikgolo. Ka go šomiša bokgobapuku bja Deequ le go kopanya mekgwa ya dipalopalo le dialgoritmo tša lelokelelo la nako, o ka netefatša botshepegi bja datha le go botega, mafelelong wa godiša mekgwa ya gago ya taolo ya datha.
Go tsenya tirišong dithekniki tše di hlalošitšwego ka mo godimo go tla go thuša go thibela ditaba tšeo di ka bago gona ka dikgopelong tša ka tlase ga noka le go kaonafatša boleng bja kakaretšo bja ditshepedišo tša gago tša mošomo tša datha.