Datagistips

datagistips, axé sur l’opensource SIG et l’opendata des données spatialisées, essaie de rendre la donnée amusante, via des cas d’usage inspirés du quotidien. Il informe aussi de nouveautés, sur certaines technologies, à appliquer dans le domaine de la géomatique. Se voulant original, il tente de relier au domaine SIG, des sphères communément extérieures à celle-ci : celle des statistiques, de la récupération de données depuis Internet, ou du design génératif appliqué à la cartographie.

Parcourir le Monde

Quel est l’itinéraire idéal pour parcourir le Monde ? Combien de temps de vol cela prendrait ? Quels sont les deux pays les plus distants l’un de l’autre ?
Dans ce post, j’ai fait mumuse avec la carte du globe, et appris des choses au sujet des distances orthodromiques et des voyageurs de commerce. Bon voyage !


Dernièrement, j’ai eu un échange avec @matamix au sujet du calcul de trajets permettant de couvrir un ensemble de points de façon optimale.

Nous avons échangé au sujet du code, puis une question m’est venue : dans quel ordre devrais-je visiter les différents pays, dans l’éventualité d’ un tour du monde (rêvons un peu). C’est la problématique du voyageur de commerce, qui doit démarcher un certain nombre d’adresses en un minimum de temps. Il s’avère que la problématique du voyageur de commerce peut s’appliquer à des domaines non spatiaux, comme ordonner des séquences génétiques, voire regrouper des individus (au sens statistique) selon leur proximité : intéressant !

« Attrape-moi si tu peux ! »

Tout d’abord, il faut se poser la question des distances entre les différents pays. L’espace dans lequel on doit travailler n’est pas euclidien, plan, mais sphérique. Ainsi, pour rejoindre le Japon depuis les Etats-Unis, inutile de traverser l’Atlantique, bien sûr. Les distances que l’on doit calculer sont les distances de grands cercles ou orthodromiques. Il existe apparemment différentes méthodes, la plus courante étant celle utilisant la loi sphérique des Cosinus

Sous R, on peut calculer 4 sortes de distances des grands cercles grâce au paquet geosphere.

J’ai récupéré les contours des pays depuis le magnifique Natural Earth, déterminé le centre des pays, et calculé les distances entre chaque, de sorte à réaliser une matrice de distance entre les différents pays. Cette matrice peut être vue comme un réseau constitué de noeuds : les pays, connectés entre eux par des arêtes de poids égal à la distance qui les sépare.

On obtient une matrice des distances orthodromiques, dont voici ci-dessous une illustration, avec 177 lignes et 177 colonnes (autant de pays que dans la couche des pays), soit 177^2 « cases ». Plus la couleur est claire et plus la valeur de distance est grande. On voit que la diagonale est obscure. Les poids sur celle-ci sont nuls, puisque la distance de la France à la France est nulle. On voit que la matrice est symétrique puisque la distance, à vol d’oiseau, est la même de la France à l’Espagne que de l’Espagne à la France.

Entrez dans la matrice…

D’ailleurs, à partir de cette matrice, je me suis amusé à déterminer les trajets les plus grands entre deux pays sur le globe. En voici la liste des 10 premiers, chaque ligne représentant un trajet, dans l’ordre d’importance :

En allant du Paraguay à Taïwan, on parcourt quasiment la moitié de la Terre, la circonférence de cette dernière étant de 40 075 km

Et voici la carte correspondante pour les 5 plus grands trajets :

De même, voici la liste des pays les plus « isolés » :

Revenons à nos moutons…ou plutôt à nos voyageurs de commerce. Maintenant que notre matrice a été constituée, nous pouvons calculer le chemin optimal qui parcourt tous les noeuds une seule fois en cumulant un poids minimal (une distance minimale). Il existe plusieurs méthodes permettant de résoudre la problématique du voyageur de commerce. Dans un premier temps, j’ai tenté la plus commune, la méthode des plus proches voisins, mais elle me trouvait un itinéraire assez bizarre.

Le voyageur de commerce qui avait mal planifié son voyage

En fait, c’est normal : la méthode des plus proches voisins prend un point au hasard, détermine le point le plus proche, et répète l’analyse de proche en proche jusqu’à ce que tous les points aient été visités. Une variante prend comme point de départ chaque noeud, compare les tournées, et choisit la meilleure. Cet algorithme est assez basique.

C’est avec l’algorithme Concorde que j’ai obtenu le meilleur résultat. Voici ce que dit Wikipédia à propos de Concorde :
« a state of the art implementation”
“one of the best exact TSP solvers currently available.”
“is widely regarded as the fastest TSP solver, for large instances, currently in existence ».
Bref , il s’agit du voyageur de commerce le plus performant du monde, apparemment. Il doit être milliardaire à l’heure qu’il est !

 Voici donc l’itinéraire que j’ai pu trouver pour parcourir les pays du monde entier, prenant en compte les distances sphériques entre pays. On voit que j’ai aussi inclus l’Antarctique : soyons un peu aventureux !

Carte avec les fuseaux horaires

Voici un extrait des pays, dans l’ordre, au moins pour les premiers (ou les derniers, selon le sens où l’on va) :

Bon, Corée du Nord, 16e dans la liste, on passe ?

En distance, en tout, cela représente un peu plus du tiers de la distance Terre-Lune, cette dernière étant de 384 400 km, et entre trois et quatre fois le tour de la Terre

Je me suis demandé combien de temps de vol cela représenterait pour parcourir tout ça. Il existe un site appelé travelmath qui donne le temps de vol entre tous les pays.

(et 11 secondes)

Avec un petit chouilla de scraping – rien de compliqué – j’ai pu récupérer ces temps tout le long de mon itinéraire, soit pour 176 couples origine-destination. J’ai fait le calcul : il faudrait 12 jours ! pour effectuer cet itinéraire. En bref, si vous projetez une année sabbatique, ça vous fait un jour à passer dans l’avion par mois en moyenne, pas très reposant…et peu écologique !

Dataventures

Bon, je dois vous avouer qu’utiliser le Concorde (l’algorithme) n’a pas été forcément une mince affaire. Dans un premier temps j’ai testé l’outil Concorde en interface graphique et me suis rendu compte qu’il fournissait des bons résultats :

Pas mal !

Mais le souci, c’était que visiblement, ce dernier ne prenait en compte que les fichiers de coordonnées, et pas les matrices de poids !..

J’ai essayé de convertir ma matrice de distances orthodromiques en coordonnées avec un échelonnage multi-dimensionnel et une fonction de R appelée cmdscale, mais cette méthode est loin d’être optimale car j’avais en coordonnées le Cameroun plus proche de la France que la Belgique (!). Ca m’a un peu trotté cette histoire jusqu’à ce que je conclue, bêtement, que cela venait du fait que l’espace dans lequel raisonne cmdscale ne peut prendre en compte la nature sphérique des distances (c’est comme si on était dans une autre dimension avec ma matrice).

Comme un petit problème..

J’ai donc dû me rabattre sur les exécutables source. J’ai téléchargé Concorde depuis un site universitaire canadien

Le site, qui n’a peut-être jamais crashé, contrairement à son outil éponyme

A noter que la licence ne prévoit qu’une utilisation académique, et non commerciale, malgré le nom de l’algorithme 😉 L’outil est exécutable sous Windows grâce à Cygwin, un émulateur Linux. Du coup, j’ai installé Cygwin en 64 bits. Hors, ça ne fonctionnait pas. Je me suis aperçu après moult recherches que Concorde.exe fonctionnait avec Cygwin 32 bits, et non 64 bits. Bon, finalement, lorsque concorde.exe a affiché l’aide dans l’invite de commandes, j’étais soulagé !

**Alleluïa**

Une fois tout bien configuré, j’ai pu utiliser Concorde dans R après avoir donné le chemin via concorde_path (youpi !) :

Cool, ça marche. Le rouge, c’est juste un avertissement
Allez, pour finir, voici des cartes que l’on trouve sur le web, qui donnent le chemin le plus court pour parcourir la planète (pas si éloignées que ça de la mienne) :
Aller d’une capitale à l’autre selon wolfram

La réponse était aussi sur reddit, sur le canal « Map Porn »

Crédits icônographie
Globe issu de Wikipédia
The Crown, by Oliviu Stolan from NounProject
The Wing by Alice Noir from NounProject

Le sport en France métropolitaine et le leurre cartographique

Dans ce post, nous allons voir comment réaliser un leurre cartographique, soit la réalisation d’une carte représentant un territoire totalement façonné par des données. Plus précisément, nous verrons la conception d’un territoire de la pratique sportive par départements en France.&nbsp



Territoire physique et territoire vécu

Le territoire physique, tout le monde le connaît. Le paysage se déploie sous nos yeux de façon continue, façonné par des variables non discrètes dans l’espace, à savoir le climat, le relief, etc… Mais le territoire perceptible est-ce il le seul qui existe ?

Nous pourrions imaginer qu’en surcouche de ce dernier flottent une multitude de nappes géographiques :
celui du patrimoine mémoriel, des références culturelles, historiques, celui des bises, du pain au chocolat ou de la chocolatine…

Pain au chocolat ou chocolatine par Adrien Van Hamme

Il s’agit des territoires perçus, vécus, ressentis, voire même parfois imaginés. Ils sont révélés par les sondages, les enquêtes d’opinion, sous la forme la plus courante de choroplèthes.

Le sport comme nouveau territoire

Le basket en France

Un article de matamix sur slate montrait comment le territoire pouvait se métamorphoser selon la pratique sportive. Ici, des rugueux ? Là, des footeux ? La carte se boursoufle selon ce que l’on pratique.
Dans la continuité de ce travail, je me suis posé la question suivante : considérant la pratique sportive dans les départements,  peut-on remanier le territoire selon le sport pratiqué par les français et, ainsi, faire figurer, cote à cote, des départements où l’on pratique à peu près le même sport ?

Réalisation  d’un « leurre cartographique »

Intégration du fichier et remaniement du tableau

J’ai donc récupéré le fichier des licences sportives de 2013 depuis data.gouv.fr. C’est celui-ci qu’a également utilisé matamix.
Le fichier recense à la fois les sports olympiques et non olympiques. J’ai choisi de me concentrer seulement sur les sports olympiques.
Le fichier est au format long :

Le fichier des licences vu dans le logiciel RStudio

Nous n’extrayons que les sports olympiques (dont le code fédé commence par 1).
Il serait davantage intéressant de le convertir au format large. Nous aurions alors une colonne par pratique sportive. Hop, ça y est, on a notre fichier au format large :

