Κοινή χρήση μέσω


Εκμάθηση: Εκκαθάριση δεδομένων με λειτουργικές εξαρτήσεις

Σε αυτό το πρόγραμμα εκμάθησης, χρησιμοποιείτε λειτουργικές εξαρτήσεις για την εκκαθάριση δεδομένων. Υπάρχει μια λειτουργική εξάρτηση όταν μία στήλη σε ένα μοντέλο σημασιολογίας (ένα σύνολο δεδομένων Power BI) είναι συνάρτηση μιας άλλης στήλης. Για παράδειγμα, μια στήλη ταχυδρομικού κώδικα μπορεί να προσδιορίζει τις τιμές σε μια στήλη πόλης . Μια λειτουργική εξάρτηση εκδηλώνεται ως σχέση ένα-προς-πολλά μεταξύ των τιμών σε δύο ή περισσότερες στήλες μέσα σε ένα DataFrame. Αυτό το εκπαιδευτικό βοήθημα χρησιμοποιεί το Synthea σύνολο δεδομένων για να δείξει πώς οι λειτουργικές σχέσεις μπορούν να βοηθήσουν στον εντοπισμό προβλημάτων ποιότητας δεδομένων.

Σε αυτή την εκμάθηση, θα μάθετε πώς μπορείτε να κάνετε τα εξής:

  • Εφαρμόστε γνώσεις τομέα σε υποθέσεις τύπων σχετικά με λειτουργικές εξαρτήσεις σε ένα μοντέλο σημασιολογίας.
  • Εξοικειωθείτε με τα στοιχεία της βιβλιοθήκης Python της σημασιολογικής σύνδεσης (SemPy) που βοηθούν στην αυτοματοποίηση της ανάλυσης ποιότητας των δεδομένων. Αυτά τα στοιχεία περιλαμβάνουν:
    • FabricDataFrame - μια δομή που μοιάζει με pandas ενισχυμένη με πρόσθετες σημασιολογικές πληροφορίες.
    • Χρήσιμες συναρτήσεις που αυτοματοποιούν την αξιολόγηση υποθέσεων σχετικά με λειτουργικές εξαρτήσεις και που αναγνωρίζουν παραβιάσεις των σχέσεων στα σημασιολογικά μοντέλα σας.

Προϋποθέσεις

  • Λάβετε μια συνδρομής Microsoft Fabric . Εναλλακτικά, εγγραφείτε για μια δωρεάν δοκιμαστική έκδοση microsoft Fabric.

  • Εισέλθετε για να το Microsoft Fabric.

  • Χρησιμοποιήστε την εναλλαγή εμπειρίας στην κάτω αριστερή πλευρά της αρχικής σελίδας σας για να μεταβείτε σε Fabric.

    Στιγμιότυπο οθόνης του μενού εναλλαγής εμπειρίας, που εμφανίζει πού μπορείτε να επιλέξετε Επιστήμη δεδομένων.

  • Επιλέξτε χώροι εργασίας από το αριστερό παράθυρο περιήγησης για να βρείτε και να επιλέξετε τον χώρο εργασίας σας. Αυτός ο χώρος εργασίας γίνεται ο τρέχων χώρος εργασίας σας.

Ακολουθήστε τις οδηγίες στο σημειωματάριο

Το σημειωματάριο.ipynb του data_cleaning_functional_dependencies_tutorial συνοδεύει αυτό το πρόγραμμα εκμάθησης.

Ρύθμιση του σημειωματάριου

Σε αυτή την ενότητα, ρυθμίζετε ένα περιβάλλον σημειωματάριου με τις απαραίτητες λειτουργικές μονάδες και δεδομένα.

  1. Για το Spark 3.4 και νεότερες εκδόσεις, η Σύνδεση σημασιολογίας είναι διαθέσιμη στον προεπιλεγμένο χρόνο εκτέλεσης όταν χρησιμοποιείτε το Fabric και δεν χρειάζεται να την εγκαταστήσετε. Εάν χρησιμοποιείτε το Spark 3.3 ή παρακάτω ή εάν θέλετε να ενημερώσετε την πιο πρόσφατη έκδοση της Σημασιολογικής σύνδεσης, μπορείτε να εκτελέσετε την εντολή:

