Récupérer les données météo dans Azure Data Lake et Azure Data Factory

Météo Data Lake

Récupérer les données météo dans Azure Data Lake et Azure Data Factory

Un sujet qui revient régulièrement dans nos analyses est de pouvoir comparer l’activité par rapport à la météo voir d’anticiper une activité en fonction de la météo à venir :

  • Qu’est ce qui influence nos ventes ? La température ?
  • Qu’est ce qui influence le moral de nos clients ? La quantité de précipitation ?
  • Qu’est ce qui influence le délai de nos livraisons ? La pression atmosphérique ?
  • Qu’est ce qui influence nos prises de rendez-vous ? Le vent et sa vitesse ?

    …etc…

En attendant de répondre à toutes ses questions (merci les datascientists !) rien de nous empêche de travailler sur la récupération de ces données et de les intégrer dans nos systèmes.

Avec une volumétrie importante (informations horaires, emplacements géographique, données sur plusieurs années, multitude d’info météo…), et sans connaître à l’avance quelles données nous seront utiles, le stockage dans un Data Lake est pertinent :

  • Possibilité de stocker un grand volume de données (Big Data)
  • Stockage des données en formats brutes
  • Accès rapides pour nos futures analyses

Jeux de données

Ces données n’étant en général pas présentes au sein des entreprises, il nous appartient d’aller les récupérer ailleurs.

J’ai fait le choix pour ce tuto d’aller les récupérer sur Opendatasoft, qui lui-même les récupère depuis Metéo France

L’avantage est que Opendatasoft fourni une API qui permet de récupérer l’ensemble de ces données par jour, heure et station météo :

Récupération des données

Pour se connecter à l’API et intégrer dans notre Azure Data Lake, nous allons utiliser Azure Data Factory.

Je passe sur la création d’un tenant Azure, et le provisionnement de notre Data Lake ou de notre Data Factory : vous trouverez ça facilement.

Une fois les provisionnements effectués, la première chose à faire, c’est de donner les droits à Data Factory d’écrire dans notre Data Lake. Cela se passe sur l’explorer du Data Lake :

Ensuite, le gros du boulot se situe dans Azure Data Factory. On va créer 2 pipelines :

  • Un pipeline unitaire, qui permettra de récupérer un fichier depuis Opendatasoft, avec en paramètre la date souhaitée
  • Un pipeline « Master », qui va boucler sur plusieurs dates et appeler le premier pipeline

Pourquoi cette méthode ? Dans notre cas, j’ai remarqué que les données d’Opendatasoft n’étaient pas encore présentes sur les dernières journées. Du coup, le but est de récupérer tous les jours les fichiers des x derniers jours.

Pipeline unitaire

Dans ce pipeline, on va uniquement effectuer une activité de Copy Data

On va créer un dataset basé sur une connexion vers l’API :

Dans la relative URL du Dataset, on va mettre en dur pour le moment la date, puis sélectionner Binary Copy :

api/records/1.0/download/?dataset=donnees-synop-essentielles-omm&sort=date&facet=date&facet=nom&facet=temps_present&refine.date=2018-07-01

On retourne sur le pipeline, puis on va paramétrer la cible (notre Data Lake !). Pareil, on va créer un Dataset :

Une fois cela fait, on va pouvoir publier et exécuter notre pipeline :

Dans le Data Lake, on voit bien que le fichier a été récupéré :

Paramétrage de la date

Il faut maintenant paramétrer la date pour récupérer les données sur plusieurs dates.

On va commencer par ajouter un paramètre à notre Data Set connecté à l’API :

Puis on va construire la relative URL avec ce paramètre :

@concat(‘api/records/1.0/download/?dataset=donnees-synop-essentielles-omm&sort=date&facet=date&facet=nom&facet=temps_present&refine.date=’,dataset().Date)

On va faire le même exercice sur le Data Set basé sur la Data Lake. Le but est de pouvoir avoir une arborescence [Année / Mois / Jour] dans laquelle déposer les fichiers

@concat(‘/RawData/OpenDatasoft/ObservationMeteoFrance/’,replace(dataset().Date,’-‘,’/’))

On retourne enfin sur notre pipeline, puis on va paramétrer la date d’extraction :

Ensuite, sur l’activité Copy Data, on va passer le paramètre du pipeline à la source et à la cible :

Après publication, on va pouvoir exécuter notre pipeline sur plusieurs dates et observer dans notre Data Lake le résultat :

Pipeline Master

Le but de ce pipeline est d’exécuter le pipeline précédent pour les x derniers jours.

Dans les grandes lignes :

  • Paramétrage du nombre de jour à récupérer depuis la date du jour
  • Boucle sur chacune des journées
  • Récupération du fichier pour chacune des journées

Commençons par créer un nouveau pipeline et de paramétrer le nombre de jour à récupérer :

Ajoutons l’activité For Each, puis on va directement dans Settings – Items :

On va créer un tableau qui va de 1 au nombre de jour [1 2 3 …. NbJour] :

@range(1,pipeline().parameters.NbJour)

Ensuite, on va double-cliquer sur l’activité For Each pour définir ce qu’il va se passer sur chacune des itérations : appeler notre premier pipeline.

Dans les paramètres de l’activité Execute Pipeline, on va bien évidemment appeler notre premier pipeline et fournir la bonne date. Comme le pipeline attend une date et que nous avons une boucle sur des nombres, on va ajouter une petite formule pour calculer la date comme un décalage d’un nombre de jour par rapport à aujourd’hui :

@formatDateTime(adddays(utcnow(),int(mul(-1,item()))),’yyyy-MM-dd’)

Il ne reste plus qu’à publier et exécuter notre pipeline Master

Enfin, le résultat :

Il restera encore des choses à faire : planifier notre pipeline tous les jours et exploiter ces données. Mais là, c’est une autre histoire 🙂

Partager cette publication