Format large : une ligne par communes et les sports en colonnes

Il nous suffira juste d’agréger les valeurs pour avoir des stats départementales et non communales.

Des stats communales aux stats départementales


Remaniement spatial

Chaque département peut être positionné dans un espace de dimensions égales au type de sport. C’est comme si on était dans un graphique non pas avec deux axes abcisse et ordonnée, mais 31 axes correspondant aux 31 sports pratiqués.

exemple de 21 points dans un espace à 5 dimensions (♪ musique de X Files )

Ce qui signifie que dans cet espace à 31 dimensions, la distance entre chaque département donne une indication de leur similarité en terme de pratique sportive. Nous calculons la matrice de distance entre chaque département dans cet espace. Le résultat est un tableau de contingence avec la distance euclidienne entre tous les départements dans l’espace considéré.

matrice des distances (euclidiennes) entre départements selon les sports pratiqués

Et si nous essayions de ramener cet espace de 31 dimensions dans un espace de 2 dimensions X et Y, soit un espace représentable sous forme de carte ? Cela peut être accompli avec la technique de positionnement multidimensionnel qui affectera une position dans l’espace à chacun de nos départements en partant de la distance qui sépare chacun. Voici ce que cela donne :

Multi Dimensional Scaling

Si l’on colorie les points de ce graphique et la carte des départements en fonction de leur classe selon la méthode des k-moyennes, on obtient ça :

méthode des k-moyennes avec 5 classes selon la pratique sportive

Au positionnement géographique et aux caractéristiques topographiques des départements semblent répondre les classes des k-moyennes. On voit un groupe de départements violet, où prédominent les départements alpins. On voit un groupe vert au Nord comprenant au Sud la Gironde.

Pour investiguer plus largement la carte et quels sports sont majoritaires dans chaque classe, il aurait fallu faire une moyenne des licenciés par sport, par département et par classe. Nous n’avons pas réalisé ce calcul ici, mais on trouvera à la fin une heatmap qui pourra nous donner satisfaction..

Du nuage de points au faux relief

Pour faire une carte, cela peut amplement suffire..mais s’il s’agit de stimuler l’attention et l’imagination de celui qui lira la carte, il faudra sans doute un peu plus faire d’efforts. Pourquoi ne pas emprunter les codes usuels de la cartographie ?

Comme l’objectif est de partir d’un territoire pour arriver à un autre, complètement remanié selon des variables fournies en entrée, nous allons tenter de travestir ce modeste graphique X Y en carte, laissant penser que ce territoire existe vraiment.

Le premier « trick » consiste à transformer ce « nuage » de points en relief. Pour cela, on le convertit en carte de chaleur.

hitmap ! heu, une carte de densité ou de chaleur

Cette carte de chaleur fournit un ersatz de modèle numérique de terrain, auquel on affecte des codes couleur selon l’altitude, qui évoquent successivement la mer, le sable chaud, la montagne et ses forêts.

Des couleurs choisies avec soin métamorphosent une simple heatmap en archipel

De ce faux MNT, on dérive un ombrage :

De tout MNT et surface continue, on peut dériver un ombrage (hillshade)

On ajoute le relief, l’ombrage avec un peu de transparence, puis les noms de départements. Et voilà : on obtient une « fausse carte » :

(Cliquez pour voir en grand)

La heatmap de la pratique sportive

Si vous souhaitez confronter la carte avec les données sportives, voici une heatmap créée sous R et « designée » sous QGIS :

Une heatmap dont le rendu a été fait dans QGIS : si, si !
(cliquer pour voir en grand)

En fait, c’est un raster que j’ai polygonisé et dont j’ai fait le rendu sous QGIS. Comme quoi on peut tout à fait colorier des graphiques sous QGIS sur la base de données produites sous R. Cette heatmap utilise des données recentrées afin de pouvoir comparer des pratiques sportives minoritaires avec des plus généralisées. Ca pourrait valoir le coup que j’explique comment j’ai produit ça dans un prochain post.

On peut remarquer sur la carte des choses assez banales, et d’autres plus peu surprenantes :

  • Si les départements alpins, y compris ceux de Corse sont assez proches, Jura et Vosges, bien qu’étant aussi des départements montagneux, sont à part, de mêmes que  les Pyr. Orientales.
  • Val de Marne, Hauts de Seine, Seine Saint Denis sont aussi proches sur cette carte. Essonne, Yvelines et Val d’Oise sont pourtant tout à fait ailleurs. Paris est éloigné du reste.
  • La Seine-et-Marne partage le même îlot que l’Isère et la Gironde, et avec la heatmap, on voit que l’on y pratique l’aviron et la voile.
  • Le Nord et le Pas-de-Calais sont fans de hockey sur glace.

Je vous laisse le soin d’apporter vos propres observations…

Des statistiques et des bulles d’iris qui flottent sur Paris

Cet article traite des cartes avec camemberts, des problèmes que cela pose d’un point de vue graphique, et cartographique. Mais surtout, nous verrons la conception d’une carte socio avec diagrammes, par contour IRIS à Paris, qui s’appuie sur le circle packing. Tout ça en essayant d’être rigolo.

Cliquer sur l’image modes de pour voir en grand


La tarte tatin, c’est bon …enfin, ça dépend


Les twix, c’est meilleur que les donuts


Les américains, ils disent que les tartes aux pommes, c’est pas bon. En effet, un article de Business Insider affirme qu’il est difficile de se faire une idée des proportions avec les pie charts. C’est pourquoi on en mange autant.

En France, on appelle ces pie charts des camemberts… On aurait pu appeler ces graphiques des « quiches lorraines » ou « pizzas 4 fromages » selon ce qu’on préfère. Résidant en Provence, je dirais « pompe à l’huile »

« Les chiffres sont critiques !  Regardez donc cette pompe à l’huile ! »

Une tarte un peu spéciale


http://www.datemplate.com/post_types-of-charts_136702/gende
En fait, la vraie dénomination de ce graphique serait d’après l’illustration ci-dessus des « slice chart ».
Si l’on se réfère à cette illustration, la vraie pie chart serait une tarte tellement disproportionnée que tout pâtissier assez audacieux pour en confectionner une se ferait interner.
Cette pie chart présente en réalité certaines caractéristiques des radar charts, ou encore spider charts (des arachnophobes dans la salle ?)

Du coup, on pourrait la traduire par RADAR PIE CHART ™, ou « tarte espion » en français.

Ce type de graphique assez bizarroïde présente selon moi certains avantages sur une carte.
En admettant que l’angle de chaque part de tarte espion soit identique, chacune possèdera la même directivité dans l’espace, ce qui facilite les comparaisons. Ce n’est pas le cas avec la tarte maison.
Evidemment, cela ne marche plus dès lors que l’on fait varier à la fois l’angle des parts et leur longueur. C’est un cas qu’on rencontre assez souvent avec des graphiques car la bidimensionnalité est leur vocation première.

Ces tartes espion peuvent être utiles afin de figurer des variables statistiques discrètes mais aussi continues, par exemple temporelles.

Bulles de statistiques


Les iris ne sont pas que des fleurs

L’IGN et l’Insee nous ont gratifiés il n’y a pas si longtemps des contours…IRIS ®, l’iris étant le niveau d’agrégation et administratif le plus fin après la parcelle, le bâtiment et le pavé de trottoir.
En liant des données statistiques à ces IRIS, on peut réaliser tout plein d’analyses et de cartes folles et sympas, ce qui explique pourquoi la mise à disposition de ces contours a pas mal excité la géosphère.

« retrouvons-nous après un petit flash publicité »

Bon, je le dis comme ça : à l’ouverture des données, je m’étais amusé à réaliser une carte des IRIS niveau France entière avec des…iris

Catégories socio-professionnelles

L’Insee, acteur historique de l’#Opendata en France https://t.co/9G7jFHY7N6 pic.twitter.com/Ws9Ei9bOYs

@Insee (@InseeFr) 9 février 2016

C’est fou tout ce qu’on trouve sur le site de l’INSEE, mine de rien. La donnée qui nous intéresse ici est le fichier Travail-Emploi du recensement général de la population de 2012 à l’Iris. Grâce à ces données, on peut faire des cartes très intéressantes pour se faire une idée, entre quartiers, de la mixité sociale, du mode de déplacement privilégié des riverains : voiture, deux roues, etc

Illustrons la méthode en nous appuyant sur la première carte à bulles présentée en début de page. Les colonnes du fichier statistique qui ont été utilisées sont :

  • nombre d’agriculteurs : on en trouve à Paris, si s
  • nombre d’artisans, commerçants et chefs d’entreprise
  • nombre de cadres et professions intellectuelles supérieures
  • nombre personnes occupant des professions intermédiaires
  • nombre d’employés
  • nombre d’ouvriers

Quand les diagrammes posent des soucis aux géomaticiens

Nous pourrions être tentés de représenter ces données sous forme pie charts (camemberts), voire de graphiques à barres (twix).

Dans les deux cas, la difficulté vient, à l’échelle de travail qui est assez fine, du phénomène appelé overlapping qu’on appelle recouvrement en français, mais ça fait moins stylé.

ça fait over-mal

L’astuce du jour, le circle packing, ou empaquetage de cercles (on traduit comme on peut)


L’astuce du jour  $*♪ TADAM ♪*$  consiste à utiliser la technique du circle packing.

Cette technique que Google traduit par « cercle d’emballage », consiste à répartir le mieux possible des cercles dans un espace de telle sorte qu’aucun ne recouvre l’autre.

C’est un peu ce qui se passe si vous remplissez à 99% une table de billard de boules et que vous mettez des boules dessus. Ces dernières vont se faufiler, pousser les autres jusqu’à le tout se soit équilibré (mais faut avoir bouché les trous du billard avant).

Son application en cartographie la plus connue s’appelle les cartogrammes de Dorling, du nom de son créateur, Danny Dorling

Danny Dorling (au photomaton ?)
http://www.abc.net.au/4corners/stories/2011/10/04/3331769.htm


A quoi ressemblera ma carte


un méchant diagramme
Au niveau de chaque rosace, chaque catégorie se verra affecter une tranche sur le diagramme et cette dernière sera d’autant plus grande qu’il y aura d’employés, ou de cadres, ou d’artisans,…

La carte


Le feeling


Et là, dans ma tête, cercle a évoqué « bulles ». Des bulles flotteraient au-dessus de la capitale avec des statistiques dedans. Les stats c’est lourd, mais quand elles sont dans des bulles, c’est plus léger.