python %pip install -U semantic-link  

  1. Εκτελέστε τις απαραίτητες εισαγωγές λειτουργικών μονάδων που θα χρειαστείτε αργότερα:

    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
    
  2. Τραβήξτε το δείγμα δεδομένων. Για αυτό το εκπαιδευτικό βοήθημα, χρησιμοποιείτε το Synthea σύνολο δεδομένων συνθετικών ιατρικών αρχείων (μικρή έκδοση για λόγους ευκολίας):

    download_synthea(which='small')
    

Εξερεύνηση των δεδομένων

  1. Προετοιμάστε ένα FabricDataFrame με το περιεχόμενο του αρχείου providers.csv:

    providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))
    providers.head()
    
  2. Ελέγξτε για προβλήματα ποιότητας δεδομένων με τη συνάρτηση find_dependencies του SemPy σχεδιάζοντας ένα γράφημα των αυτόματων λειτουργικών εξαρτήσεων:

    deps = providers.find_dependencies()
    plot_dependency_metadata(deps)
    

    Στιγμιότυπο οθόνης που εμφανίζει το γράφημα των λειτουργικών εξαρτήσεων.

    Το γράφημα των λειτουργικών εξαρτήσεων δείχνει ότι Id προσδιορίζει NAME και ORGANIZATION (υποδεικνύονται από τα συμπαγή βέλη), κάτι που αναμένεται, δεδομένου ότι Id είναι μοναδικό:

  3. Επιβεβαιώστε ότι Id είναι μοναδική:

    providers.Id.is_unique
    

    Ο κώδικας επιστρέφει True για να επιβεβαιώσει ότι Id είναι μοναδική.

Ανάλυση των λειτουργικών εξαρτήσεων σε βάθος

Το γράφημα λειτουργικών εξαρτήσεων δείχνει επίσης ότι ORGANIZATION προσδιορίζει ADDRESS και ZIP, όπως αναμένεται. Ωστόσο, μπορεί να περιμένετε ZIP να προσδιορίσετε επίσης CITY, αλλά το διακεκομμένη βέλος υποδεικνύει ότι η εξάρτηση είναι προσεγγισμένη μόνο και δείχνει προς ένα ζήτημα ποιότητας δεδομένων.

Υπάρχουν και άλλες ιδιαιτερότητες στο γράφημα. Για παράδειγμα, NAME δεν προσδιορίζει GENDER, Id, SPECIALITYή ORGANIZATION. Κάθε μία από αυτές τις ιδιαιτερότητες μπορεί να αξίζει να διερευνηθεί.

  1. Ρίξτε μια βαθύτερη ματιά στην κατά προσέγγιση σχέση μεταξύ ZIP και CITY, χρησιμοποιώντας τη συνάρτηση list_dependency_violations του SemPy για να δείτε μια λίστα παραβιάσεων σε μορφή πίνακα:

    providers.list_dependency_violations('ZIP', 'CITY')
    
  2. Σχεδιάστε ένα γράφημα με τη συνάρτηση plot_dependency_violations απεικόνισης του SemPy. Αυτό το γράφημα είναι χρήσιμο εάν ο αριθμός των παραβιάσεων είναι μικρός:

    providers.plot_dependency_violations('ZIP', 'CITY')
    

    Στιγμιότυπο οθόνης που εμφανίζει τη σχεδίαση παραβιάσεων εξάρτησης.

    Η σχεδίαση των παραβιάσεων εξάρτησης εμφανίζει τιμές για ZIP στην αριστερή πλευρά και τιμές για CITY στη δεξιά πλευρά. Ένα άκρο συνδέει έναν ταχυδρομικό κώδικα στην αριστερή πλευρά της σχεδίασης με μια πόλη στη δεξιά πλευρά, εάν υπάρχει μια γραμμή που περιέχει αυτές τις δύο τιμές. Τα άκρα επισημαίνονται με το πλήθος αυτών των γραμμών. Για παράδειγμα, υπάρχουν δύο γραμμές με ταχυδρομικό κώδικα 02747-1242, μία γραμμή με την πόλη "NORTH DARTHMOUTH" και η άλλη με την πόλη "DARTHMOUTH", όπως φαίνεται στο προηγούμενο γράφημα και στον παρακάτω κώδικα:

  3. Επιβεβαιώστε τις προηγούμενες παρατηρήσεις που κάνατε με τη σχεδίαση των παραβιάσεων εξάρτησης εκτελώντας τον ακόλουθο κώδικα:

    providers[providers.ZIP == '02747-1242'].CITY.value_counts()
    
  4. Η σχεδίαση δείχνει επίσης ότι μεταξύ των γραμμών που έχουν CITY ως "DARTHMOUTH", εννέα γραμμές έχουν ZIP 02747-1262. μία γραμμή έχει ZIP 02747-1242. και μία γραμμή έχει ZIP 02747-2537. Επιβεβαιώνει αυτές τις παρατηρήσεις με τον ακόλουθο κώδικα:

    providers[providers.CITY == 'DARTMOUTH'].ZIP.value_counts()
    
  5. Υπάρχουν άλλοι ταχυδρομικοί κώδικες που σχετίζονται με το "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" μία φορά. Αυτό το πρόβλημα δεν είναι εύκολο να διορθωθεί, αλλά αν υπήρχαν περισσότερα δεδομένα, η αντιστοίχιση στην πιο συνηθισμένη εμφάνιση θα μπορούσε να αποτελέσει μια πιθανή λύση.

Εκκαθάριση των δεδομένων

  1. Διορθώστε τα ζητήματα κεφαλαιοποίησης αλλάζοντας όλα τα κεφαλαία σε κεφαλαία σε κεφαλαία:

    providers['CITY'] = providers.CITY.str.title()
    
  2. Εκτελέστε ξανά τον εντοπισμό παραβίασης για να δείτε ότι ορισμένες από τις ασάφειες έχουν χαθεί (ο αριθμός των παραβιάσεων είναι μικρότερος):

    providers.list_dependency_violations('ZIP', 'CITY')
    

    Σε αυτό το σημείο, θα μπορούσατε να περιορίσετε τα δεδομένα σας πιο μη αυτόματα, αλλά μια πιθανή εργασία εκκαθάρισης δεδομένων είναι η κατάργηση γραμμών που παραβιάζουν τους λειτουργικούς περιορισμούς μεταξύ των στηλών στα δεδομένα, χρησιμοποιώντας τη συνάρτηση drop_dependency_violations του SemPy.

    Για κάθε τιμή της αιτιοκρατικής μεταβλητής, drop_dependency_violations λειτουργεί επιλέγοντας την πιο κοινή τιμή της εξαρτώμενης μεταβλητής και απορρίπτοντας όλες τις γραμμές με άλλες τιμές. Θα πρέπει να εφαρμόσετε αυτή τη λειτουργία μόνο εάν είστε βέβαιοι ότι αυτή η στατιστική ευρετική θα οδηγούσε στα σωστά αποτελέσματα για τα δεδομένα σας. Διαφορετικά, θα πρέπει να συντάξετε τον δικό σας κώδικα για να χειρίζεστε τις παραβιάσεις που εντοπίστηκαν, ανάλογα με τις ανάγκες.

  3. Εκτελέστε τη συνάρτηση drop_dependency_violations στις στήλες ZIP και CITY:

    providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
    
  4. Παράθεση τυχόν παραβιάσεων εξάρτησης μεταξύ ZIP και CITY:

    providers_clean.list_dependency_violations('ZIP', 'CITY')
    

    Ο κώδικας επιστρέφει μια κενή λίστα για να υποδείξει ότι δεν υπάρχουν άλλες παραβιάσεις του λειτουργικού περιορισμού CITY -> ZIP.

Δείτε άλλα προγράμματα εκμάθησης για τη σημασιολογική σύνδεση / SemPy: