Partager via


Tutoriel : Analyser les dépendances fonctionnelles dans un modèle sémantique

Dans ce tutoriel, vous vous appuyez sur des travaux antérieurs effectués par un analyste Power BI et stockés sous la forme de modèles sémantiques (jeux de données de Power BI). En utilisant SemPy (préversion) dans l’expérience Science des données de Synapse au sein de Microsoft Fabric, vous analysez les dépendances fonctionnelles qui existent dans les colonnes d’un DataFrame. Cette analyse permet de découvrir les problèmes de qualité des données non négligeables afin d’obtenir des informations plus précises.

Dans ce tutoriel, vous allez apprendre à :

  • Appliquer les connaissances du domaine pour formuler 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 Semantic Link (SemPy) qui prennent en charge l’intégration à Power BI et aident à automatiser l’analyse de la qualité des données. Ces composants sont les suivants :
    • FabricDataFrame : structure de type pandas améliorée avec des informations sémantiques supplémentaires.
    • Des fonctions utiles permettant de tirer des modèles sémantiques d’un espace de travail Fabric dans votre notebook.
    • Fonctions utiles qui automatisent l’évaluation des hypothèses sur les dépendances fonctionnelles et identifient les violations des relations dans vos modèles sémantiques.

Prérequis

  • Sélectionnez Espaces de travail dans le volet de navigation gauche pour rechercher et sélectionner votre espace de travail. Cet espace de travail devient votre espace de travail actuel.

  • Téléchargez le modèle sémantique Customer Profitability Sample.pbix à partir du référentiel GitHub fabric-sampleset chargez-le dans votre espace de travail.

Suivre le notebook

Le notebook powerbi_dependencies_tutorial.ipynb vient avec ce tutoriel.

Pour ouvrir le notebook accompagnant ce tutoriel, suivez les instructions fournies dans Préparer votre système pour le tutoriel sur la science des données afin d’importer les notebooks dans votre espace de travail.

Si vous préférez copier et coller le code de cette page, vous pouvez créer un nouveau notebook.

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 avec les modules et données nécessaires.

  1. Installez SemPy à partir de PyPI à l’aide de la fonctionnalité d’installation incluse %pip dans le notebook :

    %pip install semantic-link
    
  2. Effectuez les importations nécessaires des modules dont vous aurez besoin plus tard :

    import sempy.fabric as fabric
    from sempy.dependencies import plot_dependency_metadata
    

Charger et prétraiter les données

