Tous les articles par Mathieu Rajerison

Résultats gagnants par circonscription du 2nd tour des élections législatives 17 juin 2012 – Fichier Remanié d’après Data Publica

L’excellent site data publica alimente très rapidement sa plate-forme de nouvelles données en licence ouverte. Dernières en date, les données des résultats des législatives 2012 par circonscriptions.

Ce fichier est très complet et permet d’avoir les résultats pour chaque circonscription relatives aux différents partis.

J’ai voulu créer un fichier remanié ne faisant apparaître que les gagnants. Le voici en téléchargement au format csv:

Plan:
  • Pourquoi remanier le fichier
  • Quel métier exercent les candidats ayant remporté les élections législatives? 
  • Autres explorations
    • Petits camemberts
    • Triangulaires
    • Abstention
    • Extrême-Droite
  • Les éléments clés du code ayant permis cette transformation
  • Le code R sous github

Pourquoi remanier le fichier

Il n’est pas très aisé d’avoir, à partir du fichier d’origine, les gagnants pour chaque circonscription. Pour chaque circonscription, les résultats relatifs aux candidats sont ordonnés en colonnes mais pas selon le pourcentage de vote obtenu.

Il y a donc une structure en colonnes correspondant aux résultats pour un candidat qui est répliquée de 2 à trois fois.

Aussi, les partis d’appartenance politique sont mentionnés par des codes. Les libellés de ces derniers sont récupérables depuis le fichier des résultats du second tour des élections présidentielles. Je les ai aussi intégrés dans le fichier final.

Un remaniement du fichier serait nécessaire afin d’avoir un résultat synthétique des résultats. Il serait cohérent d’identifier les gagnants dans cette masse de données. C’est le but du traitement réalisé.

Il faut signaler que le fichier comporte un tronc commun: des données générales permettant d’analyser entre autres choses l’abstention.

En gros, l’opération que j’ai réalisée consiste à migrer de cette structure native de fichier à celle-ci:

Aussi ai-je rajouté une colonne: le nombre de candidats présents au second tour pour chaque circonscription. Ce nombre va de 1 à 3. Il permet de déterminer les triangulaires.

J’espère que ce fichier vous aura permis de réaliser des analyses, voire des cartes sympathiques. D’ailleurs, voici un article mentionnant un fichier géographique des circonscriptions: http://www.joelgombin.fr/?p=649

Voici quelques petites statistiques que j’ai réalisées sur la base de ce fichier.

Quelle profession exercent les gagnants?

Un article du Figaro intitulé « Les députés issus des classes populaires ont disparu » indique que ces derniers sont à présents largement diplômés, contrairement à avant où ils étaient surtout issus de milieux modestes.

Regardons quel métier ils excercent. Pour cela, il a fallu que je récupère le fichier des candidats aux élections législatives sur le site de data publica.

Distribution des professions exercées par les députés

Dans l’article, il est également dit que côté Socialistes, la grande majorité des élus provient de l’enseignement secondaire et que le privé est davantage représenté côté Droite. Regardons le pourcentage de métier entre Gauche (Socialiste) et Droite (UMP). Cela est confirmé.

Gauche Droite: les métiers des députés

Autres explorations du fichier

Petits camemberts


Voici des petits camemberts montrant la répartition des sexes et des partis représentés.

Très largement, l’Assemblée Nationale se partage entre Socialistes et candidats de l’UMP et les hommes sont plus largements présents que les femmes, près des 3/4.

Triangulaires
Ce tableau présente les différentes circonscriptions et partis présents aux triangulaires.

    Libellé.du.département Code.de.la.circonscription Nuance Nuance.1 Nuance.2
