dimanche 28 juillet 2013

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





Aucun commentaire:

Enregistrer un commentaire