L’intégration de Python dans Power BI est un grand pas en avant de la part de Microsoft. Cela ouvre un large éventail de possibilités en termes d’extraction et de nettoyage de vos données ainsi que de création de visuels attrayants et entièrement personnalisés. Je vais vous montrer ici comment cela fonctionne et comment configurer votre environnement Python dans Power BI. L’apprentissage par l’exemple étant toujours plus parlant, je vous propose d’illustrer cet article par un cas d’usage utilisant les données des accidents de la route à Genève. Voyons donc les différentes étapes de la construction de votre rapport.
Temps nécessaire pour créer votre rapport : 1 heure
Objectif : Comprendre l’intégration de Python dans PowerBI
Cas d’usage utilisé pour illustrer notre propos : Analyse des accidents de la route à Genève.
Source : « Système d’information du territoire à Genève (SITG), extrait du 03/01/2020. »
1. Télécharger l’ensemble des données
L’ensemble des données sur le nombre d’accidents de la route à Genève, qui nous a permis de construire le rapport, est disponible sur le site opendata.swiss.
2. Importer l’ensemble de données dans PowerBI
Allez dans File -> GetData -> Excel et connectez-y l’ensemble des données. Sélectionnez l’onglet « Accidents_Geneve – 2010-2018 » and cliquez sur « Load » :
Vous pouvez également importer vos données en exécutant directement un script Python.
Dans PowerBi, sélectionnez Get Data > More…, puis recherchez le script Python et cliquez sur Connect :
- Copiez/collez ce script dans la boîte de script Python, en adaptant le chemin d’accès à l’emplacement de votre fichier local :
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
dataset = pd.read_csv(« C:\\Users\\Username\\Desktop\\Accidents_Geneve – 2010-2018 – OTC_ACCIDENTS – OpendataSwiss.csv », sep= « ; », encoding = « iso8859_2 »)
Vous devrez peut-être aussi adapter vos séparateur et encodage csv à votre configuration locale.
Sélectionnez la table “dataset” and cliquez sur Load.
3. Installer les packages Python
Assurez-vous que vous avez installé Python (peut être réalisé via anaconda).
Installez les packages Pandas + matplotlib (ils sont nécessaires pour que Python visual fonctionne) + numpy + seaborn (ils sont sympas pour avoir de beaux rapports 😉).
- Ouvrez votre terminal Python et exécutez le code suivant :
pip install pandas
pip install matplotlib
pip install numpy
pip install seaborn
• Pandas est utilisé pour l’interaction avec les données sous forme de tableaux,
Matplotlib comme bibliothèque de traçage standard,
Numpy pour s’occuper des matrices et des réseaux,
and Seaborn pour avoir de beaux graphiques.
• Dans le cas où vous n’auriez pas de pip installé, vous pouvez voir ici comment l’installer.
4. Faire fonctionner Python dans PowerBI !
Vérifiez que Python est lié à la bonne version et au bon éditeur :
- Cliquez sur File -> Options and settings -> Options
- Sous le script Python, vérifiez que le chemin d’accès à votre répertoire personnel Python est correct et correspond à la bonne version du langage. Pour le vérifier, il suffit d’exécuter le code ‘Python’ dans votre terminal. Vous pourrez alors voir quelle version Python est en cours d’exécution.
Faites de même avec votre chemin IDE Python (il sera plus pratique de taper votre code par la suite).
5. Utiliser Python Visual
Cliquez sur l’icône Py Visual. Puis, activez Python dans PBI :
Par défaut, vous ne pouvez écrire aucun script avant d’avoir glisser-déposer une dimension :
Glissez et déposez alors une mesure : ANNEE, en valeurs :
PowerBI utilise automatiquement Pandas pour gérer l’ensemble des données et supprime les doublons.
- Champ ajouté par défaut par PowerBI :
# dataset = pandas.DataFrame(ANNEE)
# dataset = dataset.drop_duplicates()
- Vous ne pouvez utiliser que les dimensions que vous avez ajoutées à la section « valeurs ». Veillez à ce qu’elles soient ajoutées chaque fois que vous souhaitez en utiliser une. Assurez-vous qu’elles sont également ajoutées dans le champ rempli par défaut par PowerBI :
#dataset=pandas.DataFrame(Dimension1, Dimension2)
- Si vous avez besoin de toutes les lignes de votre ensemble de données, supprimez la ligne qui est ajouté par défaut
#dataset=dataset.drop_duplicates()
Vous pouvez supprimer la ligne ci-dessus qui est ajoutée par défaut, ou bien ajouter un champ d’index à votre ensemble de données. Toutes les lignes seront alors considérées comme uniques et aucune ne sera regroupée.
Assurez-vous que vos valeurs sont bien au format « Ne pas résumer » (« Don’t summarize ») :
Faites glisser votre mesure NB_BLESSES_LEGERS dans les valeurs. Sélectionnez « Count » au lieu de « Don’t summarize » pour cette dimension. Entrez le code python ci-dessous à la fin de votre éditeur de script Python :
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
x = dataset.ANNEE
y = dataset.NB_BLESSES_LEGERS
plt.bar(x, y, color="purple")
# call a bar chart with x and y axis and set the colorplt.show()
# to be able to display the plot. If you don’t type this, an error msg will appear.
Pour plus d’informations sur la fonction plt.bar() : https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.bar.html
En cas de problèmes d’affichage du tableau, pas de panique ! C’est arrivé à bien d’autres avant vous, nous allons y remédier… la liste de vérifications ci-dessous pourra vous y vous aider :
- Vérifiez que Power BI et Python sont reliés correctement :
Allez dans File -> Options and settings -> Option. Cliquez sur les scripts Python et changez vos répertoires personnels Python détectés en “Others”, puis parcourez la bonne application Python.
Remarque : si votre application Python se trouve dans votre dossier « AppData » et que vous ne le voyez pas, allez dans la fenêtre -> Show hidden files and folders et cochez la case “Show hidden files, folders and drives”.
Avec Anaconda, mon chemin ressemble à ceci :
C:\Users\Username\AppData\Local\Continuum\anaconda3\envs\PowerBI 35
- Vérifiez que vos packages sont correctement installés avec pip et mettez-les à jour.
- Changez vos paramètres régionaux de Power BI, ici en anglais (États-Unis). File -> Options and settings -> Option. Cliquez sur les paramètres régionaux et passez en anglais (États-Unis). PowerBI peut avoir quelques problèmes pour lire votre fichier de source de données en raison de la façon dont il interprète le format de vos données.
- J’ai noté quelques problèmes avec Python 3.6 et 3.7. Essayez d’installer Python 3.5 ! Et assurez-vous ensuite que votre PowerBI pointe sur la version Python3.5.
Note : le visuel Python nécessite que vous affichiez un visuel i.e. plt.show() ou tout équivalent.
6. Formater votre ensemble de données
Pour faciliter le travail avec vos données, allez dans l’onglet « données » et cachez les dimensions dont vous n’aurez pas besoin. Dans le cas présent, gardez simplement les dimensions :
HEURE, CAUSE, JOUR, ANNEE, ID_ACCIDENT, NB_TUES, NB_BLESSES_GRAVE.
Toutes vos dimensions resteront ainsi dans votre base de données, mais vous ne verrez pas celles qui sont cachées :
Changez le type de données de vos mesures en « Nombre entier » (“Whole Number”) si le type de données auto-détecté l’a détecté différemment :
- Allez dans Data tab-> Modeling-> Data Type
Faites la même chose pour la dimension HEURE et affichez-la sous la forme Date/Time.
7. Créer un graphique agréable à regarder avec Seaborn
Interaction :
Vous avez probablement remarqué que les graphiques créés avec des visuels Python ne sont pas interactifs et ne peuvent pas être formatés grâce aux fonctions du format PowerBI. Vous devrez les coder dans votre script Python. Néanmoins, si vous cliquez sur d’autres visuels, votre visuel Python sera correctement filtré.
Créer les graphiques :
Il est temps maintenant de créer la carte pour analyser le nombre d’accidents dans le canton de Genève de 2010 à 2018. Faites ainsi glisser la dimension ID_ACCIDENT sur « Values » et sélectionnez « Count ». Ensuite, tapez ce code dans votre éditeur de script Python PowerBI :
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
x = dataset.ANNEE
y = dataset.ID_ACCIDENT
plt.rcParams.update({'font.size': 18}) # change font size by default
sns.barplot(x = x, y = y, data = dataset, color='gray', ci=None)
# Call the barplot() chart from seaborn. Give the X and y axis, datasource and color of the bars
plt.title('Evolution by Years') # Give a title to your chart
plt.xlabel('') # Name your y axis
plt.ylabel('Nb of accidents ') # Name your y axisplt.tight_layout() # remove spaces outside graphsns.despine(left=True) # remove grid axis
plt.show() # to be able to display the plot. If you don't type this, an error msg will appear.
La procédure est la même pour l’analyse des jours de la semaine. Copiez/collez ce code :
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
w = dataset.JOUR
y = dataset.ID_ACCIDENT
plt.figure(figsize=(30,15)) # change font size by default
plt.rcParams.update({'font.size': 55}) # change font size by default
sns.barplot(x = w, y = y, data = dataset, color='gray', ci=None, order = ['Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi', 'Dimanche']) # Call the barplot() chart from seaborn. Give the X and y axis, datasource, color of the bars and order the week days.
plt.title('Evolution by Day of Week') # Give a title to your chart
plt.xlabel('') # Name your y axis
plt.ylabel('Nb of accidents') # Name your y axis
plt.tight_layout() # remove spaces outside graph
sns.despine(left=True) # remove grid axis
plt.show() # to be able to display the plot
Vous devez commencer à comprendre maintenant… Même procédure également pour l’analyse de l’évolution du nombre d’accidents par jour. Notez l’importation du package date-heure :
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from datetime import datetime
import pandas as pd
y = dataset.HEURE
u = dataset.ID_ACCIDENT
dataset['HEURE']=pd.to_datetime(dataset['HEURE'],format='%Y/%m/%d %H:%M:%S') # format your date datatype
y = dataset.HEURE.dt.hour # extract the hour of the day
sns.set_style("white")
plt.rcParams.update({'font.size': 14}) # change font size by default
plt.title('Evolution by Day time') # Give a title to your chart
ax = sns.lineplot(y,u,lw=3, ci=None, data=dataset, color='grey') # Call the lineplot() chart from seaborn. Give the X and y axis, datasource,thickness and color of your line.
plt.xticks(np.arange(0,24.5,2)) # Show all your xlabels
plt.xlabel("Time of the day [hh:mm]")# Add xAxis label Title
plt.ylabel("Nb of accidents") # Add yAxis label Title
sns.despine(left=True) # Remove grid axis
plt.tight_layout() # Remove spaces outside graph
plt.show() # to be able to display the plot
Créons maintenant le dernier graphique avec le « clustered bar chart » (diagramme à barres groupées) proposé par PowerBI.
Tout d’abord, créez une nouvelle mesure CountAccidents. Cliquez sur Modeling->NewMeasure. Puis, créez la mesure CountAccidents=COUNTROWS(‘YourDatasetName’). Ensuite, sélectionnez ‘clustered bar chart’ et faites glisser GROUPE_ACCIDENT vers “Axis”, et CountAccidents vers “Value”.
Dans la zone de filtrage, sous le type de filtre, sélectionnez les 5 éléments les plus importants ; par la valeur count of ID_ACCIDENT. Il n’affichera que les causes du top 5, triées par nombre d’accidents.
Cliquez sur le format sélection du visuel pour changer la couleur des données. Sous “Data colors”, sélectionnez conditional formatting et format by Rules. Entrez les paramètres suivants ou celui que vous préférez, et cliquez sur OK.
Il est temps maintenant d’affiner le tableau. Sous la section format de votre visuel, modifiez le titre, retirez la grille, enlevez l’axe des X, affichez l’étiquette des données et ajustez la taille du texte.
Créer la carte KPI:
- Ajoutez le visuel « Carte ». Faites glisser la dimension NB_BLESSES_GRAVES sous Champs et sélectionnez le type de données SUM.
- Sous l’onglet Format du visuel, ajoutez un fond gris, une bordure noire avec un rayon et un titre. Supprimez le label Catégorie
Copiez-collez le KPI, en modifiant le champ NB_BLESSES_GRAVES par NB_TUES et CountAccidents, en adaptant le titre du KPI en conséquence.
Ajoutez un titre et les filtres à votre rapport :
- Ajoutez une zone de texte et indiquez le titre « Analyse des accidents à Genève (2010-2018) ».
- Ajoutez le composant ‘segment’, sélectionnez la dimension CONSEQUENCES comme Champ. Faites de même avec la dimension ANNEE et affichez-la comme vous préférez la voir.
Félicitations ! Vous venez de terminer la création de votre joli rapport PowerBI en Python. 😊
Maintenant que vous savez comment utiliser Python dans Power BI, les possibilités de personnaliser vos visuels sont infinies pour construire des tableaux de bord fabuleux ! Nous sommes impatients de voir les graphiques interactifs Python développés par Microsoft pour gagner en flexibilité pour les utilisateurs finaux. Vous pouvez en savoir plus sur la façon de concevoir des rapports efficaces et orientés vers la prise de decision ici.
Pour aller plus loin
- Document Microsoft vous expliquant comment créer des visuels PowerBI dans Python
- Télécharger le fichier .pbix
- Télécharger l’ensemble des données utilisé pour cet article
Source : Système d’information du territoire à Genève (SITG), imprimé et/ou extrait en date du 03.01.2020 » - Document pour les graphiques Seaborn et Mathplotlib.
👉 Retrouvez toute notre actu en temps réel en nous suivant sur LinkedIn 👈
Commentaires (4)
Votre adresse de messagerie est uniquement utilisée par Business & Decision, responsable de traitement, aux fins de traitement de votre demande et d’envoi de toute communication de Business & Decision en relation avec votre demande uniquement. En savoir plus sur la gestion de vos données et vos droits.
Je ne suis pas sûr d'avoir compris pourquoi vous utilisiez Python. Autrement dit, qu'est-ce qu'il n'est pas possible de faire avec PowerBI seul dans votre cas d'usage ?
Merci d'avance pour votre réponse.
Patrick
Merci pour votre message.
Vous avez raison. Le but principal ici est plus d'expliquer comment mettre en place l'environnement Python dans son outil PowerBI afin de pouvoir par la suite utiliser toute l'étendu des possibilités qu'offre Python. Le cas d'usage sert ainsi comme support afin d'illustrer les propos.
Cordialement
merci pour ce tutu.
est ce qu'on peut avoir des tuto sur uml et sur la géo-visualisation