Code
# Importe les données
library(readxl)
<-read_xls(path = "data/RP_Tunisie/data/don_del.xls",
datasheet = "data")
<- "Sfax" choix_gou
GEO UNIV’R Tunisie 2024
On se propoe de passer en revue l’ensemble du programme de la semaine à travers un exercice pédagogique associant statistique, cartographie, analyse spatiale, modélisation … Cet exercice correspond typiquement au travail qu’on pourrait donner à des étudiants de licence 2 ou 3 ayant suivi des cours de statistique, cartographie et SIG.
On limite volontairement au minimum le nombre de packages R utilisés, en se limitant ici à deux : readxl et sf. Ceux-ci sont utilisés pour importer/exporter les données statistiques et les données géographiques.
On propose de réaliser une analyse de la distribution du taux d’équipement en ordinateur dans les délégations d’un gouvernorat en 2004 et 2014. Le programme est rédigé de telle sorte qu’on puisse facilement passer d’un gouvernorat à l’autre.
# Importe les données
library(readxl)
<-read_xls(path = "data/RP_Tunisie/data/don_del.xls",
datasheet = "data")
<- "Sfax" choix_gou
A chaque étape, on peut comparer les résultats obtenus en se servant de programmes R et ceux obtenus en se servant des logiciels utilisant la souris comme Excel, Xlstat, Magrit, QGIS, ArCGIS, Philcarto , …
Consigne : Après avoir chargé le tableau excel tun_del_2004.xls, sélectionnez les délégations du gouvernorat de Sfax et construisez un tableau décrivant le nombre ménages et leur équipement en ordinateur en 2004 et 2014
Résultat :
# Importe les données
library(readxl)
<-read_xls(path = "data/RP_Tunisie/data/don_del.xls",
datasheet = "data")
# Sélectionne les lignes
<- data[data$gou_nom==choix_gou,]
don
# simplifie le code
$code<-substr(don$del_code,7,8)
don
# Calcule le taux d'équipement
$equip_2004 <- 100*don$ordin_2004/don$menag_2004
don$equip_2014 <- 100*don$ordin_2014/don$menag_2014
don
# Sélectionne les colonnes
<- don[,c("code","del_nom_fr","del_nom_ar","gou_cap","menag_2004","menag_2014", "ordin_2004", "ordin_2014")]
don
# renomme
names(don)<-c("code","nomfr","nomar","cap", "men04","men14","equ04","equ14")
# Affiche
library(knitr)
kable(don, digits=0,
main = "Tableau 1 : Ménages et équipements")
code | nomfr | nomar | cap | men04 | men14 | equ04 | equ14 |
---|---|---|---|---|---|---|---|
SM | Sfax Medina | صفاقس المدينة | 1 | 28794 | 29107 | 3772 | 14494 |
SO | Sfax Ouest | صفاقس الغربية | 0 | 26653 | 30371 | 3385 | 14841 |
SZ | Sakiet Ezzit | ساقية الزيت | 0 | 17541 | 23096 | 2193 | 10978 |
SD | Sakiet Eddair | ساقية الدائر | 0 | 23633 | 30277 | 2056 | 12418 |
SS | Sfax Sud | صفاقس الجنوبية | 0 | 24215 | 31866 | 2664 | 14057 |
TI | Tina | طينة | 0 | 10239 | 15577 | 307 | 4576 |
AG | Agareb | عقارب | 0 | 7689 | 9743 | 177 | 1543 |
DJ | Jebeniana | جبنيانة | 0 | 9502 | 11823 | 171 | 1948 |
AM | EL Amra | العامرة | 0 | 6181 | 7501 | 80 | 966 |
HA | Hencha | الحنشة | 0 | 8831 | 11385 | 97 | 1087 |
MC | Menzel Chaker | منزل شاكر | 0 | 7084 | 8387 | 35 | 477 |
GH | El Ghraiba | الغريبة | 0 | 3029 | 3390 | 21 | 269 |
BA | Bir Ali Ben khlifa | بئر علي بن خليفة | 0 | 9598 | 11230 | 58 | 994 |
SK | Skhira | الصخيرة | 0 | 5137 | 6807 | 72 | 936 |
MA | Mahres | المحرس | 0 | 6506 | 8311 | 247 | 2245 |
KE | Kerkenah | قرقنة | 0 | 3933 | 3869 | 102 | 1314 |
$pct04<-100*don$equ04/don$men04
don$pct14<-100*don$equ14/don$men14
donkable(don,
main = "Tableau 2 : taux d'équipement",
digits=c(0,0,0,0,0,0,0,0,1,1))
code | nomfr | nomar | cap | men04 | men14 | equ04 | equ14 | pct04 | pct14 |
---|---|---|---|---|---|---|---|---|---|
SM | Sfax Medina | صفاقس المدينة | 1 | 28794 | 29107 | 3772 | 14494 | 13.1 | 49.8 |
SO | Sfax Ouest | صفاقس الغربية | 0 | 26653 | 30371 | 3385 | 14841 | 12.7 | 48.9 |
SZ | Sakiet Ezzit | ساقية الزيت | 0 | 17541 | 23096 | 2193 | 10978 | 12.5 | 47.5 |
SD | Sakiet Eddair | ساقية الدائر | 0 | 23633 | 30277 | 2056 | 12418 | 8.7 | 41.0 |
SS | Sfax Sud | صفاقس الجنوبية | 0 | 24215 | 31866 | 2664 | 14057 | 11.0 | 44.1 |
TI | Tina | طينة | 0 | 10239 | 15577 | 307 | 4576 | 3.0 | 29.4 |
AG | Agareb | عقارب | 0 | 7689 | 9743 | 177 | 1543 | 2.3 | 15.8 |
DJ | Jebeniana | جبنيانة | 0 | 9502 | 11823 | 171 | 1948 | 1.8 | 16.5 |
AM | EL Amra | العامرة | 0 | 6181 | 7501 | 80 | 966 | 1.3 | 12.9 |
HA | Hencha | الحنشة | 0 | 8831 | 11385 | 97 | 1087 | 1.1 | 9.5 |
MC | Menzel Chaker | منزل شاكر | 0 | 7084 | 8387 | 35 | 477 | 0.5 | 5.7 |
GH | El Ghraiba | الغريبة | 0 | 3029 | 3390 | 21 | 269 | 0.7 | 7.9 |
BA | Bir Ali Ben khlifa | بئر علي بن خليفة | 0 | 9598 | 11230 | 58 | 994 | 0.6 | 8.9 |
SK | Skhira | الصخيرة | 0 | 5137 | 6807 | 72 | 936 | 1.4 | 13.8 |
MA | Mahres | المحرس | 0 | 6506 | 8311 | 247 | 2245 | 3.8 | 27.0 |
KE | Kerkenah | قرقنة | 0 | 3933 | 3869 | 102 | 1314 | 2.6 | 34.0 |
# sélectionne les variables
<- don[,c("pct04","pct14")]
sel
# Tableau standard
<-apply(sel,2,quantile)
quant<-apply(sel,2,mean)
moy<-apply(sel,2,sd)
ect<-100*ect/moy
cv<-rbind(quant,moy,ect,cv)
tabrow.names(tab) <-c("Minimum","Q1","Médiane","Q3","Maximum","Moyenne","Ecart-type", "C.V. (%)")
kable(tab, caption="Paramètres principaux", digits =1,
col.names = c("Situation en 2004","Situation en 2014"),
)
Situation en 2004 | Situation en 2014 | |
---|---|---|
Minimum | 0.5 | 5.7 |
Q1 | 1.2 | 12.0 |
Médiane | 2.4 | 21.7 |
Q3 | 9.3 | 41.8 |
Maximum | 13.1 | 49.8 |
Moyenne | 4.8 | 25.8 |
Ecart-type | 4.9 | 16.3 |
C.V. (%) | 101.6 | 63.3 |
par(mfrow=c(2,1))
<-min(c(sel$pct04, sel$pct14))
mintot <-max(c(sel$pct04, sel$pct14))
maxtot
# Histogramme
hist(sel$pct04,
breaks=quantile(sel$pct04),
xlim=c(mintot,maxtot),
col="gray80",
main= "Situation en 2004",
xlab = "Taux d'équipement (%)",
ylab = "Fréquence moyenne")
rug(sel$pct04, col="black", lwd=2)
lines(density(sel$pct04), lty=3,lwd=2)
hist(sel$pct14,
breaks=quantile(sel$pct14),
xlim=c(mintot,maxtot),
col="gray80",
main= "Situation en 2014",
xlab = "Taux d'équipement (%)",
ylab = "Fréquence moyenne")
rug(sel$pct14, col="black", lwd=2)
lines(density(sel$pct14), lty=3,lwd=2)
# Chargement du package spatial features
library(sf)
# Importation du fonds de carte complet
<-st_read("data/RP_Tunisie/geom/map_del.geojson", quiet=T)
map
# Selection d'un gouvernorat
<- map[map$gou_nom == choix_gou,]
map
# simplifie le code
$code <- substr(map$del_code,7,8)
map
# ne conserve que le code,la capitale et la géométrie
<- map[,c("code","gou_cap","geometry")]
map
# Affichage du fonds de carte
par(mar=c(0,0,3,0))
plot(map$geometry,
col="gray90",
main = "Code des unités spatiales de la zone d'étude")
# Ajout du code des unités spatiales
<-st_coordinates(st_centroid(map))
cootext(coo, map$code, cex=0.5,col="black",)
<-map[map$gou_cap==1,]
cap$dist<-as.numeric(st_distance(st_centroid(map),st_centroid(cap)))/1000
mapplot(map["dist"], main="Distance au chef-lieu (en km)",
breaks=c(0,5, 10,20,40,80, 160),
pal=c("gray10", "gray30","gray50","gray70","gray90", "gray100"),)
library(mapsf)
<-map[,c("code","geometry")]
map<- merge(map, don, by="code")
map_don <-max(don$equ04,don$equ14)
maxequ
par(mfrow=c(1,2))
mf_map(map_don$geometry, col="white")
mf_map(map_don, type="prop", var="equ04",
val_max = maxequ, inches=0.1, col="gray20",
leg_title = "Nb. de ménages équipés",)
mf_layout(title="2004",frame = T, credits = "Source : INS Tunisie")
mf_map(map_don$geometry, col="white")
mf_map(map_don, type="prop", var="equ14",
val_max = maxequ, inches=0.1, col="gray20",
leg_title = "Nb. de ménages équipés")
mf_layout(title="2014",frame = T, credits = "Source : INS Tunisie")
library(mapsf)
<- merge(map, don, by="code")
map_don <-max(don$equ04,don$equ14)
maxequ
par(mfrow=c(1,2))
mf_map(map_don, type="choro", var="pct04",
breaks = "quantile",nbreaks = 5, pal ="Grays",
leg_title = "% ménages équipés",leg_val_rnd = 1)
mf_layout(title="2004",frame = T, credits = "Source : INS Tunisie")
mf_map(map_don, type="choro", var="pct14",
breaks = "quantile",nbreaks = 5, pal ="Grays",
leg_title = "% ménages équipés",leg_val_rnd = 1)
mf_layout(title="2014",frame = T, credits = "Source : INS Tunisie")
# prépration de l'analyse
<-don$code
code<-don$nomfr
nomfr<-don$nomar
nomar<-don$pct04
X<-don$pct14
Y<-data.frame(code,nomfr, nomar,X,Y)
tab
# Diagramme
plot(tab$X,tab$Y,
pch=20,
cex=0.8,
col="red",
main = "Evolution du taux d'équipement",
xlab="tx. equipement. 2004",
ylab ="tx. equipement 2014")
text(tab$X,tab$Y,tab$code,
pos=2,
cex=0.5,
col="blue")
cor.test(X,Y, method="pearson")
Pearson's product-moment correlation
data: X and Y
t = 10.264, df = 14, p-value = 6.756e-08
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.8306927 0.9791923
sample estimates:
cor
0.9395226
cor.test(X,Y, method="spearman")
Spearman's rank correlation rho
data: X and Y
S = 12, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
0.9823529
<- lm(Y~X)
modreg summary(modreg)
Call:
lm(formula = Y ~ X)
Residuals:
Min 1Q Median 3Q Max
-6.5455 -2.6977 -1.7530 0.8751 15.1464
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 10.6836 2.0643 5.175 0.000141 ***
X 3.1357 0.3055 10.264 6.76e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 5.79 on 14 degrees of freedom
Multiple R-squared: 0.8827, Adjusted R-squared: 0.8743
F-statistic: 105.4 on 1 and 14 DF, p-value: 6.756e-08
plot(tab$X,tab$Y,
pch=20,
cex=0.8,
col="red",
main = "Droite de régression",
xlab="tx. equipement. 2004",
ylab ="tx. equipement 2014")
abline(modreg,col="blue",lwd=1)
$Y_est <- modreg$fitted.values
tab$Y_res <- modreg$residuals
tab<-tab[order(tab$Y_res),]
tabkable(tab, digits=1)
code | nomfr | nomar | X | Y | Y_est | Y_res | |
---|---|---|---|---|---|---|---|
11 | MC | Menzel Chaker | منزل شاكر | 0.5 | 5.7 | 12.2 | -6.5 |
12 | GH | El Ghraiba | الغريبة | 0.7 | 7.9 | 12.9 | -4.9 |
10 | HA | Hencha | الحنشة | 1.1 | 9.5 | 14.1 | -4.6 |
13 | BA | Bir Ali Ben khlifa | بئر علي بن خليفة | 0.6 | 8.9 | 12.6 | -3.7 |
3 | SZ | Sakiet Ezzit | ساقية الزيت | 12.5 | 47.5 | 49.9 | -2.4 |
7 | AG | Agareb | عقارب | 2.3 | 15.8 | 17.9 | -2.1 |
1 | SM | Sfax Medina | صفاقس المدينة | 13.1 | 49.8 | 51.8 | -2.0 |
9 | AM | EL Amra | العامرة | 1.3 | 12.9 | 14.7 | -1.9 |
2 | SO | Sfax Ouest | صفاقس الغربية | 12.7 | 48.9 | 50.5 | -1.6 |
14 | SK | Skhira | الصخيرة | 1.4 | 13.8 | 15.1 | -1.3 |
5 | SS | Sfax Sud | صفاقس الجنوبية | 11.0 | 44.1 | 45.2 | -1.1 |
8 | DJ | Jebeniana | جبنيانة | 1.8 | 16.5 | 16.3 | 0.1 |
4 | SD | Sakiet Eddair | ساقية الدائر | 8.7 | 41.0 | 38.0 | 3.1 |
15 | MA | Mahres | المحرس | 3.8 | 27.0 | 22.6 | 4.4 |
6 | TI | Tina | طينة | 3.0 | 29.4 | 20.1 | 9.3 |
16 | KE | Kerkenah | قرقنة | 2.6 | 34.0 | 18.8 | 15.1 |
library(mapsf)
# Standardisation des résidus
$Y_res_std<-tab$Y_res/sd(tab$Y_res)
tab
# Jointure avec la carte
<-map[,c("code","geometry")]
map<- merge(map, tab, by="code")
map_reg
# Choix de la palette et des classes
library(RColorBrewer)
<-brewer.pal(n = 6, name = "RdYlBu")
mypal= c(-10, -2,-1,0,1,2,10)
mybreaks
mf_map(map_reg, type="choro", var="Y_res_std",
pal = mypal, breaks=mybreaks,
leg_title = "Résidus standardisés",leg_val_rnd = 1)
mf_layout(title="Ecarts à la tendance 2004-2014",frame = T, credits = "Source : INS Tunisie")