paint-brush
QA-ն ստուգում է տվյալների մեծ հավաքածուները Deequ և վիճակագրական մեթոդներովկողմից@akshayjain1986
42,029 ընթերցումներ
42,029 ընթերցումներ

QA-ն ստուգում է տվյալների մեծ հավաքածուները Deequ և վիճակագրական մեթոդներով

կողմից Akshay Jain7m2024/05/30
Read on Terminal Reader
Read this story w/o Javascript

Չափազանց երկար; Կարդալ

Deequ գրադարանը բաց կոդով տվյալների պրոֆիլավորում և QA շրջանակ է, որը կառուցված է Spark-ի վրա: Այն թույլ է տալիս սահմանել վավերացման համալիր կանոններ՝ հարմարեցված ձեր կոնկրետ պահանջներին՝ ապահովելով համապարփակ ծածկույթ: Deequ-ն ունի լայն չափումներ և անոմալիաների հայտնաբերման հնարավորություններ, որոնք կօգնեն ձեզ բացահայտել և ակտիվորեն լուծել տվյալների որակի խնդիրները: Ահա թե ինչպես կարող եք իրականացնել այս ստուգումները՝ օգտագործելով Deequ-ը:

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - QA-ն ստուգում է տվյալների մեծ հավաքածուները Deequ և վիճակագրական մեթոդներով
Akshay Jain HackerNoon profile picture

