Дата адисинин маанилүү көндүмдөрүнүн бири - бул чоң маалымат топтомдорун эффективдүү иштетүү, маалыматтардын сапатын жана ишенимдүүлүгүн камсыз кылуу. Берилиштер - бул ар кандай маалымат тутумунун борбордук жана негизги бөлүгү жана биздин соодабыздын башка аспектилеринде кандай жакшы шыктарга ээ болбоңуз, бул нерсеге көңүл бура албайсыз.
Бул макалада мен Deequ китепканасын жана статистикалык ыкмаларды колдонуу менен чоң маалымат топтомдорунда QA текшерүүлөрүн жүргүзүүнүн күчтүү ыкмаларын изилдейм. Төмөндө мен түшүндүргөн ыкмаларды айкалыштыруу менен, сиз маалыматтардын бүтүндүгүн сактап, маалыматтарды башкаруу практикаңызды өркүндөтө аласыз жана ылдый агымдагы колдонмолордо мүмкүн болуучу көйгөйлөрдүн алдын ала аласыз.
Масштабда берилиштердин сапатын камсыз кылуу, өзгөчө бөлүштүрүлгөн файл тутумдарында же маалымат кампаларында сакталган миллиарддаган саптар менен иштөөдө оор маселе. Deequ китепканасы бул көйгөйдү чечүү үчүн иштелип чыккан заманбап жана ар тараптуу курал болуп саналган Sparkда курулган ачык булактуу маалыматтарды профилдөө жана QA негизи. Аны окшош куралдардан айырмалап турган нерсе, анын Spark менен үзгүлтүксүз интеграциялоо жөндөмдүүлүгү, ири масштабдуу маалымат топтомдорун натыйжалуу иштетүү үчүн бөлүштүрүлгөн иштетүү күчүн колдонуу.
Аны сынап көргөндө, анын ийкемдүүлүгү ар тараптуу камтууну камсыз кылуу менен, сиздин конкреттүү талаптарыңызга ылайыкташтырылган татаал валидация эрежелерин аныктоого кандайча мүмкүндүк берерин көрөсүз. Кошумча, 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 эмес экенин текшериңиз.
Атрибуттун уникалдуулугу: Идентификатор сыяктуу кээ бир атрибуттар уникалдуу экенин текшериңиз.
Маани диапазону: Приоритет жана 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!
Сыноо биздин божомолдорубуз бузулганын аныктады! productName атрибутунун маанилеринин 5тен 4ү гана (80%) нөл эмес жана сүрөттөмө атрибутунун 5тен 2си (б.а. 40%) гана URL'ди камтыган. Бактыга жараша, биз тестти өткөрүп, каталарды таптык; кимдир бирөө дароо маалыматтарды оңдоо керек!
Deequ маалыматтарды текшерүү үчүн бекем негизди сунуш кылганы менен, статистикалык ыкмаларды интеграциялоо QA текшерүүлөрүңүздү андан ары өркүндөтөт, айрыкча, сиз маалымат топтомунун агрегаттык көрсөткүчтөрү менен алектенип жатсаңыз. Берилиштердин сапатын көзөмөлдөө жана камсыз кылуу үчүн статистикалык ыкмаларды кантип колдонсоңуз болорун карап көрөлү.
ETL (Чыгып алуу, Трансформациялоо, жүктөө) процесси күнүмдүк пландаштырылган жумушта N жазууларды чыгарган бизнес сценарийин карап көрөлү. Колдоо топтору эгер рекорддук санда олуттуу четтөөлөр бар болсо, эскертүү берүү үчүн QA текшерүүлөрүн орнотушу мүмкүн. Мисалы, эгерде процесс адатта эки айдын ичинде күн сайын 9500дөн 10500гө чейин жазууларды жаратса, кандайдыр бир олуттуу өсүш же төмөндөө негизги маалыматтарда көйгөй бар экенин көрсөтүп турат.
Биз бул босогону аныктоо үчүн статистикалык ыкманы колдоно алабыз. Төмөндө эки айдын ичинде рекорддук эсепке көз салуу сүрөтү келтирилген:
Муну талдоо үчүн биз күнүмдүк өзгөрүүлөргө байкоо жүргүзүү үчүн рекорддук сандын маалыматтарын өзгөртө алабыз. Бул өзгөрүүлөр төмөнкү диаграммада көрсөтүлгөндөй, жалпысынан нөлдүн тегерегинде термелет:
Бул өзгөрүүнүн ылдамдыгын нормалдуу бөлүштүрүү менен көрсөткөндө, ал маалымат нормалдуу бөлүштүрүлгөнүн көрсөтүүчү коңгуроо ийри сызыгын түзөт. Күтүлгөн өзгөрүү болжол менен 0%, стандарттык четтөө 2,63%.
Бул талдоо рекорддук эсеп адатта 90% ишеним менен -5.26% дан + 5.25% га чейинки диапазонго түшөт деп эсептейт. Ушуга таянып, сиз өз убагында кийлигишүүнү камсыз кылуу менен, эгер рекорддук сан бул диапазондон четтеп кетсе, эскертүү берүү эрежесин орното аласыз.
Э атрибутунун камтуусу NULL эмес маанилердин берилиштер топтомунун сүрөтү үчүн жалпы жазуу санына болгон катышын билдирет. Мисалы, 100 жазуунун ичинен 8и белгилүү бир атрибут үчүн NULL маанисине ээ болсо, ал атрибут үчүн камтуу 92% түзөт.
Келгиле, ETL процесси менен күн сайын өнүм жадыбалынын сүрөтүн жаратуучу дагы бир бизнес ишти карап көрөлү. Биз өнүмдөрдүн сүрөттөмө атрибуттарынын камтылышын көзөмөлдөгүбүз келет. Эгерде камтуу белгилүү бир чектен төмөн түшүп калса, колдоо тобуна эскертүү берилиши керек. Төмөндө эки ай бою өнүмдөрдүн сүрөттөмөлөрү үчүн атрибуттарды камтуунун визуалдык көрүнүшү келтирилген:
Камтуудагы абсолюттук күнүмдүк айырмачылыктарды талдоо менен, биз өзгөрүүлөр нөлдүн тегерегине термелип турганын байкайбыз:
Бул маалыматтарды нормалдуу бөлүштүрүү катары көрсөтүү, ал адатта болжол менен 0% күтүлгөн өзгөрүү жана 2,45% стандарттык четтөө менен бөлүштүрүлгөнүн көрсөтөт.
Көрүнүп тургандай, бул маалымат топтому үчүн продукт сүрөттөмө атрибуту камтуу, адатта, 90% ишеним менен -4,9% дан +4,9% га чейин өзгөрөт. Бул көрсөткүчтүн негизинде биз камтуу бул диапазондон четтеп кетсе, эскертүү берүү эрежесин орното алабыз.
Эгер сезондук же тенденциялар сыяктуу факторлордон улам олуттуу өзгөрүүлөрдү көрсөткөн маалымат топтомдору менен иштесеңиз, салттуу статистикалык ыкмалар жалган эскертүүлөрдү пайда кылышы мүмкүн. Убакыт катарларынын алгоритмдери сиздин QA текшерүүлөрүңүздүн тактыгын жана ишенимдүүлүгүн жогорулатуу менен такталган ыкманы сунуштайт.
Көбүрөөк акылга сыярлык эскертүүлөрдү чыгаруу үчүн, сиз да колдоно аласыз
Келгиле, 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 китепканасын колдонуу жана статистикалык ыкмаларды жана убакыт серияларынын алгоритмдерин интеграциялоо менен, сиз маалыматтардын бүтүндүгүн жана ишенимдүүлүгүн камсыздай аласыз, акырында маалыматтарды башкаруу практикаңызды өркүндөтө аласыз.
Жогоруда сүрөттөлгөн ыкмаларды ишке ашыруу ылдый агымдагы колдонмолордогу мүмкүн болуучу маселелердин алдын алууга жана маалымат иш процесстериңиздин жалпы сапатын жакшыртууга жардам берет.