![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Bacarıqlı bir məlumat peşəkarının həyati bacarıqlarından biri məlumatların keyfiyyətini və etibarlılığını təmin edən böyük verilənlər toplularının effektiv idarə edilməsidir. Məlumat hər hansı bir məlumat sisteminin mərkəzi və əsas hissəsidir və ticarətimizin digər aspektlərində hansı yaxşı bacarıqlarınız varsa, bu, göz ardı edə bilməyəcəyiniz bir şeydir.
Bu yazıda mən Deequ kitabxanasından və statistik metodlardan istifadə edərək böyük verilənlər dəstlərində QA yoxlamalarının aparılması üçün güclü üsulları araşdırıram. Aşağıda izah etdiyim yanaşmaları birləşdirməklə, siz məlumatların bütövlüyünü qoruya, məlumatların idarə edilməsi təcrübələrinizi təkmilləşdirə və aşağı axın tətbiqlərində potensial problemlərin qarşısını ala biləcəksiniz.
Verilənlərin keyfiyyətinin miqyasda təmin edilməsi, xüsusilə paylanmış fayl sistemlərində və ya məlumat anbarlarında saxlanılan milyardlarla sıra ilə məşğul olan zaman çətin məsələdir. Deequ kitabxanası bu problemi həll etmək üçün nəzərdə tutulmuş müasir və çox yönlü alət olan Spark üzərində qurulmuş açıq mənbəli məlumat profili və QA çərçivəsidir. Onu oxşar alətlərdən fərqləndirən cəhəti onun Spark ilə problemsiz inteqrasiya etmək, geniş miqyaslı verilənlər bazalarının səmərəli idarə edilməsi üçün paylanmış emal gücündən istifadə etmək qabiliyyətidir.
Onu sınadığınız zaman onun çevikliyinin sizə hərtərəfli əhatəni təmin edərək, xüsusi tələblərinizə uyğunlaşdırılmış mürəkkəb yoxlama qaydalarını müəyyən etməyə necə imkan verdiyini görəcəksiniz. Bundan əlavə, Deequ məlumatların keyfiyyəti ilə bağlı problemləri müəyyən etməyə və proaktiv şəkildə həll etməyə kömək edəcək geniş ölçülər və anomaliyaların aşkarlanması imkanlarına malikdir. Böyük və dinamik verilənlər bazaları ilə işləyən məlumat mütəxəssisləri üçün Deequ İsveçrə bıçağı həllidir. Gəlin ondan necə istifadə edə biləcəyimizi görək.
Deequ kitabxanasının qurulması və məlumat profilinin yaradılması ilə bağlı istifadə halları haqqında ətraflı məlumatı buradan əldə etmək olar. Sadəlik naminə, bu nümunədə biz sadəcə bir neçə oyuncaq qeydləri yaratdıq:
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)
Əksər data proqramları qeyri-NULL dəyərlər və unikallıq kimi məlumat atributları haqqında gizli fərziyyələrlə gəlir. Deequ ilə bu fərziyyələr vahid testləri vasitəsilə aydın olur. Budur bəzi ümumi yoxlamalar:
Satır sayı: Verilənlər dəstinin müəyyən sayda sıra ehtiva etdiyinə əmin olun.
Atribut Tamlığı: id və productName kimi atributların heç vaxt NULL olmadığını yoxlayın.
Atributun unikallığı: id kimi müəyyən atributların unikal olduğundan əmin olun.
Dəyər Aralığı: Prioritet və numViews kimi atributların gözlənilən diapazonlara daxil olduğunu təsdiq edin.
Nümunə uyğunluğu: Təsvirlərin gözlənildiyi zaman URL-ləri ehtiva etdiyini yoxlayın.
Statistik xüsusiyyətlər: Ədədi atributların medianının xüsusi meyarlara cavab verdiyinə əmin olun.
Deequ istifadə edərək bu yoxlamaları necə həyata keçirə bilərsiniz:
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()
Bu yoxlamaları yerinə yetirdikdən sonra Deequ onları məlumatlarda ölçüləri hesablamaq üçün yerinə yetirdiyi bir sıra Spark işlərinə çevirir. Daha sonra məhdudiyyətlərin verilənlərə uyğun olub-olmadığını görmək üçün bu ölçülər üzrə təsdiqləmə funksiyalarınızı (məsələn, ölçü yoxlaması üçün _ == 5) işə salır. Testin səhvləri aşkar edib-etmədiyini görmək üçün "verificationResult" obyektini yoxlaya bilərik:
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}") } }
Nümunəni işlədirsək, aşağıdakı nəticəni alırıq:
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!
Test fərziyyələrimizin pozulduğunu müəyyən etdi! ProductName atributunun dəyərlərinin 5-dən yalnız 4-ü (80%) qeyri-nulldır və təsvir atributunun 5-dən yalnız 2-si (yəni, 40%) URL-i ehtiva edirdi. Xoşbəxtlikdən, biz bir sınaq keçirdik və səhvləri tapdıq; kimsə dərhal məlumatları düzəltməlidir!
Deequ məlumatların yoxlanılması üçün möhkəm çərçivə təklif etsə də, statistik metodların inteqrasiyası QA yoxlamalarınızı daha da təkmilləşdirə bilər, xüsusən də məlumat dəstinin ümumiləşdirilmiş ölçüləri ilə məşğul olursunuz. Məlumatların keyfiyyətinə nəzarət etmək və təmin etmək üçün statistik metodlardan necə istifadə edə biləcəyinizi görək.
ETL (Çıxarış, Dönüştür, Yükləmə) prosesinin gündəlik planlaşdırılmış iş üzrə N qeyd istehsal etdiyi bir iş ssenarisini nəzərdən keçirək. Dəstək qrupları qeydlərin sayında əhəmiyyətli sapma olarsa, xəbərdarlıq etmək üçün QA yoxlamaları qurmaq istəyə bilər. Məsələn, proses adətən iki ay ərzində gündəlik 9,500-dən 10,500-ə qədər qeyd yaradırsa, hər hansı əhəmiyyətli artım və ya azalma əsas məlumatlarla bağlı problemi göstərə bilər.
Bu həddi müəyyən etmək üçün statistik metoddan istifadə edə bilərik ki, hansı proses dəstək komandasına xəbərdarlıq etməlidir. Aşağıda iki ay ərzində rekord sayma izlənməsinin təsviri verilmişdir:
Bunu təhlil etmək üçün gündəlik dəyişiklikləri müşahidə etmək üçün qeydlərin sayı məlumatlarını çevirə bilərik. Aşağıdakı diaqramda göstərildiyi kimi bu dəyişikliklər ümumiyyətlə sıfır ətrafında salınır:
Bu dəyişmə sürətini normal paylanma ilə təqdim etdikdə, məlumatların normal paylandığını göstərən zəng əyrisi əmələ gətirir. Gözlənilən dəyişiklik 2,63% standart sapma ilə təxminən 0% təşkil edir.
Bu təhlil göstərir ki, rekord göstərici adətən 90% inamla -5,26% - +5,25% diapazonuna düşür. Buna əsaslanaraq, qeydlərin sayı bu diapazondan kənara çıxdıqda, vaxtında müdaxiləni təmin edərək, xəbərdarlıq qaldırmaq üçün bir qayda qura bilərsiniz.
E atributunun əhatə dairəsi NULL olmayan dəyərlərin verilənlər toplusunun anlıq görüntüsü üçün ümumi qeyd sayına nisbətinə istinad edir. Məsələn, 100 qeyddən 8-i müəyyən bir atribut üçün NULL dəyərinə malikdirsə, bu atributun əhatə dairəsi 92% təşkil edir.
Gəlin gündəlik məhsul cədvəlinin şəklini yaradan ETL prosesi ilə başqa bir iş vəziyyətini nəzərdən keçirək. Biz məhsul təsviri atributlarının əhatə dairəsinə nəzarət etmək istəyirik. Əgər əhatə dairəsi müəyyən hədddən aşağı düşərsə, dəstək komandası üçün xəbərdarlıq edilməlidir. Aşağıda iki ay ərzində məhsul təsvirləri üçün atribut əhatəsinin vizual təsviri verilmişdir:
Əhatə sahəsində mütləq gündəlik fərqləri təhlil edərək, dəyişikliklərin sıfır ətrafında salındığını müşahidə edirik:
Bu məlumatın normal paylanma kimi təqdim edilməsi göstərir ki, o, təxminən 0% gözlənilən dəyişiklik və 2,45% standart sapma ilə normal şəkildə paylanır.
Gördüyümüz kimi, bu verilənlər toplusu üçün məhsul təsviri atributunun əhatə dairəsi adətən 90% əminliklə -4,9% ilə +4,9% arasında dəyişir. Bu göstəriciyə əsaslanaraq, əhatə dairəsi bu diapazondan kənara çıxarsa, xəbərdarlıq etmək üçün bir qayda təyin edə bilərik.
Mövsümilik və ya tendensiyalar kimi amillərə görə əhəmiyyətli dəyişikliklər göstərən məlumat dəstləri ilə işləyirsinizsə, ənənəvi statistik üsullar yanlış xəbərdarlıqlara səbəb ola bilər. Zaman sıraları alqoritmləri QA yoxlamalarınızın dəqiqliyini və etibarlılığını yaxşılaşdıraraq daha dəqiqləşdirilmiş yanaşma təklif edir.
Daha həssas siqnallar yaratmaq üçün ya istifadə edə bilərsiniz
Holt-Winters istifadə edərək həm trend, həm də mövsümi nümunələri nümayiş etdirən gündəlik satışları ələ salaq:
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)
Bu metoddan istifadə edərək, siz QA yoxlamalarına daha nüanslı yanaşma təmin edərək, məlumatların keyfiyyəti ilə bağlı problemləri göstərə biləcək əhəmiyyətli sapmaları aşkar edə bilərsiniz.
Ümid edirəm ki, bu məqalə böyük məlumat dəstləriniz üçün QA yoxlamalarını səmərəli şəkildə həyata keçirməyə kömək edəcəkdir. Deequ kitabxanasından istifadə etməklə və statistik metodları və zaman sıraları alqoritmlərini birləşdirməklə, siz məlumatların tamlığını və etibarlılığını təmin edə, nəticədə məlumatların idarə olunması təcrübənizi təkmilləşdirə bilərsiniz.
Yuxarıda təsvir edilən üsulların tətbiqi aşağı axın tətbiqlərində potensial problemlərin qarşısını almağa və məlumat iş axınlarınızın ümumi keyfiyyətini yaxşılaşdırmağa kömək edəcək.