Categories

Archives

Les billets de April, 2017 (ordre chronologique)

Un enthousiasme débordant

« Par procuration, mais pas par défaut » : quelques pages qui décryptent le vote par procuration, à partir des données de l’Enquête électorale française du CEVIPOF (ENEF). Il apparaît bien comme une modalité préférentiellement choisie par des jeunes, des cadres, des diplômés du supérieur…
Mais ce que j’ai trouvé de plus intéressant, c’est le niveau d’intérêt des mandataires, celles et ceux qui reçoivent une procuration : ce sont des enthousiastes. J’imaginais, peut-être un peu naïvement, que les mandants (celles et ceux qui ne peuvent voter et qui font une procuration) étaient les plus enthousiastes (les plus intéressés par la politique en général, les plus décidés à voter, les plus intéressés par l’élection en particulier), notamment parce qu’ils doivent faire la queue, remplir un formulaire, etc… Mais non.
Mais alors pourquoi un tel enthousiasme ?

  • Voter est coûteux (en temps, en déplacement…) pour un rendement faible : que vaut sa toute petite voix individuelle ? Mais le rendement double pour les mandataires : ils sont porteurs de deux voix, la leur et celle de leur mandant. Doublement du rendement. Doublement de l’utilité de son déplacement. Création d’enthousiasme ! C’est la version pour économiste.
  • La confiance accordée par le mandant ou la mandante apporte de la satisfaction. « Vote pour Fillon. Je te fais confiance. » L’échange du secret (celui du vote) a un effet psychologique qui se traduit par une forme d’enthousiasme à l’idée de satisfaire la confiance qui nous a été faite. La version pour psychologue.
  • Le pouvoir détenu sur celle qui nous a donné sa voix pourrait aussi être une des pistes à suivre. « J’ai tout pouvoir sur cette voix. » La version libidinale.
  • C’est un effet de sélection. Face à divers choix possibles, les mandants ont sélectionné celui ou celle qui apparaît la mieux disposée à voter. « Théo BOF ? Non. Léa MOUAIS ? Non. Cléo WAOUH ? Ah oui. » On ne donne qu’aux plus enthousiastes du lot. La version à ne pas oublier.
  • L’enthousiasme préexiste, et il est même à l’origine de la procuration. « Quoi, tu n’es pas là dimanche ? Voter c’est important. En plus Mélenchon il a le meilleur programme ! Sérieusement. C’est facile de faire une procu. Ca te prendra même pas 15 minutes. Tu vois, tu télécharges et hop. T’as plus qu’à aller au commissariat. Non, c’est facile. Je t’y emmène. Là oui, tout de suite ! » La version dispositionaliste.
  • Ce n’est qu’un effet de la composition socio-démographique du groupe des mandataires : un peu plus âgés, plus “cadres sup”, plus diplômés, avec un peu plus d’enfants… que la moyenne. Si l’on compare à composition égale, il n’y a plus de débordement d’enthousiasme. L’enthousiasme n’est ici qu’un mirage. C’est la version toute-chose-égale-par-ailleuriste.

Tant d’hypothèses à tester ! N’est-ce pas formidable ?
Vous pouvez lire l’étude (sans la mise à l’épreuve des hypothèses) sur https://www.enef.fr/les-notes/

Procuration et type de vote

À Paris, tout le monde ne vote pas par procuration. Par définition, les abstentionnistes ne votent pas par procuration. Et plus il y a d’abstentionnistes dans un bureau de vote [techniquement, à l’extérieur du bureau de vote, bien entendu], moins il y a de procurations : c’est dans les quartiers où l’on participe beaucoup que l’on vote par procuration. De la même manière, là où le vote est fréquemment blanc ou nul, il y a peu de procurations.
Là où les « petits candidats » font leur meilleur score, c’est là où il y a peu de votes par procuration. Mais cette relation se vérifie aussi pour de nombreux candidats : en 2017 à Paris, la fréquence de la procuration est inversement reliée au score local des candidats Le Pen, Hamon, Mélenchon, Arthaud et Poutou… On voit ainsi que la droite de régression (et une régression locale) est orientée vers le bas : dans les zones où il y a eu beaucoup de procurations, il y a eu relativement peu de votes pour Jean-Luc Mélenchon.


cliquez pour agrandir

La relation est inversée pour Macron et Fillon : là où il y a eu beaucoup de procurations, c’est là où ces candidats ont fait leurs meilleurs scores. En 2012, les choses étaient un peu différentes. Il y avait eu plus de procurations au premier tour à Paris, et seul le candidat Sarkozy était associé à une corrélation positive.

Zones de sur-performance

À partir des résultats au premier tour de l’élection présidentielle de 2017, à Paris, on peut tracer cette carte montrant les zones où les différents candidats ont réalisé des scores supérieurs à leur moyenne parisienne.

