Récupérer les données historique météo

Partager cet article
0

Pour une analyse que je voulais faire et après plusieurs recherches, je me suis rendu compte qu’il n’était pas si simple d’utiliser les données historiques de la météo. Bien sur je suis allé sur l’Open data de météo France, mais rien de vraiment exploitable ou alors semble-t-il sans une souscription payante. J’ai donc décidé de les récupérer par le biais d’un programme Python et de la technique de scraping.

Où récupérer ces données et comment ?

Qu’à cela ne tienne, au lieu de chercher des jeux de données tout prêt j’ai trouvé un site (historique-meteo.net) qui proposait un bon nombre de données météorologique et qui plus est disponibles dans plusieurs niveau de granularité:

  • Pays (France, Europe, etc.), Région, Département, Ville
  • Année, Mois, jour

Les données proposées dépendent de ces deux axes d’historique mais à minima on peut avoir simplement:

  • La température maximum (°C)
  • La température minimum (°C)
  • Vitesse du vent (km/h)
  • Humidité (%)
  • Couverture nuageuse (%)
  • Durée du jour (hr)

Qu’à cela ne tienne, je n’ai pas – encore – besoin de plus ! je vous propose de voir dans cet article un petit programme Python qui permet de récupérer ces données et de les écrire dans un fichier csv. Pour ce faire j’utiliserai la technique de scraping que j’ai expliqué en détail dans un article précédent.

Si le programme ne vous intéresse pas, je met à disposition dans GitHub ces données déjà récupérées (celà vous évitera de solliciter ce site inutilement):

Programme d’extration des données météo

J’ai réalisé ce programme en Python 3.7 en utilisant des librairies de base. Le programme s’articule autour de plusieurs fonctions que je vais vous décrire ici au cas où vous voudriez les améliorer, ce qui ne sera pas difficile car je ne suis pas un grand développeur 😉

Vous pouvez consulter le code Python ici.

Début du programme

Libraries nécessaires :

import pandas as pd
import numpy as np
import requests
import lxml.html as lh
from datetime import datetime, timedelta
import sys
import getopt

Ensuite une variable urlbase précise l’URL de base d’accès au site. Changez cette valeur si vous voulez par exemple changer de pays pour l’extraction des données météo d’un autre pays (par exemple afrique/cameroun/). Par défaut on extrait les données d’historique météo de France.

Un autre tableau labels, précise les données à extraire dans la page. En fait ce sont exactement les libellés qui sont présentés dans la page web. Le programme va parcourir la page et quand il trouvera ce libellé dans un tableau il prendra la donnée en face.

Viennent ensuite les régions listées dans une table regions. Dans ce programme on extrait les données par région, mais on pourrait tout à fait le modifier pour extraire les données par ville, département ou même pays. Coté régions une subtilité car le site présente les données historiques en prennant en compte l’ancien découpage régional Français. J’ai donc rajouté un autre tableau reg_target qui référence les nouvelles régions. Une fonction à la fin fera cette conversion ancienne région ver nouvelle région.

Fonctions utilitaires

Viennent ensuites quelques fonctions utilitaires:

  • getValue(): Permet de récupérer et surtout retirer les caractères inutiles d’une donnée météo
  • convTimeInMinute(): La donnée durée du jour est au format HH:MM:SS, cette fonction la convertit en minutes (on n’a jamais de données en secondes)
  • getValueFromXPath(): retourne la donnée brute à partir du chemin XPath dans la page
  • getXPath(): créé le chemin XPath en balayant un tableau

La fonction getOneMeteoFeature(): permet elle de récupérer une donnée météo dans une page donnée (on a une page par Région et par jour).

La fonction get1RegionMeteoByDay() elle récupère toute les données météo pour une journée et une région.

getAllRegionByDay() quant à elle récupère pour une journée donnée, toutes les informations météo de toutes les régions.

GetMeteoData() permet elle de récupérer toutes les données météo de toutes les régions entre deux dates données. Les dates doivent être spécifiées au format YYYY/MM/DD.

Pour terminer la fonction convertRegionData() convertit toutes les données récupérées (avec la granularité Jour / anciennes régions) avec le découpage des nouvelles régions. Pour cela on effectue une agrégation des anciennes régions qui ont été regroupées et une moyenne des données. Cette fonction n’est pas (plus) appelée lors de la première collecte de données, elle doit être lancée via la ligne de commande manuellement (option -a convert).

Main()

Le programme principal (main) accepte plusieurs arguments. 2 possibilités selon que l’on veut soit récupérer les données soit convertir les données (région) avec le nouveau découpage de région en France.

Pour lancer le programme en ligne de commande et récupérer les données météo brutes il vous faudra taper:

GetFRMeteoData.py -a collect -s <Start Date> -e <End Date> -f <Target Folder>
  • -a précise que l’on est en mode récupération de données seulement
  • -s indique la date de démarrage de l’extration (format YYYY/MM/DD)
  • -e indique la date de fin d’extraction (format YYYY/MM/DD)
  • -f indique le répertoire dans lequel sera stocké le résultat au format csv. Pour information le fichier aura pour nom MeteoFR_<Date Début>_<Date Fin>.csv (ex. MeteoFR_2019-06-01_2019-12-31.csv)

Pour lancer le programme en ligne de commande et convertir un jeu de données avec les anciennes régions (Cf. fichier généré précédemment):

GetFRMeteoData.py -a convert -i <input file> -o <output file> 
  • -a précise que l’on est en mode conversion de données région seulement
  • -i indique le fichier contenant les données météo avec l’ancien découpage de région en France (au format généré par la collecte de données / cf. commande précédente)
  • -o indique le fichier résultat (avec les nouvelles régions)

L’option -h permet d’afficher les possibilités de lancement:

  • -h indique comment utiliser la ligne de commande.

Une fois le programme lancé, vous devriez obtenir une fichier tel que celui-ci (ici ouvert avec Excel) :

Une fois de plus n’hésitez pas à télécharger directement les fichiers déjà extraits par mes soins sur GitHub :

Vous pouvez aussi forker le projet et l’améliorer 😉 …

Partager cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.