2                      AIN                          2    DVG      UMP       FN
6                    AISNE                          1    SOC      DVG      NCE
10                   AISNE                          5    RDG      UMP       FN
31                    AUBE                          1    RDG      UMP       FN
45        BOUCHES DU RHONE                          6    VEC      UMP       FN
47        BOUCHES DU RHONE                          8    SOC      UMP       FN
49        BOUCHES DU RHONE                         10    VEC      UMP       FN
51        BOUCHES DU RHONE                         12    SOC      UMP       FN
54        BOUCHES DU RHONE                         15    DVG      UMP       FN
75             HAUTE CORSE                          1    RDG      REG      UMP
93                   DOUBS                          4    SOC      UMP       FN
115                   GARD                          1    SOC      NCE       FN
116                   GARD                          2    SOC      UMP       FN
117                   GARD                          3    SOC      UMP       FN
120                   GARD                          6    VEC      UMP       FN
146                HERAULT                          6    SOC      UMP       FN
147                HERAULT                          7    SOC      UMP       FN
186                  LOIRE                          4    VEC      UMP       FN
245                MOSELLE                          4    SOC      UMP       FN
248                MOSELLE                          7    SOC      PRV       FN
275                   OISE                          2    SOC      UMP       FN
279                   OISE                          6     FG      UMP       FN
300   PYRENEES ATLANTIQUES                          2    SOC      CEN      UMP
306    PYRENEES ORIENTALES                          1    DVG      UMP       FN
321              HAUT RHIN                          6    SOC      NCE       FN
420                    VAR                          2    SOC      UMP       FN
421                    VAR                          3    RDG      UMP       FN
425                    VAR                          7    DVG      UMP       FN
426                    VAR                          8    SOC      UMP       FN
427               VAUCLUSE                          1    SOC      UMP       FN
429               VAUCLUSE                          3    SOC      UMP       FN
467         HAUTS DE SEINE                          6    SOC      DVD      DVD
470         HAUTS DE SEINE                          9    SOC      UMP      DVD
529       WALLIS-ET-FUTUNA                          1    RDG      DVG      DVD

Abstention 

Les 20 départements comportant le plus d’abstention sont les suivants

    Libellé.du.département Code.de.la.circonscription X..Abs.Ins
538 FRANCAIS DE L’ETRANGER                          8      87.23
532 FRANCAIS DE L’ETRANGER                          2      84.45
539 FRANCAIS DE L’ETRANGER                          9      81.74
531 FRANCAIS DE L’ETRANGER                          1      80.93
533 FRANCAIS DE L’ETRANGER                          3      79.44
535 FRANCAIS DE L’ETRANGER                          5      79.24
536 FRANCAIS DE L’ETRANGER                          6      77.62
540 FRANCAIS DE L’ETRANGER                         10      76.96
537 FRANCAIS DE L’ETRANGER                          7      75.92
534 FRANCAIS DE L’ETRANGER                          4      73.97
541 FRANCAIS DE L’ETRANGER                         11      73.93
481      SEINE SAINT-DENIS                          7      68.38
478      SEINE SAINT-DENIS                          4      67.61
485      SEINE SAINT-DENIS                         11      67.12
70                    CHER                          2      66.43
271                   NORD                         19      66.28
475      SEINE SAINT-DENIS                          1      66.23
462         HAUTS DE SEINE                          1      66.08
513             MARTINIQUE                          3      64.93
381         SEINE MARITIME                          8      64.80

Comme le mentionnait Data Publica sur son site, les fançais de l’étranger arrivent en tête.

Extrême-Droite 

Les circonscriptions avec un candidat gagnant d’extrême droite:
 
    Libellé.du.département Code.de.la.circonscription             Nom  Prénom
116                   GARD                          2         COLLARD Gilbert
429               VAUCLUSE                          3 MARECHAL-LE PEN  Marion
430               VAUCLUSE                          4         BOMPARD Jacques
    Nuance X..Voix.Exp ncandidats
116     FN       42.82          3
429     FN       42.09          3
430    EXD       58.77          2

Il me semblait correct de rendre le mécanisme, la méthode réalisée ouverts, transparents, de la même façon que le sont les données source. Par la suite, vous trouverez les aspects plus techniques liés au code puis enfin le code complet.