cliquez pour agrandir

Et voici le code, non commenté. Je commence par repérer où se trouvent les zones de sur-performance (les bureaux de votes). J’extrait du fond de carte parisien les 4 zones distinctes. Je trace ensuite quatre cartes les unes sur les autres.

library(tidyverse)
library(classInt)
library(RColorBrewer)
library(maptools)
library(rgdal)

setwd("~/Dropbox/projets-R/")

# le "shapefile" se trouve sur opendata.paris.fr
paris<-readOGR("../data/2017-listes-paris/secteurs-des-bureaux-de-vote-3/",
               "secteurs-des-bureaux-de-vote")

# frontières des arrondissements
parisarr <- readOGR ("../procurations/paris/arrondissements/parisarr.shp", layer="parisarr")
# les résultats électoraux se trouvent sur opendata.paris.fr
df <- read_csv2("~/Dropbox/procurations/paris/paris-2017/resultats_electoraux.csv")
df <- df %>% filter(`date du scrutin`=="2017-04-23") %>% 
  select(3,4,6,7,8,9,10,12,14,15,16,17) %>% 
  spread(key=`nom du candidat ou liste`,value=`nombre de voix du candidat ou liste obtenues pour le bureau de vote`) %>% 
  mutate(numbv=paste(`numero d'arrondissement 01 a 20`,`numero de bureau de vote 000 a 999`,sep="-"))

res <- df %>% group_by(numbv) %>% 
  summarize(arr=mean(as.numeric(`numero d'arrondissement 01 a 20`)),
            prop_macron=100*MACRON/`nombre d'exprimes du bureau de vote`,
            prop_lepen=100*`LE PEN`/`nombre d'exprimes du bureau de vote`,
            prop_fillon=100*FILLON/`nombre d'exprimes du bureau de vote`,
            prop_melenchon=100*(HAMON+`MÉLENCHON`)/`nombre d'exprimes du bureau de vote`) %>% 
  gather(key=type,value=valeur,-numbv,-arr)

res <- res %>% group_by(type) %>% 
  mutate(sur_rep=valeur/(mean(valeur)+.2*sd(valeur))) %>% # "la moyenne et un peu plus" (.2 écart type)
  filter(sur_rep>1) %>% group_by(numbv) %>% 
  mutate(keep=type[which.max(sur_rep)],valeur_keep=valeur[which.max(sur_rep)]) # on garde le candidat "le plus au dessus" de sa moyenne

# on ne garde pas les bureaux dupliqués
res <- res[!duplicated(res$numbv),]

# extraction des zones-candidats
macron <- subset(paris,paris$id_bv %in% res$numbv[res$keep=="prop_macron"])
lepen  <- subset(paris,paris$id_bv %in% res$numbv[res$keep=="prop_lepen"])
melenchon <- subset(paris,paris$id_bv %in% res$numbv[res$keep=="prop_melenchon"]) # avec le score d'Hamon ajouté
hamon <- subset(paris,paris$id_bv %in% res$numbv[res$keep=="prop_hamon"])
fillon <- subset(paris,paris$id_bv %in% res$numbv[res$keep=="prop_fillon"])

png("~/Desktop/parissur_rep.png",width=1100,height=800,res=150)
par(mar=c(1,0,1,1))
plot(paris) # on commence par "tracer" Paris 

m<-match(macron$id_bv,res$numbv)
plotvar<-res$valeur_keep
nclr <- 3
plotclr <- brewer.pal(nclr,"Greens")
class <- classIntervals(plotvar[m], nclr, style="fisher",dataPrecision=1)
colcode <- findColours(class, plotclr)
plot(macron,col=colcode,border=colcode,add=T)

m<-match(fillon$id_bv,res$numbv)
plotvar<-res$valeur_keep
nclr <- 3
plotclr <- brewer.pal(nclr,"Blues")
class <- classIntervals(plotvar[m], nclr, style="fisher",dataPrecision=1)
colcode <- findColours(class, plotclr)
plot(fillon,col=colcode,border=colcode,add=T)

m<-match(melenchon$id_bv,res$numbv)
plotvar<-res$valeur_keep
nclr <- 3
plotclr <- brewer.pal(nclr,"Reds")
class <- classIntervals(plotvar[m], nclr, style="fisher",dataPrecision=1)
colcode <- findColours(class, plotclr)
plot(melenchon,col=colcode,border=colcode,add=T)

m<-match(lepen$id_bv,res$numbv)
plotvar<-res$valeur_keep
nclr <- 3
plotclr <- brewer.pal(nclr,"Purples")
class <- classIntervals(plotvar[m], nclr, style="fisher",dataPrecision=1)
colcode <- findColours(class, plotclr)
plot(lepen,col=colcode,border=colcode,add=T)

