![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Mojawapo ya ujuzi muhimu wa mtaalamu aliyekamilika wa data ni utunzaji mzuri wa seti kubwa za data, kuhakikisha ubora na utegemezi wa data. Data ni sehemu kuu na ya msingi ya mfumo wowote wa data, na ujuzi wowote mzuri ulio nao katika vipengele vingine vya biashara yetu, huu ni ule ambao huwezi kumudu kuupuuza.
Katika nakala hii, ninachunguza mbinu thabiti za kufanya ukaguzi wa QA kwenye hifadhidata kubwa kwa kutumia maktaba ya Deequ na mbinu za takwimu. Kwa kuchanganya mbinu ninazoeleza hapa chini, utaweza kudumisha uadilifu wa data, kuboresha mbinu zako za usimamizi wa data na kuzuia matatizo yanayoweza kutokea katika programu za chini.
Kuhakikisha ubora wa data kwa ukubwa ni kazi kubwa, hasa wakati wa kushughulika na mabilioni ya safu mlalo zilizohifadhiwa katika mifumo ya faili iliyosambazwa au maghala ya data. Maktaba ya Deequ ni uwekaji wasifu wa data wa chanzo huria na mfumo wa QA uliojengwa kwenye Spark ambao ni zana ya kisasa na yenye matumizi mengi iliyoundwa kutatua tatizo hili. Kinachoitofautisha na zana zinazofanana ni uwezo wake wa kuunganishwa bila mshono na Spark, kutumia nguvu iliyosambazwa ya usindikaji kwa utunzaji mzuri wa hifadhidata za kiwango kikubwa.
Ukiijaribu, utaona jinsi unyumbufu wake hukuruhusu kufafanua sheria changamano za uthibitishaji zilizolengwa kulingana na mahitaji yako mahususi, kuhakikisha unafikiwa kwa kina. Zaidi ya hayo, Deequ ina vipimo vya kina na uwezo wa kugundua hitilafu ambayo itakusaidia kutambua na kushughulikia kwa makini masuala ya ubora wa data. Kwa wataalamu wa data wanaofanya kazi na hifadhidata kubwa na zinazobadilika, Deequ ni suluhisho la kisu cha Uswizi. Hebu tuone jinsi tunavyoweza kuitumia.
Maelezo zaidi juu ya usanidi wa maktaba ya Deequ na matukio ya utumiaji karibu na wasifu wa data yanapatikana hapa . Kwa ajili ya unyenyekevu, katika mfano huu, tumetoa rekodi chache za toy:
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)
Programu nyingi za data huja na mawazo kamili kuhusu sifa za data, kama vile thamani zisizo NULL na upekee. Kwa Deequ, mawazo haya huwa wazi kupitia majaribio ya vitengo. Hapa kuna ukaguzi wa kawaida:
Hesabu ya Safu: Hakikisha mkusanyiko wa data una idadi mahususi ya safu mlalo.
Ukamilifu wa Sifa: Hakikisha kuwa sifa kama vile kitambulisho na Jina la bidhaa sio TU.
Upekee wa Sifa: Hakikisha kuwa sifa fulani, kama vile kitambulisho, ni za kipekee.
Masafa ya Thamani: Thibitisha kuwa sifa kama vile kipaumbele na numViews ziko ndani ya safu zinazotarajiwa.
Ulinganishaji wa Miundo: Thibitisha kuwa maelezo yana URL inapotarajiwa.
Sifa za Kitakwimu: Hakikisha kuwa wastani wa sifa za nambari zinakidhi vigezo maalum.
Hivi ndivyo unavyoweza kutekeleza ukaguzi huu kwa kutumia 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()
Baada ya kutekeleza ukaguzi huu, Deequ huzitafsiri kuwa mfululizo wa kazi za Spark, ambazo huzitekeleza ili kukokotoa vipimo kwenye data. Baadaye, inaomba utendakazi wako wa kudai (kwa mfano, _ == 5 kwa ukaguzi wa saizi) kwenye vipimo hivi ili kuona kama vizuizi vinashikilia data. Tunaweza kukagua kitu "verificationResult" ili kuona kama jaribio lilipata hitilafu:
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}") } }
Ikiwa tunaendesha mfano, tunapata matokeo yafuatayo:
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!
Jaribio liligundua kuwa mawazo yetu yamekiukwa! Ni 4 tu kati ya 5 (80%) ya thamani za sifa ya Jina la bidhaa ambazo hazibatiliki, na ni thamani 2 tu kati ya 5 (yaani, 40%) za sifa ya maelezo ndizo zilizokuwa na URL. Kwa bahati nzuri, tulifanya jaribio na tukapata makosa; mtu anapaswa kurekebisha data mara moja!
Ingawa Deequ inatoa mfumo thabiti wa uthibitishaji wa data, kuunganisha mbinu za takwimu kunaweza kuboresha zaidi ukaguzi wako wa QA, hasa ikiwa unashughulika na vipimo vilivyojumlishwa vya mkusanyiko wa data. Hebu tuone jinsi unavyoweza kutumia mbinu za takwimu ili kufuatilia na kuhakikisha ubora wa data.
Fikiria hali ya biashara ambapo mchakato wa ETL (Dondoo, Ubadilishaji, Mzigo) hutoa rekodi N kwenye kazi iliyoratibiwa kila siku. Timu za usaidizi zinaweza kutaka kusanidi ukaguzi wa QA ili kuongeza arifa ikiwa kuna mkengeuko mkubwa katika hesabu ya rekodi. Kwa mfano, ikiwa mchakato huu kwa kawaida hutoa kati ya rekodi 9,500 hadi 10,500 kila siku kwa muda wa miezi miwili, ongezeko lolote au upungufu wowote unaweza kuonyesha tatizo kwenye data ya msingi.
Tunaweza kutumia mbinu ya takwimu kufafanua kiwango hiki juu ya ni mchakato gani unapaswa kutoa tahadhari kwa timu ya usaidizi. Chini ni kielelezo cha ufuatiliaji wa rekodi kwa muda wa miezi miwili:
Ili kuchanganua hili, tunaweza kubadilisha data ya hesabu ya rekodi ili kuona mabadiliko ya kila siku. Mabadiliko haya kwa ujumla huzunguka sifuri, kama inavyoonyeshwa kwenye chati ifuatayo:
Tunapowakilisha kasi hii ya mabadiliko kwa usambazaji wa kawaida, huunda mkunjo wa kengele, kuonyesha kwamba data inasambazwa kawaida. Mabadiliko yanayotarajiwa ni karibu 0%, na mkengeuko wa kawaida wa 2.63%.
Uchanganuzi huu unapendekeza kuwa hesabu ya rekodi kwa kawaida huangukia kati ya kiwango cha -5.26% hadi +5.25% na uhakika wa 90%. Kulingana na hili, unaweza kuweka sheria ya kuongeza arifa ikiwa hesabu ya rekodi itakengeuka zaidi ya safu hii, na kuhakikisha uingiliaji kati kwa wakati.
Chanjo ya sifa inarejelea uwiano wa thamani zisizo NULL kwa jumla ya hesabu ya rekodi kwa muhtasari wa mkusanyiko wa data. Kwa mfano, ikiwa rekodi 8 kati ya 100 zina thamani NULL kwa sifa fulani, ufunikaji wa sifa hiyo ni 92%.
Hebu tukague kesi nyingine ya biashara na mchakato wa ETL wa kutengeneza muhtasari wa jedwali la bidhaa kila siku. Tunataka kufuatilia ufunikaji wa sifa za maelezo ya bidhaa. Ikiwa ufikiaji utaanguka chini ya kizingiti fulani, tahadhari inapaswa kutolewa kwa timu ya usaidizi. Ifuatayo ni uwakilishi unaoonekana wa chanjo ya sifa kwa maelezo ya bidhaa kwa muda wa miezi miwili:
Kwa kuchanganua tofauti kamili za siku hadi siku katika chanjo, tunaona kuwa mabadiliko yanazunguka karibu sifuri:
Kuwakilisha data hii kama usambazaji wa kawaida kunaonyesha kuwa kwa kawaida husambazwa na mabadiliko yanayotarajiwa ya karibu 0% na mkengeuko wa kawaida wa 2.45%.
Kama tunavyoona, kwa seti hii ya data, ufunikaji wa sifa za maelezo ya bidhaa kwa kawaida huanzia -4.9% hadi +4.9% kwa kuaminiwa kwa 90%. Kulingana na kiashirio hiki, tunaweza kuweka sheria ya kuongeza arifa ikiwa chanjo itakengeuka zaidi ya masafa haya.
Ukifanya kazi na seti za data zinazoonyesha tofauti kubwa kutokana na sababu kama vile msimu au mitindo, mbinu za kitamaduni za takwimu zinaweza kusababisha arifa za uwongo. Kanuni za mfululizo wa muda hutoa mbinu iliyoboreshwa zaidi, kuboresha usahihi na kutegemewa kwa ukaguzi wako wa QA.
Ili kutoa arifa zenye busara zaidi, unaweza kutumia aidha
Wacha tuige mfano wa mauzo ya kila siku ambayo yanaonyesha mitindo na mitindo ya msimu kwa kutumia 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)
Kwa kutumia mbinu hii, unaweza kugundua mikengeuko mikubwa ambayo inaweza kuonyesha masuala ya ubora wa data, kwa kutoa mbinu potofu zaidi kwa ukaguzi wa QA.
Natumai nakala hii itakusaidia kutekeleza ukaguzi wa QA kwa hifadhidata zako kubwa. Kwa kutumia maktaba ya Deequ na kuunganisha mbinu za takwimu na algoriti za mfululizo wa saa, unaweza kuhakikisha uadilifu na utegemezi wa data, hatimaye kuimarisha mbinu zako za usimamizi wa data.
Utekelezaji wa mbinu zilizoelezwa hapo juu utakusaidia kuzuia matatizo yanayoweza kutokea katika programu za chini na kuboresha ubora wa jumla wa mtiririko wa data yako.