Les éléments clés du code

Les lots de colonnes correspondant aux différents panneaux sont stockés dans une liste.
resL <- list()
 
resL[[1]] <- res[,17:24]
resL[[2]] <- res[,25:32]
resL[[3]] <- res[,33:40]
On détecte quel est le lot/le panneau comportant la valeur maximale
wch <- sapply(1:nrow(res), function(x) which.max(sapply(1:3, function(i) resL[[i]][x, 6])))

On emploie un mécanisme similaire pour avoir le nombre de candidats:

df$ncandidats <- sapply(1:nrow(res), function(x) length(na.omit(sapply(1:3, function(i) resL[[i]][x,1]))))

On détecte par la suite quelle est la ligne à sélectionner pour le data frame final. On crée ce dernier en assemblant les lignes.

rowSel <- lapply(1:nrow(res), function(x) resL[[wch[x]]][x, ])
dfSel <- do.call("rbind", rowSel)

Le code R sous github

HeatMap Profession ~ Parti des candidats aux élections législatives et contribution au khi-deux (suite)

Dans le précédent post, nous avons déjà vu quelques notions permettant d’analyser le lien entre la profession exercée par les candidats aux élections législatives et leur appartenance politique.

Nous aurions pu compléter l’analyse des correspondances grâce à une petite heatmap montrant les effectifs et leur aspect significatif..

Plan:
  • La HeatMap
  • Calcul du khi-deux, explications
  • Les éléments-clé du code
  • Le code complet sous github
La heatmap

Dans cette heatmap, l’intensité de la couleur est relative à la valeur du khi-deux de la cellule (issue du couplage de deux modalités, Profession et Parti). Plus la valeur est élevée entre ces deux modalités et plus leur correspondance est élevée.

Nous avons superposé les effectifs pour une meilleure compréhension.

Un effectif faible peut être associé à une valeur de khi deux élevée. Dans ce cas, cela indique que la faiblesse des effectifs est caractéristique du couplage des deux modalités.

On peut prendre l’exemple de quelques cellules du tableau…

  • L’effectif associé au couple Avocat – UMP est élevé de même que la valeur du khi deux. Cela indique que les candidats qui exercent le métier d’avocat sont davantage d’UMP.
  • On peut faire une observation similaire entre Ouvrier et Extrême-Gauche.
  • Pas mal de candidats fonctionnaires de catégorie A sont socialistes.
  • On a une valeur de khi deux élevée pour le duo Cadre Supérieur dans le privé et Extrême-Gauche mais un effectif faible, ce qui semble indiquer que, de manière significative, il y a très peu de candidats cadres supérieurs qui représentent ce parti.
  • Aussi, on voit que pour ce qui est des candidats écologistes, on retrouve beaucoup la catégorie « autres professions libérales« . S’agit-il de professions libérales non réglementées ou réglementées? Dommage que l’on n’ait pas plus de détails car c’est véritablement pour cette catégorie d’activité professionnelle que le parti Ecologiste est le mieux représenté.

Attention, ceci est seulement mon interprétation des résultats et peut être sujet à observations, critiques, notamment sur la méthode statistique employée. N’hésitez pas à commenter.

Calcul du khi-deux, explications

Pour savoir si un lien est fort entre deux modalités, il faut savoir si l’effectif les réunissant est caractéristique. Pour cela, on prend en compte son « environnement » en lignes et colonnes dans le tableau de contingence. Si l’effectif est fort et si les effectifs des cellules en lignes, d’une part, et en colonnes, d’autre part, sont élevées, alors l’effectif fort n’est pas vraiment caractéristique du couple de modalités. Le contraste n’est pas assez fort.

Afin de pouvoir quantifier le côté caractéristique d’un effectif croisant deux modalités, il faut prendre en compte les effectifs marginaux en lignes et colonnes relatifs à cette valeur. Ceux-ci correspondent aux effectifs relatifs à chaque modalité du couple en lignes et colonnes. Il faudra aussi prendre en compte l’effectif total afin de raisonner à une échelle globale, l’échelle du tableau de contingence.

