Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
- 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.
Pour ouvrir le bloc-notes associé pour ce didacticiel, suivez les instructions de Préparer votre système pour les didacticiels de science des données pour importer le bloc-notes dans votre espace de travail.
Si vous préférez copier et coller le code à partir de cette page, vous pouvez créer un bloc-notes.
Assurez-vous d'attacher un lakehouse au notebook avant de commencer à exécuter du code.
Configurer le notebook
Dans cette section, vous configurez un environnement de notebook.
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-linkImportez 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_metadataTé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
Initialisez un
FabricDataFrameavec le contenu du fichier providers.csv .providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv")) providers.head()Recherchez les problèmes de qualité des données avec la
find_dependenciesfonction de SemPy en tracéant un graphique des dépendances fonctionnelles détectées automatiquement.deps = providers.find_dependencies() plot_dependency_metadata(deps)Le graphique montre que
IddétermineNAMEetORGANIZATION. Ce résultat est attendu, carIdil est unique.Vérifiez qu’il s’agit d’une
Idvaleur unique.providers.Id.is_uniqueLe code retourne
Truepour confirmer queIdest 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.
- Examinez plus en détail la relation approximative entre
ZIPetCITYen utilisant la fonction semPylist_dependency_violationspour répertorier les violations :
providers.list_dependency_violations('ZIP', 'CITY')
- Dessinez un graphique avec la fonction de visualisation
plot_dependency_violationsde SemPy. Ce graphique est utile si le nombre de violations est petit :
providers.plot_dependency_violations('ZIP', 'CITY')
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 :
- Confirmez les observations du tracé en exécutant le code suivant :
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
Le tracé montre également que, parmi les lignes qui ont
CITYcomme « DARTHMOUTH », neuf lignes ont unZIP02747-1262. Une ligne a uneZIPvaleur de 02747-1242. Une ligne a uneZIPvaleur de 02747-2537. Confirmez ces observations avec le code suivant :providers[providers.CITY == 'DARTHMOUTH'].ZIP.value_counts()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
Corrigez la mise en majuscule en modifiant les valeurs en cas de titre.
providers['CITY'] = providers.CITY.str.title()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.
Exécutez la
drop_dependency_violationsfonction sur les colonnes etZIPlesCITYcolonnes.providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')Répertorier les violations de dépendance entre
ZIPetCITY.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.
Contenu connexe
Consultez d’autres tutoriels pour le lien sémantique ou SemPy :
- didacticiel : Analyser les dépendances fonctionnelles dans un exemple de modèle sémantique
- Tutoriel : Extraire et calculer des mesures Power BI à partir d’un notebook Jupyter
- Tutoriel : Découvrir des relations dans un modèle sémantique à l’aide d’un lien sémantique
- Tutoriel : Découvrir des relations dans le jeu de données Synthea à l’aide d’un lien sémantique
- tutoriel : Valider les données à l’aide de SemPy et de GX (Great Expectations)