Niveau
Moyen
Env.
Local (Windows), Local (Linux), Google Colab, Kaggle
Code
Python
Libs
requests, lxml, pandas, getopt
Sources

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

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 :

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

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

ShellSession
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

7 Replies to “Récupérer les données historique météo”

  1. Bonjour, je vous remercie pour ce partage. Je recherchais également des données météorologiques et je suis tombée sur ce site. C’est une source incroyable d’information. Un grand merci, les tuto sont très clairs et très intéressants.
    Bien cordialement.

  2. Bonjour,

    Je cherche à recupérer les données météos en fichiers .csv mais je m’y connais très peu en python. Où dois-je entrer cette formule : GetFRMeteoData.py -a collect -s -e -f ?

  3. Bonjour , je me permets de vous écrire pour deux raisons , la premiére est pour vous remercie pour les superbes articles sur DATA CORNER vraiment m’a trop aider dans mes tache quotidienne .
    La deuxième raison et de poser une question bêtes , on faite j’ai appris python en pratiquant la data science sur jupyter notebook , et j’en ai pas une bonne connaissance sur les script python surtout les fonction –main– …, dans cet article sur le scrapping des données du météo j’ai réussi de lancer le script depuis le terminal en suivant vos instructions noté dans l’article , mais je voudrais plutôt le lancer depuis un autre script python ou un notebook mais , j’en ai pas aucune idées , car quand en lance sur le terminal en indique la date de début , data de fin ect. .. mais comment les intégrer depuis un script python ?
    si vous pouvez m’indiquer la ligne de commande s’il vous plaît .
    Merci d’avance .
    ROUIS Houssem.

  4. Merci infiniment pour code , ne prenez pas en compte l’ancienne commentaire , j’ai réussi de résolu le problème.

  5. Bonjour,

    Merci infiniment pour ce code car il est très difficile d’obtenir gratuitement et facilement des données météorologiques historiques en France, à ma grande surprise. Je ne maitrise pas du tout python, car je travaille sur R (via Rstudio). J’ai essayé de basculer vers python pour pouvoir modifier ce code, car il me faut absolument deux variables supplémentaires (la précipitation, moyenne et record), cependant c’est un échec cuisant et je n’ai malheureusement pas le temps nécessaire pour pouvoir comprendre python et surtout faire tourner le code python sur mon ordinateur. Serait-il possible d’ajouter dans votre code « Record de précipitations sur une journée » et « Précipitations moyennes par jour », en mettant à jour les données sur github ? Je vous serai infiniment reconnaissant pour cela.

    En vous remerciant énormément par avance,

    GDM28

Laisser un commentaire

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

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