Accéder au contenu principal

Géocodage pour les data scientists : introduction avec exemples

Dans ce tutoriel, vous allez apprendre trois façons de convertir une adresse en latitude et longitude à l’aide de Geopy.
Actualisé 19 sept. 2026  · 9 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

Quand vous travaillez avec des données réelles, il est rare que le jeu de données contienne d’emblée toutes les informations indispensables pour mener à bien votre projet de data science. La plupart du temps, vous partez d’informations partielles et devez enrichir les données avec des variables supplémentaires.

Il arrive par exemple que le jeu de données contienne une adresse mais pas la latitude et la longitude. Dans ce cas, la première étape d’enrichissement consiste à ajouter cette paire de coordonnées. On appelle ce processus de conversion d’une adresse en latitude et longitude le géocodage.

Le géocodage est crucial dans de nombreux secteurs, comme l’immobilier, la finance ou la logistique. Sans cette technique, impossible d’analyser et de visualiser les données sur une carte. Dans ce tutoriel, nous allons effectuer du géocodage en Python grâce à une bibliothèque indispensable appelée Geopy. C’est parti !

Qu’est-ce que le géocodage ?

Le géocodage est un processus qui consiste à convertir des adresses (par exemple « 1600 Amphitheatre Parkway, Mountain View, CA ») en coordonnées géographiques (par exemple latitude 37,423021 et longitude -122,083739), que vous pouvez utiliser pour placer des repères sur une carte ou positionner la carte. En d’autres termes, c’est la transformation informatique d’une description d’adresse physique en un emplacement à la surface de la Terre.

Le processus de géocodage passe souvent par l’interpolation de positions spatiales, comme des rues ou des parcelles, à l’intérieur des limites géographiques d’une carte. Les emplacements obtenus sont restitués sous forme de coordonnées numériques, prêtes à être utilisées pour des analyses spatiales ou des visualisations cartographiques.

Le géocodage exploite diverses sources de données pour convertir une adresse en position géographique. La source principale est une base de référence des voies, contenant les noms de rues et les plages d’adresses d’un comté ou d’une zone donnée. D’autres sources incluent les bases de codes postaux, de noms de villes et de points d’intérêt (parcs, monuments, etc.).

Le géocodage ne se limite pas à récupérer des coordonnées pour une adresse donnée. Il est aussi utilisé en analyse spatiale, en fouille de données et en nettoyage de données. Par exemple, des entreprises s’appuient sur le géocodage pour analyser des informations démographiques afin de piloter des campagnes marketing ciblées ou optimiser des tournées de livraison. Dans le domaine de la sécurité publique, le géocodage sert à cartographier les lieux d’incidents afin de dépêcher au plus vite les services d’urgence les plus proches.

En data science, le géocodage est une étape clé pour créer des visualisations géospatiales et s’applique à de nombreux cas d’usage, comme la prédiction des prix de l’immobilier, l’optimisation des itinéraires de livraison ou la planification de la réponse aux catastrophes.

Qu’est-ce que Geopy ?

Illustration par l’auteur

Geopy est une bibliothèque Python open source spécialisée dans l’ajout de la dimension géographique aux données via un grand nombre de services de géocodage, comme Google Maps, OpenStreetMap et ArcGIS.

Vous vous demandez peut-être pourquoi ne pas appeler directement un service de géocodage au lieu de passer par la bibliothèque Python. Toute la force de Geopy est de vous permettre d’exploiter ces services avec très peu de code. Geopy implémente en effet une classe pour chacun de ces services, et vous pouvez basculer facilement d’une API à une autre.

Projet pratique de géocodage

Dans cet article, nous allons analyser le jeu de données Canada Museum sur Kaggle. Il fournit des informations sur des musées situés au Canada. Une telle collection peut par exemple servir à prédire le prix d’un hébergement Airbnb à Toronto : vous avez peut-être remarqué que le loyer d’une annonce augmente à mesure qu’elle se rapproche de points d’intérêt comme les musées, restaurants, cafés, etc.

Jetons un œil au jeu de données :

import pandas as pd
import geopy

l_cols= ['Name','Street Address','City','State','Zipcode']
df = pd.read_csv('/kaggle/input/canada-museums/museums list CAN.csv', encoding = "ISO-8859-1",usecols=l_cols)
df = df[df.City=='Toronto']
df.head()

jeu de données

À ce stade, on observe plusieurs colonnes liées à l’adresse : le nom du musée, l’adresse, la ville, l’État/province et le code postal.

Pour la suite, nous avons besoin d’une colonne unique qui regroupe toutes ces informations. Comment faire ? La manière la plus efficace de concaténer plus de deux colonnes est d’utiliser pandas.series.str.cat(), qui permet de définir le séparateur souhaité entre les colonnes :

df['Country'] = 'Canada'
l_cols_concat = ['Street Address','City','State','Zipcode','Country']
df['unique_address'] = df['Name'].str.cat(others=df[l_cols_concat], sep=',',na_rep='')
df.head()

jeu de données avec adresse unique

Créons une variable chaîne « address1 » qui contient l’adresse unique de la première ligne :

address1 = df['unique_address'].iloc[0]
print(address1)
# Bizune Event Gallery,452 Richmond St W,Toronto,ON,M5V 1Y1,Canada

Nous allons l’utiliser ensuite pour tester différents services de géocodage sur une adresse unique. Une fois que le fonctionnement de Geopy est clair, on pourra l’étendre à toute une colonne d’un dataframe pandas. Nous allons essayer les grands fournisseurs suivants :

  • Google Maps
  • OpenStreetMap
  • ArcGIS

Géocoder avec l’API Google Maps

La méthode la plus répandue pour convertir des adresses en coordonnées consiste à utiliser l’API Google Maps.

Même si Google Maps propose des services payants, vous bénéficiez de 200 $ de crédits gratuits lors de la création de votre compte.

Pour accéder au service, créez un compte sur la Google Maps Platform. Ce tutoriel détaillé explique comment générer votre clé API.

GM_API_KEY = 'your_api_key'
from geopy.geocoders import GoogleV3
geolocator = GoogleV3(api_key=GM_API_KEY)

GoogleV3 est la classe prévue pour utiliser l’API Google Maps v3. Commençons par extraire la position à partir d’une seule adresse :

location = geolocator.geocode(address1)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

image5.png

Ensuite, étendons cette opération au champ unique_address que nous avons créé.

def service_geocode(g_locator, address):
    location = g_locator.geocode(address)
    if location!=None:
      return (location.latitude, location.longitude)
    else:
      return np.NaN

Nous pouvons utiliser apply() pour appliquer la fonction à toutes les lignes de unique_address :

df['LAT_LON'] = df['unique_address'].apply(lambda x:service_geocode(geolocator,x))
df[['unique_address','LAT_LON']].head()

image3.png

Géocoder avec l’API OpenStreetMap

OpenStreetMap étant la plus grande base géographique libre et collaborative, son API est gratuite. Pour géolocaliser une adresse unique, il suffit de fournir l’email de votre compte OSM à la classe Nominatim, au lieu d’une clé API :

from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="your_email")
location = geolocator.geocode(address1)
print(location)
# None

Malheureusement, l’API OpenStreetMap renvoie None car elle ne reconnaît pas l’adresse.

En effet, cette API peine à localiser la plupart des adresses postales du jeu de données, car la couverture n’est pas homogène partout.

Pour cette raison, nous allons créer un autre champ unique_address_osm avec moins d’informations :

l_cols_concat = ['City','State','Country']
df['unique_address_osm'] = df['Street Address'].str.cat(others=df[l_cols_concat], sep=',',na_rep='')
address1_osm = df['unique_address_osm'].iloc[0]

Ensuite, nous passons la nouvelle adresse et essayons à nouveau d’extraire la latitude et la longitude à partir de l’adresse :

address1_osm = df['unique_address_osm'].iloc[0]
location = geolocator.geocode(address1_osm)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

image8.png

Comme précédemment, nous appliquons la fonction service_geocode() à toute la colonne unique_address_osm :

df['LAT_LON_osm'] = df['unique_address_osm'].apply(lambda x: service_geocode(geolocator,x))
df[['unique_address_osm','LAT_LON','LAT_LON_osm']].head()

image11.png

Même sans préciser le nom du musée, OpenStreetMap renvoie des coordonnées très proches de celles de Google Maps API.

Géocoder avec l’API ArcGIS

ArcGIS est un logiciel qui permet d’analyser et de visualiser des données géospatiales. Il propose également des services de localisation, à l’instar de Google Maps et d’OpenStreetMap.

from geopy.geocoders import ArcGIS
geolocator_arcgis = ArcGIS()
location = geolocator_arcgis.geocode(address1)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

image2.png

Cette fois, aucune difficulté pour obtenir la paire de coordonnées. Poursuivons en étendant l’opération à toutes les adresses :

df['LAT_LON_arcgis'] = df['unique_address'].apply(lambda x: service_geocode(geolocator_arcgis,x))
df[['unique_address','LAT_LON','LAT_LON_osm','LAT_LON_arcgis']].head()

image6.png

À l’examen des premières lignes du jeu de données, on constate que les paires de coordonnées obtenues avec ArcGIS sont proches des précédentes, avec de légères différences.

Mesurer la distance entre deux lieux

Autre fonctionnalité de Geopy : le calcul de la distance entre deux points. Cela s’appuie sur la distance géodésique calculée entre deux paires (latitude, longitude).

from geopy.distance import geodesic
point1 = df.LAT_LON_arcgis.iloc[0]
point2 = df.LAT_LON_arcgis.iloc[1]
distance = geodesic(point1, point2)
print('The distance between {} and {} is {} meters'.format(df.Name.iloc[0],df.Name.iloc[1],distance.meters))

image1.png

La distance entre ces deux musées est d’environ 2 kilomètres.

Pour aller plus loin

Voilà ! Vous connaissez désormais trois façons de convertir une adresse en latitude et longitude avec Geopy. C’est une excellente base pour des analyses géospatiales plus avancées.

Si vous souhaitez débuter l’analyse géospatiale sans écrire de code, le mieux est de consulter le tutoriel de DataCamp Working with Geospatial Data: A Guide to Analysis in Power BI.

Pour créer des visualisations et des calculs plus avancés, Tableau peut être l’outil idéal. Le cours de DataCamp Introduction to Tableau vous permettra de créer des visualisations de données dynamiques et de résoudre vos problématiques analytiques.

Si vous êtes adepte du langage R, ce cours est parfait pour créer des cartes interactives avec leaflet. Si vous restez fidèle à Python, jetez un œil à Visualizing geospatial data in Python, qui vous aidera à réaliser de superbes visualisations avec geopandas et folium.


Eugenia Anello's photo
Author
Eugenia Anello
LinkedIn

Data Scientist - CRIF

Sujets
Python

Formez-vous sur les sujets mentionnés dans ce tutoriel !

Cours

Travailler avec des données géospatiales en Python

4 h
18.1K
Ce cours vous montrera comment intégrer des données spatiales dans votre flux de travail Data Science Python.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow