Partager via


Tutoriel : Nettoyer les données avec des dépendances fonctionnelles

Utilisez des dépendances fonctionnelles pour nettoyer les données. Une dépendance fonctionnelle existe lorsqu’une colonne d’un modèle sémantique (jeu de données Power BI) dépend d’une autre colonne. Par exemple, une ZIP code colonne peut déterminer la valeur d’une city colonne. Une dépendance fonctionnelle apparaît sous la forme d’une relation un-à-plusieurs entre les valeurs dans deux ou plusieurs colonnes d’un DataFrame. Ce tutoriel utilise le jeu de données Synthea pour montrer comment les dépendances fonctionnelles aident à détecter les problèmes de qualité des données.

Dans ce tutoriel, vous allez apprendre à :

  • Appliquez des connaissances de domaine pour former des hypothèses sur les dépendances fonctionnelles dans un modèle sémantique.
  • Familiarisez-vous avec les composants de la bibliothèque Python de liaison sémantique (SemPy) qui automatisent l’analyse de la qualité des données. Ces composants sont les suivants :
    • FabricDataFrame— structure de type pandas avec des informations sémantiques supplémentaires.
    • Fonctions qui automatisent l’évaluation des hypothèses relatives aux dépendances fonctionnelles et identifient les violations dans vos modèles sémantiques.

Conditions préalables

  • Obtenir un abonnement Microsoft Fabric. Vous pouvez également vous inscrire à une version d’évaluation gratuite de Microsoft Fabric .

  • Connectez-vous à Microsoft Fabric.

  • Basculez vers Fabric à l’aide du sélecteur d’expérience situé en bas à gauche de votre page d’accueil.

    Capture d’écran montrant la sélection de Fabric dans le menu du sélecteur d’expérience.

  • Sélectionnez Espaces de travail dans le volet de navigation, puis sélectionnez votre espace de travail pour le définir comme espace de travail actif.

Suivre le notebook

Utilisez le notebook data_cleaning_functional_dependencies_tutorial.ipynb pour suivre ce tutoriel.

Configurer le notebook

Dans cette section, vous configurez un environnement de notebook.

  1. Vérifiez votre version de Spark. Si vous utilisez Spark 3.4 ou version ultérieure dans Microsoft Fabric, la liaison sémantique est incluse par défaut. Vous n’avez donc pas besoin de l’installer. Si vous utilisez Spark 3.3 ou une version antérieure, ou si vous souhaitez effectuer une mise à jour vers la dernière liaison sémantique, exécutez la commande suivante.

    %pip install -U semantic-link
    
  2. Importez les modules que vous utilisez dans ce notebook.

    import pandas as pd
    import sempy.fabric as fabric
    from sempy.fabric import FabricDataFrame
    from sempy.dependencies import plot_dependency_metadata
    
  3. Téléchargez les exemples de données. Dans ce tutoriel, utilisez le jeu de données Synthea de dossiers médicaux synthétiques (petite version pour simplicité).

    download_synthea(which='small')
    

Exploration des données

  1. Initialisez un FabricDataFrame avec le contenu du fichier providers.csv .

    providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))
    providers.head()
    
  2. Recherchez les problèmes de qualité des données avec la find_dependencies fonction de SemPy en tracéant un graphique des dépendances fonctionnelles détectées automatiquement.

    deps = providers.find_dependencies()
    plot_dependency_metadata(deps)
    

    Capture d’écran d’un graphique de dépendance fonctionnel montrant l’ID détermine NAME et ORGANIZATION.

    Le graphique montre que Id détermine NAME et ORGANIZATION. Ce résultat est attendu, car Id il est unique.

  3. Vérifiez qu’il s’agit d’une Id valeur unique.

    providers.Id.is_unique
    

    Le code retourne True pour confirmer que Id est unique.

Analyser les dépendances fonctionnelles en profondeur

Le graphique des dépendances fonctionnelles montre également que ORGANIZATION détermine ADDRESS et ZIP, comme prévu. Toutefois, vous pouvez vous attendre à ce que ZIP détermine également CITY, mais la flèche en pointillés indique que la dépendance n’est que approximative, pointant vers un problème de qualité des données.

Il existe d’autres particularités dans le graphique. Par exemple, NAME ne détermine pas GENDER, Id, SPECIALITYou ORGANIZATION. Chacune de ces particularités pourrait mériter une enquête.

  1. Examinez plus en détail la relation approximative entre ZIP et CITY en utilisant la fonction semPy list_dependency_violations pour répertorier les violations :
