მონაცემთა დახვეწილი პროფესიონალის ერთ-ერთი სასიცოცხლო უნარი არის მონაცემთა დიდი ნაკრების ეფექტური მართვა, მონაცემთა ხარისხისა და სანდოობის უზრუნველყოფა. მონაცემები ნებისმიერი მონაცემთა სისტემის ცენტრალური და ფუნდამენტური ნაწილია და რაც არ უნდა კარგი უნარები გქონდეთ ჩვენი ვაჭრობის სხვა ასპექტებში, ეს არის ის, რისი გამოტოვებაც არ შეგიძლიათ. ამ სტატიაში მე ვიკვლევ მძლავრ ტექნიკას 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! ტესტმა დაადგინა, რომ ჩვენი ვარაუდები დაირღვა! productName ატრიბუტის 5-დან მხოლოდ 4 (80%) არის არა null და აღწერილობის ატრიბუტის 5-დან მხოლოდ 2 (ანუ 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 ბიბლიოთეკის გამოყენებით და სტატისტიკური მეთოდებისა და დროის სერიების ალგორითმების ინტეგრირებით, შეგიძლიათ უზრუნველყოთ მონაცემთა მთლიანობა და სანდოობა, რაც საბოლოოდ გააუმჯობესებს თქვენი მონაცემთა მართვის პრაქტიკას. ზემოთ აღწერილი ტექნიკის დანერგვა დაგეხმარებათ თავიდან აიცილოთ პოტენციური პრობლემები ქვედა დინების აპლიკაციებში და გააუმჯობესოთ თქვენი მონაცემთა სამუშაო ნაკადების საერთო ხარისხი.