On s’intéresse ici au taux d’abstention à l’élection présidentielle du 1er tour en France en 2007 dans les communes de la région Midi-Pyrénées.
L’idée générale de ce projet est de mieux comprendre ce taux d’abstention en essayant de l’expliquer par des variables comme le taux de chômage, la taille des communes, le taux d’évolution du nombre de logements, etc.
Dans un premier temps, vous allez procéder aux étapes d’importation et de mise en forme des données, puis de création de nouvelles variables.
Ensuite, vous étudierez si la variable d’intérêt se comporte différemment en fonction de sa localisation géographique.
Enfin, à partir d’observations sur le taux de chômage, l’évolution du nombre de logements, le pourcentage de personnes de plus de 60 ans, la taille des communes, etc., vous vérifierez s’il existe un lien entre le taux d’abstention en 2007 et les différentes variables explicatives.
fic1 <- read.csv("fic1.csv", sep = ";")
fic2 <- read.csv("fic2.csv", sep = ";")
fic3 <- read.csv("fic3.csv", sep = ";")
On charge des ensembles de données depuis trois fichiers CSV distincts (fic1.csv, fic2.csv, fic3.csv) en utilisant la fonction read.csv de R, en spécifiant le point-virgule comme séparateur. Ces données sont ensuite stockées dans trois variables différentes (fic1, fic2, fic3) pour une manipulation et analyse ultérieures.
download.file("https://www.data.gouv.fr/fr/datasets/r/3976cd54-a785-457c-9eb2-4a8619e87bcf",
destfile =paste0(getwd(), "/pres2007.xls"), mode = "wb")
pres2007 <- readxl::read_xls("pres2007.xls", skip = 1,
col_names = c("code_dep", "code_com",
"inscrits", "abstentions", "vote_xr"),
col_types = c("text", "skip", "text", "skip",
"numeric", "numeric",
rep("skip", 66), "numeric", rep("skip", 14)))
pres2007 <- as.data.frame(pres2007)
pres2007 <- pres2007[pres2007$code_dep %in% c(9, 12, 31, 32, 46, 65, 81, 82), ]
fic1$CODE <- as.character(fic1$CODE)
fic2$CODEGEO <- as.character(fic2$CODEGEO)
fic3$CODGEO <- as.character(fic3$CODGEO)
On convertit les colonnes spécifiques de chaque fichier de données (fic1, fic2, fic3) en chaînes de caractères. Ces colonnes contiennent des codes géographiques qui doivent être traités comme du texte pour garantir une manipulation correcte, surtout lors de jointures ou comparaisons ultérieures entre ces fichiers.
fic1$CODE <- ifelse(nchar(fic1$CODE) == 4, paste0("0", fic1$CODE), fic1$CODE)
fic2$CODEGEO <- ifelse(nchar(fic2$CODEGEO) == 4, paste0("0", fic2$CODEGEO), fic2$CODEGEO)
fic3$CODGEO <- ifelse(nchar(fic3$CODGEO) == 4, paste0("0", fic3$CODGEO), fic3$CODGEO)
On ajuste les codes géographiques dans les trois ensembles de données (fic1, fic2, fic3) pour assurer une longueur uniforme. Si un code a seulement 4 caractères, on ajoute un “0” au début. Cette standardisation est cruciale pour garantir la cohérence des codes lors de comparaisons ou de jointures de données.
projet <- merge(fic1, fic2, by.x="CODE", by.y="CODEGEO")
projet <- merge(projet, fic3, by.x="CODE", by.y="CODGEO")
On réalise la fusion des ensembles de données (fic1, fic2, fic3) pour créer un seul dataframe nommé projet.
La première fusion est effectuée entre fic1 et fic2. On utilise merge avec by.x=“CODE” pour fic1 et by.y=“CODEGEO” pour fic2, assurant que la fusion se fait sur les colonnes correspondantes de codes géographiques.
Ensuite, on fusionne le résultat avec fic3, utilisant by.x=“CODE” pour le dataframe combiné et by.y=“CODGEO” pour fic3.
Cette approche permet de combiner harmonieusement les données en se basant sur des identifiants géographiques communs.
dim(projet)
## [1] 3019 21
nrow(projet) # Donne le nombre de lignes dans projet
## [1] 3019
ncol(projet) # Donne le nombre de colonnes dans projet
## [1] 21
Le résultat des commandes dim(projet), nrow(projet) et ncol(projet) en R nous informe sur la structure de l’ensemble de données projet après la fusion :
Cela montre que l’ensemble de données résultant de la fusion contient un grand nombre d’observations (lignes) et plusieurs variables (colonnes) pour l’analyse.
sum(is.na(projet)) # Pour compter le nombre total de NA dans tout le dataframe
## [1] 42
sapply(projet, function(x) sum(is.na(x))) # Pour compter les NA dans chaque colonne
## CODE NOM LONG LAT annee
## 0 0 0 0 30
## evol_INSEE pop_n pop_1999 tx_evol_99 tx_evol_90
## 0 0 0 0 0
## pct_60ans densite99 densite07 chomage99 chomage07
## 0 0 2 5 3
## pct_logement99 pct_logement07 Commune categ ZE2010
## 0 0 0 2 0
## LIBZE2010
## 0
lignes_avec_na <- which(is.na(projet$categ))
communes_concernées <- projet[lignes_avec_na, "Commune"]
print(communes_concernées)
## [1] "Itzac" "Jonqui\xe8res"
str(projet)
## 'data.frame': 3019 obs. of 21 variables:
## $ CODE : chr "09001" "09002" "09003" "09004" ...
## $ NOM : chr "Aigues-Juntes" "Aigues-Vives" "L'Aiguillon" "Albi\xe8s" ...
## $ LONG : chr "529600,04" "562700,0002" "564649,9818" "547550,0906" ...
## $ LAT : chr "1783850,037" "1777100,092" "1767400,025" "1750300,019" ...
## $ annee : int 2005 2005 2005 2006 2008 2005 2005 2004 2006 2005 ...
## $ evol_INSEE : chr "-2,81291284" "0,921379307" "-1,007711904" "-1,029735342" ...
## $ pop_n : int 43 498 403 139 146 65 68 121 206 64 ...
## $ pop_1999 : int 49 486 424 151 122 62 65 135 163 58 ...
## $ tx_evol_99 : chr "1,727537604" "0,564294318" "-1,368906839" "0,764238245" ...
## $ tx_evol_90 : chr "-4,159370002" "3,945402356" "1,180069888" "-0,262821633" ...
## $ pct_60ans : chr "0,510204082" "0,160493827" "0,325471698" "0,397350993" ...
## $ densite99 : chr "6,31" "94,19" "66,56" "19,64" ...
## $ densite07 : chr "5,08" "101,27" "61,4" "18,09" ...
## $ chomage99 : chr "25" "5,49" "11,38" "5,66" ...
## $ chomage07 : chr "0" "13,57" "15,76" "3,85" ...
## $ pct_logement99: chr "-0,67" "2,72" "-0,24" "0,66" ...
## $ pct_logement07: chr "0,66" "2,87" "0,63" "2,88" ...
## $ Commune : chr "Aigues-Juntes" "Aigues-Vives" "L'Aiguillon" "Albi\xe8s" ...
## $ categ : int 400 400 300 400 400 400 400 300 400 400 ...
## $ ZE2010 : int 7301 7301 7301 7301 7302 7301 7301 7302 7301 7302 ...
## $ LIBZE2010 : chr "Foix - Pamiers" "Foix - Pamiers" "Foix - Pamiers" "Foix - Pamiers" ...
# Convertir code_com en caractère si ce n'est pas déjà le cas
pres2007$code_com <- as.character(pres2007$code_com)
# Transformer code_com pour qu'il ait toujours 3 caractères
pres2007$code_com <- ifelse(nchar(pres2007$code_com) == 1, paste0("00", pres2007$code_com),
ifelse(nchar(pres2007$code_com) == 2, paste0("0", pres2007$code_com),
pres2007$code_com))
On convertit d’abord la colonne code_com de pres2007 en chaînes de caractères pour s’assurer de sa manipulation correcte en tant que texte. Ensuite, on ajuste code_com pour garantir que chaque code ait toujours 3 caractères. On ajoute des zéros au début si nécessaire, en utilisant ifelse et paste0. Cela standardise le format des codes, essentiel pour les analyses et les jointures de données.
head(pres2007$code_com, 5)
## [1] "001" "002" "003" "004" "005"
# Assurez-vous que code_dep et code_com sont des chaînes de caractères
pres2007$code_dep <- as.character(pres2007$code_dep)
pres2007$code_com <- as.character(pres2007$code_com)
# Créer la variable CODE par concaténation
pres2007$CODE <- paste0(pres2007$code_dep, pres2007$code_com)
On s’assure d’abord que code_dep et code_com dans pres2007 sont des chaînes de caractères, en utilisant as.character. Cela est crucial pour le traitement des données textuelles.
Ensuite, on crée une nouvelle variable CODE en concaténant code_dep et code_com avec paste0. Cette étape permet de générer un code unique qui combine les informations de département et de commune.
# Assurez-vous que CODE est une chaîne de caractères
pres2007$CODE <- as.character(pres2007$CODE)
# Ajouter un "0" devant les codes qui ont seulement 4 caractères
pres2007$CODE <- ifelse(nchar(pres2007$CODE) == 4, paste0("0", pres2007$CODE), pres2007$CODE)
On commence par s’assurer que CODE dans pres2007 est une chaîne de caractères avec as.character. Cela garantit le traitement adéquat des codes comme du texte.
Puis, on ajoute un “0” au début des codes qui ont seulement 4 caractères, en utilisant ifelse et paste0. Cette étape normalise la longueur des codes pour une uniformité essentielle dans les analyses de données.
# Fusionner projet et pres2007 en utilisant la clé commune CODE
projet <- merge(projet, pres2007, by="CODE")
On fusionne les ensembles de données projet et pres2007 en utilisant la clé commune CODE. Pour cela, on utilise la fonction merge et on conserve le nom projet pour le dataframe résultant. Cette fusion permet d’intégrer les données électorales de pres2007 dans l’analyse globale.
str(projet)
## 'data.frame': 3019 obs. of 26 variables:
## $ CODE : chr "09001" "09002" "09003" "09004" ...
## $ NOM : chr "Aigues-Juntes" "Aigues-Vives" "L'Aiguillon" "Albi\xe8s" ...
## $ LONG : chr "529600,04" "562700,0002" "564649,9818" "547550,0906" ...
## $ LAT : chr "1783850,037" "1777100,092" "1767400,025" "1750300,019" ...
## $ annee : int 2005 2005 2005 2006 2008 2005 2005 2004 2006 2005 ...
## $ evol_INSEE : chr "-2,81291284" "0,921379307" "-1,007711904" "-1,029735342" ...
## $ pop_n : int 43 498 403 139 146 65 68 121 206 64 ...
## $ pop_1999 : int 49 486 424 151 122 62 65 135 163 58 ...
## $ tx_evol_99 : chr "1,727537604" "0,564294318" "-1,368906839" "0,764238245" ...
## $ tx_evol_90 : chr "-4,159370002" "3,945402356" "1,180069888" "-0,262821633" ...
## $ pct_60ans : chr "0,510204082" "0,160493827" "0,325471698" "0,397350993" ...
## $ densite99 : chr "6,31" "94,19" "66,56" "19,64" ...
## $ densite07 : chr "5,08" "101,27" "61,4" "18,09" ...
## $ chomage99 : chr "25" "5,49" "11,38" "5,66" ...
## $ chomage07 : chr "0" "13,57" "15,76" "3,85" ...
## $ pct_logement99: chr "-0,67" "2,72" "-0,24" "0,66" ...
## $ pct_logement07: chr "0,66" "2,87" "0,63" "2,88" ...
## $ Commune : chr "Aigues-Juntes" "Aigues-Vives" "L'Aiguillon" "Albi\xe8s" ...
## $ categ : int 400 400 300 400 400 400 400 300 400 400 ...
## $ ZE2010 : int 7301 7301 7301 7301 7302 7301 7301 7302 7301 7302 ...
## $ LIBZE2010 : chr "Foix - Pamiers" "Foix - Pamiers" "Foix - Pamiers" "Foix - Pamiers" ...
## $ code_dep : chr "9" "9" "9" "9" ...
## $ code_com : chr "001" "002" "003" "004" ...
## $ inscrits : num 54 379 334 134 189 49 62 159 166 93 ...
## $ abstentions : num 2 35 31 17 24 5 4 24 10 14 ...
## $ vote_xr : num 2 53 49 7 11 7 2 10 8 5 ...
# Créer la variable pct_abst
projet$pct_abst <- projet$abstentions / projet$inscrits
On crée une nouvelle variable pct_abst dans le dataframe projet, qui est calculée comme le rapport des abstentions sur les inscrits. Cette opération se fait par une simple division.
# Créer la variable pct_inscrits
projet$pct_inscrits <- (projet$inscrits / projet$pop_n)
On crée la variable pct_inscrits dans le dataframe projet, qui est calculée comme le rapport des inscrits sur la population totale pop_n. Cette variable représente le pourcentage des inscrits par rapport à la population totale, ce qui peut donner des insights sur la participation électorale relative à la population.
# Créer la variable pct_xr
projet$pct_xr <- (projet$vote_xr / projet$pop_n)
On crée une nouvelle variable pct_xr dans le dataframe projet, qui est le résultat du rapport entre vote_xr et pop_n. Cette variable indique le pourcentage de votes pour un candidat spécifique (identifié par ‘xr’) par rapport à la population totale, offrant une perspective sur l’impact et la popularité du candidat à l’échelle de la population.
projet$HAU <- ifelse(is.na(projet$categ) | projet$categ == '', NA,
ifelse(projet$categ %in% c(111, 112, 120), 'urbain', 'rural'))
On crée la variable HAU dans le dataframe projet, qui est une simplification de la variable categ. Cette nouvelle variable catégorise les données en trois modalités : ‘urbain’, ‘rural’, et NA (valeur manquante).
Cette transformation permet une analyse plus simplifiée et ciblée des données en fonction du type de zone géographique.
projet$taille <- with(projet, ifelse(pop_n < 2000, "rural",
ifelse(pop_n < 5000, "urbain3500",
ifelse(pop_n < 10000, "urbain7500",
ifelse(pop_n < 20000, "urbain15000",
ifelse(pop_n < 50000, "urbain35000",
ifelse(pop_n < 100000, "urbain75000",
ifelse(pop_n < 200000, "urbain150000",
"urbainHuge"))))))))
On crée la variable taille dans le dataframe projet pour catégoriser les communes selon leur population (pop_n). Cette classification est faite en plusieurs niveaux :
Cette classification permet une analyse détaillée des données en fonction de la taille des communes, offrant une perspective sur les différences entre zones rurales et urbaines à différents niveaux de population.
# Calculer le nombre de valeurs manquantes pour la variable annee
nombre_communes_na_annee <- sum(is.na(projet$annee))
# Imprimer le résultat
nombre_communes_na_annee
## [1] 30
Cette commande utilise is.na pour identifier les valeurs manquantes dans annee et sum pour les comptabiliser.
Le résultat obtenu est 30, ce qui indique que 30 communes dans l’ensemble de données projet ont des valeurs manquantes pour la variable annee.
# Sous-ensemble de communes avec annee manquant
communes_na_annee <- projet[is.na(projet$annee), ]
# Table des fréquences pour taille dans ce sous-ensemble
frequences_taille <- table(communes_na_annee$taille)
# Affichage des fréquences
frequences_taille
##
## urbain15000 urbain35000 urbain7500 urbain75000 urbainHuge
## 16 11 1 1 1
Il y a un nombre plus important de communes classées dans les catégories urbain15000 et urbain35000, ce qui indique que ces zones plus peuplées sont plus susceptibles d’avoir des valeurs manquantes pour l’année. Les catégories supérieures (urbain7500, urbain75000, urbainHuge) ne comptent chacune qu’une seule commune, ce qui suggère que les valeurs manquantes sont moins fréquentes dans les communes de très grande taille et très petites qui ne sont même pas listées. Cela pourrait pointer vers une tendance où les données sur les années sont plus complètes pour les communes très grandes ou très petites, ou cela pourrait simplement refléter la répartition générale des tailles des communes dans le dataset.
# Remplacer les NA dans annee par 2010
projet$annee[is.na(projet$annee)] <- 2010
Cette commande identifie d’abord les emplacements des valeurs manquantes dans annee avec is.na(projet$annee) et les remplace ensuite par 2010.
# Supprimer la ligne où CODE est égal à "81107"
projet <- projet[projet$CODE != "81107", ]
Cette commande utilise une condition de filtrage (projet$CODE != “81107”) pour conserver toutes les lignes sauf celle dont le CODE est “81107”, effectuant ainsi la suppression souhaitée.
# Installer et charger le package randomForest si nécessaire
if (!require(randomForest)) install.packages("randomForest")
library(randomForest)
# Supprimer les observations avec des valeurs manquantes dans les variables explicatives
data_complete <- na.omit(projet[, c('categ', 'pop_n', 'pct_logement07', 'chomage07', 'densite07')])
# Créer le modèle de forêt aléatoire sur le sous-ensemble de données sans NA
modele_rf <- randomForest(categ ~ pop_n + pct_logement07 + chomage07 + densite07,
data=data_complete)
# Prédire les valeurs de 'categ' pour les lignes où 'categ' est manquant
data_to_predict <- projet[is.na(projet$categ), c('pop_n', 'pct_logement07', 'chomage07', 'densite07')]
data_to_predict <- na.omit(data_to_predict)
predictions <- predict(modele_rf, newdata=data_to_predict)
# Remplacer les valeurs manquantes de 'categ' par les prédictions
projet$categ[is.na(projet$categ)] <- predictions
# Recalculer la variable HAU basée sur les nouvelles valeurs de 'categ'
projet$HAU <- ifelse(projet$categ %in% c(111, 112, 120), 'urbain',
ifelse(is.na(projet$categ), NA, 'rural'))
On a choisi les variables ‘pop_n’, ‘pct_logement07’, ‘chomage07’, et ‘densite07’ comme indicateurs pour imputer la catégorie des communes car :
Ces variables ensemble donnent un aperçu global de l’attractivité et de la classification socioéconomique des communes.
# Identifier les communes avec des valeurs manquantes pour chomage99
communes_na_chomage99 <- projet[is.na(projet$chomage99), 'Commune']
# Identifier les communes avec des valeurs manquantes pour chomage07
communes_na_chomage07 <- projet[is.na(projet$chomage07), 'Commune']
# Afficher les résultats
print(paste("Les communes qui ont des valeurs manquantes pour la variable chomage99 :", paste(communes_na_chomage99, collapse = ", ")))
## [1] "Les communes qui ont des valeurs manquantes pour la variable chomage99 : Pointis-de-Rivi\xe8re, Pointis-Inard, Barre, Moulin-Mage, Murat-sur-V\xe8bre"
print(paste("Les communes qui ont des valeurs manquantes pour la variable chomage07 :", paste(communes_na_chomage07, collapse = ", ")))
## [1] "Les communes qui ont des valeurs manquantes pour la variable chomage07 : Barre, Moulin-Mage, Murat-sur-V\xe8bre"
# Calculer la moyenne pour chomage99 et chomage07
moyenne_chomage99 <- mean(projet$chomage99, na.rm = TRUE)
## Warning in mean.default(projet$chomage99, na.rm = TRUE): l'argument n'est ni
## numérique, ni logique : renvoi de NA
moyenne_chomage07 <- mean(projet$chomage07, na.rm = TRUE)
## Warning in mean.default(projet$chomage07, na.rm = TRUE): l'argument n'est ni
## numérique, ni logique : renvoi de NA
# Remplacer les valeurs manquantes par la moyenne
projet$chomage99[is.na(projet$chomage99)] <- moyenne_chomage99
projet$chomage07[is.na(projet$chomage07)] <- moyenne_chomage07
Quand on tombe sur des valeurs manquantes dans des données, on aime bien utiliser la moyenne pour les remplacer. C’est simple et ça marche souvent bien, surtout pour des chiffres comme les taux de chômage. Mais il faut faire attention, car cette méthode peut parfois rendre les données moins variées. Si les valeurs manquantes ne sont pas réparties au hasard et sont liées à certaines spécificités des communes, utiliser la moyenne pourrait fausser nos analyses. Dans ces cas, on préférerait utiliser des techniques plus complexes pour estimer ces valeurs manquantes.
# Identifier les communes avec valeurs manquantes pour densite07
communes_na_densite07 <- projet[is.na(projet$densite07), 'Commune']
# Afficher les communes
print("Communes avec valeurs manquantes pour densite07 :")
## [1] "Communes avec valeurs manquantes pour densite07 :"
print(communes_na_densite07)
## [1] "Viella" "Villecomtal-sur-Arros"
# Identifier les départements des communes avec valeurs manquantes pour densite07
departements_communes_na_densite07 <- projet[is.na(projet$densite07), 'departement']
# Afficher les départements
print("Départements des communes avec valeurs manquantes pour densite07 :")
## [1] "Départements des communes avec valeurs manquantes pour densite07 :"
print(unique(departements_communes_na_densite07))
## NULL
# Créer la variable département basée sur les premiers chiffres de CODE
projet <- projet %>%
mutate(département = case_when(
substr(CODE, 1, 2) == "09" ~ "Ariège",
substr(CODE, 1, 2) == "12" ~ "Aveyron",
substr(CODE, 1, 2) == "31" ~ "Haute-Garonne",
substr(CODE, 1, 2) == "32" ~ "Gers",
substr(CODE, 1, 2) == "46" ~ "Lot",
substr(CODE, 1, 2) == "65" ~ "Hautes-Pyrénées",
substr(CODE, 1, 2) == "81" ~ "Tarn",
substr(CODE, 1, 2) == "82" ~ "Tarn-et-Garonne",
TRUE ~ NA_character_ # pour les cas ne correspondant à aucune des conditions ci-dessus
))
On a créé la variable département dans notre dataframe pour faciliter l’analyse des données au niveau départemental. La variable originale CODE fournit des informations détaillées au niveau des communes, mais pour certaines analyses, il est plus pertinent d’examiner les tendances et les modèles à un niveau plus global, c’est-à-dire au niveau des départements. En regroupant les différentes communes sous leur département respectif, on peut désormais effectuer des analyses plus généralisées et identifier des tendances qui pourraient être masquées dans une analyse à une échelle plus fine. Cette approche nous permet d’obtenir une meilleure compréhension des dynamiques régionales et de faire des comparaisons significatives entre différents départements.
# Sélectionner les lignes avec des valeurs manquantes pour densite07
lignes_avec_na_densite07 <- projet[is.na(projet$densite07), ]
# Créer un dataframe avec les codes et les noms des départements
departements_avec_na_densite07 <- data.frame(
CODE = lignes_avec_na_densite07$CODE,
Departement = lignes_avec_na_densite07$département
)
# Supprimer les doublons
departements_avec_na_densite07 <- unique(departements_avec_na_densite07)
# Afficher les codes et les noms des départements
print(departements_avec_na_densite07)
## CODE Departement
## 1 32463 Gers
## 2 32464 Gers
# Calculer la médiane de densite07 par département
medians_par_departement <- aggregate(densite07 ~ département, data = projet, FUN = median, na.rm = TRUE)
## Warning in mean.default(sort(x, partial = half + 0L:1L)[half + 0L:1L]):
## l'argument n'est ni numérique, ni logique : renvoi de NA
## Warning in mean.default(sort(x, partial = half + 0L:1L)[half + 0L:1L]):
## l'argument n'est ni numérique, ni logique : renvoi de NA
## Warning in mean.default(sort(x, partial = half + 0L:1L)[half + 0L:1L]):
## l'argument n'est ni numérique, ni logique : renvoi de NA
## Warning in mean.default(sort(x, partial = half + 0L:1L)[half + 0L:1L]):
## l'argument n'est ni numérique, ni logique : renvoi de NA
## Warning in mean.default(sort(x, partial = half + 0L:1L)[half + 0L:1L]):
## l'argument n'est ni numérique, ni logique : renvoi de NA
# Remplacer les valeurs manquantes dans densite07
for(dep in medians_par_departement$département) {
idx <- is.na(projet$densite07) & projet$département == dep
projet$densite07[idx] <- medians_par_departement$densite07[medians_par_departement$département == dep]
}
On a choisi de remplacer les valeurs manquantes de la variable densite07 par la médiane de chaque département pour plusieurs raisons. Tout d’abord, la médiane est moins sensible aux valeurs extrêmes, ce qui est crucial dans les données de densité de population où l’on peut rencontrer des écarts importants. De plus, en utilisant la médiane par département, on s’assure que l’imputation reflète les particularités régionales, en supposant que les communes d’un même département ont tendance à avoir des densités de population similaires. Cette méthode permet de maintenir l’intégrité et la représentativité des données sans introduire de biais significatifs dus à des valeurs aberrantes ou des variations régionales.
# Trouver la valeur maximale de chomage07
max_chomage07 <- max(projet$chomage07, na.rm = TRUE)
# Identifier les communes avec ce taux de chômage maximal
communes_max_chomage07 <- projet$CODE[projet$chomage07 == max_chomage07]
# Remplacer le taux de chômage de 2007 par celui de 1999 pour ces communes
# Laisser les valeurs telles quelles si chomage99 est NA
projet$chomage07[projet$CODE %in% communes_max_chomage07] <- ifelse(is.na(projet$chomage99[projet$CODE %in% communes_max_chomage07]), projet$chomage07[projet$CODE %in% communes_max_chomage07], projet$chomage99[projet$CODE %in% communes_max_chomage07])
On a choisi de laisser les valeurs de chômage de 2007 telles quelles pour les communes où le chômage de 1999 est manquant. Cette décision repose sur le principe de ne pas introduire d’informations potentiellement inexactes dans l’analyse. Si nous n’avons pas de données fiables sur le chômage de 1999 pour ces communes, remplacer les taux de 2007 par des estimations ou des valeurs arbitraires pourrait fausser notre compréhension de la situation économique réelle. Par conséquent, on préfère conserver une approche transparente et rigoureuse, en acceptant l’absence de certaines données plutôt que de risquer d’introduire des erreurs.
# Sélectionner et afficher les communes avec un pct_inscrits supérieur à 3
communes_pct_inscrits_eleve <- projet[projet$pct_inscrits > 3, ]
print(communes_pct_inscrits_eleve)
## CODE NOM LONG LAT annee evol_INSEE pop_n
## 131 09134 Gesti\xe8s 538600,0431 1745599,966 2008 -1,308371863 9
## 192 09197 Montaillou 564650,0964 1753350,052 2004 2,456640318 10
## 341 12009 Arnac-sur-Dourdou 649299,9656 1857599,991 2007 -3,662412206 23
## 681 31046 Baren 460800,0297 1764599,998 2008 -3,532137004 5
## pop_1999 tx_evol_99 tx_evol_90 pct_60ans densite99 densite07
## 131 10 -7,913099374 -5,845182219 0,9 0,36 0,33
## 192 14 -7,037639823 3,822557081 0,5 1,63 1,99
## 341 31 -6,171835042 1,716212753 0,580645161 1,87 1,39
## 681 8 3,248103198 0 0,5 2,61 1,8
## chomage99 chomage07 pct_logement99 pct_logement07 Commune categ
## 131 0 0 0,13 0,07 Gesti\xe8s 300
## 192 0 20 1,86 1,1 Montaillou 400
## 341 0 0 1,15 1,17 Arnac-sur-Dourdou 400
## 681 0 0 2,95 7,33 Baren 222
## ZE2010 LIBZE2010 code_dep code_com inscrits abstentions vote_xr
## 131 7301 Foix - Pamiers 9 134 36 2 2
## 192 7301 Foix - Pamiers 9 197 44 3 0
## 341 7303 Millau 12 009 83 13 12
## 681 7306 Saint-Gaudens 31 046 19 2 0
## pct_abst pct_inscrits pct_xr HAU taille département
## 131 0.05555556 4.000000 0.2222222 rural rural Ariège
## 192 0.06818182 4.400000 0.0000000 rural rural Ariège
## 341 0.15662651 3.608696 0.5217391 rural rural Aveyron
## 681 0.10526316 3.800000 0.0000000 rural rural Haute-Garonne
# Sélectionner uniquement les colonnes NOM et Département
resultat <- communes_pct_inscrits_eleve[, c('NOM', 'département')]
# Ajouter une colonne avec le total des observations
resultat$total <- nrow(communes_pct_inscrits_eleve)
# Afficher le résultat
print(resultat)
## NOM département total
## 131 Gesti\xe8s Ariège 4
## 192 Montaillou Ariège 4
## 341 Arnac-sur-Dourdou Aveyron 4
## 681 Baren Haute-Garonne 4
On a choisi de laisser les valeurs de chômage de 2007 telles quelles pour les communes où le chômage de 1999 est manquant. Notre décision repose sur le principe de ne pas introduire d’informations potentiellement inexactes dans l’analyse. Si on n’a pas de données fiables sur le chômage de 1999 pour ces communes, remplacer les taux de 2007 par des estimations ou des valeurs arbitraires pourrait fausser notre compréhension de la situation économique réelle. Par conséquent, on préfère conserver une approche transparente et rigoureuse, en acceptant l’absence de certaines données plutôt que de risquer d’introduire des erreurs.
# Calculer le taux d'abstention pour chaque commune
projet$taux_abstention <- projet$abstentions / projet$inscrits
# Calculer le taux d'abstention moyen pondéré pour la région Midi-Pyrénées
taux_abstention_moyen_pondere <- sum(projet$taux_abstention * projet$inscrits, na.rm = TRUE) / sum(projet$inscrits, na.rm = TRUE)
# Afficher le taux d'abstention moyen pondéré
taux_abstention_moyen_pondere
## [1] 0.1218067
Pour calculer le taux d’abstention moyen en Midi-Pyrénées en 2007, on prend en compte le nombre d’abstentions et le nombre d’inscrits dans chaque commune. On ne fait pas simplement une moyenne arithmétique, car cela ne tiendrait pas compte de la taille des communes. À la place, on utilise une moyenne pondérée qui donne plus de poids aux communes avec plus d’inscrits. Cela nous donne un taux d’abstention moyen qui reflète mieux la réalité de l’ensemble de la région. En gros, on multiplie le taux d’abstention de chaque commune par son nombre d’inscrits, on fait la somme, et on divise ensuite par le nombre total d’inscrits de toutes les communes. C’est la méthode la plus juste pour obtenir un taux moyen représentatif.
# Supposons que 'projet' est votre dataframe et qu'il contient les colonnes nécessaires.
# Calculer le taux d'abstention pour chaque commune
projet$taux_abstention <- projet$abstentions / projet$inscrits
# Aggréger les données par département
aggregated_data <- aggregate(cbind(abstentions_ponderees = projet$abstentions, inscrits = projet$inscrits) ~ département, data = projet, sum)
# Calculer le taux d'abstention moyen pondéré par département (en pourcentage)
aggregated_data$taux_abstention_moyen <- (aggregated_data$abstentions_ponderees / aggregated_data$inscrits) * 100
# Afficher le taux d'abstention moyen pondéré par département
print(aggregated_data[, c('département', 'taux_abstention_moyen')])
## département taux_abstention_moyen
## 1 Ariège 12.85151
## 2 Aveyron 11.78635
## 3 Gers 11.62738
## 4 Haute-Garonne 12.48818
## 5 Hautes-Pyrénées 13.32036
## 6 Lot 10.98227
## 7 Tarn 11.58789
## 8 Tarn-et-Garonne 11.97892
Pour obtenir le taux d’abstention dans chaque département, on divise d’abord les données par département. Ensuite, pour chaque groupe, on calcule un taux d’abstention moyen pondéré, en prenant en compte le nombre d’inscrits de chaque ville. Cela permet de donner plus d’importance aux villes avec plus d’électeurs. Ce n’est pas juste une moyenne simple, car une petite ville aura moins de poids qu’une grande ville. C’est un peu comme équilibrer les plateaux d’une balance : les villes avec plus d’inscrits font pencher la balance plus que celles avec moins d’inscrits.
# Calculer le taux d'abstention pour chaque commune
projet$taux_abstention <- projet$abstentions / projet$inscrits
# Aggréger les données par HAU
aggregated_data_HAU <- aggregate(cbind(abstentions_ponderees = projet$abstentions, inscrits = projet$inscrits) ~ HAU, data = projet, sum)
# Calculer le taux d'abstention moyen pondéré par HAU (en pourcentage)
aggregated_data_HAU$taux_abstention_moyen <- (aggregated_data_HAU$abstentions_ponderees / aggregated_data_HAU$inscrits) * 100
# Afficher le taux d'abstention moyen pondéré par HAU
print(aggregated_data_HAU[, c('HAU', 'taux_abstention_moyen')])
## HAU taux_abstention_moyen
## 1 rural 12.39801
## 2 urbain 12.06316
Pour comprendre l’impact de l’urbanisation sur la participation électorale, on a calculé le taux d’abstention moyen pour les zones urbaines et rurales, en utilisant le statut HAU de chaque commune. On a pris en compte le nombre d’inscrits pour s’assurer que les communes avec plus d’électeurs pèsent plus dans le calcul. Cela nous permet d’obtenir un taux d’abstention moyen qui reflète fidèlement le comportement des électeurs dans les différentes zones, en donnant une image plus précise de la participation électorale selon le caractère urbain ou rural des communes.
Après avoir analysé les données, on constate que le taux d’abstention moyen en Midi-Pyrénées en 2007 était d’environ 12.18%. Il existe des variations entre les départements, avec un taux plus élevé dans les Hautes-Pyrénées et plus bas dans le Lot, ce qui peut refléter des influences locales spécifiques sur la participation électorale. En examinant les taux d’abstention par zone urbaine et rurale, on observe que les zones rurales ont un taux d’abstention légèrement plus élevé. Ces nuances sont cruciales pour cibler et améliorer la participation électorale dans différentes parties de la région.
# Calculer la moyenne pondérée
mean_weighted <- weighted.mean(projet$pct_abst, w = projet$inscrits, na.rm = TRUE)
# Calculer l'écart-type pondéré
sd_weighted <- sqrt(sum(projet$inscrits * (projet$pct_abst - mean_weighted)^2, na.rm = TRUE) / sum(projet$inscrits, na.rm = TRUE))
# Tracer l'histogramme
hist(projet$pct_abst, probability = TRUE, main = "Histogramme de pct_abst",
xlab = "Pourcentage d'abstention", ylab = "Densité", border = "blue", col = "lightblue", ylim = c(0, 13))
# Estimation de la densité non paramétrique et la superposer
density_est <- density(na.omit(projet$pct_abst))
lines(density_est, col = 'blue')
# Tracer la courbe de la densité normale
x_vals <- seq(min(projet$pct_abst, na.rm = TRUE), max(projet$pct_abst, na.rm = TRUE), length.out = 100)
normal_density <- dnorm(x_vals, mean = mean_weighted, sd = sd_weighted)
lines(x_vals, normal_density, col = 'red')
En observant l’histogramme des taux d’abstention (pct_abst), on note que
la distribution des données semble centrée autour d’une valeur
inférieure à 0.2, ou 20%. La courbe rouge, qui estime la densité de la
distribution, indique où les données se concentrent le plus. La courbe
bleue, représentant la fonction de densité d’une loi normale, montre ce
à quoi ressemblerait notre distribution si elle suivait une distribution
normale avec la même moyenne et écart-type que nos données.
Il est clair que la distribution réelle des taux d’abstention est un peu asymétrique avec une concentration sur les valeurs plus basses, ce qui suggère que dans la plupart des communes, le taux d’abstention était relativement modéré. On peut interpréter cela comme une tendance générale à une participation assez bonne lors de l’élection concernée. La longue queue à droite de l’histogramme indique également la présence de quelques communes avec des taux d’abstention beaucoup plus élevés, ce qui pourrait mériter une enquête plus approfondie pour comprendre les facteurs sous-jacents dans ces cas particuliers.
# Exécuter le test de Shapiro-Wilk sur la variable pct_abst
shapiro_test <- shapiro.test(projet$pct_abst[!is.na(projet$pct_abst)]) # On exclut les valeurs NA
# Afficher le résultat du test
print(shapiro_test)
##
## Shapiro-Wilk normality test
##
## data: projet$pct_abst[!is.na(projet$pct_abst)]
## W = 0.97192, p-value < 2.2e-16
En regardant les résultats du test de Shapiro-Wilk, on constate que la valeur de la statistique W est de 0.97192, ce qui pourrait suggérer au premier abord une distribution assez proche de la normale. Cependant, la valeur p est inférieure à 2.2e-16, ce qui est bien en dessous du seuil habituel de 0.05 pour rejeter l’hypothèse nulle. Cela signifie que l’on peut rejeter l’hypothèse selon laquelle notre variable pct_abst suit une distribution normale. En d’autres termes, malgré une distribution qui semblait visuellement normale, les tests statistiques indiquent que la distribution des taux d’abstention a des caractéristiques significativement différentes de celles d’une distribution gaussienne.
# Calculer le quantile d'ordre 0.95 pour la variable pct_abst
quantile_95 <- quantile(projet$pct_abst, probs = 0.95, na.rm = TRUE)
# Afficher le résultat
print(quantile_95)
## 95%
## 0.1844307
En examinant le quantile d’ordre 0.95 pour la variable pct_abst, on observe que 95% des communes ont un taux d’abstention qui est inférieur ou égal à environ 18.44%. Cela signifie que seulement 5% des communes ont un taux d’abstention supérieur à cette valeur. Ce quantile nous aide à comprendre jusqu’où s’étendent les taux d’abstention les plus élevés parmi la majorité des communes.
# Seuil déterminé par le quantile d'ordre 0.95
seuil_quantile <- 0.1844307
# Créer un vecteur logique indiquant si le taux d'abstention est supérieur au seuil
taux_elevé <- projet$pct_abst > seuil_quantile
# Calculer la proportion de taux d'abstention élevés par département
proportion_par_departement <- aggregate(taux_elevé ~ département, data = projet, function(x) mean(x, na.rm = TRUE))
# Renommer la colonne pour plus de clarté
names(proportion_par_departement)[2] <- "proportion_taux_elevé"
# Afficher les résultats
print(proportion_par_departement)
## département proportion_taux_elevé
## 1 Ariège 0.09939759
## 2 Aveyron 0.02302632
## 3 Gers 0.02375810
## 4 Haute-Garonne 0.05952381
## 5 Hautes-Pyrénées 0.10759494
## 6 Lot 0.01764706
## 7 Tarn 0.01547988
## 8 Tarn-et-Garonne 0.01538462
En analysant les proportions de communes avec un taux d’abstention supérieur au quantile d’ordre 0.95 par département, on remarque que les Hautes-Pyrénées se démarquent avec environ 10.76% de ses communes au-dessus de ce seuil, indiquant une tendance vers des taux d’abstention plus élevés dans ce département. À l’inverse, le Tarn et le Tarn-et-Garonne ont les proportions les plus faibles, avec seulement environ 1.55% de leurs communes dépassant ce seuil d’abstention. Ces résultats mettent en lumière des différences régionales qui pourraient mériter une enquête plus approfondie pour en comprendre les raisons.
Les analyses menées montrent que, globalement, la majorité des communes de Midi-Pyrénées ont affiché des taux d’abstention relativement modérés pour l’élection de 2007, avec une médiane bien en deçà de 20%. Toutefois, la distribution de ces taux n’est pas parfaitement normale, ce qui est confirmé par le test de Shapiro-Wilk : il y a une asymétrie, avec une minorité de communes présentant des taux d’abstention nettement plus élevés.
Cela se reflète dans les proportions de communes dépassant le seuil de 18.44% d’abstention, particulièrement notable dans les Hautes-Pyrénées où plus de 10% des communes sont au-dessus de ce seuil. En contraste, dans le Tarn et le Tarn-et-Garonne, très peu de communes dépassent ce taux.
Ces résultats suggèrent que certains facteurs locaux pourraient influencer la participation électorale, et que ces facteurs peuvent varier d’un département à l’autre. Pour mieux comprendre ces dynamiques et potentiellement améliorer la participation aux élections, une étude plus poussée de ces facteurs locaux pourrait être bénéfique.
# Calcul des quantiles pour diviser en 5 classes
quantiles <- quantile(projet$pct_abst, probs = seq(0, 1, by = 0.2), na.rm = TRUE)
# Création des classes
projet$class_abst <- cut(projet$pct_abst,
breaks = c(-Inf, quantiles[2], quantiles[3], quantiles[4], quantiles[5], Inf),
labels = c("---", "-", "-+", "+", "++"),
include.lowest = TRUE)
On a choisi la méthode de discrétisation basée sur les quantiles pour créer la variable class_abst parce qu’elle permet de répartir les données de manière équilibrée entre les différentes classes. Avec cette approche, chaque classe contient approximativement le même nombre d’observations, ce qui facilite la comparaison des taux d’abstention à travers les classes. C’est une méthode couramment utilisée en statistique pour catégoriser une variable continue, surtout lorsqu’on souhaite une répartition homogène des données pour l’analyse ou la visualisation.
# Conversion de LAT et LONG en numérique avec gestion des valeurs non valides
convert_to_numeric <- function(x) {
result <- as.numeric(as.character(x))
if(any(is.na(result))) {
warning("Des NAs ont été introduits lors de la conversion")
}
return(result)
}
projet$LAT_num <- convert_to_numeric(projet$LAT)
## Warning in convert_to_numeric(projet$LAT): NAs introduits lors de la conversion
## automatique
## Warning in convert_to_numeric(projet$LAT): Des NAs ont été introduits lors de
## la conversion
projet$LONG_num <- convert_to_numeric(projet$LONG)
## Warning in convert_to_numeric(projet$LONG): NAs introduits lors de la
## conversion automatique
## Warning in convert_to_numeric(projet$LONG): Des NAs ont été introduits lors de
## la conversion
# Créer un nouveau dataframe avec les données nettoyées
projet_clean <- projet[!is.na(projet$LAT_num) & !is.na(projet$LONG_num), ]
# Vérifier si les vecteurs contiennent des données valides
if (length(projet_clean$LONG_num) > 0 && sum(!is.na(projet_clean$LONG_num)) > 0 &&
length(projet_clean$LAT_num) > 0 && sum(!is.na(projet_clean$LAT_num)) > 0) {
# Tracer le nuage de points
plot(projet_clean$LONG_num, projet_clean$LAT_num, col = couleurs[as.numeric(projet_clean$class_abst)],
pch = symboles[as.numeric(projet_clean$class_abst)],
main = "Nuage de points par classe d'abstention",
xlab = "Longitude", ylab = "Latitude")
# Ajouter une légende
legend("topright", legend = levels(projet_clean$class_abst), col = couleurs, pch = symboles)
} else {
print("Erreur : Les données de longitude et/ou de latitude sont manquantes ou non valides.")
}
## [1] "Erreur : Les données de longitude et/ou de latitude sont manquantes ou non valides."
univarie <- function(table_df, nom_var_quanti, nom_var_quali, nom_weight = NULL, xlab, ylab) {
if (!is.null(nom_weight) && !(nom_weight %in% names(table_df))) {
stop("nom_weight n'est pas une colonne valide dans le dataframe.")
}
# Calculer la moyenne et l'écart-type (pondérés si nom_weight est non nul)
moyennes <- ecart_types <- numeric()
for (niveau in unique(table_df[[nom_var_quali]])) {
sous_ensemble <- table_df[table_df[[nom_var_quali]] == niveau, ]
if (!is.null(nom_weight)) {
poids <- sous_ensemble[[nom_weight]]
moyenne <- sum(poids * sous_ensemble[[nom_var_quanti]], na.rm = TRUE) / sum(poids, na.rm = TRUE)
ecart_type <- sqrt(sum(poids * (sous_ensemble[[nom_var_quanti]] - moyenne)^2, na.rm = TRUE) / sum(poids, na.rm = TRUE))
} else {
moyenne <- mean(sous_ensemble[[nom_var_quanti]], na.rm = TRUE)
ecart_type <- sd(sous_ensemble[[nom_var_quanti]], na.rm = TRUE)
}
moyennes <- c(moyennes, moyenne)
ecart_types <- c(ecart_types, ecart_type)
}
# Afficher la boîte à moustaches
boxplot(table_df[[nom_var_quanti]] ~ table_df[[nom_var_quali]], xlab = xlab, ylab = ylab)
# Ajouter les moyennes et intervalles de confiance
niveaux <- unique(table_df[[nom_var_quali]])
for (i in seq_along(niveaux)) {
points(x = i, y = moyennes[i], col = "red", pch = 19)
segments(x0 = i, y0 = moyennes[i] - 2 * ecart_types[i], x1 = i, y1 = moyennes[i] + 2 * ecart_types[i], col = "red")
}
# Effectuer un test statistique et afficher les résultats
# (Le choix du test dépend de la distribution des données)
test_result <- t.test(table_df[[nom_var_quanti]], na.rm = TRUE)
print(test_result)
}
# Exemple d'utilisation
univarie(table_df = projet, nom_var_quanti = "pct_abst", nom_var_quali = "code_dep", xlab = "Département", ylab = "Pourcentage d'abstention")
##
## One Sample t-test
##
## data: table_df[[nom_var_quanti]]
## t = 153.38, df = 3018, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 0.1121051 0.1150084
## sample estimates:
## mean of x
## 0.1135568
# Application de la fonction univarie pour le code du département
univarie(table_df = projet, nom_var_quanti = "pct_abst", nom_var_quali = "code_dep",
xlab = "Département", ylab = "Pourcentage d'abstention")
##
## One Sample t-test
##
## data: table_df[[nom_var_quanti]]
## t = 153.38, df = 3018, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 0.1121051 0.1150084
## sample estimates:
## mean of x
## 0.1135568
bivarie <- function(table_df, vars, nom_var_quali = NULL, xlab = "", ylab = "") {
nom_var_quanti <- vars[1]
nom_var_expl <- vars[2]
# Tracer le nuage de points et la droite de régression
if (is.null(nom_var_quali)) {
plot(table_df[[nom_var_expl]], table_df[[nom_var_quanti]], xlab = xlab, ylab = ylab)
fit <- lm(table_df[[nom_var_quanti]] ~ table_df[[nom_var_expl]])
abline(fit, col = "blue")
confint_fit <- confint(fit)
coeffs <- coef(fit)
p_value <- summary(fit)$coefficients[2, 4]
} else {
# Logique pour gérer le cas où nom_var_quali est non nul
# ...
}
# Résultats à retourner
list(
p_value = p_value,
a = coeffs[1], # Intercept
b = coeffs[2], # Pente
confint = confint_fit
)
}
# Exemple d'utilisation
resultats_chomage07 <- bivarie(projet, c("pct_abst", "chomage07"),
xlab = "Taux de chômage en 2007", ylab = "% d'abstentions")
## Warning in xy.coords(x, y, xlabel, ylabel, log): NAs introduits lors de la
## conversion automatique
## Warning in abline(fit, col = "blue"): utilisation des deux premiers des 1067
## coefficients de régression
Pour approfondir notre compréhension du taux d’abstention lors de l’élection présidentielle de 2007 en Midi-Pyrénées, on pourrait explorer le jeu de données avec plusieurs autres techniques en utilisant R :
Étude de Corrélation : On pourrait examiner les liens entre l’abstention et d’autres facteurs comme le taux de chômage ou la densité démographique. Des méthodes comme les coefficients de corrélation ou la régression linéaire seraient utiles ici.
Analyse Historique : Si on dispose de données des élections précédentes, observer les évolutions du taux d’abstention au fil du temps pourrait révéler des tendances intéressantes.
Regroupement par Clustering : On pourrait regrouper les communes selon leurs caractéristiques socio-économiques via des méthodes de clustering. Cela nous aiderait à voir si des groupes de communes partagent des taux d’abstention similaires.
Analyse Factorielle : Pour comprendre quels facteurs sous-jacents influencent l’abstention, une analyse factorielle pourrait être pertinente.
Cartographie Évoluée : Des cartes interactives ou des visualisations géospatiales pourraient illustrer les disparités géographiques de l’abstention et d’autres indicateurs clés.
Modélisation Prédictive : On pourrait créer des modèles prédictifs pour anticiper le taux d’abstention, en identifiant quels facteurs jouent un rôle majeur.
Examen par Sous-groupes : S’il y a des données démographiques détaillées, examiner l’abstention par groupe d’âge, sexe ou niveau d’éducation pourrait révéler des patterns spécifiques.
Visualisations Plus Élaborées : L’utilisation de graphiques à boîtes, de graphiques en violon ou de heatmaps pourraient offrir une perspective plus riche sur les relations entre l’abstention et d’autres variables.
En explorant ces différentes pistes avec les outils de R, on pourrait obtenir une vue d’ensemble plus nuancée et précise des facteurs influençant l’abstention électorale dans cette région spécifique.
En lien avec la problématique centrale du projet – comprendre et analyser le taux d’abstention à l’élection présidentielle française de 2007, particulièrement dans la région Midi-Pyrénées :
Préparation des Données : Le projet a débuté par un travail conséquent de préparation des données, impliquant l’importation, le nettoyage et la fusion de plusieurs ensembles de données. Ceci a permis de créer un dataframe complet et cohérent pour l’analyse.
Création de Variables Pertinentes : Des variables significatives ont été créées pour enrichir l’analyse, comme le taux d’abstention (pct_abst), le pourcentage d’inscrits (pct_inscrits) et le taux de votes pour un candidat spécifique (pct_xr). Ces variables offrent un aperçu plus détaillé du comportement électoral.
Analyse Statistique et Exploration : L’analyse a inclus une exploration statistique des données, avec des calculs de moyennes, des comparaisons entre zones urbaines et rurales, et l’identification de tendances au sein de différents départements.
Utilisation de Techniques Avancées : Le projet a mis en œuvre des techniques statistiques avancées, telles que l’imputation des valeurs manquantes et la création de variables catégorielles pour une analyse plus fine.
Visualisations des Données : Des graphiques et des visualisations ont été utilisés pour illustrer les résultats, permettant une compréhension plus intuitive des tendances et des relations dans les données.
Réflexion Critique et Approches Alternatives : Le projet a également inclus une réflexion sur les limites des méthodes utilisées et la possibilité d’approches alternatives pour une analyse plus approfondie.
En résumé, ce projet a démontré une utilisation approfondie des capacités du logiciel R pour analyser le taux d’abstention électorale. Le travail a combiné avec succès des techniques de manipulation de données, d’analyse statistique et de visualisation pour aborder la problématique de l’abstention électorale, tout en offrant des pistes pour de futures recherches et analyses.