Analyse de données géospatiales: images Docker

Pour mes travaux en analyse de données géospatiales, j’utilise principalement trois images docker. Celles-ci sont basées sur des images populaires auxquelles j’ajoute quelques outils personnalisés.

Ça faisait maintenant 6 mois que je ne les avaient pas mises à jour, alors je profite du moment pour documenter le fonctionnement de ces images. Toutes mes images sont disponibles sur Docker Hub.

Mes images pour analyse de données géospatiales sur Docker Hub
Images sur Docker Hub

Image Docker pour PostgreSQL et PostGIS

La première image est utilisée pour provisionner la base de données que j’utilise. Je travaille presque toujours avec PostgreSQL et PostGIS pour faire de l’analyse géospatiale, donc j’ai une image qui répond à ce besoin.

La version actuelle est construite depuis cette image:

# Image PostGIS originale
postgis/postgis:12-3.0

J’ajoute à celle-ci le module pgRouting, qui permet de calculer des trajets dans un graphe routier.

On peut l’obtenir en utilisant cette commande:

# Image PostGIS modifiée
docker pull franc00018/postgis-custom-cloche:latest

Image Docker pour l’analyse de données géospatiales avec R et RStudio

Pour utiliser le langage R, j’utilise, comme fondation, une image qui inclus RStudio et un ensemble de librairies géospatiales. Cette image est la suivante:

# Image Rocker Géospatiale originale
rocker/geospatial

J’y ajoute les librairies suivantes

  • r-dbi/odbc et RPostgreSQL pour me connecter à la base PostGIS
  • MMWRweek et forecast pour les séries chronologiques. Voir mon étude sur la surmortalité du COVID au Québec pour des exemples
  • plotly, rmapshaper et cartogram pour la visualisation de données et la création de cartes géographiques
  • Enfin, tinytex pour produire des documents au format LaTeX et PDF

On peut l’obtenir en utilisant cette commande:

# Image Rocker Géospatiale modifiée
docker pull franc00018/rstudio-custom-cloche:latest

Image Docker pour l’analyse de données géospatiales avec Python et Jupyter

Pour utiliser le langage Python et Jupyter en analyse géospatiale, je n’ai pas trouvé de bonne image Docker de départ qui réponde à mes besoins. Je pars donc de l’image de science des données générique suivante:

# Image Jupyter originale
jupyter/datascience-notebook

J’ajoute ensuite plusieurs librairies système pour Ubuntu afin de pouvoir compiler les librairies géospatiales adéquatement

# Installer les dépendances géospatiales
apt-get install -y libpq-dev libgdal-dev binutils libproj-dev gdal-bin libspatialindex-dev postgresql-client tesseract-ocr libtesseract-dev g++

La librairie GDAL est toujours plus capricieuse à installer, que ce soit nativement sur Linux, pour R ou pour Python. Le meilleur chemin est d’installer celle la plus à jour dans sa distribution Linux. Ensuite, télécharger les versions de dépendances qui ont exactement le même numéro de version.

Celui-ci s’obtient avec la commande suivante:

# Obtenir la version installée de GDAL
$(gdal-config --version)

Puis, de configurer le compilateur C++ pour qu’il pointe toujours sur les bons répertoiresm et télécharger précisément la bonne version avec pip.

# Configurer les variables d'environnement pour utiliser GDAL
CPLUS_INCLUDE_PATH=/usr/include/gdal C_INCLUDE_PATH=/usr/include/gdal pip install GDAL==$(gdal-config --version)

Ensuite, j’installe plusieurs librairies additionnelles avec pip. Celles-ci couvrent la connectivité à PostgreSQL, le traitement de données géospatiales, l’imagerie, le web scraping et encore plus. J’ajoute celles que j’utilise à mesure que j’en ai besoin pour que la prochaine fois que je construit l’image, elles soient là.

  • psycopg2
  • ipython-sql
  • geopandas
  • geoalchemy2
  • georasters
  • scrapy
  • opencv-python
  • openpyxl
  • epiweeks
  • jupyterthemes
  • pytesseract
  • imutils
  • pdf2image
  • jupyter_contrib_nbextensions
  • pylint
  • contextily
  • fuzzymatcher

J’ai aussi installé UDST/urbanaccess et pandana, qui servent à faire de l’analyse de graphe dans un contexte urbain, pour le transport en commun et l’accessibilité. Mais, je ne les ai pas encore utilisées.

On peut obtenir cette image en utilisant cette commande:

# Image Jupyter modifiée
docker pull franc00018/jupyter-custom-cloche:latest