Categories

Archives

Un peu de sociologie électorale

Je n’avais qu’une heure, alors c’est fait à l’arrache.
Voici la “couleur” politique de votre bureau de vote, si vous votez à Paris :

Les données proviennent de Paris “Open Data” et décrivent les résultats du premier tour des régionales de 2010. Je me suis inspiré de Mounir&Simon mais j’ai fait une petite classification ascendante pour distinguer des “clusters” (ils ne distinguaient que Droite / Gauche et cela me semblait un peu trop simple).


Groupe 1 : noir : une zone frontière (mais où Pécresse fait le double de Huchon)
Groupe 2 : rouge : ce doit être une ancienne zone à droite, passée à gauche. Huchon et Duflot, ensemble, sont bien au dessus de Pécresse.
Groupe 3 : vert : C’est là où la candidate verte, Duflot, fait son score maximal et talonne Huchon. Le PC est aussi en “force”.
Groupe 4 : bleu foncé : LA zone Pécresse : là, on vote à droite en majorité.
Groupe 5 : bleu clair : la zone des marges, où le score de Pécresse est faible, et où les petits candidats (Arnautu, Besancenot, Governatori, Kanoute, Laurent, Mercier…) font un score plus important qu’ailleurs.

Mise à jour, avec de nouvelles couleurs.
Les groupes sont construits de la même manière que ci-dessus, mais le “barplot”, sous la carte, insiste sur les “petits” candidats, en insistant sur la déviation par rapport à leur moyenne sur Paris.


[Attention : c’est embrouillé. Ce n’est pas “faux”, mais le “barplot” ne représente pas les informations sur lesquelles je me suis basé pour construire les groupes.].

 
Où ont-ils (et elles) fait leur meilleur score ?

