Visualisation et Webmapping

Etienne Côme, @comeetie@mapstodon.space, ENTPE

2024-03-20

@comeetie

Chercheur Université Gustave Eiffel COSYS/GRETTIA
Statistiques, Données, Visualisation, Cartographie, Transports,…
R,JS,Python,Cpp,…

Trajectoire

Toujours aimé les cartes !

Trajectoire

Toujours aimé les cartes !

en voyage

Trajectoire

Toujours aimé les cartes !

ou dans les livres

Trajectoire

Pas de formation en carto/visualisation

Plus à l’aise avec un

qu’avec un .

Trajectoire

rencontre avec la Grammaire Graphique

et avec ggplot

Trajectoire

découverte des possibilités offertes

par le js et d3

Trajectoire

découverte de la stack logicielle autour d’OSM

et des travaux de Stamen

Trajectoire

découverte de la stack logicielle autour d’OSM

donc de Mapbox

Trajectoire

découverte de la stack logicielle autour d’OSM

et de Leaflet

Trajectoire

découverte de la stack logicielle autour d’OSM

Il faut être 2

pour faire une carte/visualisation

Carte / Visualisation ?

Bruit divers ! Bruit sémantique Bruit technique Bruit sémantique
Source (Données) Emetteur (Encodage) Canal Récepteur (Décodage)

Toutes les cartes/visualisations sont

fausses

mais certaines sont

utiles

mais certaines sont

utiles

mais certaines sont

utiles

Visualisation ?

“Transformation of the symbolic into the geometric”
[McCormick et al. 1987]

“… finding the artificial memory that best supports our natural means of perception.”
[Bertin 1967]

“The use of computer-generated, interactive, visual representations of data to amplify cognition.”
[Card, Mackinlay, & Shneiderman 1999]

Pourquoi visualiser ?

Intégrer l’humain dans la boucle

  • Répondre a des questions ou trouver des questions ?
  • Prendre des décisions
  • Remettre les données dans leur contexte
  • Amplifier la mémoire
  • Calcul graphique
  • Trouver des schémas, des patterns
  • Présenter des arguments
  • Inspirer

Pourquoi visualiser ?

Analyser :

  • Développer et critiquer des hypothèses
  • Découvrir des erreurs
  • Trouver des patterns

Communiquer

  • Partager et convaincre
  • Collaborer et réviser

Anscombe quartet

g mean_x mean_y sd_x sd_y
1 9 7.500909 3.316625 2.031568
2 9 7.500909 3.316625 2.031657
3 9 7.500000 3.316625 2.030424
4 9 7.500909 3.316625 2.030578

Anscombe quartet

Cholera map (John Snow)

Visualiser

=

encoder dans des

variables graphiques

les données

Jacques Bertin

Variables graphiques

Bertin Jacques, Sémiologie graphique, Paris, Mouton/Gauthier-Villars, 1967.

Variables graphiques

Bertin Jacques, Sémiologie graphique, Paris, Mouton/Gauthier-Villars, 1967.

Marques // variables graphiques

Marques :

Eléments de base du graphiques

Variables graphique (chanels) :

Ce qui va varier en fonctions des données

Variables graphiques

Variables graphiques

Toutes les variables graphiques ne se valent pas.

Variables graphiques

Choisir une variable graphique adapté aux type de la variable représenté

Variables graphiques

Ce qui est intéressant n’est pas toujours ce que l’on a au départ.

pré-attentive processing

Combien de 3 ?

1281768756138976546984506985604982826762 9809858458224509856458945098450980943585 9091030209905959595772564675050678904567 8845789809821677654876364908560912949686

pré-attentive processing

Combien de 3 ?

1281768756138976546984506985604982826762 9809858458224509856458945098450980943585 9091030209905959595772564675050678904567 8845789809821677654876364908560912949686

pré-attentive processing

pré-attentive processing

pré-attentive processing

library(ggplot2)
ggplot(mpg)+geom_point(aes(x=cty,y=hwy,color=class))+theme_bw()

Libraries basées sur la grammaire graphique

  • ggplot (r)
  • plot (js)
  • vgplot (js)
  • plotnine (python)

library(ggplot2)
ggplot(mpg)+geom_point(aes(x=cty,y=hwy,color=class))

Questions ? variables continues ? discrètes ? ordonnées ?
temporelles ?spatiales ?

Les grands classiques

Des catégories

et

une quantité pour chaque catégorie

le bar chart

le bar chart