Ce tutoriel utilise un exemple de modèle sémantique Customer Profitability Sample.pbix. Pour obtenir une description du modèle sémantique, consultez Customer Profitability Sample pour Power BI.

  1. Chargez les données Power BI dans FabricDataFrames à l’aide de la fonction read_table de SemPy :

    dataset = "Customer Profitability Sample"
    customer = fabric.read_table(dataset, "Customer")
    customer.head()
    
  2. Chargez la table State dans un FabricDataFrame :

    state = fabric.read_table(dataset, "State")
    state.head()
    

    Bien que la sortie de ce code ressemble à un DataFrame pandas, vous avez en fait initialisé une structure de données appelée FabricDataFrame qui prend en charge certaines opérations utiles en plus de pandas.

  3. Vérifiez le type de données de customer :

    type(customer)
    

    La sortie confirme que customer est de type sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame.`

  4. Joignez les DataFrames customer et state :

    customer_state_df = customer.merge(state, left_on="State", right_on="StateCode",  how='left')
    customer_state_df.head()
    

Identifier les dépendances fonctionnelles

Une dépendance fonctionnelle se manifeste comme une relation un-à-plusieurs entre les valeurs de deux colonnes (ou plus) dans un DataFrame. Ces relations peuvent être utilisées pour détecter automatiquement les problèmes de qualité des données.

  1. Exécutez la fonction find_dependencies de SemPy sur le DataFrame fusionné pour identifier les dépendances fonctionnelles existantes entre les valeurs des colonnes :

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. Visualisez les dépendances identifiées à l’aide de la fonction plot_dependency_metadata de SemPy :

    plot_dependency_metadata(dependencies)
    

    Capture d’écran montrant le tracé des métadonnées de dépendance.

    Comme prévu, le graphique des dépendances fonctionnelles montre que la colonne Customer détermine certaines colonnes telles que City, Postal Code et Name.

    Étonnamment, le graphique n’affiche pas de dépendance fonctionnelle entre City et Postal Code, probablement parce qu’il existe de nombreuses violations dans les relations entre les colonnes. Vous pouvez utiliser la fonction plot_dependency_violations de SemPy pour visualiser les violations des dépendances entre des colonnes spécifiques.

Examiner les données pour détecter les problèmes de qualité

  1. Dessinez un graphique avec la fonction de visualisation plot_dependency_violations de SemPy.

    customer_state_df.plot_dependency_violations('Postal Code', 'City')
    

    Capture d’écran montrant le tracé des violations de dépendances.

    Le tracé des violations de dépendances montre les valeurs de Postal Code à gauche et les valeurs de City à droite. Un bord connecte un Postal Code sur le côté gauche à une City du côté droit, s’il existe une ligne qui contient ces deux valeurs. Les bords sont annotés avec le nombre de ces lignes. Par exemple, il existe deux lignes avec le code postal 20004, l’une avec la ville « North Tower » et l’autre avec la ville « Washington ».

    De plus, le tracé affiche quelques violations et de nombreuses valeurs vides.

  2. Vérifiez le nombre de valeurs vides pour Postal Code :

    customer_state_df['Postal Code'].isna().sum()
    

    50 lignes ont NA pour le code postal.

  3. Supprimez les lignes avec des valeurs vides. Ensuite, recherchez des dépendances à l’aide de la fonction find_dependencies. Notez le paramètre supplémentaire verbose=1 qui offre un aperçu des fonctionnements internes de SemPy :

    customer_state_df2=customer_state_df.dropna()
    customer_state_df2.find_dependencies(verbose=1)
    

    L’entropie conditionnelle pour Postal Code et City est 0,049. Cette valeur indique qu’il existe des violations de dépendance fonctionnelles. Avant de corriger les violations, augmentez le seuil de l’entropie conditionnelle de la valeur par défaut de 0.01 à 0.05, juste pour voir les dépendances. Les seuils inférieurs entraînent moins de dépendances (ou une sélectivité plus élevée).

  4. Augmentez le seuil de l’entropie conditionnelle de la valeur par défaut de 0.01 à 0.05 :

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    Tracé des métadonnées de dépendance avec un seuil supérieur pour l’entropie.

    Si vous appliquez des connaissances de domaine dont l’entité détermine les valeurs d’autres entités, ce graphique de dépendances semble précis.

  5. Examinez d'autres problèmes de qualité des données qui ont été détectés. Par exemple, une flèche en pointillés joint City et Region, ce qui indique que la dépendance n’est qu’approximative. Cette relation approximative peut impliquer qu’il existe une dépendance fonctionnelle partielle.

    customer_state_df.list_dependency_violations('City', 'Region')
    
  6. Examinez de plus près chacun des cas où une valeur Region non vide provoque une violation :

    customer_state_df[customer_state_df.City=='Downers Grove']
    

    Le résultat montre des occurrences de la ville de Downers Grove dans l’Illinois et le Nebraska. Cependant, Downers Grove est une ville de l’Illinois, pas du Nebraska.

  7. Regardez la ville de Fremont :

    customer_state_df[customer_state_df.City=='Fremont']
    

    Il y a une ville appelée Fremont en Californie. Toutefois, pour le Texas, le moteur de recherche renvoie Premont, pas Fremont.

  8. Il est également suspect de voir des violations de la dépendance entre Name et Country/Region, comme indiqué par la ligne en pointillés dans le graphique d’origine des violations de dépendance (avant de supprimer les lignes avec des valeurs vides).

    customer_state_df.list_dependency_violations('Name', 'Country/Region')
    

    Il semble qu’un client, SDI Design est présent dans deux régions : États-Unis et Canada. Cette occurrence peut ne pas être une violation sémantique, mais simplement un cas rare. Cela vaut néanmoins la peine de s’y intéresser de plus près :

  9. Examinez plus en détail le clientSDI Design :

    customer_state_df[customer_state_df.Name=='SDI Design']
    

    Un examen plus approfondi montre qu’il s’agit en fait de deux clients différents (dans des secteurs différents) portant le même nom.

L’analyse exploratoire des données est un processus intéressant, tout comme le nettoyage des données. Il y a toujours quelque chose que les données cachent, selon la façon dont vous les examinez, de ce que vous voulez demander, etc. Le lien sémantique vous offre de nouveaux outils que vous pouvez utiliser pour tirer le meilleur parti de vos données.

Découvrez d’autres tutoriels pour le lien sémantique / SemPy :