paint-brush
Праверка якасці вялікіх набораў даных з дапамогай Deequ і статыстычных метадаўпа@akshayjain1986
42,062 чытанні
42,062 чытанні

Праверка якасці вялікіх набораў даных з дапамогай Deequ і статыстычных метадаў

па Akshay Jain
Akshay Jain HackerNoon profile picture

Akshay Jain

@akshayjain1986

Data Engineering Manager at Innovate UK

7 мін read2024/05/30
Read on Terminal Reader
Read this story in a terminal
Print this story
Read this story w/o Javascript
Read this story w/o Javascript
tldt arrow
be-flagBE
Прачытайце гэтае апавяданне па-беларуску!
en-flagEN
Read this story in the original language, English!
ln-flagLN
Tanga lisolo oyo na lingala!
lo-flagLO
ອ່ານເລື່ອງນີ້ເປັນພາສາລາວ!
ps-flagPS
دا کیسه په پښتو ژبه ولولئ!
lt-flagLT
Skaitykite šią istoriją lietuvių kalba!
hr-flagHR
Pročitajte ovu priču na hrvatskom!
lv-flagLV
Izlasi šo stāstu latviešu valodā!
ht-flagHT
Li istwa sa a an kreyòl ayisyen!
hu-flagHU
Olvasd el ezt a történetet magyarul!
hy-flagHY
Կարդացեք այս պատմությունը հայերեն։
uk-flagUK
Читайте цю історію українською!
mg-flagMG
Vakio amin'ny teny malagasy ity tantara ity!
More
BE

Занадта доўга; Чытаць

Бібліятэка Deequ - гэта структура прафілявання дадзеных і кантролю якасці з адкрытым зыходным кодам, створаная на базе Spark. Гэта дазваляе вам вызначаць комплексныя правілы праверкі з улікам вашых канкрэтных патрабаванняў, забяспечваючы поўнае пакрыццё. Deequ мае шырокія паказчыкі і магчымасці выяўлення анамалій, якія дапамогуць вам вызначыць і своечасова вырашаць праблемы з якасцю даных. Вось як вы можаце рэалізаваць гэтыя праверкі з дапамогай Deequ.

Companies Mentioned

Mention Thumbnail
Array
Mention Thumbnail
scale
featured image - Праверка якасці вялікіх набораў даных з дапамогай Deequ і статыстычных метадаў
Akshay Jain HackerNoon profile picture
Akshay Jain

Akshay Jain

@akshayjain1986

Data Engineering Manager at Innovate UK

Адным з жыццёва важных навыкаў дасведчанага прафесіянала ў апрацоўцы дадзеных з'яўляецца эфектыўная апрацоўка вялікіх набораў даных, гарантуючы якасць і надзейнасць даных. Дадзеныя з'яўляюцца цэнтральнай і фундаментальнай часткай любой сістэмы даных, і якімі б добрымі навыкамі вы ні валодалі ў іншых аспектах нашай гандлю, вы не можаце дазволіць сабе іх ігнараваць.


У гэтым артыкуле я даследую надзейныя метады для выканання кантролю якасці вялікіх набораў даных з выкарыстаннем бібліятэкі Deequ і статыстычных метадаў. Камбінуючы падыходы, якія я тлумачу ніжэй, вы зможаце падтрымліваць цэласнасць даных, удасканальваць метады кіравання данымі і прадухіляць магчымыя праблемы ў далейшых праграмах.

Праверкі якасці з дапамогай бібліятэкі Deequ

Чаму Deequ?

Забеспячэнне якасці даных у маштабе - складаная задача, асабліва пры працы з мільярдамі радкоў, якія захоўваюцца ў размеркаваных файлавых сістэмах або сховішчах даных. Бібліятэка Deequ - гэта сістэма прафілявання дадзеных і забеспячэння якасці з адкрытым зыходным кодам, створаная на базе 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)


Вызначэнне здагадак даных

Большасць прыкладанняў даных пастаўляюцца з няяўнымі здагадкамі аб атрыбутах даных, такіх як ненулявыя значэнні і унікальнасць. У Deequ гэтыя здагадкі становяцца відавочнымі праз модульныя тэсты. Вось некаторыя звычайныя праверкі:


  1. Колькасць радкоў: пераканайцеся, што набор даных змяшчае пэўную колькасць радкоў.


  2. Паўната атрыбутаў: пераканайцеся, што такія атрыбуты, як id і productName, ніколі не роўны NULL.


  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!


Тэст паказаў, што нашы здагадкі былі парушаныя! Толькі 4 з 5 (80%) значэнняў атрыбуту productName не з'яўляюцца нулявымі, і толькі 2 з 5 (г.зн. 40%) значэнняў атрыбуту description сапраўды ўтрымлівалі URL. На шчасце, мы правялі тэст і знайшлі памылкі; хтосьці павінен неадкладна выправіць дадзеныя!

QA Праверкі статыстычнымі метадамі

У той час як Deequ прапануе надзейную структуру для праверкі даных, інтэграцыя статыстычных метадаў можа яшчэ больш палепшыць вашыя праверкі якасці, асабліва калі вы маеце справу з агрэгаванымі паказчыкамі набору даных. Давайце паглядзім, як вы можаце выкарыстоўваць статыстычныя метады для кантролю і забеспячэння якасці даных.

Адсочванне колькасці запісаў

