Exercices Météo avec Pandas
Exercices pour maîtriser Pandas avec des données météo.
Introduction
À travers une série d'exercices, vous apprendrez à manipuler des données météo, filtrer des DataFrames, calculer des statistiques et intégrer une API temps réel.
Note sur l'organisation
- Flexibilité : Les exercices peuvent être réalisés indépendamment ou à la suite dans un seul et même script.
- Indices : Si vous bloquez, des blocs d'indices sont là pour vous guider sans vous donner la réponse immédiatement.
- Solutions : Elles utilisent les meilleures pratiques de Pandas.
Conseil pédagogique
Pour progresser, ESSAYEZ PAR VOUS-MÊME avant de dévoiler les solutions.
L'erreur fait partie de l'apprentissage !
Progression
- Exercice 1 : Création du DataFrame Météo
- Exercice 2 : Accéder aux Données
- Exercice 3 : Statistiques
- Exercice 4 : Filtrer les Données
- Exercice 5 : Trier et Ajouter des Colonnes
- Exercice 6 : API Open-Meteo
- Exercice 7 : API vers DataFrame
- Exercice 8 : Projet Final - Analyseur Météo
Prérequis
- Python 3.8+
- Pandas installé (
pip install pandas) - Requests installé (
pip install requests)
Lancer les exercices - option hors environnement
Pas d'environnement Python local ? Utilisez un bac à sable directement dans le navigateur :
Exercice 1: Création du DataFrame Météo
Énoncé
Créez un DataFrame Pandas avec les données météo suivantes:
| jour | temperature | humidite | condition |
|---|---|---|---|
| Lundi | 15 | 65 | Nuageux |
| Mardi | 18 | 55 | Ensoleillé |
| Mercredi | 22 | 45 | Ensoleillé |
| Jeudi | 19 | 60 | Nuageux |
| Vendredi | 17 | 70 | Pluie |
Résultat attendu
jour temperature humidite condition
0 Lundi 15 65 Nuageux
1 Mardi 18 55 Ensoleillé
2 Mercredi 22 45 Ensoleillé
3 Jeudi 19 60 Nuageux
4 Vendredi 17 70 Pluie
Indices
- Utilisez
pd.DataFrame()avec un dictionnaire - Les clés du dictionnaire deviennent les noms de colonnes
Résumé: Création de DataFrame
| Méthode | Description |
|---|---|
pd.DataFrame(dict) | DataFrame à partir d'un dictionnaire |
pd.DataFrame(liste) | DataFrame à partir d'une liste de dicts |
pd.read_csv('fichier.csv') | Charger depuis un fichier |
Solution
import pandas as pd
data = [
{'jour': 'Lundi', 'temperature': 15, 'humidite': 65, 'condition': 'Nuageux'},
{'jour': 'Mardi', 'temperature': 18, 'humidite': 55, 'condition': 'Ensoleillé'},
{'jour': 'Mercredi', 'temperature': 22, 'humidite': 45, 'condition': 'Ensoleillé'},
{'jour': 'Jeudi', 'temperature': 19, 'humidite': 60, 'condition': 'Nuageux'},
{'jour': 'Vendredi', 'temperature': 17, 'humidite': 70, 'condition': 'Pluie'},
]
meteo = pd.DataFrame(data)
print(meteo)
Exercice 2: Accéder aux Données
Énoncé
À partir du DataFrame créé précédemment, affichez:
- La colonne
temperatureuniquement - Les colonnes
jouretcondition - La première ligne (Lundi)
Résultat attendu
1. Températures:
0 15
1 18
2 22
3 19
4 17
Name: temperature, dtype: int64
2. Jour et condition:
jour condition
0 Lundi Nuageux
1 Mardi Ensoleillé
2 Mercredi Ensoleillé
3 Jeudi Nuageux
4 Vendredi Pluie
3. Première ligne:
jour Lundi
temperature 15
humidite 65
condition Nuageux
Name: 0, dtype: object
Indices
- Pour une colonne:
df['nom_colonne'] - Pour plusieurs colonnes:
df[['col1', 'col2']] - Pour une ligne:
df.loc[index]oudf.iloc[position]
Résumé: Accès aux données
| Méthode | Description |
|---|---|
df['colonne'] | Une colonne (Series) |
df[['col1', 'col2']] | Plusieurs colonnes (DataFrame) |
df.loc[index] | Ligne par index |
df.iloc[position] | Ligne par position |
Solution
Exercice 3: Statistiques
Énoncé
Calculez les statistiques suivantes sur le DataFrame:
- La température moyenne
- La température maximale et minimale
- L'écart-type des températures
Résultat attendu
Indices
- Utilisez les méthodes sur la colonne:
.mean(),.max(),.min(),.std()
Résumé: Statistiques
| Fonction | Description |
|---|---|
df['col'].mean() | Moyenne |
df['col'].max() | Maximum |
df['col'].min() | Minimum |
df['col'].std() | Écart-type |
df['col'].median() | Médiane |
Solution
Exercice 4: Filtrer les Données
Énoncé
Filtrez le DataFrame pour obtenir:
- Les jours ensoleillés uniquement
- Les jours où la température est supérieure à 18°C
- Les jours nuageux ET avec une humidité supérieure à 60%
Résultat attendu
1. Jours ensoleillés:
jour temperature humidite condition
1 Mardi 18 55 Ensoleillé
2 Mercredi 22 45 Ensoleillé
2. Jours chauds (>18°C):
jour temperature humidite condition
1 Mardi 18 55 Ensoleillé
2 Mercredi 22 45 Ensoleillé
3 Jeudi 19 60 Nuageux
3. Nuageux et humide:
jour temperature humidite condition
3 Jeudi 19 60 Nuageux
4 Vendredi 17 70 Pluie
Indices
- Filtrage simple:
df[df['colonne'] == valeur] - Comparaison:
df[df['colonne'] > valeur] - Plusieurs conditions:
df[(condition1) & (condition2)]
Résumé: Filtrage
| Méthode | Description |
|---|---|
df[df['col'] == x] | Égal à x |
df[df['col'] > x] | Supérieur à x |
df[df['col'] < x] | Inférieur à x |
df[(c1) & (c2)] | ET logique |
df[(c1) \| (c2)] | OU logique |
Solution
# 1. Jours ensoleillés
print("1. Jours ensoleillés:")
print(meteo[meteo['condition'] == 'Ensoleillé'])
# 2. Température > 18
print("\n2. Jours chauds (>18°C):")
print(meteo[meteo['temperature'] > 18])
# 3. Nuageux ET humidite > 60
print("\n3. Nuageux et humide:")
print(meteo[(meteo['condition'] == 'Nuageux') & (meteo['humidite'] > 60)])
Exercice 5: Trier et Ajouter des Colonnes
Énoncé
- Triez le DataFrame par température décroissante
- Ajoutez une colonne
temperature_favec la température en Fahrenheit (formula: C × 9/5 + 32) - Triez par condition alphabétique
Résultat attendu
1. Trié par température (décroissant):
jour temperature humidite condition
2 Mercredi 22 45 Ensoleillé
3 Jeudi 19 60 Nuageux
1 Mardi 18 55 Ensoleillé
4 Vendredi 17 70 Pluie
0 Lundi 15 65 Nuageux
2. Avec Fahrenheit:
jour temperature humidite condition temperature_f
0 Lundi 15 65 Nuageux 59.0
1 Mardi 18 55 Ensoleillé 64.4
2 Mercredi 22 45 Ensoleillé 71.6
3 Jeudi 19 60 Nuageux 66.2
4 Vendredi 17 70 Pluie 62.6
Indices
- Trier:
df.sort_values('colonne', ascending=False) - Ajouter colonne:
df['nouvelle_colonne'] = valeurs - Appliquer une fonction:
df['col'].apply(fonction)
Résumé: Trier et ajouter
| Méthode | Description |
|---|---|
df.sort_values('col') | Trier croissant |
df.sort_values('col', ascending=False) | Trier décroissant |
df['col_calculée'] = ... | Ajouter colonne |
df.apply(lambda x: ...) | Appliquer fonction |
Solution
Exercice 6: API Open-Meteo
Énoncé
Récupérez la météo actuelle d'Angoulême (lat=45.65, lon=0.15) en utilisant l'API Open-Meteo et affichez:
- La température actuelle
- L'humidité actuelle
URL de l'API
https://api.open-meteo.com/v1/forecast?latitude=45.65&longitude=0.15¤t=temperature_2m,relative_humidity_2m
Résultat attendu
Indices
- Utilisez
requests.get(url)pour faire la requête - Utilisez
.json()pour convertir la réponse - Les données sont dans
donnees['current']['temperature_2m']
Résumé: Requêtes API
| Méthode | Description |
|---|---|
requests.get(url) | Requête GET |
reponse.json() | Convertir en JSON |
donnees['cle'] | Accéder aux données |
Solution
import requests
lat = 45.65 # Angoulême
lon = 0.15
url = f"https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lon}¤t=temperature_2m,relative_humidity_2m"
reponse = requests.get(url)
donnees = reponse.json()
temp = donnees['current']['temperature_2m']
humidite = donnees['current']['relative_humidity_2m']
print(f"Température à Angoulême: {temp}°C")
print(f"Humidité à Angoulême: {humidite}%")
Exercice 7: API vers DataFrame
Énoncé
Créez un DataFrame avec les données de l'API Open-Meteo pour Angoulême.
Le DataFrame doit contenir: - ville - temperature - humidite - vent
Résultat attendu
Indices
- Récupérez d'abord les données avec l'API
- Créez un dictionnaire avec les valeurs
- Transformez en DataFrame avec
pd.DataFrame()
URL complète
Solution
import requests
import pandas as pd
lat = 45.65
lon = 0.15
url = f"https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lon}¤t=temperature_2m,relative_humidity_2m,wind_speed_10m"
reponse = requests.get(url)
donnees = reponse.json()
actuel = donnees['current']
data = {
'ville': ['Angoulême'],
'temperature': [actuel['temperature_2m']],
'humidite': [actuel['relative_humidity_2m']],
'vent': [actuel['wind_speed_10m']]
}
meteo = pd.DataFrame(data)
print(meteo)
Exercice 8: Projet Final - Analyseur Météo
Énoncé
Créez une classe AnalyseurMeteo qui:
- Prend en paramètres: ville, latitude, longitude
- A une méthode
recuperer()qui fetch les données de l'API - A une méthode
afficher()qui affiche un résumé - A une méthode
statistiques()qui affiche les statistiques
Résultat attendu
==================================================
Météo à Angoulême
==================================================
ville temperature humidite vent
0 Angoulême 12.5 75 15.2
==================================================
=== Analyse ===
Température: 12.5°C
Humidité: 75%
Indices
- Créez une classe avec
class NomClasse: - Utilisez
__init__pour initialiser les attributs - Appelez l'API dans une méthode séparée
- Utilisez
selfpour accéder aux attributs
Résumé: Programmation orientée objet
| Élément | Description |
|---|---|
class Classe: | Définir une classe |
def __init__(self, params): | Constructeur |
self.attribut = valeur | Attribut d'instance |
self.methode() | Appeler une méthode |
Solution
import requests
import pandas as pd
class AnalyseurMeteo:
def __init__(self, ville, lat, lon):
self.ville = ville
self.lat = lat
self.lon = lon
self.data = None
def recuperer(self):
url = f"https://api.open-meteo.com/v1/forecast?latitude={self.lat}&longitude={self.lon}¤t=temperature_2m,relative_humidity_2m,wind_speed_10m"
reponse = requests.get(url)
actuel = reponse.json()['current']
self.data = pd.DataFrame({
'ville': [self.ville],
'temperature': [actuel['temperature_2m']],
'humidite': [actuel['relative_humidity_2m']],
'vent': [actuel['wind_speed_10m']]
})
def afficher(self):
if self.data is None:
self.recuperer()
print(f"\n{'='*50}")
print(f" Météo à {self.ville}")
print(f"{'='*50}")
print(self.data.to_string(index=False))
print(f"{'='*50}")
def statistiques(self):
if self.data is None:
self.recuperer()
print("\n=== Analyse ===")
print(f"Température: {self.data['temperature'][0]}°C")
print(f"Humidité: {self.data['humidite'][0]}%")
# Utilisation
meteo = AnalyseurMeteo("Angoulême", 45.65, 0.15)
meteo.afficher()
meteo.statistiques()
Correction
Vous pouvez retrouver toutes les solutions dans les blocs "Solution" de chaque exercice ci-dessus.
Conseil
Essayez de faire les exercices dans l'ordre, ils sont conçus pour construire progressivement vos connaissances.