-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprogramme_carte_département.py
80 lines (67 loc) · 3.16 KB
/
programme_carte_département.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#Programme pour afficher une carte du nombre de "tempete" par département au cours de l'année 2024
import os
import pandas as pd
import matplotlib.pyplot as plt
import geopandas as gpd
# Chargement du fichier GeoJSON
carte_departements = gpd.read_file("departements.geojson")
# Chemin du dossier contenant les fichiers CSV
dossier = "donnees_climat_2024"
# Initialiser un DataFrame vide pour combiner les données
df_combine = pd.DataFrame()
# Lire tous les fichiers CSV du dossier
for fichier in os.listdir(dossier):
if fichier.endswith('.csv'):
chemin_fichier = os.path.join(dossier, fichier)
df_temp = pd.read_csv(chemin_fichier, sep=';', encoding='utf-8')
df_combine = pd.concat([df_combine, df_temp], ignore_index=True)
# Nettoyer les colonnes (supprimer les espaces en trop)
df_combine.columns = df_combine.columns.str.strip()
# Vérifier si les colonnes nécessaires sont présentes
if 'LAT' in df_combine.columns and 'LON' in df_combine.columns:
# Convertir les données météo en GeoDataFrame
df_combine['LAT'] = pd.to_numeric(df_combine['LAT'], errors='coerce')
df_combine['LON'] = pd.to_numeric(df_combine['LON'], errors='coerce')
gdf_meteo = gpd.GeoDataFrame(
df_combine,
geometry=gpd.points_from_xy(df_combine['LON'], df_combine['LAT']),
crs="EPSG:4326"
)
# Associer chaque point météo à un département
gdf_meteo = gpd.sjoin(gdf_meteo, carte_departements, how="left", predicate="intersects")
# Vérifier si la colonne du département existe après le joint
if 'code' in gdf_meteo.columns: # 'code' peut varier selon le fichier GeoJSON
gdf_meteo['CodeDepartement'] = gdf_meteo['code']
# Définir les critères pour détecter une tempête
if 'RR' in gdf_meteo.columns and 'FXIAB' in gdf_meteo.columns and 'PMERMINAB' in gdf_meteo.columns:
tempetes = gdf_meteo[
(gdf_meteo['RR'] > 100) |
(gdf_meteo['FXIAB'] > 100) |
(gdf_meteo['PMERMINAB'] < 980)
]
# Compter les tempêtes par département
tempetes_par_departement = tempetes.groupby('CodeDepartement').size()
# Carte des départements colorée selon le nombre de tempêtes
carte_departements = carte_departements.merge(
tempetes_par_departement.rename('NombreTempetes'),
left_on='code',
right_index=True,
how='left'
).fillna(0)
plt.figure(figsize=(12, 10))
carte_departements.plot(
column='NombreTempetes',
cmap='OrRd',
legend=True,
legend_kwds={'label': "Nombre de tempêtes"},
edgecolor='black'
)
plt.title("Nombre de tempêtes par département en 2024")
plt.axis('off')
plt.show()
else:
print("Les colonnes nécessaires ('RR', 'FXIAB', 'PMERMINAB') ne sont pas dans les données.")
else:
print("Impossible d'associer les stations météo aux départements.")
else:
print("Les colonnes 'LAT' et 'LON' sont manquantes dans les données météo.")