Разгледзім бізнес-сцэнар, калі працэс ETL (Extract, Transform, Load) стварае N запісаў для штодзённага запланаванага задання. Каманды падтрымкі могуць захацець наладзіць праверку якасці, каб паведаміць аб значных адхіленнях у колькасці запісаў. Напрыклад, калі працэс звычайна стварае ад 9 500 да 10 500 запісаў штодня на працягу двух месяцаў, любое значнае павелічэнне або памяншэнне можа сведчыць аб праблеме з базавымі данымі.


Мы можам выкарыстаць статыстычны метад, каб вызначыць гэты парог, пры якім працэс павінен паведаміць групе падтрымкі. Ніжэй прыведзена ілюстрацыя адсочвання колькасці запісаў за два месяцы:


image










Каб прааналізаваць гэта, мы можам трансфармаваць дадзеныя колькасці запісаў, каб назіраць за штодзённымі зменамі. Гэтыя змены звычайна вагаюцца вакол нуля, як паказана на наступным графіку:


image











Калі мы прадстаўляем гэтую хуткасць змены з нармальным размеркаваннем, яна ўтварае крывую званка, якая паказвае, што даныя размеркаваны нармальна. Чаканае змяненне складзе каля 0 %, са стандартным адхіленнем 2,63 %.


image












Гэты аналіз паказвае, што колькасць запісаў звычайна знаходзіцца ў дыяпазоне ад -5,26% да +5,25% з упэўненасцю 90%. Грунтуючыся на гэтым, вы можаце ўсталяваць правіла для папярэджання, калі колькасць запісаў выходзіць за межы гэтага дыяпазону, забяспечваючы своечасовае ўмяшанне.

Адсочванне пакрыцця атрыбутаў

Атрыбут coverag e адносіцца да суадносін значэнняў, выдатных ад NULL, да агульнай колькасці запісаў для здымка набору даных. Напрыклад, калі 8 са 100 запісаў маюць значэнне NULL для пэўнага атрыбуту, ахоп гэтага атрыбуту складае 92%.


Давайце разгледзім яшчэ адзін бізнес-кейс з працэсам ETL, які штодня стварае здымак табліцы прадуктаў. Мы хочам сачыць за ахопам атрыбутаў апісання прадукту. Калі пакрыццё апускаецца ніжэй пэўнага парога, трэба паведаміць камандзе падтрымкі. Ніжэй прыведзена візуальнае прадстаўленне ахопу атрыбутаў для апісанняў прадуктаў за два месяцы:


image








Аналізуючы абсалютныя штодзённыя адрозненні ў ахопе, мы назіраем, што змены вагаюцца вакол нуля:


image









Прадстаўленне гэтых даных у выглядзе нармальнага размеркавання паказвае, што яны звычайна размеркаваны з чаканым змяненнем каля 0% і стандартным адхіленнем 2,45%.


image














Як мы бачым, для гэтага набору даных ахоп атрыбутаў апісання прадукту звычайна вагаецца ад -4,9% да +4,9% з упэўненасцю 90%. На аснове гэтага індыкатара мы можам усталяваць правіла, каб выклікаць папярэджанне, калі пакрыццё выходзіць за межы гэтага дыяпазону.

Праверкі якасці з дапамогай алгарытмаў часовых шэрагаў

Калі вы працуеце з наборамі даных, якія паказваюць значныя варыяцыі з-за такіх фактараў, як сезоннасць або тэндэнцыі, традыцыйныя статыстычныя метады могуць выклікаць ілжывыя абвесткі. Алгарытмы часовых шэрагаў прапануюць больш дасканалы падыход, павышаючы дакладнасць і надзейнасць вашых праверак якасці.


Каб стварыць больш разумныя абвесткі, вы можаце выкарыстоўваць альбо Аўтарэгрэсіўная інтэграваная слізгальная сярэдняя (ARIMA) або Метад Холта-Уінтэрса . Першы дастаткова добры для набораў даных з тэндэнцыямі, але другі дазваляе нам мець справу з наборамі даных як з тэндэнцыямі, так і з сезоннасцю. Гэты метад выкарыстоўвае кампаненты для ўзроўню, трэнду і сезоннасці, што дазваляе яму гнутка адаптавацца да зменаў з цягам часу.


Давайце змадэлюем штодзённыя распродажы, якія дэманструюць як тэндэнцыі, так і сезонныя заканамернасці, выкарыстоўваючы Холт-Уінтэрс:

 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 і інтэгруючы статыстычныя метады і алгарытмы часовых шэрагаў, вы можаце забяспечыць цэласнасць і надзейнасць даных, у канчатковым выніку паляпшаючы практыку кіравання дадзенымі.


Укараненне метадаў, апісаных вышэй, дапаможа вам прадухіліць магчымыя праблемы ў далейшых праграмах і палепшыць агульную якасць вашых працоўных працэсаў даных.

L O A D I N G
. . . comments & more!

About Author

Akshay Jain HackerNoon profile picture
Akshay Jain@akshayjain1986
Data Engineering Manager at Innovate UK

ВЕСІЦЬ БІРКІ

ГЭТЫ АРТЫКУЛ БЫЎ ПРАДСТАЎЛЕНЫ Ў...

Permanent on Arweave
Read on Terminal Reader
Read this story in a terminal
 Terminal
Read this story w/o Javascript
Read this story w/o Javascript
 Lite

Mentioned in this story

companies