Nous allons utiliser un jeu de données concernant les élections municipales de 2014 à Marseille. Le but est d’expliquer le vote FN en fonction des variables sociologiques des bureaux de vote.
Nous disposons des deux fichiers en format csv : bvINSEE2012.csv
et complet_par_bureaux.csv
.
Regarder tout d’abord le fichier bvINSEE2012.csv
à l’aide de la fonction read_csv2
du package readr
qui est djà dans le package tidyverse
. Pour ce faire, executer les commandes suivantes :
library(tidyverse)
read_csv2("bvINSEE2012.csv")
## # A tibble: 4,995 x 46
## BUREAU_ID COUNT P09_POP P09_POP0017 P09_POP1824 P09_POP2539 P09_POP4054
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 21231_015 4 1721 162 533 456 221
## 2 21231_056 2 1304 154 239 267 159
## 3 21231_066 2 1361 219 146 265 224
## 4 21231_067 6 2003 225 601 509 268
## 5 21231_029 5 1277 241 88 295 270
## 6 21231_022 3 2034 462 232 507 406
## 7 21231_078 3 1317 209 221 353 216
## 8 21231_040 2 688 75 156 165 119
## 9 21231_050 2 1344 364 137 261 258
## 10 21231_074 3 1118 198 138 229 220
## # ... with 4,985 more rows, and 39 more variables: P09_POP5564 <dbl>,
## # P09_POP6579 <dbl>, P09_POP80P <dbl>, P09_POP_FR <dbl>,
## # P09_POP_ETR <dbl>, P09_POP1564 <dbl>, P09_CHOM1564 <dbl>,
## # P09_INACT1564 <dbl>, P09_ETUD1564 <dbl>, P09_RETR1564 <dbl>,
## # C09_ACT1564_CS1 <dbl>, C09_ACT1564_CS2 <dbl>, C09_ACT1564_CS3 <dbl>,
## # C09_ACT1564_CS4 <dbl>, C09_ACT1564_CS5 <dbl>, C09_ACT1564_CS6 <dbl>,
## # P09_SAL15P_CDI <dbl>, P09_SAL15P_CDD <dbl>, P09_SAL15P_INTERIM <dbl>,
## # P09_SAL15P_EMPAID <dbl>, P09_SAL15P_APPR <dbl>,
## # P09_NSAL15P_INDEP <dbl>, P09_NSAL15P_EMPLOY <dbl>,
## # P09_NSAL15P_AIDFAM <dbl>, P09_NSCOL15P_DIPL0 <dbl>,
## # P09_NSCOL15P_CEP <dbl>, P09_NSCOL15P_BEPC <dbl>,
## # P09_NSCOL15P_CAPBEP <dbl>, P09_NSCOL15P_BAC <dbl>,
## # P09_NSCOL15P_BACP2 <dbl>, P09_NSCOL15P_SUP <dbl>,
## # P09_MEN_ANEM0002 <dbl>, P09_MEN_ANEM0204 <dbl>,
## # P09_MEN_ANEM0509 <dbl>, P09_MEN_ANEM10P <dbl>, P09_NPER_RP_PROP <dbl>,
## # P09_NPER_RP_LOC <dbl>, P09_NPER_RP_LOCHLMV <dbl>,
## # P09_NPER_RP_GRAT <dbl>
Liste de quelques variables du fichier bvINSEE2012.csv
:
- P09_POP : Population en 2009
- P09_POP0017 : Nombre de personnes de 0 à 17 ans en 2009
- P09_POP1824 : Nombre de personnes de 18 à 24 ans en 2009
- ....
- P09_POPFR : Population francaise en 2009
- P09_POPETR : Population extrangere en 2009
- P09_CHOM1564 : Nombre de personnes de 15 à 64 ans en chomage en 2009
- P09_INACT1564 : Nombre de personnes de 15 à 64 ans inactive en 2009
- P09_ETUD1564 : Nombre de personnes de 15 à 64 ans etudients en 2009
- C09_ACT1564_CS1 : Nombre de personnes de 15 à 64 ans Agriculteurs exploitants en 2009
- ....
Pour plus d’information sur les variables voir les sites :
https://www.insee.fr/fr/statistiques/2044741#dictionnaire
https://www.insee.fr/fr/information/2383358
Lire maintenant le fichier csv
read_csv("complet_par_bureaux.csv",
col_types = cols(
.default = col_integer(),
bdv = col_character()))
## # A tibble: 478 x 19
## bdv inscrits Nuls `ALLIANCE ECOLO~ `CHANGER LA DON~ `LISTE D UNITE ~
## <chr> <int> <int> <int> <int> <int>
## 1 101 1054 20 6 64 2
## 2 102 680 14 8 19 2
## 3 104 793 12 6 44 2
## 4 121 1068 19 13 46 1
## 5 122 1282 22 20 68 1
## 6 125 803 10 9 30 0
## 7 126 920 9 10 61 2
## 8 127 862 9 9 45 0
## 9 128 1016 10 9 66 1
## 10 141 829 13 11 35 2
## # ... with 468 more rows, and 13 more variables: `LUTTE OUVRIERE FAIRE
## # ENTENDRE LE CAMP DES TRAVAILLEURS` <int>, `MARSEILLE A GAUCHE, L
## # HUMAIN D ABORD DANS NOTRE VILLE` <int>, `MARSEILLE A VIVRE` <int>,
## # `MARSEILLE BLEU MARINE` <int>, `MARSEILLE EN AVANT AVEC JEAN-CLAUDE
## # GAUDIN` <int>, `MARSEILLE ENSEMBLE` <int>, `MARSEILLE J Y
## # CROIS` <int>, `MARSEILLE POPULAIRE` <int>, `MARSEILLE UNIE` <int>, `UN
## # NOUVEAU CAP POUR LES MARSEILLAIS AVEC PATRICK MENNUCCI` <int>, `UNE
## # QUALITE DE VIE POUR TOUS` <int>, `UNION POUR MARSEILLE` <int>, `Total
## # Résultat` <int>
Télecharger le fichier Donnees_bvINSEE2012_marseille.R
sur ma page web. Regarder le fichier. Dans ce fichier nous avons appliquer certains fonctions de R pour nettoyer la basse des données et le mettre en forme. N’hesitez pas à posser des questions sur cette partie.
Utiliser la fonction source
pour “sourcer” le fichier (voir par exemple https://datactivist.coop/IntroR_ODF/index2.html#les-systemes-graphiques-dans-r).
source('Donnees_bvINSEE2012_marseille.R', encoding = 'UTF-8')
Nous allons travailler avec les variables CS1, CS2, CS3, CS4, CS5, CS6, etrangers, chomage et HLM
marseille1 <- marseille %>% select(CS1,CS2,CS3,CS4,CS5,CS6,etrangers,chomage,HLM,Ravier)
summary(marseille1)
## CS1 CS2 CS3 CS4
## Min. :0.00000 Min. :0.08646 Min. : 0.000 Min. : 2.337
## 1st Qu.:0.00000 1st Qu.:2.69266 1st Qu.: 4.883 1st Qu.:13.758
## Median :0.00000 Median :3.36538 Median :11.034 Median :18.351
## Mean :0.05326 Mean :3.52885 Mean :11.389 Mean :17.390
## 3rd Qu.:0.00000 3rd Qu.:4.19708 3rd Qu.:17.157 3rd Qu.:21.569
## Max. :2.75862 Max. :8.04020 Max. :31.764 Max. :28.653
## NA's :1 NA's :1 NA's :1 NA's :1
## CS5 CS6 etrangers chomage
## Min. : 7.435 Min. : 2.008 Min. : 0.3205 Min. : 1.556
## 1st Qu.:18.553 1st Qu.: 7.930 1st Qu.: 2.6397 1st Qu.: 7.035
## Median :21.286 Median :11.273 Median : 4.7354 Median :10.216
## Mean :21.563 Mean :11.811 Mean : 6.7774 Mean :10.900
## 3rd Qu.:24.584 3rd Qu.:15.517 3rd Qu.: 8.4764 3rd Qu.:12.918
## Max. :35.045 Max. :25.049 Max. :34.1844 Max. :29.871
## NA's :1 NA's :1 NA's :1 NA's :1
## HLM Ravier
## Min. : 0.000 Min. : 1.739
## 1st Qu.: 2.634 1st Qu.: 8.657
## Median : 8.840 Median :11.711
## Mean :17.828 Mean :12.025
## 3rd Qu.:26.997 3rd Qu.:14.918
## Max. :96.221 Max. :26.594
## NA's :1
marseille <- marseille %>% filter(!is.na(HLM))
marseille1 <- marseille %>% select(CS1,CS2,CS3,CS4,CS5,CS6,etrangers,chomage,HLM,Ravier)
summary(marseille1)
## CS1 CS2 CS3 CS4
## Min. :0.00000 Min. :0.08646 Min. : 0.000 Min. : 2.337
## 1st Qu.:0.00000 1st Qu.:2.69266 1st Qu.: 4.883 1st Qu.:13.758
## Median :0.00000 Median :3.36538 Median :11.034 Median :18.351
## Mean :0.05326 Mean :3.52885 Mean :11.389 Mean :17.390
## 3rd Qu.:0.00000 3rd Qu.:4.19708 3rd Qu.:17.157 3rd Qu.:21.569
## Max. :2.75862 Max. :8.04020 Max. :31.764 Max. :28.653
## CS5 CS6 etrangers chomage
## Min. : 7.435 Min. : 2.008 Min. : 0.3205 Min. : 1.556
## 1st Qu.:18.553 1st Qu.: 7.930 1st Qu.: 2.6397 1st Qu.: 7.035
## Median :21.286 Median :11.273 Median : 4.7354 Median :10.216
## Mean :21.563 Mean :11.811 Mean : 6.7774 Mean :10.900
## 3rd Qu.:24.584 3rd Qu.:15.517 3rd Qu.: 8.4764 3rd Qu.:12.918
## Max. :35.045 Max. :25.049 Max. :34.1844 Max. :29.871
## HLM Ravier
## Min. : 0.000 Min. : 1.739
## 1st Qu.: 2.634 1st Qu.: 8.703
## Median : 8.840 Median :11.723
## Mean :17.828 Mean :12.035
## 3rd Qu.:26.997 3rd Qu.:14.931
## Max. :96.221 Max. :26.594
set.seed(2019)
#ind_train <- sample(1:nrow(marseille), floor(0.8*nrow(marseille)),replace = FALSE)
library(caret)
ind_train <- createDataPartition(marseille1$Ravier,p = 0.8,list = FALSE)
head(ind_train)
## Resample1
## [1,] 1
## [2,] 2
## [3,] 3
## [4,] 4
## [5,] 5
## [6,] 6
marseille1_train <- marseille1[ind_train,]
marseille1_test <- marseille1[-ind_train,]
model1 <- lm(Ravier ~ ., data = marseille1_train)
coef(model1)
## (Intercept) CS1 CS2 CS3 CS4 CS5
## 16.82631488 0.87337088 -0.08501890 -0.32556923 0.12842377 0.03866321
## CS6 etrangers chomage HLM
## 0.33080253 -0.28119874 -0.48381577 -0.03361263
pred1 <- predict(model1, newdata = marseille1_test)
head(pred1)
## 1 2 3 4 5 6
## 4.062950 8.395486 5.415286 7.443949 7.306947 6.668153
head(marseille1_test$Ravier)
## [1] 4.921260 6.837607 7.121880 6.275720 5.159475 9.062980
err1 <- sqrt(mean((marseille1_test$Ravier -pred1)^2))
err1
## [1] 2.992865
param_train <- trainControl(method="cv",number=5)
set.seed(100)
model1 <- train(Ravier ~ ., data = marseille1, method="lm",trControl=param_train)
model1
## Linear Regression
##
## 477 samples
## 9 predictor
##
## No pre-processing
## Resampling: Cross-Validated (5 fold)
## Summary of sample sizes: 381, 381, 382, 383, 381
## Resampling results:
##
## RMSE Rsquared MAE
## 3.376976 0.4965156 2.575337
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
model1$finalModel
##
## Call:
## lm(formula = .outcome ~ ., data = dat)
##
## Coefficients:
## (Intercept) CS1 CS2 CS3 CS4
## 16.88587 1.00095 0.05315 -0.34420 0.11656
## CS5 CS6 etrangers chomage HLM
## 0.02543 0.32166 -0.29488 -0.45701 -0.03175
param_train <- trainControl(method="cv",number=5)
set.seed(100)
model2 <- train(Ravier ~ ., data = marseille1, method="glmnet",trControl=param_train)
model2
## glmnet
##
## 477 samples
## 9 predictor
##
## No pre-processing
## Resampling: Cross-Validated (5 fold)
## Summary of sample sizes: 381, 381, 382, 383, 381
## Resampling results across tuning parameters:
##
## alpha lambda RMSE Rsquared MAE
## 0.10 0.004322212 3.375457 0.4967312 2.573370
## 0.10 0.043222119 3.373349 0.4970016 2.569942
## 0.10 0.432221190 3.395388 0.4943291 2.570108
## 0.55 0.004322212 3.376268 0.4964837 2.574140
## 0.55 0.043222119 3.374656 0.4962625 2.570300
## 0.55 0.432221190 3.484162 0.4747304 2.639416
## 1.00 0.004322212 3.376529 0.4964069 2.574334
## 1.00 0.043222119 3.375517 0.4957698 2.570302
## 1.00 0.432221190 3.582100 0.4565806 2.718912
##
## RMSE was used to select the optimal model using the smallest value.
## The final values used for the model were alpha = 0.1 and lambda
## = 0.04322212.
coef(model2$finalModel, model2$finalModel$lambdaOpt)
## 10 x 1 sparse Matrix of class "dgCMatrix"
## 1
## (Intercept) 16.73388816
## CS1 0.96301527
## CS2 0.04896252
## CS3 -0.33435460
## CS4 0.10929610
## CS5 0.03456805
## CS6 0.30828424
## etrangers -0.29202914
## chomage -0.44766427
## HLM -0.03047082
library(sf)
marseille_sf <- readRDS("marseille_sf.RDS")
marseille_sf_vote <- marseille_sf %>% right_join(marseille_vote, by = c("ID"="BUREAU_ID"))
ggplot(marseille_sf_vote) +
geom_sf(aes(fill = Ravier)) +
scale_fill_viridis_c()
marseille_sf_vote2 <- marseille_sf_vote %>%
gather("candidat", "vote", -ID, -NOM, -geometry, -Inscrits)
ggplot(marseille_sf_vote2 %>% filter(candidat %in% c("Ravier", "Mennucci", "Gaudin", "Abstention"))) +
geom_sf(aes(fill = vote)) +
facet_wrap(~candidat) +
scale_fill_viridis_c()
ggplot(marseille_sf_vote2 %>% filter(candidat %in% c("Ravier", "Mennucci", "Gaudin"))) +
geom_sf(aes(fill = vote)) +
facet_wrap(~candidat) +
scale_fill_viridis_c()
N’hésitez pas à regarder le site http://coulmont.com/blog/author/coulmont/page/4/
Pour finir, taper les commandes suivantes.
marseille_PCA <- marseille_vote %>% select(-Inscrits) %>% column_to_rownames("BUREAU_ID")
library(Factoshiny)
PCAshiny(marseille_PCA)
N’hésitez pas à regarder le site
http://factominer.free.fr/graphs/factoshiny.html
A vous de jouer!