![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Muvaffaqiyatli ma'lumotlar mutaxassisining muhim ko'nikmalaridan biri bu katta ma'lumotlar to'plamlari bilan samarali ishlash, ma'lumotlar sifati va ishonchliligini ta'minlashdir. Ma'lumotlar har qanday ma'lumotlar tizimining markaziy va asosiy qismidir va bizning savdomizning boshqa jihatlarida qanday yaxshi ko'nikmalarga ega bo'lishingizdan qat'i nazar, buni e'tibordan chetda qoldirib bo'lmaydi.
Ushbu maqolada men Deequ kutubxonasi va statistik usullardan foydalangan holda katta ma'lumotlar to'plamlarida QA tekshiruvlarini o'tkazishning ishonchli usullarini o'rganaman. Men quyida tushuntirib bergan yondashuvlarni birlashtirib, siz maʼlumotlar yaxlitligini saqlab qolishingiz, maʼlumotlarni boshqarish amaliyotingizni yaxshilash va quyi oqim ilovalarida yuzaga kelishi mumkin boʻlgan muammolarni oldini olishingiz mumkin boʻladi.
Masshtabda ma'lumotlar sifatini ta'minlash, ayniqsa, taqsimlangan fayl tizimlarida yoki ma'lumotlar omborlarida saqlanadigan milliardlab qatorlar bilan ishlashda juda qiyin vazifadir. Deequ kutubxonasi bu muammoni hal qilish uchun mo'ljallangan zamonaviy va ko'p qirrali vosita bo'lgan Spark-ga asoslangan ochiq manbali ma'lumotlar profili va QA tizimidir. Uni shunga o'xshash vositalardan ajratib turadigan narsa shundaki, uning Spark bilan muammosiz integratsiyalashuvi, keng ko'lamli ma'lumotlar to'plamlari bilan samarali ishlash uchun taqsimlangan ishlov berish quvvatidan foydalangan holda.
Uni sinab ko'rganingizda, uning moslashuvchanligi sizning maxsus talablaringizga moslashtirilgan murakkab tekshirish qoidalarini belgilashga qanday imkon berishini va keng qamrovli qamrovni ta'minlashini ko'rasiz. Bundan tashqari, Deequ keng ko'lamli o'lchovlar va anomaliyalarni aniqlash imkoniyatlariga ega bo'lib, ular sizga ma'lumotlar sifati bilan bog'liq muammolarni aniqlash va faol hal qilishda yordam beradi. Katta va dinamik ma'lumotlar to'plamlari bilan ishlaydigan ma'lumotlar mutaxassislari uchun Deequ shveytsariyalik pichoqli yechimdir. Keling, undan qanday foydalanishimiz mumkinligini ko'rib chiqaylik.
Deequ kutubxonasini o'rnatish va ma'lumotlarni profillash bo'yicha foydalanish holatlari haqida batafsil ma'lumotni bu erda olish mumkin. Oddiylik uchun ushbu misolda biz bir nechta o'yinchoq yozuvlarini yaratdik:
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)
Ko'pgina ma'lumotlar ilovalari NULL bo'lmagan qiymatlar va o'ziga xoslik kabi ma'lumotlar atributlari haqida yashirin taxminlar bilan birga keladi. Deequ bilan bu taxminlar birlik testlari orqali aniq bo'ladi. Mana bir nechta umumiy tekshiruvlar:
Qatorlar soni: Ma'lumotlar to'plamida ma'lum qatorlar soni mavjudligiga ishonch hosil qiling.
Atributning toʻliqligi: id va productName kabi atributlar hech qachon NULL emasligini tekshiring.
Atributning o'ziga xosligi: id kabi ba'zi atributlar noyob ekanligiga ishonch hosil qiling.
Qiymat diapazoni: ustuvorlik va numViews kabi atributlar kutilgan diapazonlarga to'g'ri kelishini tasdiqlang.
Shaklni moslashtirish: Tavsiflarda kutilganda URL manzillari mavjudligini tekshiring.
Statistik xususiyatlar: Raqamli atributlar medianasining muayyan mezonlarga javob berishiga ishonch hosil qiling.
Deequ yordamida ushbu tekshiruvlarni qanday amalga oshirishingiz mumkin:
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()
Ushbu tekshiruvlarni amalga oshirgandan so'ng, Deequ ularni ma'lumotlar bo'yicha o'lchovlarni hisoblash uchun bajaradigan bir qator Spark ishlariga aylantiradi. Keyinchalik, cheklovlar ma'lumotlarga mos kelishini tekshirish uchun ushbu ko'rsatkichlar bo'yicha tasdiqlash funktsiyalaringizni (masalan, o'lchamni tekshirish uchun _ == 5) chaqiradi. Sinovda xatolar topilganligini bilish uchun "verificationResult" ob'ektini tekshirishimiz mumkin:
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}") } }
Agar biz misolni ishlatsak, biz quyidagi natijani olamiz:
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!
Sinov bizning taxminlarimiz buzilganligini aniqladi! productName atributining 5 ta qiymatdan atigi 4 tasi (80%) null emas va tavsif atributining 5 tadan faqat 2 tasida (ya’ni 40%) URL manzili bor edi. Yaxshiyamki, biz sinovdan o'tdik va xatolarni topdik; kimdir darhol ma'lumotlarni tuzatishi kerak!
Deequ ma'lumotlarni tekshirish uchun mustahkam asosni taklif qilsa-da, statistik usullarni birlashtirish QA tekshiruvlarini yanada yaxshilashi mumkin, ayniqsa siz ma'lumotlar to'plamining jamlangan ko'rsatkichlari bilan ishlayotgan bo'lsangiz. Keling, ma'lumotlar sifatini kuzatish va ta'minlash uchun statistik usullardan qanday foydalanish mumkinligini ko'rib chiqaylik.
ETL (Extract, Transform, Load) jarayoni kunlik rejalashtirilgan ishda N ta yozuvni ishlab chiqaradigan biznes stsenariysini ko'rib chiqing. Yordam guruhlari, agar rekordlar sonida sezilarli og'ish bo'lsa, ogohlantirishni oshirish uchun QA tekshiruvlarini o'rnatishni xohlashlari mumkin. Misol uchun, agar jarayon odatda ikki oy davomida har kuni 9500 dan 10500 gacha yozuvlarni yaratsa, har qanday sezilarli o'sish yoki pasayish asosiy ma'lumotlar bilan bog'liq muammoni ko'rsatishi mumkin.
Ushbu chegarani aniqlash uchun biz statistik usuldan foydalanishimiz mumkin, bu jarayonda qo'llab-quvvatlash guruhiga ogohlantirish kerak. Quyida ikki oy davomida rekordlar soni kuzatilishi tasvirlangan:
Buni tahlil qilish uchun biz kunlik o'zgarishlarni kuzatish uchun rekordlar soni ma'lumotlarini o'zgartirishimiz mumkin. Ushbu o'zgarishlar odatda quyidagi diagrammada ko'rsatilganidek, nol atrofida tebranadi:
Ushbu o'zgarish tezligini normal taqsimot bilan ifodalaganimizda, u ma'lumotlarning normal taqsimlanganligini ko'rsatadigan qo'ng'iroq chizig'ini hosil qiladi. Kutilayotgan o'zgarish 0% atrofida bo'lib, standart og'ish 2,63% ni tashkil qiladi.
Ushbu tahlil shuni ko'rsatadiki, rekordlar soni odatda 90% ishonch bilan -5,26% dan +5,25% gacha bo'lgan diapazonga to'g'ri keladi. Shunga asoslanib, o'z vaqtida aralashuvni ta'minlab, rekordlar soni ushbu diapazondan chetga chiqsa, ogohlantirishni ko'tarish qoidasini o'rnatishingiz mumkin.
Atribut qamrovi e NULL bo'lmagan qiymatlarning ma'lumotlar to'plamining surati uchun jami yozuvlar soniga nisbatini bildiradi. Misol uchun, agar 100 ta yozuvdan 8 tasi ma'lum bir atribut uchun NULL qiymatiga ega bo'lsa, ushbu atributning qamrovi 92% ni tashkil qiladi.
Keling, har kuni mahsulot jadvalining suratini yaratadigan ETL jarayoni bilan boshqa biznes misolini ko'rib chiqaylik. Biz mahsulot tavsifi atributlari qamrovini kuzatishni istaymiz. Agar qamrov ma'lum bir chegaradan pastga tushsa, qo'llab-quvvatlash guruhi uchun ogohlantirish ko'tarilishi kerak. Quyida ikki oy davomida mahsulot tavsiflari uchun atribut qamrovining vizual tasviri keltirilgan:
Qamrashdagi mutlaq kunlik farqlarni tahlil qilib, biz o'zgarishlar nolga teng bo'lishini kuzatamiz:
Ushbu ma'lumotni normal taqsimot sifatida ko'rsatish shuni ko'rsatadiki, u odatda taxminan 0% kutilgan o'zgarish va 2,45% standart og'ish bilan taqsimlanadi.
Ko'rib turganimizdek, ushbu ma'lumotlar to'plami uchun mahsulot tavsifi atributining qamrovi odatda 90% ishonch bilan -4,9% dan +4,9% gacha o'zgarib turadi. Ushbu ko'rsatkichga asoslanib, agar qamrov ushbu diapazondan chetga chiqsa, ogohlantirishni ko'tarish qoidasini o'rnatishimiz mumkin.
Agar siz mavsumiylik yoki tendentsiya kabi omillar tufayli sezilarli farqlarni ko'rsatadigan ma'lumotlar to'plamlari bilan ishlasangiz, an'anaviy statistik usullar noto'g'ri ogohlantirishlarni keltirib chiqarishi mumkin. Vaqt seriyalari algoritmlari QA tekshiruvlarining aniqligi va ishonchliligini oshirib, yanada takomillashtirilgan yondashuvni taklif etadi.
Aniqroq ogohlantirishlarni ishlab chiqarish uchun siz ikkalasidan ham foydalanishingiz mumkin
Keling, Holt-Winters-dan foydalangan holda trend va mavsumiy naqshlarni ko'rsatadigan kundalik sotuvlarni masxara qilaylik:
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)
Ushbu usuldan foydalanib, siz QA tekshiruvlariga yanada nozik yondashuvni ta'minlab, ma'lumotlar sifati bilan bog'liq muammolarni ko'rsatishi mumkin bo'lgan jiddiy og'ishlarni aniqlashingiz mumkin.
Umid qilamanki, ushbu maqola sizga katta ma'lumotlar to'plamlari uchun QA tekshiruvlarini samarali amalga oshirishga yordam beradi. Deequ kutubxonasidan foydalanish va statistik usullar va vaqt seriyalari algoritmlarini integratsiyalash orqali siz ma'lumotlarning yaxlitligi va ishonchliligini ta'minlashingiz mumkin, natijada ma'lumotlarni boshqarish amaliyotini yaxshilaysiz.
Yuqorida tavsiflangan usullarni qo'llash quyi oqim ilovalarida yuzaga kelishi mumkin bo'lgan muammolarni oldini olishga va ma'lumotlar ish oqimlarining umumiy sifatini yaxshilashga yordam beradi.