Éléments de contexte


Bon ok, c’est un peu flou, et même très petit


J’ai positionné la Seine, épine dorsale de la capitale ainsi que les contours d’arrondissements (BDROUTE 500 ®) avec un léger flou, pour donner de la profondeur de champ, comme en photographie, ainsi que rejoindre cette idée de légèreté.

L’algorithme de circle packing s’est chargé du mieux qu’il a pu, de répartir les boules de même circonférence sur le territoire, alors que les iris ont initialement des formes, surfaces différentes, il faut faire attention à l’échelle d’analyse.
Chaque bulle a la couleur d’un arrondissement. Cela est d’autant plus nécessaire que la limite imposée à l’algorithme en terme d’itérations a pu entraîner par endroits le transfert d’une bulle dans un arrondissement voisin.

Parlez arrondissement à un provincial comme moi, et il n’y pigera que nenni. Parlez-lui métro, et tout s’éclaire. Tout touriste parviendra à adjoindre une atmosphère à une bouche de métro. Les noms « Barbès », « Porte d’Italie », « Le Trocadéro », « La Défense » évoquent tout de suite des ambiances, des souvenirs.

Les stations de métro fournissent un très bon référentiel que j’ai choisi d’ajouter en filigrane afin de relier l’environnement socio-professionnel à ce réseau auquel on se réfère souvent.

La couleur des lignes, des étiquettes est celle du logo de la RATP. Fallait bien choisir une couleur et la couleur peut évoquer une fonction.

Pour récupérer les lignes ainsi que les stations, j’ai utilisé une petite requête overpass (overpass est  un super outil d’interrogation et d’extraction de données OSM par attributs et critères géographiques et non un pass navigo illimité que l’on trouve sur le darknet).

Les iris et leurs niveaux supérieurs

Aussi, les noms d’Iris constituent des toponymes intéressants à faire figurer sur la carte. Cependant, ils sont beaucoup trop nombreux. On trouvera par exemple PERE LACHAISE 1, PERE LACHAISE 2, etc…

groupes_iris = sub("^(.*) ([0-9]+)$", "\1", iris.df$NOM_IRIS)

Grâce à une petite expression régulière, j’ai récupéré la racine du nom de l’iris sans le numéro et constitué une couche agrégée d’entités de niveau supérieur. Les noms de ces entités supérieures ont servi à l’étiquetage. Je leur ai affecté la même couleur que celle de l’arrondissement auquel ils appartiennent.

Bribes de design

D’un point de vue programmatique, pour générer ces diagrammes, je me suis appuyé sur la librairie R packcircles et des rudiments de géométrie.

En particulier, pour avoir une tranche de gâteau, il suffit de générer un polygone issu d’une série de points, elle-même définie en fonction d’une distance à un centroïde, d’un effectif et d’une rangée d’angles.

Sous QGIS, un mode est utilisé, qui de son joli nom « Flannery », permet de définir de façon automatique la taille de symboles proportionnels. Ce mode se base sur une fonction interne de QGIS appelée scale_exp. D’après la documentation utilisateur officielle de QGIS, cette fonction échelonne des valeurs entre une valeur minimale et une maximale en suivant une courbe exponentielle.

J’ai porté le code sous R grâce à la doc’ API de QGIS pour définir la taille des pales de la rosace.
Il s’avère qu’en réalité, le rééchelonnage des valeurs se fait selon une courbe de puissance. La fonction devrait du coup plutôt s’appeler scale_pow. 
Voici une illustration de ce que cette fonction accomplit :

La fonction puissance permet de mieux dissocier les valeurs hautes
Si l’on effectue un étirement linéaire, on perçoit moins les différences de valeur :

étirement linéaireVS étirement par puissance

Du QGIS


Sur cet iris, des employés d’abord. des professions intermédiaires ensuite, des cadres, des ouvriers et des artisans enfin

Pour les bulles, j’ai utilisé le dégradé selon la forme, auquel j’ai ajouté un effet d’ombre intérieure.
J’ai utilisé l’effet flou ainsi que des ombres portées sur les autres éléments d’habillage.
Pour les pétales de la rosace, j’ai utilisé un dégradé simple pour un peu de skeumorphisme ainsi que des ombres portées.
J’ai également utilisé les modes de fusion, celui de lumière dure et surtout, celui appelé « multiplier ».

Déclinaisons

Paris, encore

On peut décliner ces cartes sur tout un tas d’autres sujets.

Voici, sur le même mode, la répartition entre étudiants, chômeurs et retraités à Paris par iris:

Et ici, les modes de déplacement utilisé à Paris : deux roues, voiture, transport collectif, marche à pied :

Bonus tracks

Allez, en bonus, voici une carte de la population par âge quinquennal, par département

A vrai dire, je n’ai rien inventé : des cartes exploitant cette technique ont déjà circulé dans les médias, souvent réalisées à l’échelle internationale ou nationale.

Par exemple, il y a cette carte de la pollution, issue de l’atlas du carbone :


Kenneth Field, un carto-critique très pertinent, et créateur de cartes originales, avait par exemple créé cette carte à l’occasion du mondial du football

Rond – ballon, il n’y a qu’un pas !

Le bâti de Paris façon réseau ou comment faire des gribouillis avec R comme avec Processing

Paris sous forme de réseau. Non, on ne parle pas de rues, mais de bâti. Dans cet article, nous proposerons le passage d’une représentation à plat des bâtiments en une figuration sous forme de lignes, aux multiples évocations. On verra qu’avec R, on peut faire certaines choses comme Processing, l’outil de référence en design génératif.

La carte


Cliquer sur l’image pour la voir en grand sur flickr
Sur cette carte est représenté le bâti de Paris sous la forme d’une toile. Chaque point de couleur représente un bâtiment et la couleur de chacun indique la période de construction du bâtiment. 



La rampe de couleurs est celle utilisée par Etienne Côme sur sa carte interactive BATIPARIS.

Sur ma carte, un arc relie deux bâtiments et il est d’autant plus clair qu’il relie deux bâtiments de périodes de construction différentes.

Ce mode de visualisation peut être intéressant pour explorer les différences de valeur dans une variable dans un voisinage, comme dans le cas de cette carte de la densité de population en France :

Différence de densité de population au niveau départemental (RGP INSEE 2013)

Sur ma carte, en suivant le réseau, on trouve toujours un chemin pour aller d’un bâtiment à un autre, même si l’on part de la place de l’Étoile pour se diriger vers Bercy; ceci a été obtenu grâce à une technique appelée arbre couvrant de poids minimal. Cette représentation a pour objet d’illustrer la densité d’une ville où tout serait interconnecté.

Paris dresse sa toile


La représentation du bâti est le plus souvent faite avec l’emprise des bâtiments, ce qui peut donner de beaux résultats comme celui de BATIPARIS.
Afin d’illustrer l’évolution champignonnesque d’une ville et se départir de cette représentation classique des bâtiments, on pourrait être tentés de représenter cela sous forme de réseau.

toile d’araignée, mycélium et réseau neuronal

Sur ma carte, les ramifications qui relient chaque bâtiment peuvent évoquer de multiples choses : les synapses de neurones rappelant les smart cities, les filaments d’un mycélium, voire même, si on regarde tout ça en noir et blanc, une sorte d’écriture qui évoquerait le tissage, au fil du temps, d’un tissu urbain.

Les données


Les données utilisées sont celles de l’Atelier Parisien d’URbanisme (APUR). Les données de bâti de l’APUR sont très riches. Outre la période de construction, on y trouve l’année de réhabilitation, les caractéristiques de la toiture, la surface d’ensoleillement,…
Une variable est particulièrement intéressante, que nous exploiterons peut-être dans un nouveau post : la hauteur des bâtiments.

La colonne que nous avons utilisée est la même que celle utilisée par Etienne Côme dans son application : la colonne C_PERCONST.

La transformation


L’illustration ci-dessus, créée par Benedikt Gross, montre le processus en cours lors d’un design de données. Je lui ai juste ajoutée les outils utilisés.
Pour obtenir notre carte, nous avons créé un algorithme exploitant la théorie des graphes ainsi que des techniques de design génératif. Pour ce dernier domaine, Processing constitue l’outil de référence. Il est adopté par nombre de data artists, d’artistes multimédia. Nous verrons grâce à cet article que R permet aussi de faire du design génératif. Néanmoins, pour peindre nos données, nous nous sommes tournés vers un second outil : QGIS, plutôt que R, en raison de capacités graphiques assez particulières.

Dans un premier temps, les centroïdes des bâtiments ont été générés

L’île de la Cité

Ensuite, nous avons relié tous ces points grâce à la fonction de Delaunay

De l’eau naît

J’ai trouvé que le nombre de segments était bien trop grand pour le rendu final. Afin de l’épurer, j’ai utilisé une technique de la théorie des graphes appelée Arbre couvrant de poids minimal, ou minimum spanning tree en anglais. Cet arbre est tel qu’on peut trouver un chemin entre chaque sommet avec un nombre de branches minimal

MST (Minimum Spanning Tree)

Les liaisons entre bâtiments étaient selon moi trop rectilignes. Afin d’obtenir quelque chose de plus « smooth », j’ai utilisé les courbes de Bézier. C’est une forme visuelle très usitée dans les infographies de réseaux.

Avec Bézier, tout devient plus doux

Le style


  • J’ai adopté un fonds noir pour mettre en contraste les données. 
  • J’ai posé le réseau de segments avec un petit effet flou, avec le mode de fusion « addition » et une valeur de luminosité différente selon la différence de période reliant deux bâtiments. Grâce au mode addition ajouté entre les objets, les endroits où les segments se superposent semblent s’éclairer.
  • Par-dessus, j’ai posé les centroïdes de bâtiments coloriés selon la période de construction, avec un mode de fusion « revêtement ». Pour rappel, la rampe de couleurs est celle utilisée dans BATIPARIS. J’avais utilisé le mode de fusion « revêtement » pour la carte de l’orientation des rues de Paris. Avec ce mode, c’est comme si on teintait une couche avec les couleurs d’une autre.
  • Enfin, en dessous, j’ai disposé la Seine afin de donner un contexte. Celle-ci se trouve dans une couleur hors du spectre utilisé pour le bâti, et avec un peu de flou pour donner un côté organique et en atténuer la présence. 

J’aurais pu rajouter des données contextuelles supplémentaires mais j’ai préféré garder un côté minimaliste pour cette carte.

