Яке аз малакаҳои муҳими як мутахассиси ботаҷриба ин коркарди самараноки маҷмӯи додаҳои калон, таъмини сифат ва эътимоднокии додаҳо мебошад. Маълумот ҷузъи марказӣ ва бунёдии ҳама гуна системаи додаҳо мебошад ва новобаста аз он, ки шумо дар дигар ҷанбаҳои тиҷорати мо малакаҳои хуб доред, ин як чизест, ки шумо наметавонед онро нодида гиред. Дар ин мақола, ман усулҳои боэътимоди гузаронидани санҷишҳои QA дар маҷмӯи додаҳои калон бо истифода аз китобхонаи 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, ин пиндоштҳо тавассути санҷишҳои воҳидҳо равшан мешаванд. Инҳоянд чанд санҷишҳои умумӣ: Боварӣ ҳосил кунед, ки маҷмӯи маълумот шумораи муайяни сатрҳоро дар бар мегирад. Шумораи сатрҳо: Санҷед, ки атрибутҳо ба монанди id ва productName ҳеҷ гоҳ NULL нестанд. Мукаммалии хосият: Боварӣ ҳосил кунед, ки атрибутҳои муайян, ба монанди id, беназиранд. Нодир будани атрибут: Тасдиқ кунед, ки атрибутҳо ба монанди афзалият ва numViews ба диапазони пешбинишуда дохил мешаванд. Диапазони арзиш: Боварӣ ҳосил кунед, ки тавсифҳо ҳангоми интизорӣ URL-ҳо доранд. Мутобиқсозии намуна: Боварӣ ҳосил кунед, ки миёнаравии атрибутҳои ададӣ ба меъёрҳои мушаххас мувофиқат мекунад. Хусусиятҳои оморӣ: Ин аст, ки чӣ тавр шумо метавонед ин чекҳоро бо истифода аз 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%) арзиши атрибути тавсиф URL-ро дар бар мегирад. Хушбахтона, мо санҷиш гузаронидем ва хатогиҳоро ёфтем; касе бояд фавран маълумотро ислоҳ кунад! Санҷишҳои QA бо усулҳои оморӣ Дар ҳоле ки Deequ чаҳорчӯбаи мустаҳкамро барои тасдиқи маълумот пешниҳод мекунад, ҳамгироии усулҳои оморӣ метавонад санҷишҳои QA-и шуморо боз ҳам беҳтар созад, хусусан агар шумо бо ченакҳои маҷмӯии маҷмӯаи додаҳо сарукор дошта бошед. Биёед бубинем, ки чӣ тавр шумо метавонед усулҳои оморӣ барои назорат ва таъмини сифати маълумотро истифода баред. Сабти пайгирии ҳисоб Як сенарияи тиҷоратро баррасӣ кунед, ки дар он раванди ETL (Extract, Transform, Load) дар як кори ҳаррӯзаи ба нақша гирифташуда N сабт тавлид мекунад. Гурӯҳҳои дастгирӣ метавонанд мехоҳанд, ки санҷишҳои QA-ро барои баланд бардоштани ҳушдор таъсис диҳанд, агар дар шумориши сабт инҳирофоти назаррас вуҷуд дошта бошад. Масалан, агар ин раванд одатан дар тӯли ду моҳ ҳар рӯз аз 9,500 то 10,500 сабт тавлид кунад, ҳама гуна афзоиш ё коҳиши назаррас метавонад мушкилотро бо маълумоти асосӣ нишон диҳад. Мо метавонем як усули оморӣ барои муайян кардани ин ҳадди аққал, ки дар он раванд бояд ба дастаи дастгирӣ ҳушдор диҳад, истифода барем. Дар зер тасвири пайгирии ҳисобҳои сабт дар тӯли ду моҳ оварда шудааст: Барои таҳлили ин, мо метавонем маълумоти ҳисобҳои сабтро тағир диҳем, то тағироти ҳаррӯзаро мушоҳида кунем. Ин таѓйиротњо одатан дар атрофи сифр таѓйир меёбанд, тавре ки дар диаграммаи зерин нишон дода шудааст: Вақте ки мо ин суръати тағирро бо тақсимоти муқаррарӣ муаррифӣ мекунем, он каҷи зангро ташкил медиҳад, ки нишон медиҳад, ки маълумот ба таври муқаррарӣ тақсим карда мешавад. Тағйироти пешбинишуда тақрибан 0% бо инҳирофи стандартии 2,63% аст. Ин таҳлил нишон медиҳад, ки ҳисоби сабт одатан дар доираи -5,26% то +5,25% бо эътимоди 90% рост меояд. Дар асоси ин, шумо метавонед қоидаеро барои баланд бардоштани ҳушдор муқаррар кунед, агар шумори сабтҳо аз ин диапазон дур шаванд ва дахолати саривақтиро таъмин кунед. Пайгирии фарогирии атрибутҳо e ба таносуби арзишҳои ғайри NULL ба миқдори умумии сабти тасвири маҷмӯи додаҳо дахл дорад. Масалан, агар аз 100 сабт 8 адад барои як аттрибутӣ арзиши NULL дошта бошад, фарогирии ин атрибут 92% аст. фарогирии аттрибутӣ Биёед як парвандаи тиҷоратии дигарро бо раванди ETL, ки ҳар рӯз тасвири ҷадвали маҳсулот тавлид мекунад, баррасӣ кунем. Мо мехоҳем фарогирии атрибутҳои тавсифи маҳсулотро назорат кунем. Агар фарогирӣ аз ҳадди муайян поёнтар афтад, бояд барои дастаи дастгирӣ огоҳӣ дода шавад. Дар зер тасвири визуалии фарогирии атрибутҳо барои тавсифи маҳсулот дар тӯли ду моҳ оварда шудааст: Бо таҳлили фарқиятҳои мутлақи ҳаррӯзаи фарогирӣ, мо мушоҳида мекунем, ки тағиротҳо тақрибан сифр мешаванд: Муаррифии ин маълумот ҳамчун тақсимоти муқаррарӣ нишон медиҳад, ки он одатан бо тағирёбии интизории тақрибан 0% ва инҳирофи стандартии 2,45% тақсим карда мешавад. Тавре ки мо мебинем, барои ин маҷмӯаи маълумот, фарогирии атрибутҳои тавсифи маҳсулот одатан аз -4,9% то +4,9% бо 90% эътимодро ташкил медиҳад. Дар асоси ин нишондиҳанда, мо метавонем қоидаеро муқаррар кунем, ки агар фарогирӣ аз ин диапазон дур шавад, ҳушдор медиҳад. QA бо алгоритмҳои силсилаи вақт тафтиш мекунад Агар шумо бо маҷмӯаҳои додаҳо кор кунед, ки аз сабаби омилҳои мавсимӣ ё тамоюл фарқиятҳои назаррасро нишон медиҳанд, усулҳои анъанавии оморӣ метавонанд огоҳиҳои бардурӯғро ба вуҷуд оранд. Алгоритмҳои силсилаи вақтҳо равиши дақиқтареро пешниҳод мекунанд, ки дақиқӣ ва эътимоднокии санҷишҳои QA-и шуморо беҳтар мекунанд. Барои тавлиди огоҳиҳои оқилонатар, шумо метавонед якеро истифода баред ё . Аввалин барои маҷмӯаҳои додаҳои дорои тамоюлҳо кофӣ хуб аст, аммо охирин ба мо имкон медиҳад, ки бо маҷмӯаҳои додаҳо ҳам бо тамоюл ва ҳам мавсимӣ мубориза барем. Ин усул ҷузъҳоро барои сатҳ, тамоюл ва мавсимӣ истифода мебарад, ки ба он имкон медиҳад, ки бо гузашти вақт ба тағирот чандир мутобиқ шавад. Авторегрессивии миёнаи ҳаракати интегралӣ (ARIMA) Усули Холт-Винтс Биёед фурӯши ҳаррӯзаро масхара кунем, ки бо истифода аз 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) Бо истифода аз ин усул, шумо метавонед инҳирофҳои ҷиддиеро, ки метавонанд мушкилоти сифати маълумотро нишон диҳанд, ошкор созед ва муносибати нисбатан нозукиро ба санҷишҳои QA таъмин кунед. Умедворам, ки ин мақола ба шумо дар татбиқи самараноки санҷишҳои QA барои маҷмӯи додаҳои бузурги шумо кӯмак мекунад. Бо истифода аз китобхонаи Deequ ва ҳамгироии усулҳои оморӣ ва алгоритмҳои силсилаи вақт, шумо метавонед якпорчагӣ ва эътимоднокии додаҳоро таъмин намуда, дар ниҳоят таҷрибаҳои идоракунии додаҳои худро такмил диҳед. Татбиқи усулҳои дар боло тавсифшуда ба шумо кӯмак мекунад, ки мушкилоти эҳтимолӣ дар барномаҳои поёнобро пешгирӣ кунед ва сифати умумии ҷараёни кории маълумотро беҳтар кунед.