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 Power BI). En utilisant SemPy (préversion) dans l’expérience Synapse Data Science 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 triviaux afin d’obtenir des aperçus plus précis.

Dans ce tutoriel, vous allez apprendre à :

  • Appliquez des connaissances de 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 du lien sémantique (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.
    • Fonctions utiles pour extraire des modèles sémantiques d’un espace de travail Fabric dans votre bloc-notes.
    • Fonctions utiles qui automatisent l’évaluation des hypothèses sur les dépendances fonctionnelles et qui identifient les violations des relations dans vos modèles sémantiques.

Conditions préalables

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

  • Connectez-vous à Microsoft Fabric.

  • Utilisez le sélecteur d’expérience en bas à gauche de votre page d’accueil pour basculer vers Fabric.

    Capture d’écran du menu sélecteur d’expérience, montrant où sélectionner Data Science.

  • 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-samples.

  • Dans votre espace de travail, sélectionnez Importer>Rapport ou rapport paginé>À partir de cet ordinateur pour charger le fichier Customer Profitability Sample.pbix dans votre espace de travail.

Suivre le notebook

Le notebook powerbi_dependencies_tutorial.ipynb vient avec ce tutoriel.

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 en ligne %pip dans le notebook :

    %pip install semantic-link
    
  2. Effectuez les importations nécessaires de modules dont vous aurez besoin ultérieurement :

    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 standard Customer Profitability Sample.pbix. Pour obtenir une description du modèle sémantique, consultez l'exemple Rentabilité des clients pour Power BI.

  1. Chargez les données Power BI dans FabricDataFrames à l’aide de la fonction read_table 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 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 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 indique que la colonne Customer détermine certaines colonnes comme City, Postal Codeet 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 semPy pour visualiser les violations des dépendances entre des colonnes spécifiques.

Examiner les données pour détecter des 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 affiche les valeurs de Postal Code sur le côté gauche et les valeurs de City sur le côté droit. Un bord connecte un Postal Code sur le côté gauche avec un City 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 20004, l’une avec la ville « Tour Nord » et l’autre avec la ville « Washington ».

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

  2. Confirmez 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 des 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 d’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. Explorez d’autres problèmes de qualité des données détectés. Par exemple, une flèche en pointillés joint City et Region, ce qui indique que la dépendance n’est que 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 Downers Grove city se produisant dans l’Illinois et le Nebraska. Cependant, Downer’s Grove est une ville de l’Illinois, pas de 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 retourne Premont, pas Fremont.

  8. Il est également suspicieux de voir les violations de la dépendance entre Name et Country/Region, comme indiqué par la ligne pointillée dans le graphique original des violations de dépendances (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 peut simplement être un cas rare. Néanmoins, il vaut la peine de regarder de près :

  9. Examinez de plus près le client SDI Design:

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

    Une inspection supplémentaire montre qu’il s’agit en fait de deux clients différents (provenant de différents secteurs) portant le même nom.

L’analyse exploratoire des données est un processus passionnant, tout comme le nettoyage des données. Il y a toujours quelque chose que les données cachent, en fonction de la façon dont vous l’examinez, de ce que vous voulez demander, et ainsi de suite. Le lien sémantique vous fournit de nouveaux outils que vous pouvez utiliser pour obtenir plus de données.

Consultez d’autres didacticiels pour le lien sémantique / SemPy :