Εκμάθηση: Εκκαθάριση δεδομένων με λειτουργικές εξαρτήσεις
Σε αυτό το πρόγραμμα εκμάθησης, χρησιμοποιείτε λειτουργικές εξαρτήσεις για την εκκαθάριση δεδομένων. Υπάρχει μια λειτουργική εξάρτηση όταν μία στήλη σε ένα μοντέλο σημασιολογίας (ένα σύνολο δεδομένων Power BI) είναι συνάρτηση μιας άλλης στήλης. Για παράδειγμα, μια στήλη ταχυδρομικού κώδικα μπορεί να προσδιορίζει τις τιμές σε μια στήλη city . Μια λειτουργική εξάρτηση εκδηλώνεται ως σχέση ένα-προς-πολλά μεταξύ των τιμών σε δύο ή περισσότερες στήλες μέσα σε ένα DataFrame. Αυτό το εκπαιδευτικό βοήθημα χρησιμοποιεί το σύνολο δεδομένων Synthea για να δείξει πώς οι λειτουργικές σχέσεις μπορούν να βοηθήσουν στον εντοπισμό προβλημάτων ποιότητας δεδομένων.
Σε αυτό το εκπαιδευτικό βοήθημα, θα μάθετε πώς μπορείτε να κάνετε τα εξής:
- Εφαρμόστε γνώσεις τομέα σε υποθέσεις τύπων σχετικά με λειτουργικές εξαρτήσεις σε ένα μοντέλο σημασιολογίας.
- Εξοικειωθείτε με τα στοιχεία της βιβλιοθήκης Python (SemPy) της σημασιολογικής σύνδεσης που βοηθούν στην αυτοματοποίηση της ανάλυσης ποιότητας δεδομένων. Αυτά τα στοιχεία περιλαμβάνουν:
- FabricDataFrame - μια δομή που μοιάζει με pandas ενισχυμένη με πρόσθετες σημασιολογικές πληροφορίες.
- Χρήσιμες συναρτήσεις που αυτοματοποιούν την αξιολόγηση υποθέσεων σχετικά με λειτουργικές εξαρτήσεις και που αναγνωρίζουν παραβιάσεις των σχέσεων στα σημασιολογικά μοντέλα σας.
Προαπαιτούμενα στοιχεία
Λάβετε μια συνδρομή Microsoft Fabric. Εναλλακτικά, εγγραφείτε για μια δωρεάν δοκιμαστική έκδοση του Microsoft Fabric.
Εισέλθετε στο Microsoft Fabric.
Χρησιμοποιήστε την εναλλαγή εμπειρίας στην αριστερή πλευρά της αρχικής σελίδας σας για να μεταβείτε στην εμπειρία Synapse Data Science.
- Επιλέξτε Χώροι εργασίας από το αριστερό παράθυρο περιήγησης για να βρείτε και να επιλέξετε τον χώρο εργασίας σας. Αυτός ο χώρος εργασίας γίνεται ο τρέχων χώρος εργασίας σας.
Ακολουθήστε τις οδηγίες στο σημειωματάριο
Το σημειωματάριο data_cleaning_functional_dependencies_tutorial.ipynb συνοδεύει αυτή την εκμάθηση.
Για να ανοίξετε το σημειωματάριο που συνοδεύει αυτό το εκπαιδευτικό βοήθημα, ακολουθήστε τις οδηγίες στο θέμα Προετοιμασία του συστήματός σας για προγράμματα εκμάθησης επιστήμης δεδομένων, για να εισαγάγετε το σημειωματάριο στον χώρο εργασίας σας.
Εάν προτιμάτε να αντιγράψετε και να επικολλήσετε τον κώδικα από αυτή τη σελίδα, μπορείτε να δημιουργήσετε ένα νέο σημειωματάριο.
Φροντίστε να επισυνάψετε ένα lakehouse στο σημειωματάριο προτού ξεκινήσετε την εκτέλεση κώδικα.
Ρύθμιση του σημειωματάριου
Σε αυτή την ενότητα, ρυθμίζετε ένα περιβάλλον σημειωματάριου με τις απαραίτητες λειτουργικές μονάδες και δεδομένα.
- Για το Spark 3.4 και νεότερες εκδόσεις, η Σύνδεση σημασιολογίας είναι διαθέσιμη στον προεπιλεγμένο χρόνο εκτέλεσης όταν χρησιμοποιείτε το Fabric και δεν χρειάζεται να την εγκαταστήσετε. Εάν χρησιμοποιείτε το Spark 3.3 ή παρακάτω ή εάν θέλετε να ενημερώσετε την πιο πρόσφατη έκδοση της Σημασιολογικής σύνδεσης, μπορείτε να εκτελέσετε την εντολή:
python %pip install -U semantic-link
Εκτελέστε τις απαραίτητες εισαγωγές λειτουργικών μονάδων που θα χρειαστείτε αργότερα:
import pandas as pd import sempy.fabric as fabric from sempy.fabric import FabricDataFrame from sempy.dependencies import plot_dependency_metadata from sempy.samples import download_synthea
Τραβήξτε το δείγμα δεδομένων. Για αυτό το εκπαιδευτικό βοήθημα, χρησιμοποιείτε το σύνολο δεδομένων Synthea των συνθετικών ιατρικών αρχείων (μικρή έκδοση για λόγους ευκολίας):
download_synthea(which='small')
Εξερεύνηση των δεδομένων
Προετοιμάστε ένα
FabricDataFrame
με το περιεχόμενο του αρχείου providers.csv :providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv")) providers.head()
Ελέγξτε για προβλήματα ποιότητας δεδομένων με τη συνάρτηση SemPy
find_dependencies
σχεδιάζοντας ένα γράφημα των αυτόματων λειτουργικών εξαρτήσεων:deps = providers.find_dependencies() plot_dependency_metadata(deps)
Το γράφημα των λειτουργικών εξαρτήσεων δείχνει ότι
Id
προσδιορίζει τα καιORGANIZATION
(υποδεικνύονταιNAME
από τα συμπαγή βέλη), το οποίο είναι αναμενόμενο, επειδήId
είναι μοναδικό:Επιβεβαιώστε ότι αυτό
Id
είναι μοναδικό:providers.Id.is_unique
Ο κωδικός επιστρέφει
True
για να επιβεβαιώσει ότι είναιId
μοναδικός.
Ανάλυση των λειτουργικών εξαρτήσεων σε βάθος
Το γράφημα λειτουργικών εξαρτήσεων δείχνει επίσης ότι ORGANIZATION
προσδιορίζει τα ADDRESS
και ZIP
, όπως αναμένεται. Ωστόσο, μπορεί να περιμένετε ZIP
να προσδιορίσετε CITY
επίσης το , αλλά το διακεκομμένη βέλος υποδεικνύει ότι η εξάρτηση είναι προσεγγισμένη μόνο και δείχνει προς ένα ζήτημα ποιότητας δεδομένων.
Υπάρχουν και άλλες ιδιαιτερότητες στο γράφημα. Για παράδειγμα, NAME
το δεν προσδιορίζει GENDER
τα , Id
, SPECIALITY
ή ORGANIZATION
. Κάθε μία από αυτές τις ιδιαιτερότητες μπορεί να αξίζει να διερευνηθεί.
Ρίξτε μια βαθύτερη ματιά στην κατά προσέγγιση σχέση μεταξύ
ZIP
του καιCITY
τουlist_dependency_violations
, χρησιμοποιώντας τη συνάρτηση SemPy για να δείτε μια λίστα με παραβιάσεις σε μορφή πίνακα:providers.list_dependency_violations('ZIP', 'CITY')
Σχεδιάστε ένα γράφημα με τη συνάρτηση απεικόνισης του
plot_dependency_violations
SemPy. Αυτό το γράφημα είναι χρήσιμο εάν ο αριθμός των παραβιάσεων είναι μικρός:providers.plot_dependency_violations('ZIP', 'CITY')
Η σχεδίαση των παραβιάσεων εξάρτησης εμφανίζει τιμές για
ZIP
την αριστερή πλευρά και τιμές γιαCITY
τη δεξιά πλευρά. Ένα άκρο συνδέει έναν ταχυδρομικό κώδικα στην αριστερή πλευρά της σχεδίασης με μια πόλη στη δεξιά πλευρά, εάν υπάρχει μια γραμμή που περιέχει αυτές τις δύο τιμές. Τα άκρα επισημαίνονται με το πλήθος αυτών των γραμμών. Για παράδειγμα, υπάρχουν δύο γραμμές με ταχυδρομικό κώδικα 02747-1242, μία γραμμή με την πόλη "NORTH DARTHMOUTH" και η άλλη με την πόλη "DARTHMOUTH", όπως φαίνεται στο προηγούμενο γράφημα και στον παρακάτω κώδικα:Επιβεβαιώστε τις προηγούμενες παρατηρήσεις που κάνατε με τη σχεδίαση των παραβιάσεων εξάρτησης εκτελώντας τον ακόλουθο κώδικα:
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
Η σχεδίαση δείχνει επίσης ότι μεταξύ των γραμμών που έχουν
CITY
ως "DARTHMOUTH", εννέα γραμμές έχουνZIP
02747-1262, μία γραμμή έχειZIP
02747-1242 και μία γραμμή έχει 02747-1242 και μία γραμμή έχειZIP
02747-2537. Επιβεβαιώνει αυτές τις παρατηρήσεις με τον ακόλουθο κώδικα:providers[providers.CITY == 'DARTMOUTH'].ZIP.value_counts()
Υπάρχουν άλλοι ταχυδρομικοί κώδικες που σχετίζονται με το "DARTMOUTH", αλλά αυτοί οι ταχυδρομικοί κώδικες δεν εμφανίζονται στο γράφημα των παραβιάσεων εξάρτησης, καθώς δεν υπαινίσσονται προβλήματα ποιότητας δεδομένων. Για παράδειγμα, ο ταχυδρομικός κώδικας "02747-4302" σχετίζεται μοναδικά με το "DARTMOUTH" και δεν εμφανίζεται στο γράφημα παραβιάσεων εξάρτησης. Επιβεβαιώστε εκτελώντας τον ακόλουθο κώδικα:
providers[providers.ZIP == '02747-4302'].CITY.value_counts()
Σύνοψη προβλημάτων ποιότητας δεδομένων που εντοπίστηκαν με το SemPy
Επιστρέφοντας στο γράφημα των παραβιάσεων εξάρτησης, μπορείτε να δείτε ότι υπάρχουν πολλά ενδιαφέροντα ζητήματα ποιότητας δεδομένων σε αυτό το σημασιολογικό μοντέλο:
- Ορισμένα ονόματα πόλεων είναι όλα κεφαλαία. Αυτό το πρόβλημα είναι εύκολο να διορθωθεί χρησιμοποιώντας μεθόδους συμβολοσειράς.
- Ορισμένα ονόματα πόλεων έχουν προσδιοριζόμενα (ή προθέματα), όπως "Βορράς" και "Ανατολή". Για παράδειγμα, ο ταχυδρομικός κώδικας "2128" αντιστοιχίζεται στην τιμή "EAST BOSTON" μία φορά και σε "BOSTON" μία φορά. Ένα παρόμοιο πρόβλημα παρουσιάζεται μεταξύ των "NORTH DARTHMOUTH" και "DARTHMOUTH". Θα μπορούσατε να προσπαθήσετε να αποθέσετε αυτά τα προσδιοριστικό ή να αντιστοιχίστε τους ταχυδρομικούς κώδικες στην πόλη με το πιο συνηθισμένο περιστατικό.
- Υπάρχουν τυπογραφικά λάθη σε ορισμένες πόλεις, όπως "PITTSFIELD" εναντίον "PITTSFILED" και "NEWBURGPORT vs. "NEWBURYPORT". Για το "NEWBURGPORT", αυτό το τυπογραφικό λάθος μπορεί να διορθωθεί χρησιμοποιώντας την πιο συνηθισμένη εμφάνιση. Για το "PITTSFIELD", η ύπαρξη μόνο μίας εμφάνισης το καθένα καθιστά πολύ πιο δύσκολο για την αυτόματη αποσαφήνιση χωρίς εξωτερικές γνώσεις ή τη χρήση ενός μοντέλου γλώσσας.
- Ορισμένες φορές, προθήματα όπως "Δύση" συντομογραφούνται σε ένα μόνο γράμμα "W". Αυτό το ζήτημα μπορεί πιθανώς να διορθωθεί με μια απλή αντικατάσταση, εάν όλες οι εμφανίσεις του "W" ισχύει για "West".
- Ο ταχυδρομικός κώδικας "02130" αντιστοιχεί μία φορά στη "ΒΟΣΤΟΝΗ" και στο "Τζαμάικα Plain" μία φορά. Αυτό το πρόβλημα δεν είναι εύκολο να διορθωθεί, αλλά αν υπήρχαν περισσότερα δεδομένα, η αντιστοίχιση στην πιο συνηθισμένη εμφάνιση θα μπορούσε να αποτελέσει μια πιθανή λύση.
Εκκαθάριση των δεδομένων
Διορθώστε τα ζητήματα κεφαλαιοποίησης αλλάζοντας όλα τα κεφαλαία σε κεφαλαία σε κεφαλαία:
providers['CITY'] = providers.CITY.str.title()
Εκτελέστε ξανά τον εντοπισμό παραβίασης για να δείτε ότι ορισμένες από τις ασάφειες έχουν χαθεί (ο αριθμός των παραβιάσεων είναι μικρότερος):
providers.list_dependency_violations('ZIP', 'CITY')
Σε αυτό το σημείο, θα μπορούσατε να περιορίσετε τα δεδομένα σας πιο μη αυτόματα, αλλά μια πιθανή εργασία εκκαθάρισης δεδομένων είναι η κατάργηση γραμμών που παραβιάζουν τους λειτουργικούς περιορισμούς μεταξύ των στηλών στα δεδομένα, χρησιμοποιώντας τη συνάρτηση του
drop_dependency_violations
SemPy.Για κάθε τιμή της αιτιοκρατικής μεταβλητής,
drop_dependency_violations
λειτουργεί επιλέγοντας την πιο κοινή τιμή της εξαρτώμενης μεταβλητής και απορρίπτοντας όλες τις γραμμές με άλλες τιμές. Θα πρέπει να εφαρμόσετε αυτή τη λειτουργία μόνο εάν είστε βέβαιοι ότι αυτή η στατιστική ευρετική θα οδηγούσε στα σωστά αποτελέσματα για τα δεδομένα σας. Διαφορετικά, θα πρέπει να συντάξετε τον δικό σας κώδικα για να χειρίζεστε τις παραβιάσεις που εντοπίστηκαν, ανάλογα με τις ανάγκες.Εκτελέστε τη
drop_dependency_violations
συνάρτηση στιςZIP
στήλες καιCITY
:providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
Λίστα τυχόν παραβιάσεων εξάρτησης μεταξύ
ZIP
καιCITY
:providers_clean.list_dependency_violations('ZIP', 'CITY')
Ο κώδικας επιστρέφει μια κενή λίστα για να υποδείξει ότι δεν υπάρχουν άλλες παραβιάσεις του λειτουργικού περιορισμού CITY -> ZIP.
Σχετικό περιεχόμενο
Δείτε άλλα προγράμματα εκμάθησης για τη σημασιολογική σύνδεση / SemPy:
- Εκμάθηση: Ανάλυση λειτουργικών εξαρτήσεων σε ένα δείγμα σημασιολογικού μοντέλου
- Εκμάθηση: Εξαγωγή και υπολογισμός μετρήσεων Power BI από ένα σημειωματάριο Jupyter
- Εκμάθηση: Εντοπισμός σχέσεων σε ένα μοντέλο σημασιολογίας, με χρήση σημασιολογικής σύνδεσης
- Εκμάθηση: Εντοπισμός σχέσεων στο σύνολο δεδομένων Synthea , με χρήση σημασιολογικής σύνδεσης
- Εκμάθηση: Επικύρωση δεδομένων με χρήση των SemPy και Great Expectations (GX)