m_cty = mpg %>% group_by(manufacturer) %>% summarize(mcty=mean(cty))
ggplot(data=m_cty)+
  geom_bar(aes(x=manufacturer,y=mcty),stat = 'identity')+
  scale_x_discrete("Manufacturer")+
  scale_y_continuous("Miles / Gallon (City conditions)")+theme_bw()

Ordre ?

m_cty_ordered = m_cty %>% arrange(desc(mcty)) %>% 
  mutate(manufacturer=factor(manufacturer,levels=manufacturer))
ggplot(data=m_cty_ordered)+
  geom_bar(aes(x=manufacturer,y=mcty),stat = 'identity')+
  scale_x_discrete("Manufacturer")+
  scale_y_continuous("Miles / Gallon (City conditions)")+theme_bw()

Horizontal ?

ggplot(data=m_cty_ordered)+
  geom_bar(aes(x=manufacturer,y=mcty),stat = 'identity')+
  scale_x_discrete("Manufacturer")+
  scale_y_continuous("Miles / Gallon (City conditions)")+
  coord_flip()+theme_bw()

Ordre naturel imposé par le temps

ggplot(data=st_tempstats_all.df,aes(x=time,y=nbbikes))+geom_point()+theme_bw()

Ordre naturel imposé par le temps

ggplot(data=st_tempstats_all.df,aes(x=time,y=nbbikes))+geom_line()+theme_bw()

Aspect ratio

ggplot(data=st_tempstats_all.df,aes(x=time,y=nbbikes))+geom_line()+theme_bw()

Aspect ratio

ggplot(data=st_tempstats_all.df,aes(x=time,y=nbbikes))+geom_line()+theme_bw()

Aspect ratio

ggplot(data=st_tempstats_all.df,aes(x=time,y=nbbikes))+geom_line()+theme_bw()

Aspect ratio, 45°

Heuristic: use the aspect ratio that results in an average line slope of 45°.

Cleveland, William S., Marylyn E. McGill, and Robert McGill. “The shape parameter of a two-variable graph.” Journal of the American Statistical Association 83.402 (1988): 289-300.

Aire + Echelle

ggplot(data=st_tempstats_all.df,aes(x=time,y=nbbikes),fill="#777777")+geom_area()+theme_bw()

Changement de point de vue

ggplot(data=st_tempstats_all.df,aes(x=time,y=max(nbbikes)-nbbikes),fill="#777777")+
  geom_area()+theme_bw()

Line charts superposés

ggplot(data=st_tempstats_sub.df)+
  geom_line(aes(x=time,y=nbbikes,group=id,color=factor(id)),linewidth=0.8)+theme_bw()

Small multiples

ggplot(data=st_tempstats_sub.df)+
  geom_line(aes(x=time,y=nbbikes,group=id,color=factor(id)),linewidth=0.8)+
  facet_grid(id ~ .)+theme_bw()

2 variables numériques

+ catégories

Scatter plot + colors

mpg_su = mpg %>% 
  filter(class %in% c('compact','suv','pickup','minivan')) 
ggplot(mpg_su)+geom_point(aes(x=cty,y=hwy,color=class))+theme_bw()

Scatter plot + symbols

mpg_su = mpg %>% 
  filter(class %in% c('compact','suv','pickup','minivan')) 
ggplot(mpg_su)+geom_point(aes(x=cty,y=hwy,shape=class))+theme_bw()

3 variables numériques (dont une >0)

+ catégories

Scatter plot + couleur + taille

ggplot(mpg_su)+geom_point(aes(x=cty,y=hwy,color=class,size=displ))

Scatter plot + couleur + taille ! echelles

ggplot(mpg_su)+geom_point(aes(x=cty,y=hwy,color=class,size=displ))

Taille des cercles : échelle aire ou rayon ?

Rayon

Aire

Echelles de couleurs

https://colorbrewer2.org

palette + discretisation palette + discretisation + interpolation (espace colorimétrique)

Echelles ex boris

https://colorbrewer2.org

palette + discretisation palette + discretisation + interpolation (espace colorimétrique)

graphiques + complexes

https://www.data-to-viz.com/

Tufte

Data-ink ratio

Lying factor

Data-ink ratio

Data-ink ratio :

Data-ink ratio :

Remove to improve

https://speakerdeck.com/cherdarchuk/remove-to-improve-the-data-ink-ratio

Data-ink ratio :

Remove to improve

https://www.youtube.com/watch?v=bDbJBWvonVI

Lie Factor