Voici un tableau récapitulant l’agencement des différentes couches dans QGIS avec leur style et leur ordre de superposition :

Variations


J’ai réalisé des petites variations autour de cette carte.

Tout d’abord, en générant des lots de données par période, on peut voir dans quelles zones Paris a dressé sa Toile au cours du temps. C’est comme si on voyait la signature de chaque époque.

Jusqu’en 1800, on construit surtout au centre
Georges Eugène Hausmann est dans la place. Ca construit à tout va, y compris des places (comme celle de l’Étoile)
Le rythme de construction semble plus modéré dans les 80’s, à part peut-être dans le NE de la capitale


Le code


Décortiquage

La librairie spdep a permis de réaliser la triangulation de Delaunay :

coords = coordinates(ile_cite)
nb = tri2nb(coords)

ainsi que de calculer l’arbre couvrant de poids minimal :

nb = tri2nb(coords)
nbw = nb2listw(nb, zero.policy = FALSE)
mst.bh <- mstree(nbw,5)

J’ai créé une fonction appelée MakeLineFromCoords qui permet de tracer une ligne à partir d’une série de coordonnées. D’ailleurs, je me suis dit qu’elle pouvait être utile pour superposer tout type de graphique en ligne sur des cartes : par exemple, évolution du chômage par département au cours du temps :

makeLineFromCoords <- function(coords, i) {

  Sl1 = Line(coords)
S1 = Lines(list(Sl1), ID=as.character(i))
Sl = SpatialLines(list(S1))
return(Sl)
}

R inclut une librairie appelée bezier qui, comme son nom l’indique, permet de dessiner…des courbes de Bézier.

b = bezier(t=t <- seq(0, 1, length=100), p=rbind(coords[from, ], midpoint, coords[to, ]))

midpoint désigne le point d’ancrage situé entre les deux points à connecter. La position de ce dernier détermine la courbure finale de l’arc. J’ai injecté un peu de hasard dans la position de ce dernier.
Dans un premier temps, j’ai calculé la distance séparant les deux points :

d = sqrt((coords[from, 1] – coords[to, 1])^2 + (coords[from, 2] – coords[to, 2])^2)

Ensuite, j’ai bougé sa position selon certains seuils. Tout d’abord, j’ai calculé un facteur de transformation qui déterminera dans quelle direction se fait le déplacement du point :

ifelse(runif(1,-1,1) > 0, 1, -1)


Ensuite, j’ai appliqué un ratio tel que le point bougera dans un rayon allant du milieu situé entre les deux points à une distance égale au tiers de la distance séparant les deux points.

Voici le code correspondant au déplacement en X :

