Μία από τις ζωτικές δεξιότητες ενός ολοκληρωμένου επαγγελματία δεδομένων είναι ο αποτελεσματικός χειρισμός μεγάλων συνόλων δεδομένων, διασφαλίζοντας την ποιότητα και την αξιοπιστία των δεδομένων. Τα δεδομένα είναι το κεντρικό και θεμελιώδες κομμάτι οποιουδήποτε συστήματος δεδομένων και όποιες και αν είναι οι καλές δεξιότητες που έχετε σε άλλες πτυχές του εμπορίου μας, αυτό είναι κάτι που δεν έχετε την πολυτέλεια να παραβλέψετε.
Σε αυτό το άρθρο, εξερευνώ ισχυρές τεχνικές για την εκτέλεση ελέγχων QA σε μεγάλα σύνολα δεδομένων χρησιμοποιώντας τη βιβλιοθήκη Deequ και στατιστικές μεθόδους. Συνδυάζοντας τις προσεγγίσεις που εξηγώ παρακάτω, θα είστε σε θέση να διατηρήσετε την ακεραιότητα των δεδομένων, να βελτιώσετε τις πρακτικές διαχείρισης δεδομένων σας και να αποτρέψετε πιθανά προβλήματα σε μεταγενέστερες εφαρμογές.
Η διασφάλιση της ποιότητας δεδομένων σε κλίμακα είναι μια αποθαρρυντική εργασία, ειδικά όταν αντιμετωπίζουμε δισεκατομμύρια σειρές που είναι αποθηκευμένες σε κατανεμημένα συστήματα αρχείων ή σε αποθήκες δεδομένων. Η βιβλιοθήκη Deequ είναι ένα πλαίσιο δημιουργίας προφίλ δεδομένων και QA ανοιχτού κώδικα που βασίζεται στο Spark που είναι ένα σύγχρονο και ευέλικτο εργαλείο που έχει σχεδιαστεί για να λύσει αυτό το πρόβλημα. Αυτό που το κάνει να ξεχωρίζει από παρόμοια εργαλεία είναι η ικανότητά του να ενσωματώνεται απρόσκοπτα με το 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.
Μοναδικότητα χαρακτηριστικών: Βεβαιωθείτε ότι ορισμένα χαρακτηριστικά, όπως το id, είναι μοναδικά.
Εύρος τιμών: Επικυρώστε ότι χαρακτηριστικά όπως η προτεραιότητα και το numView εμπίπτουν στα αναμενόμενα εύρη.
Αντιστοίχιση μοτίβων: Επαληθεύστε ότι οι περιγραφές περιέχουν διευθύνσεις 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. Ευτυχώς, κάναμε μια δοκιμή και βρήκαμε τα σφάλματα. κάποιος πρέπει να διορθώσει αμέσως τα δεδομένα!
Ενώ το Deequ προσφέρει ένα ισχυρό πλαίσιο για την επικύρωση δεδομένων, η ενσωμάτωση στατιστικών μεθόδων μπορεί να ενισχύσει περαιτέρω τους ελέγχους διασφάλισης ποιότητας, ειδικά εάν έχετε να κάνετε με συγκεντρωτικές μετρήσεις ενός συνόλου δεδομένων. Ας δούμε πώς μπορείτε να χρησιμοποιήσετε στατιστικές μεθόδους για την παρακολούθηση και τη διασφάλιση της ποιότητας των δεδομένων.
Εξετάστε ένα επιχειρηματικό σενάριο όπου μια διαδικασία ETL (Extract, Transform, Load) παράγει N εγγραφές σε μια καθημερινή προγραμματισμένη εργασία. Οι ομάδες υποστήριξης μπορεί να θέλουν να ρυθμίσουν ελέγχους QA για να ειδοποιήσουν εάν υπάρχει σημαντική απόκλιση στον αριθμό αρχείων. Για παράδειγμα, εάν η διαδικασία δημιουργεί συνήθως από 9.500 έως 10.500 εγγραφές καθημερινά σε διάστημα δύο μηνών, οποιαδήποτε σημαντική αύξηση ή μείωση θα μπορούσε να υποδηλώνει πρόβλημα με τα υποκείμενα δεδομένα.
Μπορούμε να χρησιμοποιήσουμε μια στατιστική μέθοδο για να ορίσουμε αυτό το όριο για το ποια διαδικασία θα πρέπει να προειδοποιεί την ομάδα υποστήριξης. Ακολουθεί μια απεικόνιση της παρακολούθησης του αριθμού των ρεκόρ σε διάστημα δύο μηνών:
Για να το αναλύσουμε αυτό, μπορούμε να μετατρέψουμε τα δεδομένα καταμέτρησης εγγραφών για να παρατηρήσουμε τις καθημερινές αλλαγές. Αυτές οι αλλαγές γενικά ταλαντώνονται γύρω από το μηδέν, όπως φαίνεται στο παρακάτω διάγραμμα:
Όταν αντιπροσωπεύουμε αυτόν τον ρυθμό μεταβολής με μια κανονική κατανομή, σχηματίζει μια καμπύλη καμπάνας, υποδεικνύοντας ότι τα δεδομένα κατανέμονται κανονικά. Η αναμενόμενη μεταβολή είναι περίπου 0%, με τυπική απόκλιση 2,63%.
Αυτή η ανάλυση υποδηλώνει ότι το πλήθος των ρεκόρ τυπικά εμπίπτει στο εύρος -5,26% έως +5,25% με εμπιστοσύνη 90%. Με βάση αυτό, μπορείτε να ορίσετε έναν κανόνα για την ειδοποίηση εάν ο αριθμός των εγγραφών αποκλίνει πέρα από αυτό το εύρος, διασφαλίζοντας την έγκαιρη παρέμβαση.
Η κάλυψη χαρακτηριστικού e αναφέρεται στην αναλογία των μη NULL τιμών προς τον συνολικό αριθμό εγγραφών για ένα στιγμιότυπο δεδομένων. Για παράδειγμα, εάν 8 στις 100 εγγραφές έχουν τιμή NULL για ένα συγκεκριμένο χαρακτηριστικό, η κάλυψη για αυτό το χαρακτηριστικό είναι 92%.
Ας εξετάσουμε μια άλλη επιχειρηματική περίπτωση με μια διαδικασία ETL που δημιουργεί ένα στιγμιότυπο πίνακα προϊόντων καθημερινά. Θέλουμε να παρακολουθούμε την κάλυψη των χαρακτηριστικών περιγραφής προϊόντων. Εάν η κάλυψη πέσει κάτω από ένα συγκεκριμένο όριο, θα πρέπει να ειδοποιηθεί η ομάδα υποστήριξης. Ακολουθεί μια οπτική αναπαράσταση της κάλυψης χαρακτηριστικών για περιγραφές προϊόντων για δύο μήνες:
Αναλύοντας τις απόλυτες καθημερινές διαφορές στην κάλυψη, παρατηρούμε ότι οι αλλαγές ταλαντώνονται γύρω από το μηδέν:
Η αναπαράσταση αυτών των δεδομένων ως κανονικής κατανομής δείχνει ότι κατανέμεται κανονικά με αναμενόμενη μεταβολή περίπου 0% και τυπική απόκλιση 2,45%.
Όπως βλέπουμε, για αυτό το σύνολο δεδομένων, η κάλυψη χαρακτηριστικών περιγραφής προϊόντος κυμαίνεται συνήθως από -4,9% έως +4,9% με 90% εμπιστοσύνη. Με βάση αυτόν τον δείκτη, μπορούμε να ορίσουμε έναν κανόνα για την ειδοποίηση εάν η κάλυψη αποκλίνει πέρα από αυτό το εύρος.
Εάν εργάζεστε με σύνολα δεδομένων που εμφανίζουν σημαντικές διακυμάνσεις λόγω παραγόντων όπως η εποχικότητα ή οι τάσεις, οι παραδοσιακές στατιστικές μέθοδοι ενδέχεται να ενεργοποιήσουν ψευδείς ειδοποιήσεις. Οι αλγόριθμοι χρονοσειρών προσφέρουν μια πιο εκλεπτυσμένη προσέγγιση, βελτιώνοντας την ακρίβεια και την αξιοπιστία των ελέγχων διασφάλισης ποιότητας.
Για να δημιουργήσετε πιο λογικές ειδοποιήσεις, μπορείτε να χρησιμοποιήσετε είτε το
Ας προσποιηθούμε τις καθημερινές εκπτώσεις που παρουσιάζουν τόσο τάσεις όσο και εποχιακά μοτίβα χρησιμοποιώντας το 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.
Ελπίζω ότι αυτό το άρθρο θα σας βοηθήσει να εφαρμόσετε αποτελεσματικά ελέγχους διασφάλισης ποιότητας για τα μεγάλα σύνολα δεδομένων σας. Χρησιμοποιώντας τη βιβλιοθήκη Deequ και ενσωματώνοντας στατιστικές μεθόδους και αλγόριθμους χρονοσειρών, μπορείτε να διασφαλίσετε την ακεραιότητα και την αξιοπιστία των δεδομένων, ενισχύοντας τελικά τις πρακτικές διαχείρισης δεδομένων σας.
Η εφαρμογή των τεχνικών που περιγράφονται παραπάνω θα σας βοηθήσει να αποτρέψετε πιθανά προβλήματα σε μεταγενέστερες εφαρμογές και να βελτιώσετε τη συνολική ποιότητα των ροών εργασίας δεδομένων σας.