Folium : affiche tes données sur une carte interactive avec Python

Folium : affiche tes données sur une carte interactive avec Python

De quoi avez-vous besoin

Version de Python

3.x

Packages

  • {"nom": "folium", "version": "0.20.0"}

Difficulté

Débutant

Tes données ont des coordonnées GPS et tu les regardes dans un tableau ? Arrête. Une carte interactive se partage d'un coup d'oeil, se zoome, et fait comprendre en une seconde ce qu'une colonne de latitudes ne dira jamais. Folium est l'outil qu'il te faut : une bibliothèque Python qui enveloppe Leaflet.js, le moteur de cartes interactives qu'on retrouve derrière une bonne partie du web.

Le principe tient en une phrase : tu écris tout en Python, Folium génère un fichier HTML, et n'importe quel navigateur l'affiche. Pas de JavaScript à écrire, pas de compte à créer, pas de clé API. Tu peux ouvrir le résultat en local, l'envoyer par mail ou l'intégrer tel quel dans un site.

Concrètement, Folium sert à visualiser des magasins, des capteurs, des clients, des trajets de livraison ou des incidents. Dès que tes données contiennent une latitude et une longitude, une carte raconte mieux l'histoire qu'un CSV. On va construire la nôtre étape par étape, avec du code que tu peux copier-coller et exécuter chez toi.

1. Installe Folium

bash
pip install folium

Folium tire ses tuiles de carte d'OpenStreetMap par défaut, donc aucune clé API à demander. Pour vérifier que tout est prêt, lance python -c "import folium" dans ton terminal. Si aucune erreur ne remonte, c'est parti.

2. Ta première carte en trois lignes

python
import folium

carte = folium.Map(location=[46.6, 2.5], zoom_start=6)
carte.save("france.html")

location est un couple (latitude, longitude) : ici le centre de la France. zoom_start=6 montre l'hexagone entier. La méthode save() écrit tout dans un fichier autonome : ouvre france.html dans ton navigateur et tu peux déjà zoomer à la molette et te déplacer à la souris.

Cette carte est vide, et c'est normal : une Map ne contient que le fond de carte. Tout le reste (marqueurs, formes, couches colorées) s'ajoute par-dessus avec des méthodes add_to(). On va la meubler progressivement.

3. Pose des marqueurs sur les grandes villes

python
villes = [
    ("Paris", 48.8566, 2.3522),
    ("Lyon", 45.7640, 4.8357),
    ("Marseille", 43.2965, 5.3698),
    ("Toulouse", 43.6047, 1.4442),
    ("Bordeaux", 44.8378, -0.5792),
    ("Lille", 50.6292, 3.0573),
    ("Nantes", 47.2184, -1.5536),
    ("Strasbourg", 48.5734, 7.7521),
]

for nom, lat, lon in villes:
    folium.Marker([lat, lon], popup=nom).add_to(carte)

carte.save("villes.html")

Chaque Marker affiche une épingle cliquable : le popup s'ouvre avec le nom de la ville. La boucle fait tout le travail : on itère sur la liste et on empile les marqueurs un à un. Remplace villes par tes propres données (clients, capteurs, magasins) : le principe ne change pas d'un iota.

4. Charge tes données depuis un CSV

python
import pandas as pd

df = pd.read_csv("mes_points.csv")  # colonnes : nom, latitude, longitude

carte = folium.Map(location=[46.6, 2.5], zoom_start=6)
for _, ligne in df.iterrows():
    folium.Marker(
        [ligne["latitude"], ligne["longitude"]],
        popup=ligne["nom"],
    ).add_to(carte)

carte.save("donnees.html")

Dans la vraie vie, tes coordonnées viennent rarement d'une liste écrite à la main : elles dorment dans un CSV, une base de données ou une réponse d'API. Folium s'entend très bien avec pandas : tu lis le fichier, tu boucles sur les lignes, et chaque ligne devient un marqueur. Si ton CSV utilise d'autres noms de colonnes, adapte simplement les clés entre crochets.

5. Des popups qui ont du contenu

python
donnees = [
    ("Paris", 48.8566, 2.3522, "2,1 M", "https://www.paris.fr"),
    ("Lyon", 45.7640, 4.8357, "522 000", "https://www.lyon.fr"),
    ("Marseille", 43.2965, 5.3698, "873 000", "https://www.marseille.fr"),
]

html = """
<b>{nom}</b><br>
Population : {pop}<br>
<a href="{url}" target="_blank">Site de la ville</a>
"""

carte = folium.Map(location=[46.6, 2.5], zoom_start=6)
for nom, lat, lon, pop, url in donnees:
    folium.Marker(
        [lat, lon],
        popup=folium.Popup(html.format(nom=nom, pop=pop, url=url), max_width=250),
    ).add_to(carte)

carte.save("popups.html")

Le popup n'est pas limité à une simple chaîne : folium.Popup accepte du HTML complet. Tu peux y glisser un titre en gras, des métriques, un lien cliquable, même une image. C'est là que ta carte passe du simple repérage à la vraie fiche d'information par point.

6. Regroupe les marqueurs en clusters

python
from folium.plugins import MarkerCluster

carte = folium.Map(location=[46.6, 2.5], zoom_start=6)
cluster = MarkerCluster().add_to(carte)

for nom, lat, lon in villes:
    folium.Marker([lat, lon], popup=nom).add_to(cluster)

carte.save("clusters.html")

Avec huit villes, un cluster ne change rien. Mais pose mille points sur Paris et les épingles s'empilent en un seul rond numéroté : tu zoomes, et le cluster éclate en marqueurs individuels. C'est la solution dès que tes données comptent des centaines ou des milliers de lignes.

7. Ajoute une heatmap pour voir les zones chaudes

python
from folium.plugins import HeatMap

carte = folium.Map(location=[46.6, 2.5], zoom_start=6)

points = []
for nom, lat, lon in villes:
    points += [[lat, lon]] * (3 if nom in ("Paris", "Lyon") else 1)

HeatMap(points, radius=30).add_to(carte)
carte.save("heatmap.html")

La heatmap colore les zones où tes points se concentrent. Ici on triche en dupliquant Paris et Lyon pour créer deux taches rouges ; dans la vraie vie, chaque point est un événement géolocalisé : une commande, un accident, un capteur qui remonte une mesure.

8. Un style qui te ressemble

python
carte = folium.Map(
    location=[46.6, 2.5],
    zoom_start=6,
    tiles="CartoDB dark_matter",
)

for nom, lat, lon in villes:
    folium.CircleMarker(
        [lat, lon],
        radius=7,
        popup=nom,
        color="#ff6b6b",
        fill=True,
        fill_color="#ff6b6b",
    ).add_to(carte)

carte.save("style.html")

tiles change le fond de carte (essaie "Stamen Terrain" ou "CartoDB positron"), et CircleMarker remplace l'épingle par un rond coloré. Tout ce que Leaflet sait faire (tuiles, popups, couches superposées) reste accessible depuis Python.

Folium transforme une liste de coordonnées en carte partageable en quelques lignes. Pas de serveur, pas de JavaScript, pas de clé API : juste un fichier HTML que tu envoies par mail, que tu ouvres en local ou que tu intègres dans un notebook.

Le vrai déclic, c'est de brancher Folium sur tes vraies sources : un CSV de ventes, une API de géolocalisation, les positions de tes capteurs. Dès qu'une donnée a des coordonnées, elle mérite une carte. La prochaine fois, ne laisse pas tes latitudes moisir dans un tableur.

K

Auteur

Krugz

Développeur fullstack

Développeur fullstack qui tente, tant bien que mal, de suivre l'actualité de l'IA au milieu d'une marée d'informations imbuvables et des milliers d'outils et de modèles qui sortent chaque jour.