plot(parisarr,add=T,lwd=.1) # on ajoute les frontières des arrondissements
legend(2.232, 48.91,legend=c("Hamon/Melenchon","Le Pen","Fillon","Macron"), fill=c("red","purple","deepskyblue","chartreuse3"), cex=1, bty="n",title="")
title(main="Zone de sur-performance des candidats. Paris. Présidentielles 2017.")
title(sub="Fond : opendata.paris.fr | données : Ville de Paris | Cartographie : B. Coulmont\nZones où les candidats font mieux que leur moyenne",line=-.5,cex.sub=.8)
dev.off()

Et, en bonus, le code, amélioré par Christophe P. :


library(tidyverse)
library(classInt)
library(RColorBrewer)
library(maptools)
library(rgdal)

rep_data_secteurs < - 'DATA/secteurs-des-bureaux-de-vote'
# "../data/2017-listes-paris/secteurs-des-bureaux-de-vote-3/"


setwd("~/Dropbox/projets-R/")

# le "shapefile" se trouve sur opendata.paris.fr
paris<-readOGR(rep_data_secteurs,
               "secteurs-des-bureaux-de-vote")

# frontières des arrondissements
parisarr <- readOGR ("../procurations/paris/arrondissements/parisarr.shp", layer="parisarr")
# les résultats électoraux se trouvent sur opendata.paris.fr
df <- read_csv2("~/Dropbox/procurations/paris/paris-2017/resultats_electoraux.csv")
df <- df %>% filter(`date du scrutin`=="2017-04-23") %>% 
  select(3,4,6,7,8,9,10,12,14,15,16,17) %>% 
  spread(key=`nom du candidat ou liste`,value=`nombre de voix du candidat ou liste obtenues pour le bureau de vote`) %>% 
  mutate(numbv=paste(`numero d'arrondissement 01 a 20`,`numero de bureau de vote 000 a 999`,sep="-"))

res < - df %>% group_by(numbv) %>% 
  summarize(arr=mean(as.numeric(`numero d'arrondissement 01 a 20`)),
            prop_macron=100*MACRON/`nombre d'exprimes du bureau de vote`,
            prop_lepen=100*`LE PEN`/`nombre d'exprimes du bureau de vote`,
            prop_fillon=100*FILLON/`nombre d'exprimes du bureau de vote`,
            prop_melenchon=100*(HAMON+`MÉLENCHON`)/`nombre d'exprimes du bureau de vote`) %>% 
  gather(key=type,value=valeur,-numbv,-arr)

res < - res %>% group_by(type) %>% 
  mutate(sur_rep=valeur/(mean(valeur)+.2*sd(valeur))) %>% # "la moyenne et un peu plus" (.2 écart type)
  filter(sur_rep>1) %>% group_by(numbv) %>% 
  mutate(keep=type[which.max(sur_rep)],valeur_keep=valeur[which.max(sur_rep)]) # on garde le candidat "le plus au dessus" de sa moyenne

# on ne garde pas les bureaux dupliqués
res < - res[!duplicated(res$numbv),]

# extraction des zones-candidats
extract_zone <- function (name)
{
    field <- paste0("prop_", name)
    return(subset(paris,paris$id_bv %in% res$numbv[res$keep==field]))
}

macron <- extract_zone('macron')
lepen  <- extract_zone('lepen')
melenchon <- extract_zone('melenchon') # avec le score d'Hamon ajouté
hamon <- extract_zone('hamon')
fillon <- extract_zone('fillon')

png("~/Desktop/parissur_rep.png",width=1100,height=800,res=150)
par(mar=c(1,0,1,1))
plot(paris) # on commence par "tracer" Paris 

plot_candidate <- function (cand, color)
{
    m<-match(cand$id_bv,res$numbv)
    plotvar<-res$valeur_keep
    nclr <- 3
    plotclr <- brewer.pal(nclr, color)
    class <- classIntervals(plotvar[m], nclr, style="fisher",dataPrecision=1)
    colcode <- findColours(class, plotclr)
    plot(cand,col=colcode,border=colcode,add=T)
}

plot_candidate(macron, "Greens")
plot_candidate(fillon, "Blues")
plot_candidate(melenchon, "Reds")
plot_candidate(lepen, "Purples")

plot(parisarr,add=T,lwd=.1) # on ajoute les frontières des arrondissements
legend(2.232, 48.91,legend=c("Hamon/Melenchon","Le Pen","Fillon","Macron"), fill=c("red","purple","deepskyblue","chartreuse3"), cex=1, bty="n",title="")
title(main="Zone de sur-performance des candidats. Paris. Présidentielles 2017.")
title(sub="Fond : opendata.paris.fr | données : Ville de Paris | Cartographie : B. Coulmont\nZones où les candidats font mieux que leur moyenne",line=-.5,cex.sub=.8)
dev.off()