Deuxième mise à jour
Une analyse des correspondances produit ce joli graphe. L’Axe 1 explique les 3 quarts de l’inertie (et place les personnes sur un axe droite (à gauche) — gauche (à droite du dessin).
Mais l’on voit aussi l’importance du 2e axe : qui répartit les candidats de partis “hétérodoxes” : FN, NPA, Verts, etc…

Quelques courbes de niveau

Sur la carte suivante, chaque point représente le lieu de réunion d’une “église d’expression africaine” :

Cette série de points montre la dispersion, mais ne permet pas de repérer “immédiatement” une sorte de centre. Ce que fait la carte suivante, à lire comme des courbes de niveau. Il y a peut-être des espaces “inégalement religieux”.

Mais que trouve-t-on donc au centre ? Des églises plus anciennement implantées ? des “grosses” églises qui attirent, comme un supermarché des petits concurrents différenciés, d’autres églises, plus petites, qui tentent de capter le public… ?
Ces cartes ont été produites à partir de cet exemple de cartographie du crime à Houston, TX.

R, cartographie, suite

Comment obtenir rapidement cette carte représentant le taux brut de natalité dans divers pays d’Europe, en 2009 :

Il faut tout d’abord disposer de données (issues de Eurostat) et d’un fichier shapefile — trouvé sur le site de la Commission européenne par François “Politbistro” B. — (Voici le tout dans une archive zippée : maps.zip)

Voici le code.

library(maptools)
library(RColorBrewer)
library(classInt)
library(reshape)
setwd("~/Desktop/maps")
data <- read.table("tauxbrutnatalite.csv",header=T,sep=";")
head(data)
europe<- readShapeSpatial("CNTR_RG_60M_2006.shp",proj4string=CRS("+proj=longlat"))
summary(europe)
xcoord <- c(-10,40)
ycoord <- c(35,70)
nclr <- 6
colours <- brewer.pal(nclr, "RdBu")
v<-data$X2009
class <- classIntervals(v, nclr, style="equal")
colcode <- findColours(class, colours)
test<-match(europe$CNTR_ID,data$code)
x<-colcode[test]
x[ is.na(x) ] <- "darkgrey"
plot(europe,col=x,xlim=xcoord,ylim=ycoord)
legend(-10,70,legend=names(attr(colcode,"table")), fill=attr(colcode, "palette"), cex=1.2, bty="n")

Somme toute, ce n’est pas un code très lourd pour générer une aussi jolie carte (les couleurs auraient pu être mieux choisies, ainsi que les intervalles, mais tout ceci est grandement modifiable). Ce qui est compliqué, c’est d’associer les données dont on dispose et le fichier shapefile. Deux problèmes se posaient ici :

  1. les pays, dans le shapefile, sont indexés par leur code à 2 lettres (FR pour France…) : il fallait donc travailler un peu les données d’Eurostat, en Français
  2. il fallait ensuite être certain que R coloriait les pays avec les bonnes indications : c’est à cela que l’instruction match sert : elle établit, dans l’objet “test” une grille de correspondance entre le code-pays du fichier de données et le code-pays du fichier shapefile.

J’ai colorié en gris les pays pour lesquels les données manquent.
Maintenant, François “Politbistro” B., à toi de jouer.

Amusements cartographiques

Pour rédiger mon tutoriel cartographique pour R, je cherchais des données variées. J’ai réussi à trouver les résultats à la présidentielle de 2007, par départements. J’ai du retravailler un peu le fichier, que je donne à la collectivité :
presidentielles.csv
Avec ça, on peut faire de jolies cartes. Mes premières essaient de repérer les zones où les candidats ont reçu leur pourcentages maxi et mini de votes.
Je classe les données par intervalles avec le package classInt :
class<-classIntervals(plotvar, nclr, style=”equal”)

 

 

Je sais, ces cartes n’ont rien de formidable, on en trouve de mieux sur internet, il n’y a pas de légende… Mais vous pouvez les reproduire ces cartes. Talk about empowerment !

plotvar <- presidentielles$schivardi/presidentielles$exprime
nclr <- 6
plotclr <- brewer.pal(nclr,”RdBu”)
plotclr <- plotclr[nclr:1] # reorder colors
class <- classIntervals(plotvar, nclr, style=”equal”)
colcode <- findColours(class, plotclr)
plot(departements,col=colcode,lty=”blank”,lwd=.5)
title(main=”Votes pour Schivardi”)

Cartographie avec R, “tutoriel”

Voici une oeuvre en voie de composition : un tutoriel pour la cartographie avec R. Considérez que le fichier, disponible à l’adresse suivante https://coulmont.com/cartes/rcarto.pdf, est pour l’instant une version très préliminaire. Disons une version 0.1
Il existe de bons “tutoriels” en ligne en français, notamment pour la régression logistique (Lemercier et Sofio 1) ou l’analyse factorielle (Sofio et Lemercier 2).
Je n’en connais pas pour la cartographie, d’où mon initiative.
Les commentaires sont les bienvenus.

Rubicon

La nouvelle série “Rubicon” (ne me demandez pas comment on se la procure) ne promet pas grand chose (elle semble inspirée par “Damages” d’un côté, par “Numb3rs” de l’autre). Mais une chose m’a amusé : cette série repose partiellement sur ce que je vais appeler rapidement une “tendance”. Regardez plutôt ces copies d’écran :

Le bureau du personnage principal est couvert de petits dessins.
Mais que remarque-t-on d’autre ?

Il semble que certains dessins ressemblent à des graphes et des représentations visuelles de relations sociales.

Que remarquez-vous dans cette dernière copie d’écran, ci-dessous ?

On y voit, accroché au mur, une reproduction de la “Carte figurative des pertes successives” de l’armée de Napoléon dessinée par Charles Joseph Minard, l’une des images préférée d’Edward Tufte, l’auteur de Beautiful Evidence et de The Visual Display of Quantitative Information”. Ces “oeufs de Pâques” visuels ont été remarqués au moins ici sur twitter.
Mais il semble que ces images n’aient dans cette série télévisée qu’une fonction illustrative. Elles n’interviennent pas, apparemment, dans la narration. Dommage, j’aurais aimé voir un héros résoudre une énigme à l’aide d’une sparkline. Peut-être que le décorateur de cette série s’est amusé ici (il me semble que ce même décorateur affectionne aussi Helvetica, ce qui n’est pas surprenant).
Pourquoi ai-je qualifié ces images de “tendance” au début de ce billet ? C’est que plusieurs blogs influents, Daring Fireball ou Kottke se font les publicitaires des travaux de Tufte, que ce dernier vient d’être nommé par la Maison Blanche à un panel de surveillance des dépenses liées au “Recovery Act”. Enfin la question de la visualisation des données, abordée par Graphic Sociology, ou par Flowing Data, devient cruciale à un moment où l’on dispose de tellement de données statistiques que la difficulté est d’en construire des “synthèses épaisses” (“thick syntheses”, comme l’on parle de “thick description” à la Geertz).

Une liste

Mes journées étant bien occupées en ce moment par l’oral d’entrée à l’ENS (et, avant, par la fin de l’année universitaire), je limiterai ce billet à une liste :

Cartographie avec R (suite)

Je cherche à donner à voir, par des points sur une carte, la localisation d’églises (ou de boulangeries, ou de sex-shops, ou de lobbyistes…) en région parisienne. Il est possible de créer un “mashup” avec google maps, ou une carte dans google earth, mais cela ne donne pas de jolis fichiers PDF utilisables dans une publication scientifique qui se respecte. Imaginons que je dispose des données “Longitude / Latitude” des églises.

Il me faut un fond de carte. On trouve une carte de la France (avec les frontières administratives) sur “cloudmade” : http://downloads.cloudmade.com/europe/france. Il faut télécharger le fichier : “france.shapefiles.zip”
On trouve aussi, ailleurs, une carte des principales rues, routes, autoroutes… d’Île de France : http://download.geofabrik.de/osm/europe/france/ : il faut télécharger la carte de l’Île de France : ile-de-france.shp.zip

Ces cartes “open source” proviennent du projet OpenStreetMap : il y a des erreurs, des morceaux non complets, des manques. Mais à notre échelle, cela suffira. Les fichiers téléchargés sont des “shapefiles”. Ils consistent en 4 fichiers différents : un fichier .prj qui contient des informations concernant la projection, puis trois autres fichiers contenant les données elles-mêmes (un fichier dbf, un fichier shp et un fichier shx).

Ouvrons maintenant R.

library(maptools) #charge le package "maptools"
france<-readShapeLines(
"Desktop/france/france_administrative.shp",
proj4string=CRS("+proj=longlat")
)

l’instruction précédente demande à R de charger les informations de la carte de France dans “france”.

summary(france) # donne la structure de "france" 

On constate que dans cette “Data frame” il est indiqué, par “ADMIN_LEVE” le type de frontière administrative: 8 pour les communes, 6 pour les départements.

routesidf<-readShapeLines(
"Desktop/ile-de-france/roads.shp",
proj4string=CRS("+proj=longlat")
)
summary(routesidf)

permet de constater que le type de route est indiqué par “type” : “primary”, “secondary”, “residential”…

les fichiers peuvent être longs à se charger : ce sont des objets très lourds et il serait préférable de demander à ne charger qu’une petite partie des fichiers (par exemple les routes principales et pas tous les chemins communaux). Mais je ne sais pas le faire… pas encore du moins.

plot(france,xlim=c(2.35,2.45),ylim=c(48.87,48.97),lty=3)

donne l’image suivante. Seul un regard averti y discernera le nord de Paris et une partie de la Seine-Saint-Denis :
Paris-Nord
Rendons cette carte un peu plus lisible :

plot(france[france$ADMIN_LEVE==6,],add=TRUE,lwd=2)
plot(routeidf[routeidf$type=="primary",],add=TRUE,lwd=2,col="lightgray")
plot(routeidf[routeidf$type=="secondary",],add=TRUE,lwd=2,col="lightgray")

Paris-Nord2
J’ai ajouté les routes principales (de type “primary” et “secondary”), j’ai indiqué certaines des frontières départementales par un trait noir. Je vais maintenant ajouter mes églises, qui sont dans l’objet “coordeglises” : X indiquant la longitude et Y la latitude. :

points(coordeglises$X,coordeglises$Y,pch=20,cex=2,col="red")

Paris-Nord3

Il me semble pouvoir remarquer que mes églises s’installent assez souvent à proximité de ces grandes routes, voire même à proximité du croisement de deux de ces grandes routes.

Note : Mis à part le bel iMac sur lequel j’ai réalisé ces cartes, tout le reste fut “gratuit”. Open Source ou non. Seashore, R, OpenStreetMaps… et l’indispensable géocodage offert par google….

Cartographies

La semaine dernière, deux collègues m’ont contacté, apparemment indépendamment l’un de l’autre, pour me poser la même question : “pour cartographier [insérer thème de recherche], que faut-il utiliser ?”. Dans les deux cas, parce qu’ils travaillent sur des pays européens, les fonds de cartes précis sont payants ou difficile à trouver. Nous, Européens, n’avons rien d’équivalent aux fichiers Tiger du recensement US. Essayez-donc de trouver un fond de carte des communes françaises au format E00 ou shapefile… (ou un fond de carte représentant la zone couverte par chaque bureau de vote en 2007).
Pour cartographier, par exemple, la localisation des boulangeries en Île de France, j’ai trouvé un fonds de carte utilisable. Le projet OpenStreetMap, sorte de carto-wiki, commence à être assez bien renseigné, grâce au travail de milliers de contributeurs.
exemple : Paris, 19e arrondissement.
Les données sont librement téléchargeables, ce qui permet de produire ensuite ses propres cartes. OpenStreetMap donne ainsi naissance à OpenCycleMap et à d’autres sites.
Il est ainsi possible de trouver des fichiers “shapefile” proposant les frontières administratives de certains pays (parfois assez précis jusqu’au niveau de la commune). Pour la France par exemple : ici et .

Chose très intéressante, il est possible de télécharger en PDF les cartes d’OpenStreetMap (en cliquant sur l’onglet “Export”) et ensuite de les imprimer.

View Larger Map

A venir : quelques mots sur Rgdal, Maptools et les projections cartographiques avec R. En attendant, vous pouvez consulter le blog d’Arthur Charpentier.

Race, religion, richesse

Petite collaboration avec rue89.com et surtout avec Frédéric Dejean, géographe :
La pauvreté, terrain fertile pour les églises noires d’Ile-de-France.