Comment utiliser Python dans PowerBI ?

18 février 2020 Modifié le 10 juillet 2020

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.

Comment utiliser Python dans PowerBI ?

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.

Analysis of road accidents in Geneva

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 » :

Import the dataset into PowerBI

Webinars Business & Decision : la saison 1 à revoir en replay 🎙

Développez dès maintenant vos connaissances #Data & #IA, en 45′ chrono avec nos experts 😎

Import the dataset into PowerBI

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 :

Import your data running a Python script directly
  • 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
Code for Python terminal

• 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
Make Python work in PowerBI
  • 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.
Python script options

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 :

Use Python visual

Par défaut, vous ne pouvez écrire aucun script avant d’avoir glisser-déposer une dimension :

Use Python visual

Glissez et déposez alors une mesure : ANNEE, en valeurs :

Use Python visual

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 ») :

Use Python visual

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 color
plt.show() # to be able to display the plot. If you don’t type this, an error msg will appear.

Use Python Visual

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 :

In case of issues in displaying the chart, DON’T PANIC!
  • 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 :

Format your dataset

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
Format your dataset

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.
Create a nice-looking chart with Seaborn

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

Analysis of the Days of the Week

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

Analysis of the number of accidents’ evolution by day time

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”.  

Chart with the ‘clustered bar chart’ proposed by PowerBI

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.

Last chart with the ‘clustered bar chart’ proposed by PowerBI
Last chart with the ‘clustered bar chart’ proposed by PowerBI

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.
Card KPI
  • 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.

Top 5 accident's cause

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. 😊

Top 5 accident's cause

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

Yann Lironi
Yann Lironi Consultant Data Management
Business & Decision

Centré sur l'expérience utilisateurs, j'aide les professionnels à être plus efficaces dans leur prise de décision en construisant des solutions visuelles claires et adaptées.

En savoir plus

Commentaires (3)

Maodo KANTEYE Le 01 avril 2020 à 12h37
bonjour,
merci pour ce tutu.
est ce qu'on peut avoir des tuto sur uml et sur la géo-visualisation
Yann Le 02 mars 2020 à 10h44
Bonjour 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
Patrick DF Le 20 février 2020 à 9h47
Bonjour Yann,
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

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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.