Projet tutoré : Data Science
Trans 2201: “Mali Weather Report”
Réalisé par : Mahamadoun Haram Toure
Faculté des Sciences et Techniques de bamako
Master 1 - Data Science
2023
1
2
Table des matières
3
1. Présentation du projet
1.1 Data sciences
La data science, ou science des données, est un domaine interdisciplinaire
qui utilise des méthodes, des processus, des algorithmes et des systèmes
scientifiques pour extraire des connaissances et des idées à partir de
données structurées et non structurées. Ce champ combine des éléments de
statistiques, d'informatique, de mathématiques et de domaines spécifiques
d'application pour analyser et interpréter des phénomènes complexes.
La data science est utilisée dans de nombreux domaines tels que la finance,
la santé, la recherche, le marketing, la gestion des ressources humaines, etc.
Son importance croissante est le reflet de l'énorme quantité de données
disponibles aujourd'hui et du besoin de convertir ces données en informations
utiles pour la prise de décision.
1.2 Météorologie
La météo, ou météorologie, est l'étude scientifique des conditions
atmosphériques à un endroit donné et sur une période de temps spécifique.
Elle englobe un large éventail de phénomènes, tels que la température, la
pression atmosphérique, l'humidité, la vitesse du vent, les précipitations et
d'autres variables liées à l'atmosphère. Les enjeux liés à la météo sont
nombreux et variés, touchant à la fois la vie quotidienne des individus et des
communautés ainsi que des secteurs tels que l'agriculture, la navigation, les
transports, la gestion des ressources naturelles et la prévention des
catastrophes naturelles.
Au Mali, la météo revêt une importance particulière en raison de son impact
direct sur plusieurs aspects de la vie quotidienne et des secteurs
économiques clés. Voici quelques-uns des enjeux météorologiques
spécifiques au Mali :
● Agriculture : L'agriculture est une composante essentielle de
l'économie malienne, et les conditions météorologiques jouent un rôle
crucial dans la réussite des récoltes. Les agriculteurs dépendent des
4
prévisions météorologiques pour planifier les périodes de semence et
de récolte, ainsi que pour gérer l'irrigation et les ressources en eau.
● Sécheresse : Le Mali est confronté à des défis liés à la sécheresse, en
particulier dans les régions du nord. Les variations climatiques, les
changements de régime des pluies et les phénomènes météorologiques
extrêmes peuvent avoir des conséquences graves sur la disponibilité de
l'eau et la sécurité alimentaire.
● Élevage : L'élevage, une activité importante dans certaines régions du
Mali, est également influencé par les conditions météorologiques. Les
éleveurs dépendent des pâturages pour leurs troupeaux, et la
disponibilité de l'eau est cruciale.
● Gestion des ressources naturelles : La météo influence la
disponibilité des ressources naturelles, y compris l'eau et les sols. La
gestion durable de ces ressources est cruciale pour assurer la
résilience des communautés locales face aux changements
climatiques.
● Catastrophes naturelles : Les phénomènes météorologiques
extrêmes tels que les inondations peuvent avoir des conséquences
graves sur les populations et les infrastructures au Mali. La prévision
météorologique et la gestion des catastrophes sont des éléments clés
de la sécurité des communautés.
● Énergie et infrastructures : Les conditions météorologiques influent
sur la production et la distribution d'énergie, notamment dans le
contexte de l'approvisionnement en électricité. Les variations
climatiques peuvent également affecter les infrastructures, nécessitant
une planification adaptative.
● Santé : Les conditions météorologiques peuvent influencer la
propagation de maladies liées à l'eau et aux vecteurs, comme le
paludisme. La surveillance météorologique contribue à la prévention de
ces risques sanitaires.
5
Au Mali les conditions climatiques peuvent être variables et parfois extrêmes,
la météo est étroitement liée à la subsistance des populations et à la stabilité
économique. Les efforts pour renforcer les capacités de prévision
météorologique, la gestion des ressources naturelles et la résilience face aux
changements climatiques sont donc essentiels pour promouvoir le
développement durable dans le pays.
1.3 Mali Weather report
Mali Weather Report vise à fournir une plateforme centralisée et conviviale pour
permettre aux utilisateurs de tirer parti des informations météorologiques pour
améliorer leur prise de décision et renforcer la résilience face aux conditions
météorologiques changeantes.
"Mali Weather Report" se distingue par ses fonctionnalités avancées, fournissant
une expérience utilisateur complète et des informations météorologiques précises
pour répondre aux besoins spécifiques du Mali.
Interface Utilisateur :
● Tableau de Bord Principal : À l'ouverture du tableau de bord, les
utilisateurs sont accueillis par une vue d'ensemble présentant les
conditions météorologiques actuelles du pays, y compris la température
actuelle, le taux d'humidité, les précipitations récentes et les prévisions
immédiates.
○
● Graphiques Temporels : Des graphiques temporels interactifs
permettent aux utilisateurs de suivre l'évolution des conditions
météorologiques au fil du temps. Les données historiques peuvent être
superposées pour identifier les tendances saisonnières et annuelles.
○
● Cartes Géographiques : Des cartes géographiques détaillées du
Mali offrent une visualisation régionale des conditions météorologiques.
Les utilisateurs peuvent zoomer sur des zones spécifiques pour obtenir
des informations détaillées.
○
● Widgets Modulables : La disposition modulable du tableau de bord
permet aux utilisateurs de personnaliser leur expérience en choisissant
les widgets spécifiques qu'ils souhaitent afficher, tels que la
température, les précipitations, le vent, etc.
6
Données Météorologiques :
● Température : Les données de température sont présentées sous
forme de graphiques en ligne, permettant aux utilisateurs de comparer
les températures maximales et minimales quotidiennes.
● Humidité : Des graphiques interactifs illustrent les variations du taux
d'humidité, crucial pour les activités agricoles et la prévention des
maladies liées à l'humidité.
● Précipitations : Un système de cartographie précis affiche les
données de précipitations sous forme de carte de chaleur, aidant les
utilisateurs à comprendre la répartition géographique des précipitations.
● Vitesse et Direction du Vent : Des graphiques vectoriels
dynamiques représentent la vitesse et la direction du vent, fournissant
des informations essentielles pour les activités liées à la navigation et à
l'énergie éolienne.
Fonctionnalités Avancées :
● Prévisions à Long Terme : En plus des prévisions quotidiennes, le
tableau de bord propose des prévisions à plus long terme, offrant aux
utilisateurs une vision étendue des conditions météorologiques à venir.
● Comparaison Régionale : Les utilisateurs peuvent comparer les
conditions météorologiques entre différentes régions du Mali, facilitant
la prise de décision pour les déplacements ou les activités
commerciales.
● Alertes Personnalisées : Les utilisateurs peuvent définir des alertes
personnalisées en fonction de leurs critères spécifiques, recevant des
notifications en cas de conditions météorologiques critiques.
● Intégration Sociale : Les utilisateurs peuvent partager des données
météorologiques avec leurs réseaux sociaux, favorisant ainsi la
diffusion rapide d'informations cruciales en cas de phénomènes
météorologiques extrêmes.
Accessibilité :
● Adaptabilité Mobile : Le tableau de bord est entièrement réactif,
assurant une expérience utilisateur fluide sur les appareils mobiles,
tablettes et ordinateurs de bureau.
● Langues Locales : Pour garantir une accessibilité maximale, le
tableau de bord propose des versions dans les langues locales,
7
permettant à un large public d'accéder aux informations
météorologiques.
Utilisateurs cibles :
● Agriculteurs : Pour la planification des cultures, l'irrigation et la
gestion des ressources agricoles.
● Gestion des catastrophes : Pour une réponse rapide et efficace aux
conditions météorologiques extrêmes.
● Transport et logistique : Pour la gestion des itinéraires, en particulier
dans des conditions météorologiques difficiles.
● Énergie : Pour la planification de la production d'énergie, en particulier
pour les énergies renouvelables sensibles aux conditions
météorologiques.
● Santé publique : Pour surveiller les conditions propices à la
propagation de maladies liées au climat.
Le "Mali Weather Report" se positionne comme un outil incontournable pour
les décideurs, les agriculteurs, les organisations humanitaires, les
gouvernements locaux et toute personne cherchant à comprendre, anticiper et
gérer les conditions météorologiques au Mali. Avec son interface conviviale,
ses fonctionnalités avancées et son accessibilité accrue, ce tableau de bord
vise à renforcer la résilience des communautés face aux défis
météorologiques changeants.
8
2. Travail réalisé
2.1 Les données
Il existe plusieurs sources de données météorologiques, allant des agences
gouvernementales aux projets open source et aux services météorologiques
commerciaux. Voici quelques-unes des principales sources de données
météorologiques :
Agences Gouvernementales :
● National Oceanic and Atmospheric Administration (NOAA) :
L'administration nationale océanique et atmosphérique des
États-Unis fournit des données météorologiques mondiales, y
compris des informations sur la température, les précipitations, la
vitesse du vent, etc.
● European Centre for Medium-Range Weather Forecasts
(ECMWF) : Cet organisme européen fournit des données
météorologiques de haute qualité pour l'Europe et d'autres
régions du monde.
Projets Open Source :
● OpenWeatherMap : OpenWeatherMap offre des données
météorologiques en temps réel et des prévisions pour les
développeurs. Ils proposent également une API gratuite limitée et
des abonnements premium.
● Weatherbit : Weatherbit fournit des données météorologiques
mondiales via une API, y compris des informations sur la
température, les précipitations, le vent, etc.
Services Météorologiques Commerciaux :
● The Weather Company (IBM) : Propriété d'IBM, The Weather
Company offre des données météorologiques, des prévisions et
des services d'analyse météorologique.
9
● AccuWeather : AccuWeather est un service météorologique
commercial qui fournit des prévisions détaillées, des cartes et des
alertes météorologiques.
Satellites :
● GOES (Geostationary Operational Environmental Satellites) : Les
satellites GOES de la NOAA fournissent des images en temps
réel de la Terre, aidant à suivre les conditions météorologiques,
les ouragans et d'autres phénomènes.
Réseaux de Stations Météorologiques :
● Réseaux Nationaux : De nombreux pays ont leurs propres
réseaux de stations météorologiques qui collectent des données
locales, par exemple, Météo-Mali au Mali ou le UK Met Office au
Royaume-Uni.
Capteurs et Stations Météorologiques Personnelles :
● Weather Underground (Wunderground) : Weather Underground
agrège des données provenant de stations météorologiques
personnelles dans le monde entier, fournissant des informations
locales et hyperlocales.
Projet de Données Ouvertes :
● Global Historical Climatology Network (GHCN) : GHCN fournit
des données climatiques historiques provenant de stations
météorologiques du monde entier. C'est un projet ouvert et
accessible au public.
10
2.2 Open-Meteo
Open-Meteo est une API météorologique open-source qui offre un accès
gratuit pour une utilisation non commerciale.
Une API, ou Interface de Programmation d'Application (en anglais, Application
Programming Interface), est un ensemble de règles et de protocoles qui
permettent à deux logiciels de communiquer entre eux. Les API sont utilisées
pour permettre l'intégration de différentes applications, services ou systèmes
informatiques.
Voici quelques détails clés sur les API :
1. Communication entre logiciels : Les API permettent à deux
logiciels différents de communiquer entre eux de manière standardisée.
Elles définissent les méthodes et les formats de données acceptés,
facilitant ainsi l'échange d'informations.
2. Types d'API :
○ API Web (HTTP/RESTful) : Utilise le protocole HTTP pour la
communication via le réseau. Souvent basées sur le style
architectural REST (Representational State Transfer).
○ API basées sur RPC (Remote Procedure Call) : Permettent
d'appeler des fonctions ou des procédures à distance.
○ API de bibliothèque : Fournissent des fonctions ou des classes
dans un langage de programmation spécifique pour être utilisées
dans le code source d'une application.
3. Endpoints : Dans le contexte des API Web, les endpoints sont les
URL spécifiques auxquelles les requêtes peuvent être envoyées pour
effectuer certaines actions. Par exemple, une API de météo pourrait
avoir un endpoint pour obtenir les prévisions pour une ville donnée.
4. Méthodes HTTP : Les API Web utilisent généralement différentes
méthodes HTTP pour définir l'action souhaitée lors de l'interaction. Les
méthodes courantes incluent GET (pour récupérer des données), POST
(pour envoyer des données), PUT (pour mettre à jour des données), et
DELETE (pour supprimer des données).
5. Formats de données : Les API spécifient souvent les formats de
données pour les requêtes et les réponses. Les formats courants
incluent JSON (JavaScript Object Notation) et XML (eXtensible Markup
Language).
11
6. Authentification et autorisation : Les API peuvent utiliser des
mécanismes d'authentification pour vérifier l'identité de l'utilisateur ou
de l'application qui accède à l'API. De plus, des mécanismes
d'autorisation peuvent être mis en place pour contrôler les actions
spécifiques qu'un utilisateur ou une application est autorisé à effectuer.
Caractéristiques Principales de Open-Meteo:
1. Prévisions météorologiques horaires jusqu'à 16 jours.
2. Modèles météorologiques mondiaux avec une résolution de 11 km et
des modèles régionaux jusqu'à 1,5 km.
3. Mise à jour des modèles météorologiques toutes les heures pour
l'Europe et l'Amérique du Nord.
4. API météorologique historique sur 80 ans.
5. Basé sur les meilleurs modèles météorologiques tels que NOAA GFS
avec HRRR, DWD ICON, MeteoFrance Arome & Arpege, ECMWF IFS,
JMA, GEM HRDPS, MET Norway.
6. API de prévisions marines, API de qualité de l'air, API de géocodage,
API d'élévation, API d'inondation.
7. APIs très rapides avec des temps de réponse inférieurs à 10 ms.
8. Serveurs situés en Europe et en Amérique du Nord avec GeoDNS pour
une meilleure latence et une disponibilité élevée.
9. Aucune clé API requise, prise en charge de CORS, pas de publicité,
pas de suivi, pas même de cookies.
10. Gratuit pour une utilisation non commerciale avec des données sous
licence Attribution 4.0 International (CC BY 4.0).
11.Code source disponible sous AGPLv3.
Fonctionnement d'Open-Meteo :
Open-Meteo utilise des prévisions météorologiques en données ouvertes
fournies par les services météorologiques nationaux. Ces services offrent des
prévisions numériques gratuites à télécharger. Cependant, travailler avec ces
modèles peut être difficile car cela nécessite une expertise dans les formats
de fichiers binaires, les systèmes de grille, les projections et les fondamentaux
des prévisions météorologiques.
Open-Meteo intègre des modèles météorologiques locaux et mondiaux à
haute résolution, téléchargeant et traitant plus de 2 To de données chaque
12
jour à partir de plusieurs services météorologiques nationaux. Les données
collectées sont ensuite stockées dans des fichiers locaux à l'aide d'un format
de fichier personnalisé et d'une technique de compression pour améliorer
l'accès aux données de séries temporelles telles qu'une prévision de
température de 14 jours.
Contrairement à d'autres APIs météorologiques, Open-Meteo offre un accès
complet à son code source, et toutes les sources de données sont clairement
répertoriées, créditant les services météorologiques nationaux pour leur
travail.
Resources :
● Toute la documentation API peut être trouvée sur
https://open-meteo.com.
● Le code source du site web, de la documentation et du générateur
d'API est disponible sur
https://github.com/open-meteo/open-meteo-website.
● L'API non commerciale gratuite est hébergée sur
https://api.open-meteo.com en utilisant GeoDNS pour des serveurs en
Europe et en Amérique du Nord.
Le choix d'Open-Meteo par rapport à d'autres services météorologiques est
motivé par plusieurs facteurs, tels que :
● Open Source et Transparence : Open-Meteo est une solution open
source, ce qui signifie que vous avez accès au code source complet.
Cela offre une transparence totale sur la manière dont les données sont
collectées, traitées et présentées. Si vous avez besoin de personnaliser
ou de comprendre en détail le fonctionnement interne, cela peut être un
avantage significatif.
● Licence Libre pour une Utilisation Non Commerciale :
Open-Meteo offre un accès gratuit pour une utilisation non
commerciale, et les données sont sous licence Attribution 4.0
International (CC BY 4.0). Cela peut être particulièrement attrayant pour
des projets personnels, éducatifs ou open source où les coûts sont un
facteur important.
● Diversité des Modèles Météorologiques : Open-Meteo utilise
plusieurs modèles météorologiques renommés tels que NOAA GFS,
13
DWD ICON, MeteoFrance Arome & Arpege, ECMWF IFS, JMA, GEM
HRDPS, MET Norway. Cette diversité peut contribuer à une plus grande
précision des prévisions météorologiques.
● Mises à Jour Fréquentes des Modèles : Les modèles
météorologiques d'Open-Meteo sont mis à jour toutes les heures pour
l'Europe et l'Amérique du Nord. Cela peut garantir des informations
météorologiques plus actuelles et précises.
● Variété d'APIs : En plus des prévisions météorologiques, Open-Meteo
propose une gamme d'APIs, notamment pour la qualité de l'air, la
géocodification, l'élévation, les inondations, et même des APIs pour les
prévisions marines. Si votre projet nécessite diverses données
météorologiques, ces fonctionnalités supplémentaires peuvent être un
atout.
● Réseau de Serveurs Mondial : Les serveurs d'Open-Meteo sont
situés en Europe et en Amérique du Nord, avec GeoDNS pour une
meilleure latence et une disponibilité élevée. Cela peut garantir une
réactivité élevée pour les utilisateurs répartis dans différentes régions
du monde.
● Réputation et Communauté : Si Open-Meteo a une communauté
active, cela peut être un avantage en termes de support, de mises à
jour fréquentes et de contributions de la part d'autres utilisateurs. Vous
pouvez également être influencé par la réputation et les retours
d'expérience positifs d'autres développeurs qui utilisent Open-Meteo.
14
Comment utiliser Open-Meteo
Le code fourni utilise la bibliothèque openmeteo-requests pour accéder à
l'API d'Open-Météo et récupérer des données météorologiques.
Installation des dépendances :
pip install openmeteo-requests
pip install requests-cache retry-requests numpy pandas
Ces commandes installent les bibliothèques nécessaires, dont
openmeteo-requests pour interagir avec l'API d'Open-Meteo,
requests-cache pour gérer la mise en cache des requêtes, retry-requests
pour la fonction de réessai en cas d'échec de la requête, ainsi que numpy et
pandas pour manipuler les données.
Importation des bibliothèques :
import openmeteo_requests
import requests_cache
import pandas as pd
from retry_requests import retry
Les bibliothèques nécessaires sont importées. openmeteo_requests est
utilisé pour interagir avec l'API d'Open-Meteo, requests_cache pour gérer la
mise en cache, pandas pour manipuler les données tabulaires, et
retry_requests pour la gestion des réessais en cas d'erreurs réseau.
Configuration de l'API Open-Meteo :
cache_session = requests_cache.CachedSession('.cache',
expire_after = -1)
retry_session = retry(cache_session, retries = 5, backoff_factor
= 0.2)
openmeteo = openmeteo_requests.Client(session = retry_session)
Un objet openmeteo_requests.Client est configuré avec une session de mise en
cache et une stratégie de réessai en cas d'échec de la requête.
15
Paramètres de la requête API :
url = "https://archive-api.open-meteo.com/v1/archive"
params = {
"latitude": 12.65,
"longitude": -8,
"start_date": "2024-01-04",
"end_date": "2024-01-18",
"hourly": "temperature_2m",
"daily": ["weather_code", "temperature_2m_mean", "sunrise",
"sunset", "daylight_duration", "sunshine_duration",
"precipitation_sum", "precipitation_hours",
"wind_direction_10m_dominant", "shortwave_radiation_sum"]
}
Les paramètres de la requête API sont définis, spécifiant la latitude et la
longitude, la période de recherche, et les variables météorologiques
souhaitées à la fois pour les prévisions horaires et quotidiennes.
Appel de l'API Open-Meteo :
responses = openmeteo.weather_api(url, params=params)
La méthode weather_api de l'objet Open-Meteo est appelée pour récupérer
les réponses de l'API en fonction des paramètres spécifiés.
Traitement des données horaires :
response = responses[0]
hourly = response.Hourly()
hourly_temperature_2m = hourly.Variables(0).ValuesAsNumpy()
# ... (autres variables)
hourly_data = {"date": pd.date_range(...), "temperature_2m":
hourly_temperature_2m}
hourly_dataframe = pd.DataFrame(data=hourly_data)
print(hourly_dataframe)
Les données horaires sont extraites de la réponse API, et un DataFrame
Pandas est créé pour les données de température à 2 mètres. La même
approche est utilisée pour d'autres variables météorologiques.
16
Traitement des données quotidiennes :
daily = response.Daily()
# ... (autres variables quotidiennes)
daily_data = {"date": pd.date_range(...), "weather_code":
daily_weather_code, ...}
daily_dataframe = pd.DataFrame(data=daily_data)
print(daily_dataframe)
#pour enregistrer en csv
data.to.csv(‘nom_du_fichier’, index=False)
De manière similaire, les données quotidiennes sont extraites et utilisées pour
créer un DataFrame Pandas.
Prétraitement des données :
Le prétraitement des données est une étape cruciale dans le processus
d'analyse de données et d'entraînement de modèles. Il vise à préparer les
données pour qu'elles soient adaptées à l'entraînement d'un modèle
d'apprentissage automatique.
Les données brutes peuvent nécessiter un certain prétraitement en fonction
des besoins du modèle. Cela peut inclure la gestion des valeurs manquantes,
la normalisation des données, la conversion des formats de date, etc.
17
2.3 Choix du Modèle
Le choix du modèle est une étape cruciale dans le processus d'apprentissage
automatique.
J’ai essayé de comparer deux modèles différents afin de choisir le meilleur
modèle. Faisons une comparaison entre deux modèle à savoir le modele de
regression lineaire et le modèle XG boost.
Linear Regression
La régression linéaire est une technique statistique utilisée pour modéliser la
relation linéaire entre une variable dépendante (cible) et une ou plusieurs
variables indépendantes (caractéristiques ou prédicteurs). L'objectif de la
régression linéaire est de trouver la meilleure ligne (ou hyperplan dans le cas
de plusieurs variables indépendantes) qui représente la relation linéaire entre
les variables.
Description des Composants de la Régression Linéaire :
Variables Dépendante et Indépendantes :
● Variable Dépendante (Y) : C'est la variable que vous essayez de
prédire ou d'expliquer. Elle est également appelée la variable
cible.
● Variables Indépendantes (X) : Ce sont les variables qui sont
utilisées pour prédire la variable dépendante. Si vous avez
plusieurs variables indépendantes, on parle de régression linéaire
multiple.
Équation de la Régression Linéaire Simple :
Dans le cas de la régression linéaire simple avec une seule variable
indépendante (X) et une variable dépendante (Y), l'équation de la ligne de
régression est donnée par :
Y = β0 + β1⋅X + ε
où β0 est l'ordonnée à l'origine, β1 est la pente de la ligne, et ε est le terme
d'erreur.
Estimation des Coefficients :
18
Les coefficients ( β0 et β1) sont estimés à partir des données
d'entraînement de manière à minimiser la somme des carrés des
résidus (différences entre les valeurs prédites et observées).
Méthode des Moindres Carrés :
La méthode des moindres carrés est souvent utilisée pour estimer les
coefficients. Elle minimise la somme des carrés des résidus pour
trouver la meilleure ajustement linéaire.
Évaluation du Modèle :
Les performances du modèle sont évaluées en utilisant diverses
mesures telles que l'erreur quadratique moyenne (MSE), l'erreur
absolue moyenne (MAE), le coefficient de détermination (R²), etc.
Assomptions de la Régression Linéaire :
La régression linéaire repose sur plusieurs hypothèses, notamment
l'homoscédasticité (variance constante des résidus), l'indépendance
des résidus, la linéarité de la relation, l'absence de colinéarité entre les
variables indépendantes, etc.
Régression Linéaire Multiple :
Lorsqu'il y a plusieurs variables indépendantes, l'équation devient plus
complexe :
Y = β0 + β1 ⋅ X1 + β2 ⋅ X2 + … + βn ⋅ Xn + ε
où X1 , X2 , … , Xn sont les différentes variables indépendantes.
Avantages et Limitations de la Régression Linéaire :
Avantages :
● Facile à comprendre et à interpréter.
● Rapide à entraîner et à utiliser.
● Performe bien lorsque la relation entre les variables est linéaire.
19
Limitations :
● Ne fonctionne que pour des relations linéaires.
● Sensible aux valeurs aberrantes.
● Ne capture pas les interactions complexes entre les variables.
Nous allons utiliser deux bases, pour voir lequel sera efficace avec notre
modèle à savoir :
● ‘bamako_daily_2000_2023.csv’
● ‘bamako_hourly_2000_2023.csv’
‘bamako_daily_2000_2023.csv’ contient les informations agrégées au
niveau quotidien. Voici la structure des colonnes :
1. date : La date à laquelle les données ont été enregistrées.
2. weather_code : Un code numérique ou catégoriel représentant le type
de conditions météorologiques.
3. temperature_2m_mean : La température moyenne à 2 mètres
au-dessus du sol.
4. sunrise : L'heure du lever du soleil.
5. sunset : L'heure du coucher du soleil.
6. daylight_duration : La durée de la lumière du jour.
7. sunshine_duration : La durée d'ensoleillement.
8. rain_sum : La somme des précipitations.
9. precipitation_hours : Le nombre d'heures de précipitations.
10. wind_speed_10m_max : La vitesse maximale du vent à 10 mètres
au-dessus du sol.
‘bamako_hourly_2000_2023.csv’ représente un ensemble de données
météorologiques horaires. Voici une explication détaillée de chaque
caractéristique :
1. date : La date de l'observation.
2. temperature_2m : La température à 2 mètres au-dessus du sol.
3. relative_humidity_2m : L'humidité relative à 2 mètres au-dessus du
sol.
4. apparent_temperature : La température ressentie, qui prend en
compte l'humidité et le vent.
5. rain : Quantité de précipitations.
6. weather_code : Un code représentant la condition météorologique.
20
7. surface_pressure : La pression atmosphérique à la surface.
8. cloud_cover : Le pourcentage du ciel couvert par les nuages.
9. cloud_cover_low : Le pourcentage du ciel couvert par les nuages bas.
10. cloud_cover_mid : Le pourcentage du ciel couvert par les nuages
de niveau moyen.
11.cloud_cover_high : Le pourcentage du ciel couvert par les nuages
élevés.
12. wind_speed_10m : La vitesse du vent à 10 mètres au-dessus du
sol.
13. wind_speed_100m : La vitesse du vent à 100 mètres au-dessus du
sol.
14. wind_direction_10m : La direction du vent à 10 mètres au-dessus
du sol.
15. wind_direction_100m : La direction du vent à 100 mètres
au-dessus du sol.
16. soil_temperature_0_to_7cm : La température du sol dans la
couche supérieure (0 à 7 cm).
17. soil_temperature_7_to_28cm : La température du sol dans la
couche de 7 à 28 cm sous la surface.
18. soil_temperature_28_to_100cm : La température du sol dans la
couche de 28 à 100 cm sous la surface.
19. soil_temperature_100_to_255cm : La température du sol dans la
couche de 100 à 255 cm sous la surface.
20. soil_moisture_0_to_7cm : L'humidité du sol dans la couche
supérieure (0 à 7 cm).
21. soil_moisture_7_to_28cm : L'humidité du sol dans la couche de 7
à 28 cm sous la surface.
22. soil_moisture_28_to_100cm : L'humidité du sol dans la couche de
28 à 100 cm sous la surface.
23. soil_moisture_100_to_255cm : L'humidité du sol dans la couche
de 100 à 255 cm sous la surface.
24. is_day : Indicateur binaire (1 ou 0) indiquant s'il fait jour ou nuit.
25. sunshine_duration : Durée d'ensoleillement.
26. shortwave_radiation : Radiation solaire totale reçue.
27. direct_radiation : Radiation directe reçue.
28. diffuse_radiation : Radiation diffuse reçue.
29. direct_normal_irradiance : Irradiance normale directe.
30. terrestrial_radiation : Radiation terrestre reçue.
31. shortwave_radiation_instant : Radiation solaire totale instantanée.
32. direct_radiation_instant : Radiation directe instantanée.
21
33. diffuse_radiation_instant : Radiation diffuse instantanée.
34. direct_normal_irradiance_instant : Irradiance normale directe
instantanée.
35. terrestrial_radiation_instant : Radiation terrestre instantanée.
Passons à l'implémentation
Importations des bibliothèques:
● from sklearn.model_selection
● import train_test_split
● from sklearn.preprocessing
● import StandardScaler
● from sklearn.linear_model
● import LinearRegression
● from sklearn.metrics
● import mean_squared_error
● r2_score explique ces packages
Les packages importés dans votre code proviennent tous de la
bibliothèque scikit-learn (sklearn), qui est une bibliothèque open source
populaire en Python dédiée à l'apprentissage automatique (machine
learning) et à l'exploration de données. Voici une explication de chacun
de ces packages :
train_test_split :
● Description : Fonction permettant de diviser un ensemble de
données en deux parties : un ensemble d'entraînement et un
ensemble de test.
● Utilisation dans le code : train_test_split(features, target,
test_size=0.3, random_state=42)
● Explication : Divise les caractéristiques (features) et la cible
(target) en ensembles d'entraînement (X_train, y_train) et de
test (X_test, y_test). test_size spécifie la proportion
d'observations à inclure dans l'ensemble de test.
22
StandardScaler :
● Description : Classe permettant de standardiser les
caractéristiques en supprimant la moyenne et en mettant à
l'échelle à la variance unitaire.
● Utilisation dans le code : scaler = StandardScaler(),
X_train_scaled = scaler.fit_transform(X_train), X_test_scaled =
scaler.transform(X_test)
● Explication : fit_transform ajuste le scaler aux données
d'entraînement et transforme ces données. transform applique la
même transformation aux données de test.
LinearRegression :
● Description : Classe implémentant la régression linéaire, un
modèle de machine learning pour les problèmes de régression.
● Utilisation dans le code : model = LinearRegression(),
model.fit(X_train_scaled, y_train)
● Explication : Crée une instance de la classe de régression linéaire
et entraîne le modèle sur les données d'entraînement.
mean_squared_error :
● Description : Fonction calculant l'erreur quadratique moyenne
(MSE) entre les valeurs réelles et les prédictions.
● Utilisation dans le code : mse = mean_squared_error(y_test,
predictions)
● Explication : Calcule la moyenne des carrés des différences entre
les valeurs réelles (y_test) et les prédictions du modèle.
r2_score :
● Description : Fonction calculant le coefficient de détermination
(R²) entre les valeurs réelles et les prédictions.
● Utilisation dans le code : r2 = r2_score(y_test, predictions)
23
● Explication : Mesure la proportion de la variance de la variable
dépendante qui est prévisible à partir des caractéristiques. Un R²
de 1 indique une prédiction parfaite.
Voici une explication étape par étape du code :
1. Séparation des caractéristiques et de la cible :
features = df.drop(['temperature_2m', 'date'], axis=1)
target = df['temperature_2m']
○ features contient toutes les colonnes sauf 'temperature_2m' et
'date'.
○ target contient la colonne 'temperature_2m', qui est la variable
que nous essayons de prédire.
2. Division des données en ensembles d'entraînement et de test :
X_train, X_test, y_train, y_test = train_test_split(features,
target, test_size=0.3, random_state=42)
○ Les données sont divisées en ensembles d'entraînement (70%)
et de test (30%).
○ X_train et X_test contiennent les caractéristiques pour
l'entraînement et les tests, respectivement.
○ y_train et y_test contiennent les valeurs cibles
correspondantes.
3. Normalisation des données (facultatif) :
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
○ Les données sont normalisées, ce qui peut être important pour
certains algorithmes, mais ce n'est pas nécessaire pour tous.
24
4. Création et entraînement du modèle de régression linéaire :
model = LinearRegression()
model.fit(X_train_scaled, y_train)
○ Un objet de modèle de régression linéaire est créé et entraîné sur
les données d'entraînement normalisées.
5. Prédictions sur l'ensemble de test :
predictions = model.predict(X_test_scaled)
○ Le modèle est utilisé pour faire des prédictions sur l'ensemble de
test.
6. Évaluation du modèle :
mse = mean_squared_error(y_test, predictions)
r2 = r2_score(y_test, predictions)
○ L'erreur quadratique moyenne (MSE) et le coefficient de
détermination (R²) sont calculés pour évaluer la performance du
modèle.
○ MSE mesure la moyenne des carrés des erreurs entre les
prédictions et les valeurs réelles.
○ R² mesure la proportion de la variance de la variable dépendante
qui est prévisible à partir des caractéristiques.
7. Affichage des résultats :
print(f'Mean Squared Error: {mse}')
print(f'R-squared: {r2}')
○ Les résultats de l'évaluation du modèle (MSE et R²) sont affichés.
● Erreur Quadratique Moyenne (MSE) :
Le MSE mesure la moyenne des carrés des différences entre les valeurs
réelles et les prédictions du modèle. Il pénalise fortement les erreurs
25
importantes, car chaque erreur est élevée au carré. Une valeur de MSE plus
basse indique une meilleure adéquation du modèle aux données.
● Coefficient de Détermination (R²) :
Le R² mesure la proportion de la variance totale de la variable dépendante
expliquée par le modèle. Il varie de 0 à 1, où 1 indique une adéquation
parfaite du modèle aux données. Une valeur négative peut indiquer que le
modèle est pire que le simple fait de prédire la moyenne de la variable
dépendante. Le R² peut être interprété comme la "qualité" des prédictions du
modèle par rapport à la variabilité naturelle des données.
Pour la base ‘bamako_daily_2000_2023.csv’ nous obtenons :
● Mean Squared Error: 2.8186
● R-squared: 0.6950
26
Pour la base ‘bamako_hourly_2000_2023.csv’ nous obtenons :
● Mean Squared Error: 0.1652
● R-squared: 0.993852
Le modèle appliqué à la base de données horaire semble bien mieux
performer que celui appliqué à la base de données quotidienne, avec une
précision plus élevée et une capacité plus forte à expliquer la variance des
données. Cependant, il est important de noter que la nature des données
horaires a permis au modèle de capturer des variations plus fines par rapport
aux données quotidiennes. Ces résultats soulignent l'importance de choisir le
bon niveau de granularité des données en fonction de l'objectif de la
modélisation.
27
XGBoost:
XGBoost, abréviation de "eXtreme Gradient Boosting", est un algorithme
d'apprentissage automatique appartenant à la famille des modèles de
boosting. Il a été développé pour offrir une performance élevée et une
précision accrue dans les problèmes de classification et de régression.
XGBoost est particulièrement populaire dans les compétitions de science des
données en raison de sa robustesse et de sa capacité à gérer des ensembles
de données complexes.
1. Principe de Base :
● XGBoost est un modèle de boosting, ce qui signifie qu'il construit un
modèle prédictif en agrégeant un ensemble de modèles plus simples,
appelés "apprenants faibles".
● Chaque apprenant faible est généralement un arbre de décision peu
profond, également appelé "arbre faible".
● L'idée clé du boosting est de combiner les faiblesses individuelles des
modèles pour construire un modèle global plus fort.
2. Caractéristiques Principales :
● Boosting Régularisé : XGBoost intègre une régularisation L1 (Lasso) et
L2 (Ridge) pour éviter le surajustement (overfitting).
● Prise en charge de Fonctions Objectif Personnalisées : Il permet de
définir des fonctions objectif personnalisées, ce qui le rend adaptable à
divers types de tâches.
● Gestion des Valeurs Manquantes : XGBoost peut gérer les valeurs
manquantes automatiquement, évitant ainsi la nécessité de pré
traitement séparé des données manquantes.
3. Processus d'Entraînement :
● Boosting Itératif : XGBoost construit les arbres de manière itérative, en
ajoutant un arbre à la fois.
● Optimisation de la Fonction Objectif : L'optimisation est effectuée par
descente de gradient pour minimiser la fonction objectif, qui combine la
perte de modèle et les termes de régularisation.
4. Paramètres Importants :
28
● XGBoost offre un large éventail de paramètres, dont certains sont
cruciaux pour le réglage du modèle. Cela inclut le taux d'apprentissage,
la profondeur de l'arbre, le nombre d'itérations, etc.
5. Gestion de la Classification et de la Régression :
● XGBoost peut être utilisé pour des tâches de classification et de
régression. Pour la classification, il utilise une fonction sigmoïde pour
générer des probabilités.
6. Fonctionnement Distribué :
● XGBoost prend en charge le traitement parallèle et la distribution sur
plusieurs cœurs de processeur, ce qui améliore l'efficacité pour les
ensembles de données volumineux.
Passons à l'implémentation du code :
# Importation des bibliothèques nécessaires
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from xgboost import XGBRegressor
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np
# Séparation des caractéristiques (features) et de la cible
(target)
features = df.drop(['temperature_2m', 'date'], axis=1)
target = df['temperature_2m']
# Division des données en ensembles d'entraînement et de
test
X_train, X_test, y_train, y_test =
train_test_split(features, target, test_size=0.3,
random_state=42)
# Normalisation des données (facultatif, mais souvent
recommandé)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Création du modèle XGBoost
29
xgb_model = XGBRegressor()
# Entraînement du modèle sur l'ensemble d'entraînement
xgb_model.fit(X_train_scaled, y_train)
# Prédictions sur l'ensemble de test
xgb_predictions = xgb_model.predict(X_test_scaled)
# Calcul des résidus (différence entre les vraies valeurs et
les prédictions)
residuals = y_test - xgb_predictions
# Évaluation du modèle XGBoost
xgb_mse = mean_squared_error(y_test, xgb_predictions)
xgb_r2 = r2_score(y_test, xgb_predictions)
# Affichage des résultats
print(f'Mean Squared Error (XGBoost): {xgb_mse}')
print(f'R-squared (XGBoost): {xgb_r2}')
30
Pour la base ‘bamako_daily_2000_2023.csv’ nous obtenons :
● Mean Squared Error (XGBoost): 1.1512
● R-squared (XGBoost): 0.8754
31
Pour la base ‘bamako_hourly_2000_2023.csv’ nous obtenons :
● Mean Squared Error (XGBoost): 0.04488
● R-squared (XGBoost): 0.9983
Pour les deux ensembles de données, le modèle XGBoost surpasse
significativement le modèle de régression linéaire en termes de précision et
d'ajustement aux données météorologiques.
Tableau
bamako_daily_2000_2023.csv bamako_hourly_2000_2023.csv
Linear Regression mse: 2.8186 mse: 0.1652
r2: 0.6950 r2: 0.9938
XGBoost mse: 1.1512 mse: 0.0448
r2: 0.8754 r2: 0.9983
32
2.4 Dashboard avec Dash
Dash est une bibliothèque Python qui permet de créer des tableaux de bord
web interactifs. Elle est développée par Plotly, une société spécialisée dans la
visualisation de données. Dash est particulièrement prisé dans la
communauté Python pour sa facilité d'utilisation et sa flexibilité pour créer des
interfaces utilisateur interactives. Voici quelques détails sur Dash :
Installation de Dash :
a. Pour installer Dash, vous pouvez utiliser la commande pip :
pip install dash
Principales Caractéristiques de Dash :
b. Déclaratif : Dash utilise une approche déclarative pour la
création de tableaux de bord. Vous spécifiez la structure du
tableau de bord en utilisant des composants Python, ce qui rend
la création d'interfaces utilisateur plus intuitive.
c. Interactivité : Les tableaux de bord Dash sont interactifs. Vous
pouvez ajouter des composants tels que des graphiques, des
tableaux, des boutons, etc., qui réagissent aux actions de
l'utilisateur.
d. Composants HTML et Plotly : Dash utilise des composants
HTML pour la structure générale du tableau de bord, et Plotly
pour créer des graphiques interactifs.
e. Callback : Les interactions utilisateur sont gérées via des
fonctions de rappel (callbacks). Ces fonctions sont déclenchées
en réponse aux actions de l'utilisateur et peuvent mettre à jour
dynamiquement les composants du tableau de bord.
33
Création d'un Tableau de Bord Dash :
Voici un exemple simple de code Dash pour créer une application
qui affiche un graphique interactif :
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
app = dash.Dash(__name__)
app.layout = html.Div([
dcc.Graph(id='example-graph'),
dcc.Slider(
id='example-slider',
min=0,
max=10,
step=0.1,
value=5
)
])
@app.callback(
Output('example-graph', 'figure'),
[Input('example-slider', 'value')]
)
def update_graph(selected_value):
# Logique pour mettre à jour le graphique en
fonction de la valeur du curseur
# ...
return updated_figure
if __name__ == '__main__':
app.run_server(debug=True)
Ce code crée une application Dash simple avec un graphique et un curseur.
Le graphique est mis à jour en temps réel en fonction de la valeur du curseur.
34
Déploiement de l'Application Dash :
Vous pouvez déployer une application Dash de différentes
manières, y compris en utilisant des serveurs cloud tels que
Heroku, AWS, ou en la déployant en local.
Communauté et Documentation :
Dash dispose d'une communauté active, avec une documentation
complète et des exemples pour vous aider à démarrer
rapidement. Vous pouvez trouver la documentation officielle sur le
site de Plotly.
Dash offre une solution puissante et flexible pour créer des tableaux de bord
interactifs avec Python, et il est adapté à diverses applications, y compris la
visualisation de données météorologiques.
35
2.5 Presentation de l’interface
Page BAMAKO
PAGE SEGOU
36
PAGE KIDAL
37
3. Conclusion
La réalisation de ce projet d'analyse des données météorologiques au Mali a
été à la fois enrichissante et challenging. Le délai serré a constitué un défi
majeur, limitant le temps disponible pour mener une analyse approfondie.
Malgré ces contraintes temporelles, j'ai tout mis en œuvre pour tirer des
enseignements significatifs de cette expérience.
L'obtention des données météorologiques s'est avérée être une tâche
complexe. Les limitations des API disponibles, qui ne prenaient pas en charge
le Mali, ainsi que les coûts associés à l'accès à des données plus complètes
ont posé des défis considérables. Ces obstacles ont nécessité une recherche
approfondie et des compromis dans le processus de collecte des données.
Une autre dimension de ce projet a été l'apprentissage rapide de nouvelles
technologies. La nécessité de s'adapter à des outils et frameworks spécifiques
a constitué un défi, mais cette expérience a élargi mes compétences et
renforcé ma capacité à résoudre des problèmes techniques.
Le constat est que de nombreuses fonctionnalités sont indisponibles mais
représente une opportunité plutôt qu'un obstacle. Le développement de ces
fonctionnalités dans les jours à venir permettra d'améliorer la profondeur et la
précision de l'analyse. Cela souligne l'importance de la flexibilité dans la
planification de projets, en permettant l'ajout et l'ajustement de fonctionnalités
au fur et à mesure de l'évolution des ressources et des contraintes.
En dépit des défis, je suis ravi d'avoir travaillé sur ce projet. L'expérience a été
non seulement une leçon sur la météorologie et l'analyse de données, mais
aussi une opportunité d'acquérir de nouvelles compétences et d'explorer des
aspects passionnants de la science des données. Les leçons apprises seront
précieuses pour les projets futurs, et je suis confiant que les développements
à venir renforceront davantage les résultats obtenus.
38
4. Bibliographie
● https://dash.plotly.com/
● https://xgboost.readthedocs.io/en/stable/
● https://www.analyticsvidhya.com/blog/2021/10/everything-
you-need-to-know-about-linear-regression/
● https://dash-bootstrap-components.opensource.faculty.ai/
39