Cartes Choroplètes avec Python

Créez une carte choroplèthe avec geoviews et geopandas.

choropleth map of the french population, by department

Les cartes choroplèthes sont un excellent moyen de donner du sens à un échantillon de données géographique.

Comme les heat maps (cartes de chaleur), elles montrent les variations locales d'une mesure, comme celle de la densité de population. Mais contrairement aux heat maps qui moyennent les mesures dans des bins arbitraires, les cartes choroplèthes le font suivant des frontières prédéfinies (états, villes, ou autres).

Dans cet article, vous utiliserez les toutes dernières librairies de visualisation de python pour dessiner des cartes choroplèthes. Vous apprendrez à :

  • installer holoviz, geopandas, et geoviews à l'intérieur d'un environnement conda,
  • créer vos premières cartes du monde,
  • trouver les définitions des frontières géographiques pour pouvoir faire des cartes,
  • connecter votre propre échantillon de données aux frontières géographiques pour cartographier ce que vous voudrez.

Installation

D'abord, Installez Anaconda.

Ensuite, créez un nouvel environnement conda pour cet exercice, appelé holoviz :

conda create -n holoviz

Activez-le

conda activate holoviz

Maintenant, vous pouvez installer holoviz, un ensemble de outils de haut niveau pour la visualisation en python :

conda install -c pyviz holoviz

Nous devons en plus installer geopandas et geoviews, qui sont des librairies additionnelles pour l'analyse et la visualisation des données géographiques :

conda install geopandas geoviews

Enfin, voici les fichiers que nous utiliserons dans ce tutoriel (jupyter notebook, échantillon de données), au cas où vous en ayez besoin.

graphiques interactifs dans le navigateur : cela nécessite JavaScript.

Nous venons en fait d'installer un grand nombre de packages python, qui seront (ou pas) nécessaires pour l'analyse et la visualisation de données géographiques.

Voici une description simplifiée des dépendances entre certains de ces packages :

  • geoviews : visualisation géographique
    • holoviews : outil de haut niveau pour la visualisation de données multidimensionnelles
      • bokeh : outil de visualisation de bas niveau, basé sur JavaScript
    • geopandas : description et analyse des données géographiques
      • pandas : description et analyse des données
        • numpy : manipulation efficace de tableaux de données multidimensionnels, et package central de la suite scientifique de python.

Cela peut sembler un peu compliqué, et ça l'est!

Actuellement, à la fin de l'année 2019, le paysage de la visualisation en python est en profonde mutation, et il peut être difficile de choisir les bons outils. Personnellement, voici ce que je recherche :

  1. une syntaxe compacte : Je veux pouvoir créer des graphiques sans perdre de temps à écrire du code, pour une compréhension rapide de mes données.
  2. graphiques interactifs dans le navigateur : cela nécessite JavaScript.
  3. big data : en d'autres termes, pouvoir afficher beaucoup de données sans tuer le navigateur client.
  4. python : je ne veux pas avoir à développer en JavaScript, sauf si vraiment nécessaire.

Formaliser ces quatre points m'a vraiment aidé à choisir mes outils. Par exemple, le point 4 élimine les librairies de visualisation JavaScript telles que D3.js. Je continue de penser que ces librairies sont idéales pour un affichage professionnel et à grande échelle dans le navigateur. Mais D3, par exemple, n'est pas très facile d'accès... J'y ai déjà passé une bonne semaine, et ne suis pas allé bien loin ! Je préfèrerai certainement faire appel à un expert lorsque j'aurai besoin d'un affichage basé sur D3, plutôt que d'apprendre à l'utiliser.

Bokeh, d'un autre côté, permet à l'utilisateur d'utiliser JavaScript tout en codant en python (et ce sans faire appel à D3). C'est donc exactement ce dont j'ai besoin pour le point 2.

Souvent, j'utilise bokeh directement, comme dans Affichez vos données sur une Google Map avec python ou dans Interactive Visualization with Bokeh in a Jupyter Notebook. Mais il faut souvent écrire une douzaine de lignes de code pour obtenir un graphique bokeh.

Holoviews sert d'interface de haut niveau à bokeh ou matplotlib. Il permet de créer des graphiques complexes en deux lignes de code, et répond donc au point 1.

Enfin, quand je souhaite afficher du big data, j'utilise datashader, une librairie qui permet de compresser les données en une image dynamiquement avant de l'envoyer comme graphique bokeh au client. Là encore, bokeh et holoviews sont parfaits.

En juin 2019, le projet holoviz a été lancé. L'équipe de holoviz rassemble les outils dont j'ai besoin, et semble partager mon opinion concernant l'évolution future de la visualisation en python. J'utilise donc maintenant holoviz comme point d'entrée principal pour la visualisation. Si vous souhaitez en savoir plus sur ce projet, vous pouvez vous référer à sa FAQ.

Premières cartes avec geoviews

on importe les outils dont nous aurons besoin, et on initialise geoviews :

In [1]:
import geoviews as gv
import geoviews.feature as gf
import xarray as xr
from cartopy import crs

gv.extension('bokeh')