# Sur colab
1!pip install pandas fiona shapely pyproj rtree geopandas
- 1
- Ces librairies sont utiles pour l’analyse géospatiale (cf. chapitre dédié)
Mapping is an excellent way of disseminating knowledge about data, even to audiences unfamiliar with statistics. This chapter looks at the challenge of mapping and how you can use Python
to build maps.
Lino Galiana
2025-02-11
La cartographie est l’une des plus anciennes représentations d’informations sous forme graphique. Longtemps cantonnée aux domaines militaires et administratifs ou à la synthèse d’informations pour la navigation, la cartographie est, au moins depuis le XIXe siècle, une des formes privilégiées de représentation de l’information. Il s’agit de l’époque où la carte par aplat de couleur, dite carte choroplèthe, a commencé à devenir une représentation de données géographiques traditionnelle.
D’après Chen et al. (2008), la première représentation de ce type a été proposée par Charles Dupin en 1826 Figure 1.1 pour représenter les niveaux d’instruction sur le territoire français. L’émergence des cartes choroplèthes est en effet indissociable de l’organisation du pouvoir sous forme d’entités politiques supposées unitaires. Par exemple, les cartes du monde représentent souvent des aplats de couleurs à partir des nations, les cartes nationales à partir d’échelons administratifs (régions, départements, communes, mais aussi États ou Länder).
On peut voir l’émergence pendant le XIXe siècle de la carte choroplèthe comme un moment important de la cartographie, un glissement de l’usage militaire vers l’usage politique. Il ne s’agissait plus exclusivement de représenter le territoire physique mais aussi la réalité socioéconomique, dans des bornes administratives connues de tous.
Avec la prolifération de données géolocalisées et l’usage accru de données pour la décision, il est devenu crucial pour les data scientists de savoir faire une carte rapidement. Ce chapitre, complément de celui sur les données spatiales, propose quelques exercices pour apprendre les enjeux de la représentation de données sous forme cartographique avec Python
.
Produire de belles cartes demande du temps mais aussi du bon sens. Comme toute représentation graphique, il est important de réfléchir au message à faire passer et aux moyens appropriés.
La sémiologie cartographique, une discipline scientifique qui s’intéresse aux messages transmis par les cartes, propose certaines règles pour éviter de transmettre des messages faussés, volontairement ou involontairement.
Certaines peuvent être retrouvées à travers des conseils pratiques dans ce guide de sémiologie cartographique de l’Insee. Celles-ci sont reprises dans ce guide.
Cette présentation de Nicolas Lambert revient, à partir de nombreux exemples, sur quelques principes de la dataviz cartographique.
Ce chapitre présentera d’abord quelques fonctionnalités basiques de Geopandas
pour la construction de cartes figées. Pour contextualiser l’information présentée, nous utiliserons des contours officiels produits par l’IGN. Nous proposerons ensuite des cartes avec une contextualisation accrue et plusieurs niveaux d’information, ce qui permettra d’illustrer l’intérêt de l’utilisation de librairies réactives, s’appuyant sur JavaScript
, comme Folium
.
Au cours de ce chapitre, nous allons utiliser plusieurs jeux de données pour illustrer différents types de cartes :
Avant de pouvoir commencer, il est nécessaire d’installer quelques packages au préalable :
# Sur colab
1!pip install pandas fiona shapely pyproj rtree geopandas
Nous allons principalement avoir besoin de Pandas
et GeoPandas
pour ce chapitre.
Nous allons utiliser cartiflette
qui facilite la récupération des fonds de carte administratifs de l’IGN. Ce package est un projet interministériel visant à offrir une interface simple par le biais de Python
pour récupérer des découpages officiels de l’IGN.
En premier lieu, nous allons récupérer les limites des départements :
Ces données rapprochent les DROM de la France hexagonale comme c’est expliqué dans l’un des tutoriels de cartiflette
et comme l’exercice 1 permettra de le vérifier.
L’exercice 1 vise à s’assurer que nous avons bien récupéré les contours voulus en les représentant simplement. Ceci devrait être le premier réflexe de tout geodata scientist.
plot
sur le jeu de données departements
pour vérifier l’emprise spatiale. Les coordonnées affichées vous évoquent quelle projection ? Vérifier avec la méthode crs
.matplotlib
adéquates, représenter une carte avec les contours noirs, le fond blanc et sans axes.La carte des départements, sans modifier aucune option, ressemble à celle-ci :
Les coordonnées affichées nous suggèrent du WGS84
, ce qu’on peut vérifier avec la méthode crs
:
<Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World.
- bounds: (-180.0, -90.0, 180.0, 90.0)
Datum: World Geodetic System 1984 ensemble
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich
Si on fait la conversion en Lambert 93 (système légal pour l’hexagone), on obtient une emprise différente mais qui est censée être plus véridique pour la métropole (mais pas pour les DROM rapprochés puisque, par exemple, la Guyane est en principe beaucoup plus grande).
Et bien sûr, on retrouve facilement les cartes ratées du chapitre sur GeoPandas
, par exemple si on applique une transformation prévue pour l’Amérique du Nord :
Si on fait une carte un petit peu plus esthétique, cela nous donne :
Et la même pour le Finistère :
Ces cartes sont simples et pourtant elles font déjà appel à des connaissances implicites. Elles demandent déjà une connaissance du territoire. Quand nous commencerons à coloriser certains départements, savoir lesquels ont des valeurs extrêmes implique de bien connaître sa géographie française. De même, cela apparaît certes évident, mais rien ne dit dans notre carte du Finistère que ce département est bordé par l’océan. Un lecteur français le verra comme une évidence, mais ce n’est pas forcément le cas d’un lecteur étranger qui, bien sûr, ne connaît pas le détail de notre géographie.
Pour cela, nous avons des parades grâce aux cartes réactives qui permettent :
Pour ceci, nous allons garder uniquement les données correspondant à une réelle emprise spatiale, ce qui exclut notre zoom de l’Île-de-France et les DROM.
1departements_no_duplicates = departements.drop_duplicates(subset="INSEE_DEP")
departements_hexagone = departements_no_duplicates.loc[
~departements["INSEE_DEP"].str.startswith("97")
2]
On obtient bien l’hexagone :
Pour le prochain exercice, nous allons avoir besoin de quelques variables supplémentaires. En premier lieu, le centre géométrique de la France, qui nous permettra de placer le centre de notre carte.
Nous allons aussi avoir besoin d’un dictionnaire pour renseigner à Folium
des informations sur les paramètres de notre carte.
style_function = lambda x: {
1 "fillColor": "white",
"color": "black",
"weight": 1.5,
"fillOpacity": 0.0,
}
fillOpacity
à 0%.
style_function
est une fonction anonyme qui sera utilisée dans l’exercice.
Une information qui s’affiche lorsqu’on passe la souris s’appelle un tooltip en langage de développement web.
Pour le prochain exercice, il faudra utiliser le GeoDataFrame dans la projection Mercator. En effet, Folium
attend des données dans cette projection car cette librairie se base sur les fonds de carte de navigation, qui sont adaptés à cette représentation. En principe, on utilise plutôt Folium
pour des représentations locales, où la déformation des surfaces induite par la projection Mercator n’est pas problématique.
Pour le prochain exercice, où nous représenterons la France dans son ensemble, nous faisons donc un usage quelque peu détourné de la librairie. Mais la France étant encore assez lointaine du pôle Nord, la déformation reste un prix à payer faible par rapport aux gains de l’interactivité.
center
et le niveau zoom_start
égal à 5.departements_hexagone
et les paramètres style_function
et tooltip
.Voici la couche de fond de la question 1:
Et une fois mise en forme, cela nous donne la carte: