Archives de catégorie : R

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.

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