La valeur du khi-deux au niveau d’une cellule d’un tableau de contingence est la suivante:

http://www.math.univ-toulouse.fr/~baccini/zpedago/asdm.pdf

  • nlh est l’effectif au sein de la cellule du tableau
  • nl+ est l’effectif marginal en lignes. Si les professions sont en lignes, cela correspond au nombre de candidats exerçant la profession considérée.
  • n+h est l’effectif marginal en colonne.
  • n est l’effectif total, soit le nombre de candidats

La somme des khi-deux partiels des cellules donne la valeur du khi deux, totale.

L’illustration ci-dessous montre les différentes valeurs de khi deux obtenues pour différents environnements lignes et colonnes au niveau d’une cellule:

schéma fait maison montrant la valeur du khi deux en une cellule (les cellules environnantes dont les valeurs ont changé sont en jaune)

Dans le premier tableau, la valeur du khi-deux vaut:

(8-(12*11)/50)² / (12*11)/50

La valeur du khi-deux décroît à mesure que les valeurs environnantes approchent celles de la cellule.

Les éléments clés du code

Lecture du fichier Excel

Pour lire le fichier excel des législatives, j’utilise la librairie gdata. La deuxième feuille comprend le tableau de correspondances entre code des partis (encore appelé nuance) et libellé de ces derniers.

f <- read.xls("IN/Leg 2012 Candidatures T1 31 05 2012.xls", sheet=1)
nuances <- read.xls("IN/Leg 2012 Candidatures T1 31 05 2012.xls", sheet=2, skip=2, header=FALSE)
Reshape Casting

Comme mentionné dans le post précédent, l’obtention du tableau de contingence a nécessité un reshaping de la donnée initiale en basculant les partis en colonnes. Cela se fait avec la fonction cast de la librairie reshape

f$value <- 1
r <- cast(f[, c("Profession", "NuanceLib", "value")], Profession~NuanceLib, sum)

Fonction de calcul du khi-deux

J’ai réalisé une fonction permettant de calculer le khi deux au sein de chaque cellule du tableau et obtenir une matrice de contribution au khi-deux.
khideux <- function(mat){
m.cont <- mat
 
sumR <- apply(mat, 1, sum)
sumC <- apply(mat, 2, sum)
sumT <- sum(mat)
 
for (i in 1:nrow(mat)) {
for (j in 1:ncol(mat)) {
w <- (sumR[i]*sumC[j])/sumT
khikhi <- (mat[i, j] - w)^2/w
m.cont[i, j] <- khikhi
}
}
return (m.cont)
}
 
m.cont <- khideux(r.m)

HeatMap 

Il existe une fonction native dans R appelée heatmap. Elle n’a pas été utilisée ici car je n’ai pas trouvé de moyen de spécifier les points de cassure pour les couleurs (break= ). J’ai donc utilisé la fonction image qui permet de paramétrer de manière plus fine la représentation graphique d’une heatmap.

image(t(m.cont2), breaks=cls$brk, axes=F, col=pal(20))

Libellés

Pour les libellés, il a fallu tout d’abord que je détermine la position/les coordonnées de chaque label au sein du tableau. Pour un tableau de 3 colonnes et 2 lignes, la séquence de coordonnées est la suivante pour les x: 123 123 et pour les y: 111 222. Les cycles sont différents. Dans le deuxième cas, on utilisera each, dans le premier non.

xs <- seq(0, 1, length.out=ncol(r.m))
ys <- seq(1, 0, length.out=nrow(r.m))
 
xs2 <- rep(xs, nrow(r.m))
ys2 <- rep(ys, each = ncol(r.m))

Puis ensuite, j’ai pu procéder à leur affichage

text(xs2, ys2, labels=ifelse(v>0, v, NA), col=gray(.5), cex=fsz*.6, font=2)


Le code sous gihub