In [1]:
import pandas as pd
import folium
import geopandas as gpd

df geojson

In [2]:
url_geo = "https://france-geojson.gregoiredavid.fr/repo/departements.geojson"
geo_df = gpd.read_file(url_geo)
geo_df.head(2)
Out[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 :

In [3]:
url = "https://filedn.eu/lHdttuiSAwVYBLWzET7NL14/solidR_dataset_full_geo.csv"
df = pd.read_csv(url, sep=';')
df.head(1)
Out[3]:
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

In [4]:
df_data = df[['annee', 'code_dep', 'departements', 'tx_pauvrete_monaitaire', 'population']]
df_data = df_data.query(f"annee == 2022")
df_data.head(2)
Out[4]:
annee code_dep departements tx_pauvrete_monaitaire population
303 2022 48 Lozère 14.7 76573
304 2022 23 Creuse 18.1 113711
In [5]:
merged_data = pd.merge(geo_df,df_data, left_on='code', right_on='code_dep', how='left')
merged_data.head(2)
Out[5]:
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 :

In [6]:
# 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')
In [7]:
# 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
Out[7]:
Make this Notebook Trusted to load map: File -> Trust Notebook
In [17]: