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.
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.
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 avec les modules et données nécessaires.
Installez
SemPy
à partir de PyPI à l’aide de la fonctionnalité d’installation en ligne%pip
dans le notebook :%pip install semantic-link
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.
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()
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.Vérifiez le type de données de
customer
:type(customer)
La sortie confirme que
customer
est de typesempy.fabric._dataframe._fabric_dataframe.FabricDataFrame
.'Joignez les dataFrames
customer
etstate
: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.
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
Visualisez les dépendances identifiées à l’aide de la fonction
plot_dependency_metadata
semPy :plot_dependency_metadata(dependencies)
Comme prévu, le graphique des dépendances fonctionnelles indique que la colonne
Customer
détermine certaines colonnes commeCity
,Postal Code
etName
.Étonnamment, le graphique n’affiche pas de dépendance fonctionnelle entre
City
etPostal Code
, probablement parce qu’il existe de nombreuses violations dans les relations entre les colonnes. Vous pouvez utiliser la fonctionplot_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é
Dessinez un graphique avec la fonction de visualisation
plot_dependency_violations
de SemPy.customer_state_df.plot_dependency_violations('Postal Code', 'City')
Le tracé des violations de dépendances affiche les valeurs de
Postal Code
sur le côté gauche et les valeurs deCity
sur le côté droit. Un bord connecte unPostal Code
sur le côté gauche avec unCity
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.
Confirmez le nombre de valeurs vides pour
Postal Code
:customer_state_df['Postal Code'].isna().sum()
50 lignes ont NA pour le code postal.
Supprimez des lignes avec des valeurs vides. Ensuite, recherchez des dépendances à l’aide de la fonction
find_dependencies
. Notez le paramètre supplémentaireverbose=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
etCity
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 de0.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).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))
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.
Explorez d’autres problèmes de qualité des données détectés. Par exemple, une flèche en pointillés joint
City
etRegion
, 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')
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.
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.
Il est également suspicieux de voir les violations de la dépendance entre
Name
etCountry/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 :
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.
Contenu connexe
Consultez d’autres didacticiels pour le lien sémantique / SemPy :
- Didacticiel : Nettoyer les données avec des dépendances fonctionnelles
- Tutoriel : Extraire et calculer des mesures Power BI à partir d’un notebook Jupyter
- Tutoriel : Découvrir les relations dans un modèle sémantique, à l’aide d’un lien sémantique
- Tutoriel : Découvrir les relations dans l’ensemble de données Synthea à l’aide du lien sémantique
- tutoriel : Valider les données à l’aide de SemPy et de GX (Great Expectations)