Comment associer Power BI à l’API SNCF ? Quels en sont les intérêts ?
Vous vous demandez peut-être ce qu’est Power BI ? Il s’agit d’un service d’analyse commerciale de Microsoft. Il vous permettra d’établir des rapports et des tableaux de bords grâce à des visuels interactifs simplifiés et de nombreuses fonctionnalités de business intelligence. Cet outil puissant vous permettra donc de visualiser l’évolution de vos KPI’s grâce à des données mises à jour en temps réelle.
Power Bi et l’API SNCF, une alliance avantageuse
L’API SNCF (application programming interface) permet d’obtenir toutes les données de transport (départ, destination, numéro, etc.) de n’importe quelle gare en France de façon presque immédiate (20 demandes par minute).
En sachant cela, pourquoi ne pas les combiner et les transformer en un unique et magnifique service, que l’on obtiendra grâce à seulement quelques lignes de code et quelques manipulations de base dans Power BI ? L’idée est de visualiser le numéro de train et sa destination. Cela vous paraît facile, non ? On s’y met !
Suivez le mode d’emploi !
Cet article est en partie inspiré d’un excellent tutoriel réalisé par la chaîne Youtube « BharatiDWConsultancy » (voir Power BI Streaming Real Time Dashboards in 10 minutes – DIY -40-of-50). Merci à vous, vous faites un travail exceptionnel !
Créer un tableau de bord en temps réel est donc relativement simple. Si vous suivez les étapes du tutoriel, vous comprendrez comment cela fonctionne. Vous définissez d’abord votre entrée json (champ « Values from stream ») et vous obtenez ainsi votre URL API Power BI. Vous définissez alors cette entrée json dans votre code Python et l’insérez dans Power BI. Enfin, dans le menu dashboard, vous devez créer des visuels pour vos KPI’s. Cependant, la liste de visuels reste très limitée.
D’abord, nous allons sur notre tableau de bord Power BI, nous ajoutons une nouvelle vignette et créons ensuite des données de streaming personnalisées.
Vous créez ensuite les champs que vous voulez mettre à jour en temps réel et sauvegardez l’exemple json quelque part sur votre machine locale (ceci sera nécessaire pour comparer votre sortie python à cet échantillon).
Vous venez à l’instant de créer la structure de données que Power BI stockera dans un cache temporaire, qui expire rapidement. Cela signifie qu’il n’y a pas de base de données sous-jacente, vous ne pourrez donc pas faire de rapport visuel utilisant les données qui affluent depuis le flux des données. Par conséquent, vous ne pourrez pas faire usage de certaines fonctionnalités de rapport telles que le filtrage, les visuels personnalisés et d’autres fonctions d’analyse.
Encore une fois, le tutoriel mentionné ci-dessus explique très bien comment créer simplement un tableau de bord en temps réel, en utilisant des données aléatoires générées par votre script Python. Dans notre cas, nous sommes intéressés par la création d’un service basé sur des données réelles, nous allons donc créer notre compte API SNCF et solliciter l’API depuis notre code Python. Important ! La liste des champs que nous avons créés lorsque nous avons suivi le tutoriel est « headsign », « counter », « departure » (int, int, string).
Selon les informations officielles :
L’utilisation de l’API nécessite une clé d’authentification (« token »). Pour obtenir votre clé d’authentification et utiliser l’API SNCF, vous devez préalablement vous inscrire au service grâce au formulaire d’inscription accessible à cette adresse. Cela signifie que nous devons créer un compte et l’équipe SNCF nous enverra la clé par mail. Voyons ce que ça donne !
Une fois que vous avez créé votre compte, vous devriez recevoir le message suivant :
Bonjour User,
Merci de vous être inscrit à l’API SNCF. Voici votre clé d’authentification :
<your-token>
Comment vous authentifier à l’API ?
1/ Accédez à l’API
2/ Username : copiez puis collez votre clé
3/ Password : laissez le champ vide ou copiez votre clé directement dans l’URL.
Nous ouvrons donc cette URL dans notre navigateur et collons notre token dans le champ nom d’utilisateur (nous ne mettons rien dans le champ mot de passe).
Essayons pour voir …
Parfait, nous avons maintenant accès à nos données en temps réel ! La seule chose qui nous reste à faire est d’analyser cette sortie json.
Voici le code complet :
import requests
import time
import json
import random
import pandas as pd
# Authentication token
api_auth = ‘your-token’
# counter
counter = 0
# Power BI Real Time API
REST_API_URL = ‘https://api.powerbi.com/beta/6494460e-8600-4edc-850f-528e8faad290/datasets/288527d3-eb81-4f17-9df1-dd7270163b86/rows?key=jOtLG%2FGwRo6xcu%2B%2FkyFVn4rU9Z0fbTlNq0CQp2%2FNGB5UtLiG54TJQRauUY26chuRRpOF9d1cJTXwDlmL2MA3Rw%3D%3D’
# next departures from Montparnasse
request_url = ‘https://api.sncf.com/v1/coverage/sncf/stop_areas/stop_area:OCE:SA:87391003/departures?’ \
‘datetime=20180912T103450’
# endless loop to call the api every 4 seconds
def data_generation(counter=None):
# call the SNCF Open API
# auth = (‘username’, ‘password’)
request_result = requests.get(request_url, auth=(api_auth, »))
# json output : context
context = request_result.json()[‘context’]
# context sub-node: current date time
cur_date = context[‘current_datetime’]
# json_output : departures
departures = request_result.json()[‘departures’]
departure = departures[0][‘display_informations’][‘direction’]
# headsign of the fisrt train
headsign = int(departures[0][‘display_informations’][‘headsign’])
return [headsign, counter, departure]
while True:
data_raw = []
# simple counter increment
counter += 1
for i in range(1):
row = data_generation(counter)
data_raw.append(row)
# set the header record
HEADER = [« headsign », « counter », « departure »]
# generate a temp data frame to convert it to json
data_df = pd.DataFrame(data_raw, columns=HEADER)
# prepare date for post request (to be sent to Power BI)
data_json = bytes(data_df.to_json(orient=’records’), encoding=’utf-8′)
# Post the data on the Power BI API
req = requests.post(REST_API_URL, data_json)
print(« Data posted in Power BI API »)
print(data_json)
# wait 4 seconds
time.sleep(4)
Nous pouvons maintenant visualiser nos données au sein de notre dashbord Power BI. Cependant, nous ne trouvons toujours pas le moyen de récupérer la destination. Heureusement, Benjamin Crochard, notre expert Power BI, a trouvé un moyen de contourner ce problème : il vous suffit d’utiliser un histogramme groupé avec la destination en tant que légende et le compteur comme valeur de barre. Même s’il ne s’agit pas de la solution « réelle », cela permet de contourner cet obstacle définitivement.
C’est désormais à vous d’adapter ces deux solutions à vos besoins et d’une certaine façon, rendre notre quotidien un peu meilleur.
A vous de jouer !
Traduit de l’anglais, consultez la version originale ainsi que les références utilisées dans cet article ici.
Ecrit par Alibek Jakupov.