import pandas as pd
import folium
import geopandas as gpd
df geojson
url_geo = "https://france-geojson.gregoiredavid.fr/repo/departements.geojson"
geo_df = gpd.read_file(url_geo)
geo_df.head(2)
code | nom | geometry | |
---|---|---|---|
0 | 02 | Aisne | POLYGON ((3.17270 50.01200, 3.18220 50.01234, ... |
1 | 10 | Aube | POLYGON ((3.41479 48.39027, 3.42208 48.41334, ... |
df dataset sociales :
url = "https://filedn.eu/lHdttuiSAwVYBLWzET7NL14/solidR_dataset_full_geo.csv"
df = pd.read_csv(url, sep=';')
df.head(1)
annee | code_dep | departements | salaire_net_annuel_moyen | population | Population_etrangere | projection_population_2025 | tx_pauvrete_monaitaire | tx_pauvrete_30 | tx_pauv_75 | ... | 60_64ans | 65_74ans | 75_84ans | 85ans | nom_region | code_region | pauvres | geopoint | latitude | longitude | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2019 | 48 | Lozère | 17250 | 75700 | 2921 | 87 | 14.3 | 18.5 | 14.5 | ... | 5335 | 9994 | 5901 | 3551 | Occitanie | 76 | 10825.1 | POLYGON ((3.36134 44.97141, 3.36229 44.97131, ... | 44.526181 | 3.484851 |
1 rows × 110 columns
df_data = df[['annee', 'code_dep', 'departements', 'tx_pauvrete_monaitaire', 'population']]
df_data = df_data.query(f"annee == 2022")
df_data.head(2)
annee | code_dep | departements | tx_pauvrete_monaitaire | population | |
---|---|---|---|---|---|
303 | 2022 | 48 | Lozère | 14.7 | 76573 |
304 | 2022 | 23 | Creuse | 18.1 | 113711 |
merged_data = pd.merge(geo_df,df_data, left_on='code', right_on='code_dep', how='left')
merged_data.head(2)
code | nom | geometry | annee | code_dep | departements | tx_pauvrete_monaitaire | population | |
---|---|---|---|---|---|---|---|---|
0 | 02 | Aisne | POLYGON ((3.17270 50.01200, 3.18220 50.01234, ... | 2022 | 02 | Aisne | 18.4 | 524403 |
1 | 10 | Aube | POLYGON ((3.41479 48.39027, 3.42208 48.41334, ... | 2022 | 10 | Aube | 16.3 | 311083 |
création de la carte folium :
# utilisation de la fonction .centroid pour centrer la carte sur les coordonnées de découpage des départements métropolitains :
carte = folium.Map(location=[merged_data['geometry'].centroid.y.mean() , merged_data['geometry'].centroid.x.mean()], zoom_start=6.3, tiles='OpenStreetMap')
# création de la choroplèthe avec les découpages geometry du fichier geojson :
folium.Choropleth(
geo_data = geo_df,
data = merged_data,
columns =['code_dep', 'tx_pauvrete_monaitaire'],
key_on='feature.properties.code',
fill_color='OrRd',
fill_opacity = 0.7,
line_opacity = 0.2,
legend_name=f"Taux de pauvreté monétaire"
).add_to(carte)
circle_radius = merged_data['population'].mean()
for index, row in merged_data.iterrows() :
folium.CircleMarker(
location = [row['geometry'].centroid.y, row['geometry'].centroid.x],
radius = row['population']*6/circle_radius,
color='blue',
fill=True,
fill_opacity = 0.5,
fill_color = 'blue',
opacity=0.3,
tooltip = "{} : {} habitants<br>Taux de pauvreté : {} %".format(row['nom'], row['population'], row['tx_pauvrete_monaitaire'])
).add_to(carte)
carte