![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Yin’wana ya vuswikoti bya nkoka bya mutivi wa datha loyi a nga na vutshila i ku khoma hi ndlela leyinene ka tidathaseti letikulu, ku tiyisisa khwalithi ya datha na ku tshembheka. Data i xiphemu xa le xikarhi na xa xisekelo xa sisiteme yihi na yihi ya data, naswona vutshila byihi na byihi lebyinene lebyi u nga na byona eka swiyenge swin’wana swa bindzu ra hina, lebyi i lebyi u nga ta ka u nga swi koti ku byi honisa.
Eka xitsalwana lexi, ndzi lavisisa tithekiniki to tiya to endla ku kamberiwa ka QA eka tidathaseti letikulu hi ku tirhisa layiburari ya Deequ na tindlela ta tinhlayo. Hi ku hlanganisa maendlelo lawa ndzi ma hlamuselaka laha hansi, u ta kota ku hlayisa vutshembeki bya datha, ku ndlandlamuxa maendlelo ya wena ya vulawuri bya datha, na ku sivela timhaka leti nga vaka kona eka switirhisiwa swa le hansi.
Ku tiyisisa khwalithi ya datha hi xikalo i ntirho wo tika, ngopfungopfu loko ku tirhana na tibiliyoni ta tilayini leti hlayisiweke eka tisisiteme ta tifayela leti hangalasiweke kumbe vuhlayiselo bya datha. Layiburari ya Deequ i xivumbeko xa datha xa xihlovo lexi pfulekeke na rimba ra QA leri akiweke eka Spark leri nga xitirhisiwa xa manguva lawa na lexi nga na vukorhokeri byo tala lexi endleriweke ku tlhantlha xiphiqo lexi. Lexi xi yi hambanisaka na switirhisiwa leswi fanaka i vuswikoti bya yona byo hlanganisa hi ndlela yo pfumala swiphiqo na Spark, ku tirhisa matimba yo lulamisa lama hangalasiweke ku khoma kahle tidathaseti ta xiyimo xa le henhla.
Loko u yi ringeta, u ta vona hilaha ku cincacinca ka yona ku ku pfumelelaka ku hlamusela milawu yo rharhangana ya ku tiyisisa leyi lulamisiweke ku ya hi swilaveko swa wena swo karhi, ku tiyisisa ku hlanganisiwa loku heleleke. Ku engetela kwalaho, Deequ yi na timetriki to anama na vuswikoti byo kuma anomaly lebyi nga ta ku pfuna ku kuma na ku lulamisa hi ku hatlisa timhaka ta khwalithi ya datha. Eka tiphurofexinali ta data leti tirhaka na tidathaseti letikulu na leti cinca-cincaka, Deequ i xitshunxo xa Swiss-knife. A hi voneni ndlela leyi hi nga yi tirhisaka ha yona.
Vuxokoxoko byo tala eka ku lulamisiwa ka layiburari ya Deequ na timhaka ta matirhiselo ku rhendzela ku fayila ka datha swa fikeleleka laha . Hi xikongomelo xo olova, eka xikombiso lexi, hi lo tumbuluxa ntsena tirhekhodo ti nga ri tingani ta switoyi:
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)
Switirhisiwa swo tala swa datha swi ta na miehleketo leyi nga kongomangiki mayelana na swihlawulekisi swa datha, ku fana na mimpimo leyi nga riki ya NULL na ku hlawuleka. Hi Deequ, miehleketo leyi yi va erivaleni hi ku tirhisa swikambelo swa tiyuniti. Hi leti ticheke tin’wana leti tolovelekeke:
Nhlayo ya Tilayini: Tiyisisa leswaku dataset yi na nhlayo yo karhi ya tilayini.
Ku hetiseka ka Swihlawulekisi: Languta leswaku swihlawulekisi swo fana na id na productName a swi si tshama swi va NULL.
Ku Hlawuleka ka Swihlawulekisi: Tiyisisa leswaku swihlawulekisi swo karhi, swo tanihi id, swi hlawulekile.
Value Range: Tiyisisa leswaku swihlawulekisi swo fana na priority na numViews swi wela eka swiyenge leswi languteriweke.
Ku Fanisela ka Pateni: Tiyisisa leswaku tinhlamuselo ti na ti-URL loko swi languteriwile.
Swihlawulekisi swa Tinhlayo: Tiyisisa leswaku xikarhi xa swihlawulekisi swa tinhlayo xi fikelela swipimelo swo karhi.
Hi leyi ndlela leyi u nga tirhisaka swikambelo leswi hi ku tirhisa 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()
Endzhaku ko fambisa ticheke leti, Deequ yi ti hundzuluxela eka nxaxamelo wa mintirho ya Spark, leyi yi yi endlaka ku hlayela timetriki eka datha. Endzhaku ka sweswo, yi vitana mintirho ya wena ya ku tiyisisa (xikombiso, _ == 5 eka ku kambela sayizi) eka timetriki leti ku vona loko swipimelo swi khome eka datha. Hi nga kambela nchumu wa "verificationResult" ku vona loko xikambelo xi kumile swihoxo:
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}") } }
Loko hi fambisa xikombiso, hi kuma vuhumelerisi lebyi landzelaka:
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!
Xikambelo xi kume leswaku miehleketo ya hina yi tluriwile! I 4 ntsena eka 5 (80%) wa mimpimo ya xihlawulekisi xa productName leyi nga riki ya null, naswona i 2 ntsena eka 5 (i.e., 40%) wa mimpimo ya xihlawulekisi xa nhlamuselo leyi nga na URL. Nkateko wa kona, hi endle xikambelo kutani hi kuma swihoxo; munhu un'wana u fanele a hatlisa a lunghisa data!
Loko Deequ yi nyika rimba ro tiya ra ku tiyisisiwa ka datha, ku hlanganisa tindlela ta tinhlayo swi nga ya emahlweni swi ndlandlamuxa ku kamberiwa ka wena ka QA, ngopfungopfu loko u tirhana na timetriki leti hlengeletiweke ta dataset. A hi voneni leswaku u nga tirhisa njhani tindlela ta tinhlayo ku langutisisa na ku tiyisisa khwalithi ya datha.
Languta xiyimo xa bindzu laha phurosese ya ETL (Extract, Transform, Load) yi humesaka tirhekhodo ta N eka ntirho lowu hleriweke siku na siku. Swipano swa nseketelo swi nga ha lava ku veka ticheke ta QA ku tlakusa xitsundzuxo loko ku ri na ku hambuka lokukulu eka nhlayo ya tirhekhodo. Xikombiso, loko endlelo hi ntolovelo ri humesa exikarhi ka 9,500 ku ya eka 10,500 wa tirhekhodo siku na siku eka tin’hweti timbirhi, ku tlakuka kwihi na kwihi lokukulu kumbe ku hunguteka ku nga kombisa mhaka ya datha leyi nga xisekelo.
Hi nga tirhisa ndlela ya tinhlayo ku hlamusela mpimo lowu eka leswaku i phurosese yihi leyi faneleke ku tlakusa xitsundzuxo eka ntlawa wa nseketelo. Laha hansi ku na xifaniso xa ku landzelerisa nhlayo ya tirhekhodo eka tinhweti timbirhi:
Ku xopaxopa leswi, hi nga hundzula datha ya nhlayo ya tirhekhodo ku languta ku cinca ka siku na siku. Ku cinca loku hi ntolovelo ku tsekatseka ku rhendzela ziro, hilaha swi kombisiweke hakona eka chati leyi landzelaka:
Loko hi yimela mpimo lowu wa ku cinca hi ku hangalasiwa ka ntolovelo, wu vumba bell curve, leswi kombisaka leswaku datha yi hangalasiwa hi ntolovelo. Ku cinca loku languteriweke ku kwalomu ka 0%, na ku hambuka ka ntolovelo ka 2.63%.
Nxopaxopo lowu wu ringanyeta leswaku nhlayo ya tirhekhodo hi ntolovelo yi wela eka -5.26% ku ya eka +5.25% hi ku tshemba ka 90%. Hi ku ya hi leswi, u nga simeka nawu wo tlakusa xitsundzuxo loko nhlayo ya tirhekhodo yi hambuka ku tlula mpimo lowu, ku tiyisisa ku nghenelela hi nkarhi.
Xifunengeto xa swihlawulekisi xi kombetela eka mpimo wa mimpimo leyi nga riki ya NULL eka nhlayo hinkwayo ya rhekhodo ya xifaniso xa xihatla xa dataset. Xikombiso, loko 8 eka 100 wa tirhekhodo ti ri na ntikelo wa NULL eka xihlawulekisi xo karhi, ku hlanganisiwa ka xihlawulekisi xexo i 92%.
A hi pfuxeteni mhaka yin’wana ya bindzu hi endlelo ra ETL leri tumbuluxaka xifaniso xa xihatla xa tafula ra swikumiwa siku na siku. Hi lava ku langutisisa ku hlanganisiwa ka swihlawulekisi swa nhlamuselo ya swikumiwa. Loko ku hlanganisiwa ku wela ehansi ka mpimo wo karhi, xitsundzuxo xi fanele ku tlakusiwa eka ntlawa wa nseketelo. Laha hansi ku na xifaniso xa xivono xa ku funengetiwa ka swihlawulekisi eka tinhlamuselo ta swikumiwa eka tin’hweti timbirhi:
Hi ku xopaxopa ku hambana loku heleleke ka siku na siku eka ku hlanganisiwa, hi xiya leswaku ku cinca ku tsekatseka ku rhendzela ziro:
Ku yimela datha leyi tanihi ku hangalasiwa ka ntolovelo swi kombisa leswaku hi ntolovelo yi hangalasiwa hi ku cinca loku languteriweke ka kwalomu ka 0% na ku hambuka ka ntolovelo ka 2.45%.
Hilaha hi swi vonaka hakona, eka dataset leyi, ku hlanganisiwa ka swihlawulekisi swa nhlamuselo ya xiendliwa hi ntolovelo swi sukela eka -4.9% ku ya eka +4.9% hi ku tshemba ka 90%. Hi ku ya hi xikombiso lexi, hi nga veka nawu wo tlakusa xitsundzuxo loko ku hlanganisiwa ku hambuka ku tlula mpimo lowu.
Loko u tirha na tidathaseti leti kombisaka ku hambana lokukulu hikwalaho ka swilo swo fana na tinguva kumbe mikhuva, tindlela ta ndhavuko ta tinhlayo ti nga ha hlohlotela switsundzuxo swa mavunwa. Tialgorithm ta nxaxamelo wa nkarhi ti nyika endlelo leri antswisiweke swinene, ku antswisa ku pakanisa na ku tshembheka ka swikambelo swa wena swa QA.
Leswaku u humesa switsundzuxo leswi twisisekaka swinene, u nga tirhisa xin’wana ni xin’wana xa
A hi mock-model ku xavisiwa ka siku na siku loku kombisaka havumbirhi bya trend na seasonal patterns hi ku tirhisa 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)
Hi ku tirhisa ndlela leyi, u nga kuma ku hambuka lokukulu loku nga kombisaka timhaka ta khwalithi ya datha, ku nyika endlelo leri nga na swihlawulekisi swo tala eka ku kamberiwa ka QA.
Ndzi tshemba leswaku xihloko lexi xi ta ku pfuna ku tirhisa hi ndlela leyinene ku kamberiwa ka QA eka tidathaseti ta wena letikulu. Hi ku tirhisa layiburari ya Deequ na ku hlanganisa tindlela ta tinhlayo na tialgorithm ta nxaxamelo wa nkarhi, u nga tiyisisa vutshembeki bya datha na ku tshembheka, eku heteleleni u ndlandlamuxa maendlelo ya wena ya vulawuri bya datha.
Ku tirhisa tithekiniki leti hlamuseriweke laha henhla swi ta ku pfuna ku sivela timhaka leti nga vaka kona eka switirhisiwa swa le hansi na ku antswisa khwalithi hinkwayo ya maendlelo ya ntirho wa wena wa datha.