Կատարված տվյալների մասնագետի կենսական հմտություններից մեկը տվյալների մեծ հավաքածուների արդյունավետ մշակումն է` ապահովելով տվյալների որակը և հուսալիությունը: Տվյալները ցանկացած տվյալների համակարգի կենտրոնական և հիմնարար մասն են, և ինչպիսի լավ հմտություններ էլ ունեք մեր առևտրի այլ ասպեկտներում, սա այն է, որը դուք չեք կարող թույլ տալ անտեսել:


Այս հոդվածում ես ուսումնասիրում եմ Deequ գրադարանի և վիճակագրական մեթոդների կիրառմամբ մեծ տվյալների շտեմարանների վրա QA ստուգումներ կատարելու ամուր մեթոդներ: Համատեղելով այն մոտեցումները, որոնք ես բացատրում եմ ստորև, դուք կկարողանաք պահպանել տվյալների ամբողջականությունը, բարելավել ձեր տվյալների կառավարման գործելակերպը և կանխել ներքևում գտնվող հավելվածներում հնարավոր խնդիրները:

ՈԱ ստուգումներ՝ օգտագործելով Deequ գրադարանը

Ինչու՞ Deequ:

Տվյալների մասշտաբով որակի ապահովումը դժվար գործ է, հատկապես երբ գործ ունենք բաշխված ֆայլային համակարգերում կամ տվյալների պահեստներում պահվող միլիարդավոր տողերի հետ: Deequ գրադարանը բաց կոդով տվյալների պրոֆիլավորման և QA շրջանակ է, որը կառուցված է Spark-ի վրա, որը ժամանակակից և բազմակողմանի գործիք է, որը նախատեսված է այս խնդիրը լուծելու համար: Այն, ինչն այն առանձնացնում է նմանատիպ գործիքներից, Spark-ի հետ անխափան ինտեգրվելու կարողությունն է՝ օգտագործելով բաշխված վերամշակող հզորությունը լայնածավալ տվյալների հավաքածուների արդյունավետ մշակման համար:


Երբ փորձեք այն, կտեսնեք, թե ինչպես է դրա ճկունությունը թույլ տալիս սահմանել վավերացման համալիր կանոններ՝ հարմարեցված ձեր կոնկրետ պահանջներին՝ ապահովելով համապարփակ ծածկույթ: Բացի այդ, Deequ-ն ունի լայն չափումներ և անոմալիաների հայտնաբերման հնարավորություններ, որոնք կօգնեն ձեզ բացահայտել և ակտիվորեն լուծել տվյալների որակի խնդիրները: Տվյալների մեծ և դինամիկ տվյալների հավաքածուներով աշխատող տվյալների մասնագետների համար Deequ-ը շվեյցարական դանակի լուծում է: Տեսնենք, թե ինչպես կարող ենք օգտագործել այն:

Deequ-ի կարգավորում

Deequ գրադարանի կարգավորումների և տվյալների պրոֆիլավորման հետ կապված դեպքերի վերաբերյալ ավելի շատ մանրամասներ հասանելի են այստեղ : Պարզության համար այս օրինակում մենք պարզապես ստեղծեցինք մի քանի խաղալիք գրառումներ.


 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)


Տվյալների ենթադրությունների սահմանում

Տվյալների հավելվածների մեծ մասը գալիս է տվյալների ատրիբուտների վերաբերյալ անուղղակի ենթադրություններով, ինչպիսիք են ոչ NULL արժեքները և եզակիությունը: Deequ-ի հետ այս ենթադրությունները պարզ են դառնում միավորի թեստերի միջոցով: Ահա որոշ ընդհանուր ստուգումներ.


  1. Տողերի քանակ. Համոզվեք, որ տվյալների հավաքածուն պարունակում է տողերի որոշակի քանակ:


  2. Հատկանիշի ամբողջականություն. Ստուգեք, որ այնպիսի ատրիբուտներ, ինչպիսիք են id-ը և productName-ը, երբեք զրոյական չեն:


  3. Հատկանիշի եզակիություն. Համոզվեք, որ որոշ ատրիբուտներ, ինչպիսիք են id-ը, եզակի են:


  4. Արժեքների միջակայք. հաստատեք, որ այնպիսի ատրիբուտներ, ինչպիսիք են priority-ը և numViews-ը, ընկնում են ակնկալվող տիրույթներում:


  5. Նախշերի համընկնում. Ստուգեք, որ նկարագրությունները պարունակում են URL-ներ, երբ սպասվում է:


  6. Վիճակագրական հատկություններ. Համոզվեք, որ թվային ատրիբուտների մեդիանը համապատասխանում է հատուկ չափանիշներին:


Ահա թե ինչպես կարող եք իրականացնել այս ստուգումները՝ օգտագործելով 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()


Արդյունքների մեկնաբանում

Այս ստուգումները կատարելուց հետո Deequ-ը դրանք թարգմանում է Spark-ի մի շարք աշխատանքների, որոնք կատարում է տվյալների չափումները հաշվարկելու համար: Այնուհետև այն կանչում է ձեր հաստատման գործառույթները (օրինակ՝ _ == 5 չափի ստուգման համար) այս չափումների վրա՝ տեսնելու, թե արդյոք սահմանափակումները պահպանվում են տվյալների վրա: Մենք կարող ենք ստուգել «verificationResult» օբյեկտը՝ տեսնելու, թե արդյոք թեստը սխալներ է գտել.


 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}") } }


Եթե գործարկենք օրինակը, ապա կստանանք հետևյալ արդյունքը.


 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!


Թեստը պարզեց, որ մեր ենթադրությունները խախտվել են։ productName հատկանիշի 5 արժեքներից միայն 4-ը (80%) են ոչ զրոյական, և նկարագրության հատկանիշի 5 արժեքներից միայն 2-ը (այսինքն՝ 40%) պարունակում են URL: Բարեբախտաբար, մենք փորձարկեցինք և գտանք սխալները. ինչ-որ մեկը պետք է անմիջապես շտկի տվյալները:

ՈԱ ստուգումներ վիճակագրական մեթոդներով

Թեև Deequ-ն առաջարկում է տվյալների վավերացման ամուր շրջանակ, վիճակագրական մեթոդների ինտեգրումը կարող է ավելի ուժեղացնել ձեր QA ստուգումները, հատկապես, եթե գործ ունեք տվյալների բազայի համախառն չափումների հետ: Տեսնենք, թե ինչպես կարող եք կիրառել վիճակագրական մեթոդներ տվյալների որակը վերահսկելու և ապահովելու համար:

Գրառումների քանակի հետևում

Դիտարկենք բիզնես սցենար, որտեղ ETL (Արտահանում, փոխակերպում, բեռնում) գործընթացը արտադրում է N գրառումներ ամենօրյա պլանավորված աշխատանքի վերաբերյալ: Աջակցող թիմերը կարող են ցանկանալ կարգավորել ՈԱ ստուգումներ՝ ահազանգելու համար, եթե գրառումների քանակում զգալի շեղում կա: Օրինակ, եթե գործընթացը սովորաբար առաջացնում է օրական 9500-ից մինչև 10500 գրառում երկու ամսվա ընթացքում, ցանկացած զգալի աճ կամ նվազում կարող է ցույց տալ հիմքում ընկած տվյալների հետ կապված խնդիր:


Մենք կարող ենք օգտագործել վիճակագրական մեթոդ՝ այս շեմը սահմանելու համար, թե որ գործընթացը պետք է ահազանգ բարձրացնի աջակցող թիմին: Ստորև ներկայացված է երկու ամսվա ընթացքում ռեկորդային թվի հետևման նկարազարդումը.











Սա վերլուծելու համար մենք կարող ենք փոխակերպել ռեկորդների քանակի տվյալները՝ դիտարկելու ամենօրյա փոփոխությունները: Այս փոփոխությունները հիմնականում տատանվում են զրոյի շուրջ, ինչպես ցույց է տրված հետևյալ գծապատկերում.












Երբ մենք ներկայացնում ենք փոփոխության այս տեմպը նորմալ բաշխմամբ, այն ձևավորում է զանգի կոր, որը ցույց է տալիս, որ տվյալները նորմալ բաշխված են: Ակնկալվող փոփոխությունը կազմում է շուրջ 0%, ստանդարտ շեղումով 2,63%:













Այս վերլուծությունը ցույց է տալիս, որ ռեկորդների քանակը սովորաբար ընկնում է -5,26% մինչև +5,25% միջակայքում՝ 90% վստահությամբ: Ելնելով դրանից՝ դուք կարող եք կանոն սահմանել՝ ահազանգ բարձրացնելու համար, եթե գրառումների քանակը շեղվում է այս միջակայքից՝ ապահովելով ժամանակին միջամտությունը:

Հատկանիշների ծածկույթի հետևում

Հատկանիշի ծածկույթը e-ն վերաբերում է ոչ NULL արժեքների հարաբերակցությանը տվյալների շտեմարանի նկարի ընդհանուր գրառումների քանակին: Օրինակ, եթե 100 գրառումներից 8-ը որոշակի հատկանիշի համար ունեն NULL արժեք, ապա այդ հատկանիշի ծածկույթը կազմում է 92%:


Եկեք վերանայենք մեկ այլ բիզնես դեպք՝ ETL գործընթացով, որն ամեն օր ստեղծում է ապրանքի աղյուսակի պատկերը: Մենք ցանկանում ենք վերահսկել արտադրանքի նկարագրության հատկանիշների ծածկույթը: Եթե ծածկույթն ընկնում է որոշակի շեմից, ապա պետք է ահազանգ բարձրացվի աջակցող թիմի համար: Ստորև բերված է երկու ամսվա ընթացքում արտադրանքի նկարագրության հատկանիշների ծածկույթի տեսողական ներկայացում.









Վերլուծելով ծածկույթի բացարձակ ամենօրյա տարբերությունները՝ մենք նկատում ենք, որ փոփոխությունները տատանվում են զրոյի շուրջ.










Այս տվյալները որպես նորմալ բաշխում ներկայացնելը ցույց է տալիս, որ այն սովորաբար բաշխվում է մոտ 0% ակնկալվող փոփոխությամբ և 2,45% ստանդարտ շեղումով։















Ինչպես տեսնում ենք, այս տվյալների բազայի համար արտադրանքի նկարագրության հատկանիշի ծածկույթը սովորաբար տատանվում է -4,9%-ից մինչև +4,9%՝ 90% վստահությամբ: Ելնելով այս ցուցանիշից՝ մենք կարող ենք կանոն սահմանել՝ ահազանգ բարձրացնելու համար, եթե ծածկույթը շեղվի այս միջակայքից:

ՈԱ ստուգումներ ժամանակային շարքերի ալգորիթմներով

Եթե դուք աշխատում եք տվյալների հավաքածուների հետ, որոնք ցույց են տալիս զգալի տատանումներ՝ պայմանավորված այնպիսի գործոններով, ինչպիսիք են սեզոնայնությունը կամ միտումները, ավանդական վիճակագրական մեթոդները կարող են կեղծ ահազանգեր առաջացնել: Ժամանակային շարքերի ալգորիթմներն առաջարկում են ավելի կատարելագործված մոտեցում՝ բարելավելով ձեր QA ստուգումների ճշգրտությունն ու հուսալիությունը:


Ավելի խելամիտ ահազանգեր արտադրելու համար կարող եք օգտագործել կամ Ինտեգրված ավտոռեգեսիվ շարժվող միջին (ARIMA) կամ Holt-Winters մեթոդ . Առաջինը բավականաչափ լավն է միտումներով տվյալների հավաքածուների համար, բայց երկրորդը թույլ է տալիս մեզ վարվել տվյալների շտեմարանների հետ ինչպես միտումով, այնպես էլ սեզոնայնությամբ: Այս մեթոդը օգտագործում է բաղադրիչներ մակարդակի, միտումի և սեզոնայնության համար, ինչը թույլ է տալիս ճկուն կերպով հարմարվել ժամանակի ընթացքում փոփոխություններին:


Եկեք կեղծ մոդելավորենք ամենօրյա վաճառքները, որոնք ցուցադրում են ինչպես միտում, այնպես էլ սեզոնային նախշեր՝ օգտագործելով 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)


Օգտագործելով այս մեթոդը, դուք կարող եք հայտնաբերել զգալի շեղումներ, որոնք կարող են ցույց տալ տվյալների որակի հետ կապված խնդիրներ՝ ապահովելով ավելի նրբերանգ մոտեցում ՈԱ ստուգումների նկատմամբ:


Հուսով եմ, որ այս հոդվածը կօգնի ձեզ արդյունավետ կերպով իրականացնել ՈԱ ստուգումներ ձեր մեծ տվյալների հավաքածուների համար: Օգտագործելով Deequ գրադարանը և ինտեգրելով վիճակագրական մեթոդները և ժամանակային շարքերի ալգորիթմները, դուք կարող եք ապահովել տվյալների ամբողջականությունն ու հուսալիությունը՝ ի վերջո բարելավելով ձեր տվյալների կառավարման պրակտիկան:


Վերևում նկարագրված տեխնիկայի ներդրումը կօգնի ձեզ կանխել ներքևում գտնվող հավելվածներում հնարավոր խնդիրները և բարելավել ձեր տվյալների աշխատանքային հոսքերի ընդհանուր որակը: