Κοινοποίηση μέσω


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

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

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

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

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

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

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

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

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

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

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

Χρησιμοποιήστε το σημειωματάριο data_cleaning_functional_dependencies_tutorial.ipynb για να ακολουθήσετε αυτό το πρόγραμμα εκμάθησης.

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

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

  1. Ελέγξτε την έκδοση Spark. Αν χρησιμοποιείτε το Spark 3.4 ή νεότερη έκδοση στο Microsoft Fabric, το Semantic Link περιλαμβάνεται από προεπιλογή, επομένως δεν χρειάζεται να το εγκαταστήσετε. Εάν χρησιμοποιείτε το Spark 3.3 ή παλαιότερη έκδοση ή θέλετε να κάνετε ενημέρωση στην πιο πρόσφατη σημασιολογική σύνδεση, εκτελέστε την ακόλουθη εντολή.

    %pip install -U semantic-link
    
  2. Εισαγάγετε τις λειτουργικές μονάδες που χρησιμοποιείτε σε αυτό το σημειωματάριο.

    import pandas as pd
    import sempy.fabric as fabric
    from sempy.fabric import FabricDataFrame
    from sempy.dependencies import plot_dependency_metadata
    
  3. Κάντε λήψη του δείγματος δεδομένων. Σε αυτό το σεμινάριο, χρησιμοποιήστε το σύνολο δεδομένων Synthea των συνθετικών ιατρικών αρχείων (μικρή έκδοση για απλότητα).

    download_synthea(which='small')
    

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

  1. Προετοιμασία a 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')
  1. Σχεδιάστε ένα γράφημα με τη συνάρτηση plot_dependency_violations απεικόνισης του SemPy. Αυτό το γράφημα είναι χρήσιμο εάν ο αριθμός των παραβιάσεων είναι μικρός:
providers.plot_dependency_violations('ZIP', 'CITY')

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

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

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

    providers[providers.CITY == 'DARTHMOUTH'].ZIP.value_counts()
    
  2. Υπάρχουν και άλλοι ταχυδρομικοί κώδικες που σχετίζονται με το "DARTMOUTH", αλλά αυτοί οι ταχυδρομικοί κώδικες δεν εμφανίζονται στο γράφημα των παραβιάσεων εξάρτησης, επειδή δεν υποδηλώνουν προβλήματα ποιότητας δεδομένων. Για παράδειγμα, ο ταχυδρομικός κώδικας "02747-4302" σχετίζεται μοναδικά με το "DARTMOUTH" και δεν εμφανίζεται στο γράφημα παραβιάσεων εξάρτησης. Επιβεβαιώστε εκτελώντας τον ακόλουθο κώδικα:

    providers[providers.ZIP == '02747-4302'].CITY.value_counts()
    

Σύνοψη προβλημάτων ποιότητας δεδομένων που εντοπίστηκαν με το SemPy

Το γράφημα παραβιάσεων εξαρτήσεων εμφανίζει διάφορα ζητήματα ποιότητας δεδομένων σε αυτό το σημασιολογικό μοντέλο:

  • Ορισμένα ονόματα πόλεων είναι κεφαλαία. Χρησιμοποιήστε μεθόδους συμβολοσειράς για να διορθώσετε αυτό το ζήτημα.
  • Ορισμένα ονόματα πόλεων έχουν προσδιοριζόμενα (ή προθέματα), όπως "Βορράς" και "Ανατολή". Για παράδειγμα, ο ταχυδρομικός κώδικας "2128" αντιστοιχεί στο "EAST BOSTON" μία φορά και στο "BOSTON" μία φορά. Ένα παρόμοιο ζήτημα παρουσιάζεται μεταξύ "NORTH DARTMOUTH" και "DARTMOUTH". Αφήστε αυτά τα προσδιοριστικά ή αντιστοιχίστε τους ταχυδρομικούς κώδικες στην πόλη με το πιο συνηθισμένο φαινόμενο.
  • Υπάρχουν τυπογραφικά λάθη σε ορισμένα ονόματα πόλεων, όπως "PITTSFIELD" εναντίον "PITTSFILED" και "NEWBURGPORT" εναντίον "NEWBURYPORT". Για το "NEWBURGPORT", διορθώστε αυτό το τυπογραφικό λάθος χρησιμοποιώντας την πιο συνηθισμένη εμφάνιση. Για το "PITTSFIELD", με μόνο μία εμφάνιση το καθένα, η αυτόματη αποσαφήνιση είναι πολύ πιο δύσκολη χωρίς εξωτερική γνώση ή γλωσσικό μοντέλο.
  • Μερικές φορές, προθέματα όπως "West" συντομεύονται στο μοναδικό γράμμα "W". Αντικαταστήστε το "W" με το "West" εάν όλες οι εμφανίσεις του "W" σημαίνουν "West".
  • Ο ταχυδρομικός κώδικας "02130" αντιστοιχεί στο "BOSTON" μία φορά και στο "Jamaica Plain" μία φορά. Αυτό το ζήτημα δεν είναι εύκολο να διορθωθεί. Με περισσότερα δεδομένα, αντιστοιχίστε το πιο συνηθισμένο φαινόμενο.

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

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

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

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

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

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

  1. Εκτελέστε τη drop_dependency_violations συνάρτηση στις στήλες and ZIPCITY .

    providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
    
  2. Αναφέρετε τυχόν παραβιάσεις εξάρτησης μεταξύ ZIP και CITY.

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

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

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