\[\textrm{Lie factor} = \frac{\textrm{visual effect size}}{\textrm{data effect size}}\]

Lie factor :

\[\textrm{data effect size} = \frac{27.5 - 18}{18} \times 100 = 53 \%\]

Edward Tufte, The Visual Display of Quantitative Information, Cheshire, CT, Graphics Press, 2001, 2e éd. (1re éd. 1983)

Lie factor :

\[\textrm{visual effect size} = \frac{5.3 -0.6}{0.6} \times 100 = 783 \%\]

Edward Tufte, The Visual Display of Quantitative Information, Cheshire, CT, Graphics Press, 2001, 2e éd. (1re éd. 1983)

Lie factor :

\[\textrm{Lie factor} = \frac{783}{53} = 14.8\]

Edward Tufte, The Visual Display of Quantitative Information, Cheshire, CT, Graphics Press, 2001, 2e éd. (1re éd. 1983)

Lie factor : 9.4

Edward Tufte, The Visual Display of Quantitative Information, Cheshire, CT, Graphics Press, 2001, 2e éd. (1re éd. 1983)

Sachant que l’aire de la tranche “apple”” (en vert) est proportionelle à \(2.22\,cm^2\) et celle correspondant à rim (en bleue) est proportionelle à \(2.96\,cm^2\) calculer le lying factor ?

Angle / Cadrage

Angle / Cadrage

Couleurs

Couleurs

Typographie

Titre, sources, …

Un nombre infini de degrés de libertés

Sortir des sentiers batus

pour stimuler l’intérêt du lecteur

Sortir des sentiers batus

pour stimuler l’intérêt du lecteur

Overview first

Zoom and filter

Then details-on-demand

Zoom \(\Rightarrow\) Profondeur

Francepixels, contexte

Retour en 2014 !

Données carroyées massives

  • derivées des feuilles d’impositions
  • 200m x 200m pixels
  • liimit du secret statistique (11 ménages)

Contexte

open data, mais :

  • fichier volumineux, format spécifique, problème de projection
  • utilisable dans la douleur
  • avec des logiciels spécialisés mapinfo / arcgis / qgis

Une opportunité

La stack technique développée autour d’OSM

\(\Rightarrow\) allait permetre de renouveller la diffusion et les outils de visualiation de ce type de données statistiques

Une opportunité

Pas le seul à noter cette opportunité

Oliver O’Brien a proposé une approche similaire en 2015 avec data-shine (Uk)

Details technique et choix

A cette époque les tuiles vectorielles arrivaient très doucement

\(\Rightarrow\) Avantage massif pour les données statistiques

Details technique et choix

A l’époque :

  • R pour traiter les données et produires des tuiles geojson
  • leaflet pour les tuiles raster
  • d3 pour le rendu des tuiles vectorielles artisanale sur un canvas
  • canvas invisible pour gérer l’interactivité
  • importance des détails (échelle de couleurs/fond de carte/labels/…)

essayez ! c’est toujours en ligne

MAUP et aggregation mutli-échelle

Le modifiable areal unit problem (MAUP) est un biais lié à l’agrégation de données spatiales à des échelles différentes.

MAUP and multiscale aggregation

Le modifiable areal unit problem (MAUP) est un biais lié à l’agrégation de données spatiales à des échelles différentes.

\(\rightarrow\) agréger a différentes échelles et liés niveau d’agrégation et niveau de zoom.

Résoud deux problèmes :

  • Taille des tuilles !! elles doivent rester petites
  • MAUP !! possibilité d’explorer différents niveau d’agrégation facilement

Feedbacks and users

  • INSEE
  • Journalistes, sur des sujets spécifiques eg. ségregation / école / transports
  • Urbanistes pour des diagnostics territoriaux
  • Chercheur
  • Curieux …

Francepixels, evolutions

Les tuiles vectorielles sont devenues une technologie mature

accessible beaucoup plus facilement

Francepixels, évolutions

Beaucoup plus simple à réaliser maintenant :

Francepixels successeurs

Les détails ont leurs importances !

Faciliter l’interaction n’est pas aisé

Médiation

Algorithmique

Médiation

Algorithmique

Matrices OD \(\Rightarrow\) Champs vectoriels

Médiation

Algorithmique

Parties de cartes compétitives\(\Rightarrow\)Espace abstrait organisé

Médiation

Algorithmique

Relations d’abonnements\(\Rightarrow\)Espace abstrait organisé

Outils

Ressources

Merci !

Questions / Discussion