(coords[from, 1] + coords[to, 1])/2 + ifelse(runif(1,-1,1) > 0, 1, -1

Et celui en Y est similaire :

(coords[from, 2] + coords[to, 2])/2 + ifelse(runif(1,-1,1) > 0, 1, -1) * runif(1,0,d/3)

Au final, le point intermédiaire d’ancrage de la courbe de Bézier se situera ici :

midpoint = c((coords[from, 1] + coords[to, 1])/2 + ifelse(runif(1,-1,1) > 0, 1, -1) * runif(1,0,d/3),(coords[from, 2] + coords[to, 2])/2 + ifelse(runif(1,-1,1) > 0, 1, -1) * runif(1,0,d/3))

Le code dans son intégralité



Plongée dans l’absurde de la cartographie

Ça et là apparaissent sur la Toile des cartes qui revisitent des thématiques a priori banales sous un angle d’approche assez insolite.

Dans ce billet de début d’année, nous en listerons quelques-unes avant de nous attaquer à la réalisation d’une carte qui soulève les océans et immerge les montagnes.

Attention, tout ce qui suit ne doit pas toujours êtres pris au premier degré.

Petit cabinet de curiosités cartographiques

Le problème, c’est que quand on met la carte dans le « bon » sens, le texte est à l’envers

Tout d’abord, présentons des cartes où les pôles sont inversés, le pôle sud en haut et le nord en bas, à l’image de cette carte de l’australien Stuart MacArthur. Ce n’est pas parce que ce monsieur s’est pris un boomerang sur la tête que l’idée lui a pris de représenter le monde de cette manière. C’est sans doute afin de partager avec ses concitoyens australiens une vision commune de son pays positionné au centre du monde.

L’Afrique, si elle avait échappé à la colonisation

Généralement, pour nous, ce qui est situé en haut a plus de valeur, car plus proche du divin : « Pourquoi s’abaisser à faire ceci ? », « Quelle bassesse ! », « C’est de la musique de bas étage », « Aller plus haut » comme disait Tina Arena.
Par un jeu de chaises musicales, cette carte assez radicale de l’Afrique permet de remettre en question la place hégémonique des pays du Nord sur les cartes en occupant un espace toujours réservé. Rappeler la grandeur de l’Afrique, faire un pied-de-nez à l’omnipotence du Nord, sont les objectifs poursuivis par l’artiste suédois à l’origine de cette carte.

Mercator, c’est une sorte de miroir amincissant pour les pays du Sud

La carte ci-dessus compare deux systèmes de projection. Des choses intéressantes se produisent quand on passe de l’un à l’autre. On voit que Mercator écrase les pays de l’Hémisphère Sud. C’est un peu « Pousse-toi, que je m’y mette ! ». Si Mercator rend beaucoup service aux navigateurs, les projections qui conservent les surfaces comme celle de Peeters ont d’autres qualités : comme elles ne conservent pas les angles, elles accroîtraient la mixité des populations en faisant s’échouer les marins un peu partout. Elles sont donc égalitaires en tous points.

Au cas où vous aimeriez mener une vie d’ermite en Amérique

Cette carte s’attache à présenter les endroits, aux USA, qui ne comptent aucun habitant. Ici, on renverse les codes de la cartographie où l’on présente en général des quantités importantes en premier lieu. Et pourtant, si l’on considère que le vide est quantifiable, cette façon d’aborder les choses gagne en cohérence.

Carte de l’abstention (lors des élections régionales)

Et puis, il n’y a pas si longtemps que ça, après le flot usuel de cartes des élections régionales, sont arrivées des cartes de l’abstention et du vote blanc. Ces cartes qui mettaient en lumière un mouvement invisible, étaient aussi intéressantes que les cartes usuelles, notamment car elles ont pu montrer là où les électeurs s’étaient le plus mobilisés. Comme quoi l’on part d’un inverse pour revenir à l’autre. Au milieu de tous ces retournements infographiques, avouez qu’il y a de quoi perdre la tête.

Quitter le plancher océanique pour mettre un pied sur le fonds continental

Assez insolite, il y a aussi cette carte du monde où l’auteur a choisi d’inverser le relief. Les océans dominent alors les continents qui deviennent de vastes lacs. Cette carte, par son point de vue original, parvient à capter l’attention sur le sujet assez banal qu’est la bathymétrie.

retournement de cerveau

On voit que l’inversion peut être traitée de deux façons différentes : soit elle s’attache à la thématique en présentant l’opposé de ce que l’on est censés représenter (par exemple l’abstention versus le vote), soit elle s’attache au graphisme en affectant des codes graphiques inconventionnels à ce que l’on veut illustrer (comme associer la couleur de zones urbanisées à des endroits vides de population). L’approche la plus radicale consiste finalement à représenter de façon inversée l’inverse de ce l’on veut représenter. Est-ce que vous me suivez ? Parce que moi je ne suis pas sûr de me suivre moi-même.

Platon était parfois renversant

Selon moi, l’objectif de ces représentations originales est double. D’une part, on révèle des patterns insoupçonnés en explorant les antipodes ce que l’on était censés rechercher. On cible les outliers, tout ce qui échappe à la trajectoire moribonde d’une régression linéaire. On attire l’attention du public sur des sujets méconnus.
D’autre part, elles permettent de démontrer quelque chose par un raisonnement assez proche de celui par l’absurde. Par exemple, pour arguer à quelqu’un à quel point les océans sont profonds, l’on serait tentés de les transposer en montagnes. Afin de mettre en évidence les zones peu peuplées, on renverse les codes sémiologiques en utilisant les couleurs habituelles des zones peuplées pour les figurer.


Et si l’on inversait la bathy ?

La carte où l’altitude de la planète avait été inversée m’a inspiré. J’ai tenté de la reproduire.

Je me suis procuré la donnée ETOPO1 du NOAA (National Oceanic and Atmospheric Administration, institution comparable à notre Météo France) qui combine à la fois la bathymétrie et l’altimétrie en tout point du globe avec une résolution d’un degré (environ 100km).

Le monde avec le relief inversé

J’ai fait ma tambouille avec GRASS-GIS pour inverser l’altitude, rien de compliqué. Voici, ci-dessus, ce que j’ai obtenu. La rampe de couleurs est conçue de telle manière qu’elle puisse évoquer successivement les grands fonds, les lagons, des plages, des falaises blanches de calcaire, du sol nu, de la forêt, et enfin, des sommets enneigés.

Le monde inversé avec un relief inversé

Si je vous avais présentés la carte avec le Sud en haut, soit le monde inversé avec le relief inversé, la sensation devient radicalement différente. Déboussolé, on a peu d’éléments sur lesquels se raccrocher : « on a perdu le Nord »

Voici ci-dessous des rendus générés grâce au plugin QGIS2ThreeJS :

Du côté de chez nous
Les abysses himalayennes
Les Caraïbes et l’immense plage du Rio Grande

Libre à nous d’imaginer de nouveaux mondes.

Précisions techniques

Pour calculer l’opposé des valeurs, j’ai simplement exécuté la ligne suivante sous GRASS avec la calculatrice r.mapcalc :

r.mapcalc « etopo_opp=-etopo »

Voici la rampe de couleurs utilisée sous QGIS :

Et voilà !


Crédits

Platon issu de NounProject et réalisé par Dabid J. Pascual

Corine Disco Cover

This post is about the making of an experimental video that dives into the land cover of Paris & its surroundings with a hint of RGB magic. 

You’ll see the purpose of gridding, how to cross a vector and a raster layer in R. Finally we’ll cover one of the latest functionnality of QGIS 2.12 : data-defined layer combinations in atlases.


If the world were square


do you prefer ice creams or sandwiches ?
Matrix is the first movie approaching grids

Gridding is a way to simplify the representation of data on a large scale. It can be a useful way to « resample » the vision of a territory if you work on bigger units. These units, usually squares, are comparable, on the contrary to administrative units. If you can omit the administrative units, gridding is a way to get an homogeneous view of your territory. The larger your area of interest will be, the bigger the squares from your grid you might configure.

hexagons look ecologic, triangles ecclesiastic

Also, you could prefer hexagonal units to square units for more harmony. Some prefer triangles. Anyway, the number of possible shapes are limited.

Land Cover of Paris & surroundings

I wanted to visualize the land cover of Ile-De-France width a grid. Ile-de-France is a region that includes Paris at its center. Precisely, I decided to study the repartition of urban , agricultural and natural (forests, gardens, etc…) areas, that is 3 variables over the whole area.

the best diagram I’ve ever made, even if pie charts are the worst

The question was : how to represent 3 variables at a time on each square unit ? One answer could have been « diagrams », that is pie charts, histograms on the map
But I found it cooler to use an RGB representation.

A Freemason way of seeing data

Let’s suppose R means urban, G Natural and B Agricultural. If the color of a square approaches red, then it means urban; if it is purple, it means urban & agricultural areas dominate but not natural; if it is desaturated, it means the 3 types of cover are equally mixed.

The recipe

I remember a mushroom im my parents’garden had the same shape

For the land cover of Ile-de-France, we have a nice 2012 Corine Land Cover GeoTiff.

Laurent Manadou exploring data

I wondered if one could adopt a dynamic view that goes from the global view to the zonal one in a sort of « data diving ».

beware of the logarithmic launching pad

I wondered what series of sizes to adopt. I decided to generate 100 images. 1km would be the minimum unit and we would reach the BIG square covering all the region, the width of Ile-De-France being precisely 154 451 km according to GÉOFLA. The distribution, as illustrated, will be logarithmic.

The same sensation appears when you dive head first in a municipal pool

Above is a GIF presenting the different calculation canvases.

Here is the video with land cover percentages encoded as colors, with reversed order, from the biggest to the smallest unit. The changing colors make it kind of animated dancefloor.

Dataekwondo

This illustration, that I had made for a GéoTribu post, illustrates the usual workflow I adopt, from production to design. I generated the distinct grids associated with the land cover percentage values with R. I designed all the layers with QGIS. With the same tool, I generated an atlas. With this atlas, I created a video with ffmpeg.

Technical details

The QGIS part may interest the QGIS fans as it uses a new QGIS 2.12 functionnality : data defined control over map layers and style presets

Generation : R

I created a function in R that generates a grid. The hack consists in polygonizing a raster layer, of which the resolution determinates the square size :

creerGrille = function(pol, size=50000) {
r = raster(extend(extent(pol), size)); res(r) = size; r[]=1
grille = rasterToPolygons(r)
grille = grille[which(gIntersects(grille, pol, byid=T)), ]
grille = grille[-which(gTouches(grille, reg, byid=T)), ]
return(grille)
}

The extract function crosses the vector grid and the 2012 CLC raster. The table function gives the number of pixels of each category :

  counts = extract(clc2, grille, 
method="simple",
fun=function(x,...)table(x),
na.rm=T)

The prop.table calculates the proportion of urban, natural and agricultural areas :

RGB = round(prop.table(counts[, 1:3], 1)*255)

Design : QGIS

color RGB code from columns, named « R », « G », and « B »

An expression defines the color of each square depending on its column values :

MultiQML plugin

I saved the QML style file, then used the multiQML plugin to apply it to the 99 other layers.

Data defined control over map layers and style presets

To get a static coverage layer, I duplicated my area of interest as many times as the number of pages (or layers) and assigned the square size value to the layer names. In the latest version of QGIS, you can generate an atlas with a list of layers on each page defined by an expression.

Also, I used some generative design tricks to get the animated halo effect around the IDF region.

Shapeburst fill and data-defined color

The color follows the chromatic color circle, covering all the rainbow colors :
color_hsv(scale_linear(@atlas_featurenumber,1,100,0,360),40,27)

riding the wave of generative design



sin wave shade distance


while a sin function defines the shade distance. This way, we get a « flame » effect with increasing then decreasing shade width. scale_linear(sin(scale_linear(@atlas_featurenumber,1,100,0,pi()*2)),0,1,5,10)

Video making: ffmpeg

Finally, this command line generates the video from images :
ffmpeg -framerate 25 -r 10 -i output_%d.jpg -vcodec mpeg4 -b 50000k -qscale:v 1 dancingVideo.avi

The code

The functions

The processing code

Credits

Images from The Noun Project : diver by Claire Jones, honey by Angela Horton, sandwich by Gareth Servant, biker by Les vieux garçons, ice cream by Rafaël Massé.

Streets of Paris Colored by Orientation

Recently, I read an article by datapointed which presented maps of streets of different cities colored by orientation.
The author gave some details about the method, which I tried to reproduce. In this post, I present the different steps from the calculation in my favorite spatial R ToolBox to the rendering in QGIS using a specific blending mode.

The code is given at the end of the article.
Data used in this post is from OpenStreetMap contributors :
Get it on OSM Metro Extract or GeoFabrik

First, polylines are split into lines.

In what we want, the orientation is not directed and orthogonal lines are rendered the same way.

This way, all our segments cover just a quarter of a circle and their sine values range from 0 to 1.

We can affect each segment an angle. I classified my angle values in two classes, with punchy base colors.

Actually, values near 0 and 1 correspond to almost equivalent orientations. They correspond to angles near 0 / 90°. The difference of colors is maximal when two streets have a 45° difference of angles. I chose a kind of diverging palette with dark saturated colors near 45° and bright desaturated ones near 0 / 90°. This way, similar angles are given similar brightness values.

Here is the result for our roads :

Rendering with the inner orientation affected to the segments

The second part is mostly cosmetic. We’ll use interpolation and smoothing to get a nice halo effect.

First, we generate the mid point of each line and affect the orientation to it.

Next, we process the interpolation by inverse distance weight based on these points and their orientation values.

interpolation

Finally, we smooth the continuous surface to get something more pleasant.

Interpolated raster & the same, smoothed

We export the smoothed raster for a rendering within QGIS.

Here is how I superimposed my layers :

  1. The raster is put on top with the palette described above and a specific « Overlay » blending mode.
  2. The roads are put below with a grey value. Note that the grey value affects the final color because of the blending mode.
  3. Finally, a near black background lets the halo appear slightly.

How the underlying color affects the final rendering in an overlay blending mode

Here is the result for Paris :

Smoothed result with a kind of halo  (click to see in large scale)


I decided to apply the process to a sample of NYC :

NYC Streets oriented (click to see in large scale)


Technical details and code

The two key functions are :
spatstat::angles.psp which compute the angles of segments
spatstat::idw which interpolates the data.

whatGoogleSuggestsFor() : Using Google Instant to map Stereotypes or Sentiment (in R)

Some interesting things emerge when using Google Instant service from different countries.

The whatGoogleSuggestsFor() function will take a string as an input and return a list of suggestions by Google based upon Google Instant Service. Good to map stereotypes or analyze sentiment of a brand. The code is at the end.





For instance, we could get stereotypes attributed to France, seen from the US

> whatGoogleSuggestsFor(« why france », domain= »us »)
                                                                              
               » is great »              » joined ww1″        » banned the burqa » 
                                                                              
 » gave statue of liberty »  » is better than germany »       » colonized algeria » 
                                                                              
         » sold louisiana »         » banned fracking »             « sa left yes » 


Or, a global advice on Nike Company
> whatGoogleSuggestsFor(« why nike is », domain= »us »)
                                                                           
                   » bad »     » better than adidas »               » the best » 
                                                                           
            » successful »      » a good investment »  » the best sports brand » 
                                                                           
               » popular »                 » better »         » the best brand » 
                         
            » so popular » 


Some concerns about the the World Cup when you question the future of Brazil

> whatGoogleSuggestsFor(« will Brazil », domain= »us »)

              » win the world cup »      » be ready for the world cup »       » be ready for the olympics » 
                                                                                                      
                       » be ready »  » be ready for the 2016 olympics »     » be ready for 2014 world cup » 
                                                                                                      
                » be a superpower »                   » lose olympics »       » be safe for the world cup » 
                                  
 » be ready to host the world cup » 


You could use that function in a script to collect suggestions for a list of questions.

          prefix                     suggestion
1  why europe is            better than america
2  why europe is                    a continent
3  why europe is                        awesome
4  why europe is                  called europe
5  why europe is                not a continent
6  why europe is                   so expensive
7  why europe is        the best place to visit
8  why europe is      considered as a continent
9  why europe is                           rich
10 why europe is          better than australia
11 why africa is                           poor
12 why africa is                 underdeveloped
13 why africa is                 not developing
14 why africa is          called dark continent
15 why africa is                 still starving
16 why africa is  the most homophobic continent
17 why africa is                     still poor
18 why africa is                poor greg mills
19 why africa is                         behind
20 why africa is           not a dark continent
21   why asia is            better than america
22   why asia is             better than africa
23   why asia is             better than europe
24   why asia is                    called asia
25   why asia is                      important
26   why asia is                           poor
27   why asia is                   so populated
28   why asia is  called continent of contrasts
29   why asia is              densely populated
30   why asia is        called land of extremes

So then, you can map stereotypes all over the world.

QGIS 2 : Artificialisation du sol en Île de France // Les modes de rendu par fusion

Dans cet article, nous allons voir comment tirer parti des modes de rendu révolutionnaires de la version QGIS 2 pour représenter le phénomène d’artificialisation en Île-de-France de 1990 à 2006.

Selon Wikipédia, « on parle d’artificialisation du sol ou d’un milieu, d’un habitat naturel ou semi-naturel quand ces derniers perdent les qualités qui sont celles d’un milieu naturel ».

L’artificialisation se produit le plus souvent lors de la construction de bâtiments, d’infrastructures de transport. Elle amène l’imperméabilisation des milieux et est d’autant plus dramatique lorsqu’elle concerne des terres à bon potentiel agronomique ou des réservoirs de biodiversité . Son effet est quasi-irréversible.

Il serait intéressant de voir comment le phénomène d’artificialisation a évolué sur une dizaine d’années, par exemple sur le territoire d’Île-de-France.

Voici la carte que nous allons réaliser ensemble :

Pour cela, nous récupérons les données Corine Land Cover d’occupation du sol des années 1990 et 2006 sur le site du SOeS (Service d’Observation & de Statistiques).

Voici à quoi ressemble la donnée une fois mise en forme :

Chargeons les données dans notre base Postgre/PostGIS via l’outil DBManager (disponible dans le menu Base de données). Les performances de Postgre/PostGIS seront nécessaires pour réaliser les traitements spatiaux dont nous aurons besoin.

Nous souhaitons avoir en sortie une couche représentant les zones ayant fait l’objet d’artificialisation sur la région. Le code correspondant aux espaces artificialisés est 1 selon CLC.

Les zones artificialisées correspondront aux parties de la couche CLC 1990 dont le code n’était pas 1 qui sont passées au code 1 dans la couche 2006. Il s’agit donc des objets résultant de l’intersection entre les deux couches.

Exécutons la requête SQL via DBManager afin de créer la couche. On génère une couche de centroïdes car nous lui appliquerons un rendu en symboles proportionnels à la surface ayant été impactée par le changement d’occupation.

Fenêtre SQL de DBManager

Une fois la requête exécutée, la couche evol_idf_90_06 est créée et disponible dans le contrôle des couches.

Voici les changements que l’on observe en superposant la couche d’évolution sur, respectivement la couche CLC 1990 et CLC 2006 :

Tiens, on a construit une route dans cette zone. L’urbanisation a sans doute suivi !

Créons un nouveau champ dans cette couche où stocker le premier niveau de CLC année 90 :

Création d’un champ stockant le premier niveau/poste de CLC

C’est sur ce champ-là, codeUn, que nous réaliserons le rendu catégorisé.

Comme couleurs, j’ai choisi du marron pour les terres agricoles, du vert pour les forêts et milieux semi-naturels, du bleu pour les zones humides et les surfaces en eau.

Utilisons les options de taille de symbole en utilisant la surface comme paramètre

Symboles proportionnels

Entrons maintenant dans le coeur du sujet. Avant, en opensource, seul Mapnik permettait de réaliser des opérations de fusion entre couches comparables à ce que l’on pouvait trouver avec les calques en PAO comme Gimp.

Pour le mode de rendu entre objets, nous utilisons le mode addition. Le mode addition appliqué aux objets permet de faire s’ajouter les valeurs des pixels si bien que là où des objets se superposent, on tend vers la couleur blanche, les valeurs R G B du blanc étant maximales (255 255 255). Au final, la carte semble s’allumer là où il y a beaucoup d’objets, soit là où il y a beaucoup d’artificialisation.

Si l’on avait choisi un mode de rendu normal, nous n’aurions pas perçu le phénomène de la même façon :

Mode de fusion par objets « normal » vs mode « addition »

Pour le rendu de la couche par rapport à celles qui se situent en-dessous, j’ai choisi le mode Lumière Douce.

Mode ‘Soft Light’ tel
qu’illustré par l’outil Imagemagick

Le mode « Lumière douce » permet de rendre la couche plus brillante, vive et contrastée.

Pour la couche de base, j’ai utilisé la couche Corine Land Cover la plus récente en choisissant des teintes en niveau de gris, et non en couleur afin d’éviter les conflits avec les couleurs de la couche d’évolution. J’ai tenté de retranscrire les couleurs initiales de la charte graphique en niveaux de gris. Les zones artificialisées ressortent en foncé, les zones de terres agricoles en clair et les forêts en un peu plus foncé.

Pour les routes récupérées depuis la base Route500 ® récemment libérée par l’IGN, j’ai choisi une couleur jaune pâle afin de mimer la lumière des lampes et donner un aspect électrique à la carte. Le problème est que là où la carte s' »allume », les routes ne sont plus discernables car se fondant avec le blanc. Le mode Différencier permet d’inverser la couleur des routes sur ces zones, ce qui les rend discernables.

Mode ‘Différencier’ tel
qu’illustré par l’outil Imagemagick

On voit selon ce graphique que là où le clair de la source rejoint le clair de la destination, on obtient une couleur sombre.

Mode de rendu différencié sur une zone

Les étiquettes correspondent aux catégories 1 à 4 des communes du RGC ® de l’IGN (Répertoire Géographique des Communes), lui aussi diffusé par l’IGN.

Nous appliquons une formule permettant d’avoir les noms en minuscules, car les minuscules occupent moins de place sur la carte. Seule la première lettre du nom reste en majuscule. Nous projetons des ombres sur les étiquettes pour un rendu futuriste avec un décalage de 0 mm pour l’effet de halo.

Paramétrage des étiquettes
Rendu avec tampon associé à un halo (ombre projetée)
Mettez un titre, une carte d’aperçu, une légende, une barre d’échelle, la fléche Nord, les sources et votre carte est finie !
Les éléments complémentaires d’une carte politiquement correcte

a QGIS tip : find mid-points of lines with no coding, only plugins


Recently, a colleague of mine asked me if it was possible to generate mid-points for lines. The problem was that he had barrage data represented as lines and he wanted to see them on a map. So, getting the mid-point for these lines was a way to get the barrage location and put a symbol to each of it..

I searched the net and fell upon a gis stackexhange that mentionned a programming routine under python console
Also, an article by Martin laloux, a belgium GIS specialist could have been helpful to manage that.
These solutions could have been implemented under the form of a sextante toolbox function, or a plugin. But what if, like my colleague, you don’t know how to code ? It’s possible to generate mid-points from lines using QGIS plugins. Just follow the steps :
– Create a set of polylines
– Separate the lines from the polylines with the sextante QGIS algorithm « explode lines »
Add a unique identifier for every line with the calculator :
Extract the nodes
Add the geometry columns
Use group stats, applying average on both X and Y, then copy-paste the results in libreoffice. Save the file as csv
Add the csv as a spatial layer
Here we are !

Un petit peu de « geohacking » et de scraping, da(o)rling?

Cet article, c’est un peu « Les cartogrammes de Dorling pour les Nuls ». Après avoir introduit les principes qui se cachent derrière ce concept cartographique très original, nous créerons une carte du nombre de clubs de football en France récupérés par une méthode de scraping selon ce mode de représentation. Dans ce post, il sera question de spatialisation et aussi un peu de « hacking » sous plusieurs formes.



Les cartogrammes de Dorling ou les polygones qui ronflent (rrrond-rrrond)

Le Docteur Daniel Dorling avait élaboré une méthode de cartogrammes très originale visant à présenter des valeurs statistiques de façon très épurée. Son idée était de s’affranchir de la forme des objets lorsque cette dernière présentait peu d’intérêt, en la travestissant sous la forme de la primitive géométrique la plus simple qui existe: le cercle. Sa méthode préserve la topologie des objets et prévient les recouvrements. Les polygones sont donc très bien déguisés.

Sur son blog, Jim Valladingham présente un cube cartogrammique qui figure les axes de représentation possibles. Les cartogrammes de Dorling se situeraient dans le coin avant-bas-droit, en cela qu’ils préservent la topologie des objets tout en les libérant de leur complexité géométrique.

Les cartogrammes de Dorling pour les Nuls

Jim Valladingham avait porté vers python ainsi que diffusé un script en C transmis par le Dr Dorling. Toutefois, une contrainte de ce script était qu’il ne consommait pas et ne produisait pas de fichiers géographiques. De plus, en entrée, le format était très spécifique et propriétaire.

J’ai donc tenté un portage du code vers R permettant l’intégration et la production de fichiers géographiques de tous les types supportés par OGR.

A partir du code, j’ai essayé de comprendre de quelle façon ces cartogrammes étaient générés. Ce sont ces principes que je vais vous présenter à présent. En voici un schéma simplifié.

  • (1) Dans un premier temps, il nous faut construire le réseau topologique de nos objets géographiques. Aussi, on détermine les centroïdes de ces polygones. Chacun est distant du voisin selon une distance R.
  • (2) Une fois cela réalisé, on regarde quelles sont les valeurs numériques affectées à chacun des points. Ces dernières constituent les surfaces des cercles desquelles on dérive les rayons que nous appellerons R’.
  • (3 et 4) En toute logique, pour que les cercles ne se recouvrent pas, il faudrait appliquer un ratio à nos rayons de telle sorte à ce qu’on puisse ramener la somme des rayons à la somme des distances entre les points. C’est l’étape de « scaling« .
  • (5) Cependant, des recouvrements peuvent quand même apparaître selon la configuration du réseau topologique. Aussi, on va appliquer des forces d’attraction ainsi que de répulsion de sorte à éloigner les cercles voisins qui se recouvrent et rapprocher ceux qui présentent des lacunes. C’est l’étape de « shifting« .
Extrait du document technique de Daniel Dorling mentionnant les forces d’attraction et de répulsion

Histoire de mieux comprendre le shifting, prenons une métaphore et imaginons des boules magnétiques. Une boule distante se retrouve attirée par les autres tandis qu’une autre qu’on laisse tomber sur le tas se fraiera une place entre les voisines. Le processus est itératif car le fait de déplacer une boule occasionnera le bousculement d’autres, etc…On s’arrête seulement lorsqu’on a trouvé la configuration optimale pour laquelle le recouvrement et le rapprochement sont minimaux.

(Un élève de 3e aurait pu faire ce schéma)
Les terrains de foot moissonnés

La figure circulaire me faisait penser au ballon rond. Le site le-footballeur.com présente un annuaire des clubs de football en France depuis lequel j’ai appliqué des méthodes de scraping visant à récupérer le nombre de clubs par département.

Une page liste tous les départements pour lesquels des résultats existent. Le plugin Firefox Firebug m’indique que les urls sont dans un bloc div avec attribut align égal à left.

Une requête xpath appliquée à la page me permet d’extraire les urls.

A présent, extrayons les informations de chacune des pages. Si l’on ouvre celle de Paris, on voit que les informations sont présentes dans un bloc div qui suit un formulaire. 

La requête xpath suivante me donne le contenu du bloc div sur lequel j’applique une expression régulière pour récupérer le nombre de clubs.

Une fois que le nombre de clubs a été associé à mes objets géographiques, nous pouvons lancer la fonction de Dorling que j’ai créée.


  • nrescales correspond au nombre de modulations du ratio à appliquer.
  • niter correspond au nombre d’itérations que l’on va appliquer jusqu’à trouver le positionnement optimal.
  • tol correspond au taux de recouvrement qui nous semble acceptable.
La fonction sera d’autant plus rapide que le nombre d’itérations et de modulations du ration sera petit, et que la tolérance sera élevée.

En sortie, cette fonction me donne la position xy des points ainsi que le rayon affecté à chacun.

Comme mentionné précédemment, l’étape de shifting au cours de laquelle des forces d’attraction et de répulsion sont appliquées entraîne le déplacement des points (par conséquent, adieu le positionnement absolu ! (ce qui peut être problématique)). Cette image présente les décalages induits:

Des ballons de foot stylés

Le site The Noun Project présente de nombreux symboles SVG dans plein de thématiques. Une recherche sur « soccer » m’a donné toutes sortes d’images de ballons. Comme dans un magasin de sport, je n’ai eu qu’à faire mon choix.

Pas mal, ce ballon de Laurent Patain

Via TileMill, j’ai stylisé la donnée en « propulsant » la largeur de mon symbole via l’attribut radius de ma couche géographique.

Voici au final une carte Dorling des clubs de football en France:

Remarque:
Une meilleure source de données aurait sans doute été le site de la FFF, notamment la page http://www.fff.fr/la-vie-des-clubs/resultats. Cependant, on ne peut y rechercher les clubs que par ville et non par département. A raison d’environ 36000 requêtes de récupération de page, le temps nécessaire à l’extraction était extrêmement long.

Do It Yourself

Dorling

Scraping

Cartogrammes en Bois

Que ne te fait-on pas subir, Ôôô, sacro-sainte Géométrie!
De plus en plus, on remarque des transgressions cartographiques qui, soit altèrent la forme des objets géographiques, soit la simplifie à l’extrême. Dans certains cas, la géométrie importe peu car on s’attache plutôt à l’inter-relation des objets. C’est pourquoi on peut envisager des procédés dénaturants, surtout s’ils sont propulsés par des données. Nous allons explorer ceci au travers de certains types de cartogrammes ainsi que d’une carte appliquée à l’environnement: ça donnerait quoi, si l’on grignotait la surface des départements jusqu’à ce qu’elle corresponde à celle de ses forêts?

Représentation de variables continues


Différents moyens existent pour traduire des variables quantitatives continues au niveau d’objets géographiques. Ces différents moyens sont très bien décrits dans le livre de référence de sémiologie graphique de Jacques Bertin, livre dont j’aime bien exposer la couverture à défaut de l’avoir lu.

La sémiologie graphique, de Jacques Bertin

Méthodes classiques

Prenons le cas de polygones, on pourra jouer sur les couleurs en jouant sur la saturation ou la luminosité (value en anglais). La saturation correspond à la quantité de pigments gris que vous mélangerez à votre teinte de base (hue en anglais).

On pourra aussi jouer sur les trames qui composent l’objet: plus ou moins resserrées, de largeur, voire d’orientation variable.

On pourra aussi jouer sur les contours mais cela est moins fréquent dans les cartes car seul ce que contient un polygone nous intéresse en général.

Tous ces critères peuvent d’ailleurs se combiner afin de faire apparaître plusieurs variables au sein d’un même objet géographique et obtenir des visualisations multidimensionnelles. Imaginez qu’on additionne couleur + orientation[trame] + espacement[trame] + épaisseur[trame], cela permet de visualiser 4 variables en même temps (mais il est déconseillé de mettre cela en pratique sauf si vous avez de l’efferalgan sous la main)

Géométrie variable

Cartogrammes de Dorling

Il existe un paramètre dont on a peu parlé jusqu’à récemment car ce sont surtout les capacités de calcul de nos machines qui ont permis de l’exploiter. Il s’agit de la géométrie.

On pourra remplacer les objets géographiques par des cercles en évitant les recouvrements et en préservant les relations. On appelle cela les cartogrammes de Dorling. Ces cartogrammes s’obtiennent grâce à un processus itératif semblable à ce qui se passe lorsque vous empilez des boules les unes au-dessus des autres dans une boîte dont vous enlevez ensuite les bords. On associe couramment la largeur de ces boules à des variables quantitatives.

On pourrait d’ailleurs aller dans le multi-dimensionnel en remplaçant chaque cercle par un camembert. Cela dit, si pas mal de personnes aiment le camembert, les pizzas, les tartes – enfin, tout ce qui est rond et qui se découpe – les pie charts sont loin de faire l’unanimité.

Cartogrammes de Demers

On pourrait aussi remplacer ces cercles par des carrés. Le même processus itératif s’applique mais les algorithmes permettant de détecter les collisions diffèrent afin de prendre en compte la spécificité géométrique des carrés. On appelle ces rendus les cartogrammes de Demers.

Dans ce cas, l’astuce pourrait alors consister à intégrer des treemaps!

L’avantage des cartogrammes de Dorling et de Demers est qu’ils permettent de réduire considérablement la granularité des informations graphiques en simplifiant à l’extrême la forme des objets géographiques, ces derniers devenant des primitives géométriques. Aussi, ces cartogrammes permettent de rendre aisément des proportions tout en conservant les relations entre objets.


Cartogrammes dicontigus

Mise à part la substitution d’objets par des formes simples, on pourrait aussi appliquer des transformations affines (je ne parle pas ici de l’affinage du camembert de Dorling).

Pour ce qui des translations et des rotations, le résultat est difficilement lisible. On préfère généralement le redimensionnement. Le résultat est ce qu’on appelle les cartogrammes discontigus car le fait de rapetisser les formes supprime les relations de voisinage.

Nombre de personnes de 65 ans et plus –  Jim Valladingham sur http://indiemaps.com/

Si la librairie D3 permet d’ores et déjà de réaliser ces différents types de cartogrammes, je n’ai pas trouvé de fonction prête à l’emploi pour un outil libre de cartographie.

Deux méthodes pour les cartogrammes discontigus

Il existe deux méthodes pour réaliser ce type de cartogrammes.

Echelonnage

La première conserve les caractéristiques géométriques de la forme, sa complexité, en lui appliquant un facteur d’échelle.

Le principal avantage de cette technique est que la géométrie est préservée. On peut faire une analogie entre ce type de cartogramme et un jean’s que vous retrouveriez rapetissé après lavage. Ce dernier garde bien sa forme mais sa taille change (c’est bête, vous ne pourrez alors plus le porter).

Appliquer un facteur d’échelle à un objet de 1/2 ne suffit pas à diviser sa surface par 1/2. C’est bien plus compliqué que cela. Généralement, avant de réaliser ce genre de cartos, une normalisation des données est réalisée afin que le ratio maximal soit ramené à un mais cela ne résout pas le problème du ratio..

Un inconvénient de cette méthode est que, dans les cas où la géométrie d’un objet est très complexe, il est possible que cette dernière  recouvre celle de référence, voire empiète sur la voisine, ce qui rompt une certaine idée de l’esthétique.

Erosion

La deuxième méthode utilise la méthode d’érosion. Elle consiste à éroder la forme jusqu’à obtenir une surface d’un certain ratio de la forme de référence.

Comme je ne connais pas l’équation qui permet de connaître la distance d’érosion à appliquer afin d’aboutir à une surface donnée, j’ai utilisé en remplacement une méthode itérative qui utilise un pas d’érosion fixé par l’utilisateur.

Le code pour chacune des deux méthodes sous R est disponible en bas.


Si l’on réduisait la surface des départements à la surface de leur forêt

Le choix de cartogrammes dicontigus

Une donnée m’a intéressé. Il s’agissait de la surface de forêt dans chacun des départements en 2008. Je l’ai récupérée sur le site de Data Publica qui est le plus grand annuaire français de données ouvertes (cette donnée vient à l’origine d’Agreste).

http://www.data-publica.com/opendata/4477–donnees-statistiques-historiques-sur-les-forets-en-france-de-1830-a-2008

Le nombre de méthodes de visualisation possibles pour une variable continue est si grand qu’il convient de sélectionner celle qui retranscrira le mieux possible le phénomène étudié.

La méthode de cartogramme discontigu par érosion s’associe bien à l’idée de grignotage.

J’ai donc choisi d’utiliser ce procédé afin de figurer la surface boisée tout en signifiant le phénomène de perte d’espaces naturels. La méthode a consisté à réduire la surface du département jusqu’à ce qu’elle corresponde à peu près à celle de ses forêts. Ainsi, il est aisé de comparer le département et sa forêt.

Voici le résultat obtenu après érosion. J’ai également fait figurer le résultat obtenu avec échelonnage de la donnée.

Proportion de surface boisée sous la forme de cartogrammes (en vert foncé, méthode érosive; en vert clair, échelonnage)

De la donnée au rendu cartographique

Le rendu est assez pauvre, avec un impact cognitif assez faible. La donnée mérite d’être habillée pour être sortable (sinon, c’est comme inviter un naturiste à une soirée déguisée).

TileMill

J’étais tombé il y a un moment sur un exemple plutôt impressionnant de représentation de données de sécheresse sur les USA

Carte de la sécheresse aux Etats-Unis – John Dilworth

Le réalisme de cette carte provient en fait de l’emprunt d’images réelles correspondant à la thématique sécheresse (le sol desséché et l’herbe, par contraste) déclinées en motifs utilisés en trame.

Le logiciel TileMill a été utilisé pour se faire car il est à ma connaissance un des seuls outils cartographiques qui permette d’utiliser des images en tant que trame ou de marqueur. Il permet aussi de superposer des couches de façon très sophistiquée grâce à différents modes de fusion (dont devrait se doter à l’avenir QGIS 2.0, patience).

J’ai donc décidé d’utiliser TileMill pour habiller ma donnée.

Réalisation de motifs

Dans un premier temps, il me fallait trouver des motifs qui correspondraient pour le premier à la forêt, pour le deuxième, au sol. Je suis allé sur le portail Creative Commons Search afin de trouver des images libres de droit.

Voici les images que j’ai trouvées:

Si l’on regarde la carte sur la sécheresse, on remarquera que les motifs semblent se répéter sans que l’on puisse les dissocier.

Il existe une petite manipulation sous Gimp qui permet de rendre des images raccordables et aboutir à des motifs raccords.

Voici les différentes étapes qui permettent d’obtenir des motifs depuis des images.

Habillage

L’habillage de données sous TileMill se fait sous un langage apparent au Cascading Style Sheet appelé CartoCSS avec des feuilles de style portant le suffixe mss pour Map Syle Sheet. Les balises CartoCSS sont différentes de celles du CSS car spécifiques aux données géographiques. Par exemple, une, appelée line-dasharray permet de spécifier la taille et l’espacement des tirets d’une ligne; une autre, appelée text-allow-overlap, permet d’autoriser ou non le recouvrement des libellés.

Voici la feuille de style de la carte:

Et la carte:

Surface boisée par département

La cartographie nécessitait traditionnellement la maîtrise d’outils spécifiques qu’à peu près seuls les géomaticiens maîtrisaient. TileMill a ceci de révolutionnaire qu’il contient un langage permettant aux webdesigners de s’approprier la discipline. Il supprime une barrière technologique de taille qui séparait le graphisme sur le web et la cartographie. Des analystes et des graphistes peuvent collaborer plus facilement grâce à ce produit hybride.


Code pour les cartogrammes

Un atlas alphabétique du monde

Et si, cette année, pour épater vos amis, vous décidiez d’apprendre les noms de tous les pays?

Avant d’entreprendre une telle chose, on serait déjà tentés de les lister par ordre d’alphabétique. Enfn, ce serait encore mieux si l’on pouvait ajouter quelques éléments de géographie, pour créer un atlas, finalement.

C’est l’objet de la carte ci-dessous où les pays sont rangés par ordre alphabétique.

Pas vraiment d’analyse à en tirer. On remarquera cependant qu’aucun pays ne commence par les lettres W et X et qu’au contraire, beaucoup de pays commencent par la lettre S (in-croy-able..).

Pour réaliser cette petite carte, je me suis basé sur la couche « cultural » du site Natural Earth à une résolution de 1:110m. Celle-ci comporte 177 pays. A noter que l’ONU en compte 192 parmi lesquels Monaco, Saint-Marin, les îles Cook, le Vatican qui n’apparaissent pas sur ma carte. Mais, déjà, 177, ça en fait pas mal à mémoriser!..

A regarder, le soir, avant de dormir..

Un petit peu de programmation sous R pour générer l’atlas ainsi que la carte du monde, puis une mise en page sous GIMP ont permis d’aboutir au résultat final.

Et bien sûr, pour finir, le code:

Les cartes typos, comment sonnent les communes de votre région?

Cet article parle du texte dans les cartes.Loin d’être un élément polluant, le texte peut véhiculer toute une palette de formes esthétiques ainsi que favoriser la perception de valeurs statistiques. Certaines réalisations cartographiques ne sauraient se passer de lui. C’est le cas d’une carte que nous essaierons de concevoir au sein de cet article au sujet de la dénomination des communes, de leur « son ». Avant cela, nous aurons tenté d’introduire, modestement, l’univers des cartes typographiques.

Le texte au sein d’une carte

Ma définition d’une carte traditionnelle sera ici volontairement succinte. Selon moi, il s’agit à la base d’un agencement de formes, de couleur et de texte. La barre d’échelle est une forme rectangulaire assortie de libellés numériques. La fléche d’orientation est l’association d’une rosace de forme variable munie de la mention d’un ou de plusieurs points cardinaux.

C’est la combinaison d’éléments picturaux et littéraux qui permet de fournir une information à celui qui lit la carte.

Concernant la forme picturale, qu’elle soit ponctuelle, linéaire ou surfacique, sa forme, sa couleur, sa trame, sa densité, son angle de rotation peuvent servir de paramètres afin fournir une information numérique ou qualitative. Si cette dernière est décrite dans la légende, elle sera reçue sans faute par l’utilisateur. Si elle ne l’est pas, elle sera seulement perçue de manière subjective (avec parfois des risques d’interprétation).

En fait, je ne fais ici que reprendre les idées formulées par Scott Mac Cloud dans son excellent « Understanding Comics », ouvrage qui pourra intéresser autant les férus de BDs que de design informationnel.

Tous les paramètres de représentation d’objets sont très bien décrits dans les ouvrages de sémiologie graphique tels que ceux de Jacques Bertin. Ils sont aussi officialisés dans des bouquins de design informationnel comme des « gestalt principles of design ».

La plupart du temps, ceux qui réalisent des cartes, notamment statistiques, négligent le texte au profit des éléments figuratifs. Le texte est souvent perçu comme un élément « polluant » qui va dissimuler la forme alors qu’en réalité, il la sert. La forme doit-elle primer sur le fonds, l’esthétique sur la limpidité de l’information?

Ci-dessous figurent des cartes où le texte est mis en avant de manière inventive et esthétique. Il y est détourné de façon malicieuse de son usage courant ou bien, dans son agencement, mime la forme d’un objet.

– San-Francisco en noms de rue:

San-Franciso Typographic Map by axismaps
– Les noms de groupes de musique au Royaume-Uni:

Great British Bands by pello.co.uk

– Un carte réalisée avec des noms de films:

Film Map by Dorothy Weare

– Les prénoms des Américains:

USA surnames by National Geographic

En fait, il y a tout autant de façons de manipuler le texte que les objets géométriques.

  • couleur: plus ou moins saturée, de teinte variable.
  • hauteur
  • l a r g e u r
    • hauteur et largeur peuvent être utilisées  pour représenter un variable numérique (population, etc…)
  • graisse:  pour mettre en valeur du texte en fonction d’une variable qualitative.
  • e  s  p  a  c  e  m  e  n  t: il agit un peu comme la densité d’un semis de points ou l’espacement de hâchures
  • inclinaison: il pourrait signifier une tendance binaire suivant si le texte est orienté à gauche ou à droite (appliqué aux résultats de vote). Il pourrait également signifier une notion de vitesse, d’avancement.
  • angle: selon moi, ce paramètre est à manier avec précaution, au risque d’attraper un torticolis.
  • type de fonte: une fonte véhicule  une émotion, un univers.  Par exemple, la fonte utilisée dans cette image rappelle les cartes au trésor.
Carte de pirate réalisée avec Mapnik

Il y a sûrement plein d’autres possibilités que je n’ai pas listées ici.

Logiciels et typographie

Les logiciels de dessin vectoriel tels qu’Adobe Illustrator ou Inkscape incorporent déjà toutes ces possibilités de lettrage.

QGIS, le logiciel populaire de carto libre, dispose aussi telles fonctions: on peut choisir la fonte, la taille de la police, l’orientation du texte en fonction de valeurs.

Un logiciel comme Processing va très loin dans ce domaine. Dans cette image réalisée avec l’outil de design génératif, les lettres nous permettent de lire un visage.


P_4_3_2_01 from Generative Design on Vimeo.


Une carte des noms de commune

Pas loin de Calais, sur la Cote d’Opale

Loin de moi l’idée de raconter ma vie – je préfère raconter celle des autres – mais cet été, je suis parti en voyage, sur la route, dans le Nord – dont la beauté des côtes n’a rien à envier à celles du pourtour méditerranéen, soit dit en passant.

Le tir au panneau n’est pratiqué qu’en Corse

Je suis un habitant du Sud de la France et les panneaux des communes que j’ai traversées dans le Nord accrochaient mon regard car leur phonétique était de toute évidence différente de celles de ma région. Souvent, la sonorité des communes, même quand elle a été couverte par un voile de métropolisation, laisse quand même transparaître quelques motifs bien spécifiques.

De la même façon que François Guillem s’interroge sur la configuration spatiale des prénoms des Français, je me suis demandé de quelle manière il serait possible de faire apparaître la configuration des noms de commune en France.

Tous les noms de commune sont différents, même si, rarement, certaines sont les mêmes. C’est pourquoi je me suis dit qu’il fallait me concentrer sur une partie du nom de la commune: la dernière syllabe du nom de chaque commune qui pouvait être commune à plusieurs. C’est souvent celle qui résonne le mieux et qui est la plus caractéristique de la région concernée.

L’objectif était de voir, région par région, quelles étaient les dernières syllabes des noms de commune qui étaient les plus caractéristiques de chaque région, et par ce biais, leurs consonnances.

Je m’attendais déjà à trouver en Bretagne, des syllabes se terminant en *EC, en Alsace en *EIN, en Corse en *CCIA, *CCIO

Restait à savoir quel type de représentation choisir. Aucune représentation graphique mobilisant la forme, la couleur d’objets géométriques ne pouvait convenir. Seule une carte typographique pouvait répondre à ce besoin.

Il faudrait alors s’atttaquer au texte et non aux styles objets géométriques. On pourrait ajuster, par exemple, la taille du texte en fonction de l’importance de cette syllabe pour une région donnée tout en faisant en sorte que les étiquettes ne se chevauchent pas.

Conception

Le fichier que j’ai utilisé est bien entendu GéoFLA (encore lui).

Une syllabe est un son ou un groupe de sons qu’on prononce par une seule émission de voix. A défaut d’avoir à disposition une librairie phonétique, je me suis attaqué aux noms de communes à coup d’une expression régulière qui vaut ce qu’elle vaut: je ne suis pas un expert de la régularisation (sauf des amis à qui je dois une bière). Le résultat est ci-dessus.

Je ne pouvais me contenter de mon comptage de syllabes par région car je retrouvais des syllabes fréquentes dans toutes les régions comme *ILLE. J’ai assorti le traitement d’une analyse en composantes factorielles afin de voir, pour chaque région, quelles étaient les syllabes les plus représentatives. Par  la suie, j’ai choisi de me concentrer uniquement sur les 30 premières les plus caractéristiques.

Différentes dispositions de point possibles

Une fois cela fait, j’ai créé un semis de points au niveau de chaque polygone dont la répartition est intermédiaire entre le régulier et l’aléatoire. Cette répartition est appelée « non-alignée ». Ce semis de points servira à positionner les étiquettes. Par conséquent, ces dernières étiquettes ne seront pas positionnées en fonction de la localisation absolue de communes leur correspondant, mais en fonction de leur région d’appartenance.

Ensuite, j’ai affecté une taille variable, selon 6 classes, à mes étiquettes en fonction de leur poids (selon la classification de Jenks qui maximise la variablité inter-classes et minimise l’intra)

J’ai affecté une couleur différente aux libellés selon la région à laquelle ils appartenaient.

Afin d’avoir un rendu optimal de toutes mes étiquettes, j’ai choisi une solution de nuage de mots (word cloud). Le word cloud permet de faire en sorte que les étiquettes s’emboîtent les unes dans les autres.

Le rendu

Carte des noms des commune (cliquer pour voir en grand)

Certes, cette carte n’est pas aussi ambitieuse que celles présentées dans les liens précédents mais il s’agit d’un bon début!

Parfois, vous pourrez voir sur la carte quelques artefacts: des libellés se balladent dans une autre région. Le choix des tailles de police n’étant pas optimal, lorsque tout l’espace est saturé, les boîtes de texte ne s’emboîtent plus et essaient de conquérir un espace libre.

On pourrait appliquer cette technique à bien d’autres choses: les prénoms des français, par exemple, à l’image de ce qui a été réalisé sur la carte du National Geographic (USA surnames).

Le code

Et bien sûr, le code!