providers.list_dependency_violations('ZIP', 'CITY')
  1. Dessinez un graphique avec la fonction de visualisation plot_dependency_violations de SemPy. Ce graphique est utile si le nombre de violations est petit :
providers.plot_dependency_violations('ZIP', 'CITY')

Capture d’écran du tracé des violations de dépendances.

Le tracé des violations de dépendances affiche les valeurs pour ZIP le côté gauche et les valeurs pour CITY le côté droit. Un bord connecte un code postal sur le côté gauche du tracé avec une ville sur le côté droit s’il existe une ligne qui contient ces deux valeurs. Les arêtes sont annotées avec le nombre de lignes de ce type. Par exemple, il existe deux lignes avec le code postal 02747-1242, une ligne avec la ville « NORTH DARTHMOUTH » et l’autre avec la ville « DARTHMOUTH », comme illustré dans le tracé précédent et le code suivant :

  1. Confirmez les observations du tracé en exécutant le code suivant :
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
  1. Le tracé montre également que, parmi les lignes qui ont CITY comme « DARTHMOUTH », neuf lignes ont un ZIP 02747-1262. Une ligne a une ZIP valeur de 02747-1242. Une ligne a une ZIP valeur de 02747-2537. Confirmez ces observations avec le code suivant :

    providers[providers.CITY == 'DARTHMOUTH'].ZIP.value_counts()
    
  2. Il existe d’autres codes postaux associés à « DARTMOUTH », mais ces codes postal ne sont pas affichés dans le graphique des violations de dépendance, car ils n’indiquent pas les problèmes de qualité des données. Par exemple, le code postal « 02747-4302 » est associé de manière unique à « DARTMOUTH » et ne s’affiche pas dans le graphique des violations de dépendances. Confirmez en exécutant le code suivant :

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

Résumer les problèmes de qualité des données détectés avec SemPy

Le graphique des violations de dépendances présente plusieurs problèmes de qualité des données dans ce modèle sémantique :

  • Certains noms de villes sont en majuscules. Utilisez des méthodes de chaîne pour résoudre ce problème.
  • Certains noms de ville ont des qualificateurs (ou préfixes), tels que « Nord » et « Est ». Par exemple, le code postal « 2128 » est mappé à « EAST BOSTON » une fois et à « BOSTON » une fois. Un problème similaire se produit entre « NORTH DARTMOUTH » et « DARTMOUTH ». Supprimez ces qualificateurs ou mappez les codes POSTAL à la ville avec l’occurrence la plus courante.
  • Il y a des fautes de frappe dans certains noms de ville, comme « PITTSFIELD » vs. « PITTSFILED » et « NEWBURGPORT » vs. « NEWBURYPORT ». Pour « NEWBURGPORT », corrigez cette faute de frappe à l’aide de l’occurrence la plus courante. Pour « PITTSFIELD », avec une seule occurrence chacune, l’ambiguïté automatique est beaucoup plus difficile sans connaissance externe ou modèle de langage.
  • Parfois, les préfixes comme « Ouest » sont abrégés en lettre unique « W ». Remplacez « W » par « West » si toutes les occurrences de « W » sont associées à « West ».
  • Le code postal « 02130 » est mappé à « BOSTON » une fois et « Jamaïque Plain » une fois. Ce problème n’est pas facile à résoudre. Avec plus de données, mappez à l’occurrence la plus courante.

Nettoyer les données

  1. Corrigez la mise en majuscule en modifiant les valeurs en cas de titre.

    providers['CITY'] = providers.CITY.str.title()
    
  2. Réexécutez la détection des violations pour confirmer qu’il y a moins d’ambiguïtés.

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

Affinez les données manuellement ou supprimez des lignes qui violent les contraintes fonctionnelles entre les colonnes à l’aide de la fonction semPy drop_dependency_violations .

Pour chaque valeur de la variable déterminant, drop_dependency_violations choisit la valeur la plus courante de la variable dépendante et supprime toutes les lignes avec d’autres valeurs. Appliquez cette opération uniquement si vous êtes sûr que cette heuristique statistique conduit à corriger les résultats de vos données. Sinon, écrivez votre propre code pour gérer les violations détectées.

  1. Exécutez la drop_dependency_violations fonction sur les colonnes et ZIP les CITY colonnes.

    providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
    
  2. Répertorier les violations de dépendance entre ZIP et CITY.

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

Le code retourne une liste vide pour indiquer qu’il n’y a plus de violations de la contrainte ZIP -> CITYfonctionnelle.

Consultez d’autres tutoriels pour le lien sémantique ou SemPy :