scripts/elections-scrapping/map_generate.py

71 lines
3.1 KiB
Python

import json
import folium
# Charger les données depuis le fichier JSON
with open("elections_2024.json", "r") as f:
data = json.load(f)
# Charger les coordonnées des départements depuis le fichier GeoJSON
with open("departements.geojson", "r") as f:
departements_geo = json.load(f)
# Créer une carte centrée sur la France
m = folium.Map(location=[46.2276, 2.2137], zoom_start=6)
# Définir les couleurs pour le gradient
colors = ['#f2f0f7', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d']
# Calculer la valeur maximale de pourcentage_exprimes
max_percent_exprimes = max(float(value["pourcentage_exprimes"].replace(',', '.')) for departement, values in data.items() for value in values if value["parti"] == "PARTI PIRATE")
# Parcourir les départements et ajouter des polygones avec le gradient de couleur
for departement, values in data.items():
for value in values:
if value["parti"] == "PARTI PIRATE":
percent_exprimes = float(value["pourcentage_exprimes"].replace(',', '.'))
color_index = int((percent_exprimes / max_percent_exprimes) * (len(colors) - 1))
print(color_index)
color = colors[color_index]
for feature in departements_geo["features"]:
if feature["properties"]["code"] == departement:
# Ajouter le champ percent_exprimes à l'élément GeoJSON
feature["properties"]["percent_exprimes"] = percent_exprimes
folium.GeoJson(
feature,
name=f"Département {departement}",
style_function=lambda x: {
"fillColor": color,
"color": "black",
"weight": 1,
"fillOpacity": 0.7
},
tooltip=folium.features.GeoJsonTooltip(
fields=['nom', 'percent_exprimes'],
aliases=['Département:', 'Pourcentage:'],
style=f"background-color: {color};font-size: 1.5rem;",
localize=True,
sticky=False,
labels=True,
max_width=100,
direction='auto',
prefix='<b>',
suffix='</b>'
),
popup=folium.features.GeoJsonPopup(
fields=['percent_exprimes'],
aliases=['Pourcentage:'],
style="background-color: white; font-size: 1.5rem;",
localize=True,
sticky=False,
labels=True,
max_width=100,
direction='auto'
)
).add_to(m)
# Ajouter une légende
m.add_child(folium.LayerControl())
# Enregistrer la carte en HTML
m.save("france_map.html")