L’objectif de cette section consiste à comparer les points d’intérêts issus de la BPE et ceux extraits d’OpenStreetMap pour les 15 équipements sélectionnés : magasins d’alimentation, d’ameubmement, banques, boucheries, boulangeries, magasins de chaussures, cinémas, coiffeurs, magasins d’électronique, opticiens, pharmacies, cafés-restaurants, stations service, théâtres et magasins de vêtements.
Cette comparaison porte sur les communes françaises exclusivement, étant donné la couverture géographique de la BPE. Il serait envisageable d’étendre cette analyse aux autres pays frontaliers si d’autres bases nationales de référence étaient identifiées.
library(sf) # Manipulation de données spatiales
library(cartography) # Cartographie des résultats
library(readxl) # Import de fichiers Excel
library(FactoMineR) # Analyse des résultats de l'ACMLes couches géographiques de référence issues du programme de préparation des données sont importées. Il s’agit des maillages européens de référence (LAU2 et grille kilométrique), ainsi que les points OSM et BPE pour les 15 équipements sélectionnés.
bbox <- st_read("data/geom.gpkg", layer = "bbox", quiet = TRUE)
lau50 <- st_read("data/geom.gpkg", layer = "lau50", quiet = TRUE)
lau <- st_read("data/geom.gpkg", layer = "lau", quiet = TRUE)
nuts3 <- st_read("data/geom.gpkg", layer = "nuts3", quiet = TRUE)
grid <- st_read("data/geom.gpkg", layer = "grid", quiet = TRUE)
#corecity <- st_read("data/geom.gpkg", layer = "corecity", quiet = TRUE)
equipements <- st_read("data/geom.gpkg", layer = "equipements", quiet = TRUE, stringsAsFactors = TRUE)
osm <- equipements [equipements$type == "OSM",]
bpe <- equipements [equipements$type == "BPE",]Les unités administratives localisées en France sont extraites. Une grille régulière de 3km de côté recouvrant l’espace d’étude est aussi créée pour les analyses à venir.
# Uniquement les communes françaises
laufr <- lau[!is.na(lau$Categ),]
# Création d'une grille de 3km de côté pour la France
gridfr <- st_make_grid(x = laufr, cellsize = 3000, crs = 3035)
gridfr <- st_as_sf(gridfr)
fr <- st_as_sf(st_union(laufr))
gridfr <- st_intersection(gridfr, fr)La fonction CountPt est créée pour dénombrer le nombre de points d’intérêt (OSM ou BPE) pour chaque unité territoriale d’un maillage géographique de référence. La fonction prend en entrée un objet sf (x) qui correspond au maillage de référence utilisé pour dénombrer les points d’intérêts. L’argument pt contient les points d’intérêt (couche OSM ou BPE dans notre cas). Les arguments var et equippermet de cibler le champ de pt (var) et sur quelle modalité de var porte ce ce dénombrement (equip).
CountPt <- function(x, pt, var, equip){
# Selection de l'équipement d'intérêt (pour une source et une variable donnée)
pts <- pt[pt[[var]] == equip,]
# Intersection avec l'objet sf de référence
inter <- st_intersects(x, pts)
# Nombre de points par objet géographique
v <- sapply(X = inter, FUN = length)
return(v)
}Nous commençons par dénombrer les équipements OSM et BPE par grandes catégories : classification urbaine et poids démographique des communes, type d’équipement.
Pour l’ensemble de ces catégories, ce dénombrement est réalisé par source de données. Leur écart absolu et relatif est ensuite calculé. Ils sont par la suite synthétisés sous forme de graphique.
Les couches de points BPE et OSM sont tout d’abord intersectées avec le découpage communal français. Les géométries sont ensuite retirées pour pouvoir dénombrer les points d’intérêt par grandes catégories.
# Intersection couche point BPE et OSM
osmFr <- st_intersection(osm, laufr)
osmFr <- st_set_geometry(osmFr, NULL)
bpeFr <- st_intersection(bpe, laufr)
bpeFr <- st_set_geometry(bpeFr, NULL)# Agréger les équipements par catégorie
tmp1 <- aggregate(osmFr[,"categorie"],
by = list(categorie = osmFr$categorie),
FUN = length)
tmp2 <- aggregate(bpeFr[,"categorie"],
by = list(categorie = bpeFr$categorie),
FUN = length)
agg <- cbind(tmp1, tmp2[,2])
colnames(agg) <- c("categorie", "OSM", "BPE")
# Somme
total <- data.frame(t(apply(agg[,c(2:3)], 2, sum)))
total$categorie <- "Total"
agg <- rbind(agg, total)
# Ecarts
agg$`Ecart Absolu` <- agg$OSM - agg$BPE
agg$`Ecart relatif` <- agg$OSM / agg$BPE * 100
agg <- agg[order(agg$BPE),]
knitr::kable(agg, row.names = F, digits = 1)| categorie | OSM | BPE | Ecart Absolu | Ecart relatif |
|---|---|---|---|---|
| theatre | 29 | 6 | 23 | 483.3 |
| cinema | 19 | 21 | -2 | 90.5 |
| electronique | 59 | 114 | -55 | 51.8 |
| station_service | 159 | 134 | 25 | 118.7 |
| chaussures | 50 | 188 | -138 | 26.6 |
| ameublement | 67 | 241 | -174 | 27.8 |
| boucherie | 42 | 263 | -221 | 16.0 |
| alimentation | 127 | 282 | -155 | 45.0 |
| opticien | 59 | 294 | -235 | 20.1 |
| pharmacie | 184 | 364 | -180 | 50.5 |
| banque | 220 | 488 | -268 | 45.1 |
| boulangerie | 237 | 888 | -651 | 26.7 |
| vetements | 244 | 1072 | -828 | 22.8 |
| coiffeur | 148 | 1626 | -1478 | 9.1 |
| restaurant | 1076 | 2777 | -1701 | 38.7 |
| Total | 2720 | 8758 | -6038 | 31.1 |
png(file = "fig/B01_ecarts_equip_abs.png", width = 800, height = 600, res = 120)
# valeurs absolues
par(mar=c(6,4,0,0), cex.main = 0.9, cex.lab = 0.8, cex.axis = 0.7)
barplot(cbind(OSM,BPE)~categorie, data = agg, beside = TRUE,
border = FALSE, las = 2 , col = c("#BEAED4", "#7FC97F"), xlab ="", axes = TRUE,
ylab = "nb équipements",
log ="y")
abline(h = c(10,20,50,100,200,500,1000,2000), lwd = 0.5, col = "grey", lty = 3)
legend ("topleft", legend = c("OpenStreetMap","Base Permanente des Équipements"),
fill = c("#BEAED4", "#7FC97F"), cex = 0.6, border = NA, bg = NA, bty = "n")
dev.off()## png
## 2
# valeurs relatives
agg <- agg[order(-agg$`Ecart relatif`),]
png(file = "fig/B02_ecarts_equip_rel.png", width = 800, height = 600, res = 120)
par(mar=c(6,4,0,0), cex.main = 0.9, cex.lab = 0.8, cex.axis = 0.7)
barplot(agg$`Ecart relatif`, names.arg = agg$categorie,
border = FALSE, las = 2 , col = "#4aa5fa", xlab ="",
ylab = "Nb équipements OSM / Nb équipements BPE (%)", log = "y")
abline(h = c(10,20,50,100,200,500,1000,2000), lwd = 0.5, col = "grey", lty = 3)
abline (h = 100, lty=2, col = "darkred")
dev.off()## png
## 2
figure B01 à B02 - Écarts absolus et relatifs par type d’équipement


Le dénombrement porte ici selon la localisation des points au regard du zonage communal en unités urbaines. Pour rappel les communes rurales ont été préalablement décomposées en périurbaines/rurales en tenant compte du zonage en aires urbaines.
tmp1 <- aggregate(osmFr[,"Categ"],
by = list(categorie = osmFr$Categ),
FUN = length)
tmp2 <- aggregate(bpeFr[,"Categ"],
by = list(categorie = bpeFr$Categ),
FUN = length)
tmp3 <- aggregate(laufr[,"Categ"],
by = list(categorie = laufr$Categ),
FUN = length)
tmp3 <- st_set_geometry(tmp3, NULL)
agg <- cbind(tmp3, tmp1[,2], tmp2[,2])
colnames(agg) <- c("Categorie", "Nb.de.communes", "OSM", "BPE")
# recode categories of communes
oldvalues <- c("B", "C", "I", "P", "R")
newvalues <- factor(c("Banlieues", "Centres", "Com. isolées",
"Com. périurbaines","Com. rurales"))
agg$Categorie <- newvalues[ match(agg$Categorie, oldvalues) ]
# Somme
total <- data.frame(t(apply(agg[,c(2:4)], 2, sum)))
total$Categorie <- "Total"
agg <- rbind(agg, total)
# Ecarts
agg$`Ecart Absolu` <- agg$OSM - agg$BPE
agg$`Ecart relatif` <- agg$OSM / agg$BPE * 100
agg <- agg[order(agg$BPE),]
knitr::kable(agg, row.names = F, digits = 1)| Categorie | Nb.de.communes | OSM | BPE | Ecart Absolu | Ecart relatif |
|---|---|---|---|---|---|
| Com. périurbaines | 202 | 77 | 354 | -277 | 21.8 |
| Com. rurales | 312 | 156 | 500 | -344 | 31.2 |
| Com. isolées | 27 | 248 | 569 | -321 | 43.6 |
| Banlieues | 118 | 618 | 2696 | -2078 | 22.9 |
| Centres | 44 | 1621 | 4639 | -3018 | 34.9 |
| Total | 703 | 2720 | 8758 | -6038 | 31.1 |
png(file = "fig/B03_ecarts_urb_abs.png", width = 800, height = 600, res = 120)
# valeurs absolues
par(mar=c(6,4,0,0), cex.main = 0.9, cex.lab = 0.8, cex.axis = 0.7)
barplot(cbind(OSM,BPE)~Categorie, data=agg, beside = TRUE,
border = FALSE, las = 2 , col = c("#BEAED4", "#7FC97F"), xlab ="", axes = TRUE,
ylab = "nb équipements", log ="y")
abline(h = c(100,200,500,1000,2000), lwd = 0.5, col = "grey", lty = 3)
legend ("topleft", legend = c("OpenStreetMap","Base Permanente des Équipements"),
fill = c("#BEAED4", "#7FC97F"), cex = 0.6, border = NA, bg = NA, bty = "n")
dev.off()## png
## 2
# valeurs relatives
agg <- agg[order(-agg$`Ecart relatif`),]
png(file = "fig/B04_ecarts_urb_rel.png", width = 800, height = 600, res = 120)
par(mar=c(6,4,0,0), cex.main = 0.9, cex.lab = 0.8, cex.axis = 0.7)
barplot(agg$`Ecart relatif`, names.arg = agg$Categorie,
border = FALSE, las = 2 , col = "#4aa5fa", xlab ="",
ylab = "Nb équipements OSM / Nb équipements BPE (%)")
abline(h = c(10,20,50,100,200,500,1000,2000), lwd = 0.5, col = "grey", lty = 3)
dev.off()## png
## 2
figure B03 à B04 - Écarts absolus et relatifs par type d’unité urbaine


Une typologie basée sur le poids démographique des communes d’appartenance des points OSM et BPE est créée. On souhaite ici évaluer l’écart existant entre le nombre de points BPE et OSM en fonction de la taille démographique de leur commune d’appartenance.
# Création catégories de population
osmFr$POP_CAT <- cut(osmFr$POP_2011,
breaks = c(0, 500, 2000, 5000, 10000, 20000, 120462),
include.lowest = TRUE,
labels = c("Moins de 500 hab.",
"500 à 2000 hab.",
"2000 à 5000 hab.",
"5000 à 10000 hab.",
"10000 à 20000 hab.",
"Plus de 20000 hab."))
bpeFr$POP_CAT <- cut(bpeFr$POP_2011,
breaks = c(0, 500, 2000, 5000, 10000, 20000, 120462),
include.lowest = TRUE,
labels = c("Moins de 500 hab.",
"500 à 2000 hab.",
"2000 à 5000 hab.",
"5000 à 10000 hab.",
"10000 et 20000 hab.",
"Plus de 20000 hab."))
laufr$POP_CAT <- cut(laufr$POP_2011,
breaks = c(0, 500, 2000, 5000, 10000, 20000, 120462),
include.lowest = TRUE,
labels = c("Moins de 500 hab.",
"500 à 2000 hab.",
"2000 à 5000 hab.",
"5000 à 10000 hab.",
"10000 et 20000 hab.",
"Plus de 20000 hab."))tmp1 <- aggregate(osmFr[,"POP_CAT"],
by = list(categorie = osmFr$POP_CAT),
FUN = length)
tmp2 <- aggregate(bpeFr[,"POP_CAT"],
by = list(categorie = bpeFr$POP_CAT),
FUN = length)
tmp3 <- aggregate(laufr[,"POP_CAT"],
by = list(categorie = laufr$POP_CAT),
FUN = length)
tmp3 <- st_set_geometry(tmp3, NULL)
agg <- cbind(tmp3, tmp1[,2], tmp2[,2])
colnames(agg) <- c("Categorie", "Nb.de.communes", "OSM", "BPE")
# Somme
total <- data.frame(t(apply(agg[,c(2:4)], 2, sum)))
total$Categorie <- "Total"
agg <- rbind(agg, total)
agg$`Ecart Absolu` <- agg$OSM - agg$BPE
agg$`Ecart relatif` <- agg$OSM / agg$BPE * 100
knitr::kable(agg, row.names = F, digits = 1, )| Categorie | Nb.de.communes | OSM | BPE | Ecart Absolu | Ecart relatif |
|---|---|---|---|---|---|
| Moins de 500 hab. | 326 | 44 | 174 | -130 | 25.3 |
| 500 à 2000 hab. | 252 | 305 | 1067 | -762 | 28.6 |
| 2000 à 5000 hab. | 79 | 472 | 1524 | -1052 | 31.0 |
| 5000 à 10000 hab. | 28 | 344 | 1666 | -1322 | 20.6 |
| 10000 et 20000 hab. | 13 | 259 | 1389 | -1130 | 18.6 |
| Plus de 20000 hab. | 5 | 1296 | 2938 | -1642 | 44.1 |
| Total | 703 | 2720 | 8758 | -6038 | 31.1 |
png(file = "fig/B05_ecarts_pop_abs.png", width = 800, height = 600, res = 120)
# valeurs absolues
par(mar=c(6,4,0,0), cex.main = 0.9, cex.lab = 0.8, cex.axis = 0.7)
barplot(cbind(OSM,BPE)~Categorie, data=agg, beside = TRUE,
border = FALSE, las = 2 , col = c("#BEAED4", "#7FC97F"), xlab ="", axes = TRUE,
ylab = "nb équipements",
log ="y")
abline(h = c(100,200,500,1000,2000,5000), col = "grey", lwd = 0.5, lty = 3)
legend ("topleft", legend = c("OpenStreetMap","Base Permanente des Équipements"),
fill = c("#BEAED4", "#7FC97F"), cex = 0.6, border = NA, bg = NA, bty = "n")
dev.off()## png
## 2
# valeurs relatives
agg <- agg[order(-agg$`Ecart relatif`),]
png(file = "fig/B06_ecarts_pop_rel.png", width = 800, height = 600, res = 120)
par(mar=c(6,4,0,0), cex.main = 0.9, cex.lab = 0.8, cex.axis = 0.7)
barplot(agg$`Ecart relatif`, names.arg = agg$Categorie,
border = FALSE, las = 2 , col = "#4aa5fa", xlab ="",
ylab = "Nb équipements OSM / Nb équipements BPE (%)")
abline(h = seq(0,400,10), col = "grey", lwd = 0.5, lty = 3)
dev.off()## png
## 2
figure B05 à B06 - Écarts absolus et relatifs par population communale (2011)


Les deux premières classifications sont ici croisées pour évaluer le nombre d’équipements présents pour les deux sources de données en fonction de l’appartenance des communes au zonage urbain.
# récupération des centralités insee et mg uniquement sur le territoire français
# table
tosm <- table(osmFr$categorie, osmFr$Categ)
tbpe <- table(bpeFr$categorie, bpeFr$Categ)
# order categ
tosm <- tosm[, c('C', 'B', 'P', 'I', 'R')]
tbpe <- tbpe[, c('C', 'B', 'P', 'I', 'R')]
# colors
cols <- c("#d13e16", "#f2935a","#fceebe","#b18fc1","#7dc3a2",
NA,
"#d13e16", "#f2935a","#fceebe","#b18fc1","#7dc3a2" )
# create the figure
png(file = "fig/B07_ecarts_categ_urb.png", width = 600, height = 600, res = 120)
par(mar=c(2,2,2,2), mfcol = c(4,4))
# barplots
for(i in 1:15){
barplot(c(tbpe[i, ], NA, tosm[i,]), names.arg = c("bpe osm"),
border = NA,
space = 0, col = cols, main = row.names(tosm)[i],
sub = c("bpe osm"), beside = T)
}
# legend
plot(1:10, col = NA, axes = F, xlab = NA, ylab = NA, )
legend(x = "left",title = "Communes",
legend = c('centres', 'banlieues', 'périurbaines', 'isolées', 'rurales'),
fill = cols[1:5], cex = .85, border=NA, bty = "n")
dev.off()figure B07 - Catégories par zonage urbain

On cherche ici à dénombrer les équipements OSM et BPE dans différents maillages de référence (grilles régulières, découpage communal…) par niveau de gamme (proximité, intermédiaire, supérieur) et ainsi évaluer spatialement les différences existant entre les deux bases de données.
Pour les 15 équipements sélectionnés, la gamme de proximité comprend les boulangeries, boucheries, pharmacies, magasins d’alimentation, cafés-restaurants et coiffeurs. La gamme intermédiaire comprend les magasins de vêtement, d’ameublement, d’électronique, de chaussures, les opticiens, banques et stations service. Deux équipements sont compris dans la gamme supérieure : les cinémas et théâtres.
Les équipements sont dénombrés par gamme et par communes pour BPE et OSM avec la fonction CountPt créée plus haut. Un taux de complétude (somme des équipements OSM / somme des équipements BPE) est calculé en conséquence.
laufr$lowosm <- CountPt(x = laufr, pt = osm, var = "gamme", equip = "proximite")
laufr$midosm <- CountPt(x = laufr, pt = osm, var = "gamme", equip = "intermediaire")
laufr$higosm <- CountPt(x = laufr, pt = osm, var = "gamme", equip = "superieur")
laufr$lowbpe <- CountPt(x = laufr, pt = bpe, var = "gamme", equip = "proximite")
laufr$midbpe <- CountPt(x = laufr, pt = bpe, var = "gamme", equip = "intermediaire")
laufr$higbpe <- CountPt(x = laufr, pt = bpe, var = "gamme", equip = "superieur")
laufr$totosm <- laufr$lowosm + laufr$midosm + laufr$higosm
laufr$totbpe <- laufr$lowbpe + laufr$midbpe + laufr$higbpe
laufr$comp <- laufr$totosm / laufr$totbpe * 100Ce taux de complétude est cartographié, ainsi que le nombre d’équipements par niveaux de gamme est maintenant cartographié à l’échelle des communes pour les deux sources de données.
# paramètres cartographiques pour la qualité de l'image
res <- 400
sizes <- getFigDim(x = nuts3, width = 3000, mar = c(0,0,1.2,0), res = res)
hauteur = (sizes[2]-500)*2
png(file = "fig/B08_lau2_completude.png",width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
plot(st_geometry(nuts3), col = NA, border = NA)
choroLayer(x = laufr, var = "comp", border = "ivory1",
breaks = c(0,10,20,31,40,50,100,600), lwd = 0.2,
col = carto.pal(pal1 = "blue.pal", pal2 = "orange.pal", n1 = 3, n2 = 4),
colNA = "lightgrey", legend.pos = "n", add = TRUE)
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
propSymbolsLayer(x = laufr, var = "totbpe", col = "#ffffff60",
legend.pos = "n", inches = 0.3, add = TRUE)
legendChoro(title.txt = "POI OSM / POI BPE\n(15 équipements, %)",
breaks = c(0,10, 20, 31, 40, 50, 100, 600),
col = carto.pal(pal1 = "blue.pal", pal2 = "orange.pal", n1 = 3, n2 = 4),
nodata.col = "lightgrey", nodata.txt = "Pas d'équipement BPE",
pos = "topright", frame = TRUE)
legendCirclesSymbols(title.txt = "Nb équipements BPE",
var = c(10, 100, 500, max(laufr$totbpe)),
col = NA, pos = "topleft", inches = 0.3, frame = TRUE)
labelLayer(x = laufr[order(laufr$totbpe, decreasing = T),][1:10,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.6,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
layoutLayer(title = "Taux de complétude OSM (15 équipements)",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
posscale = c(4002561, 2879651), frame= FALSE, horiz = FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
png(file = "fig/B09_lau2_proximite.png",width = sizes[1], height = hauteur, res = res)
par(mar = c(0,0,1.2,0), mfrow = c(2,1))
plot(st_geometry(laufr), col = "orange", border = "ivory1", lwd = 0.2)
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
propSymbolsLayer(x = laufr, var = "lowosm", col = "red3",
legend.pos = "topright",
legend.title.txt = "Nombre d'équipements", fixmax = max(laufr$lowbpe),
legend.frame = TRUE)
labelLayer(x = laufr[order(laufr$POP_2011, decreasing = T),][1:5,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.6,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
layoutLayer(title = "Equipements gamme de proximité - OSM",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2019", col = "#990000")
plot(st_geometry(laufr), col = "orange", border = "ivory1", lwd = 0.2)
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
propSymbolsLayer(x = laufr, var = "lowbpe", col = "red3",
legend.pos = "n", fixmax = max(laufr$lowbpe))
labelLayer(x = laufr[order(laufr$POP_2011, decreasing = T),][1:5,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.6,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
layoutLayer(title = "Equipements gamme de proximité - BPE",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2019", col = "#990000")
dev.off()## png
## 2
png(file = "fig/B10_lau2_intermediaire.png",width = sizes[1], height = hauteur, res = res)
par(mar = c(0,0,1.2,0), mfrow = c(2,1))
plot(st_geometry(laufr), col = "orange", border = "ivory1", lwd = 0.2)
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
propSymbolsLayer(x = laufr, var = "midosm", col = "gold2",
legend.pos = "topright", fixmax = max(laufr$midbpe),
legend.title.txt = "Nombre d'équipements",
legend.frame = TRUE)
labelLayer(x = laufr[order(laufr$POP_2011, decreasing = T),][1:5,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.6,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
layoutLayer(title = "Equipements gamme intermédiaire - OSM",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2019", col = "#990000")
plot(st_geometry(laufr), col = "orange", border = "ivory1", lwd = 0.2)
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
propSymbolsLayer(x = laufr, var = "midbpe", col = "gold2",
legend.pos = "n", fixmax = max(laufr$midbpe))
labelLayer(x = laufr[order(laufr$POP_2011, decreasing = T),][1:5,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.6,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
layoutLayer(title = "Equipements gamme intermédiaire - BPE",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2019", col = "#990000")
dev.off()## png
## 2
png(file = "fig/B11_lau2_superieur.png",width = sizes[1], height = hauteur, res = res)
par(mar = c(0,0,1.2,0), mfrow = c(2,1))
plot(st_geometry(laufr), col = "orange", border = "ivory1", lwd = 0.2)
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
propSymbolsLayer(x = laufr, var = "higosm", col = "darkgreen",
legend.pos = "topright", fixmax = max(laufr$higosm),
legend.title.txt = "Nombre d'équipements",
legend.frame = TRUE)
labelLayer(x = laufr[order(laufr$POP_2011, decreasing = T),][1:5,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.6,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
layoutLayer(title = "Equipements gamme supérieure - OSM",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2019", col = "#990000")
plot(st_geometry(laufr), col = "orange", border = "ivory1", lwd = 0.2)
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
propSymbolsLayer(x = laufr, var = "higbpe", col = "darkgreen",
legend.pos = "n", fixmax = max(laufr$higosm))
labelLayer(x = laufr[order(laufr$POP_2011, decreasing = T),][1:5,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.6,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
layoutLayer(title = "Equipements gamme supérieur - BPE",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2019", col = "#990000")
dev.off()## png
## 2
figure B08 - Complétude OSM (15 équipements)
figure B09 - Equipements gamme proximité - BPE

figure B10 - Equipements gamme intermédiaire - BPE

figure B11 - Equipements gamme supérieur - BPE

La part des équipements de chaque communes dans le total des équipement pour BPE et OSM est ensuite calculé d’abord globalement, puis par gamme.
# Nombre total d'équipements
# part des équipement des communes dans le total
laufr$lowbpepct <- 100 * laufr$lowbpe / sum(laufr$lowbpe)
laufr$midbpepct <- 100 * laufr$midbpe / sum(laufr$midbpe)
laufr$higbpepct <- 100 * laufr$higbpe / sum(laufr$higbpe)
laufr$lowosmpct <- 100 * laufr$lowosm / sum(laufr$lowosm)
laufr$midosmpct <- 100 * laufr$midosm / sum(laufr$midosm)
laufr$higosmpct <- 100 * laufr$higosm / sum(laufr$higosm)
aa <- laufr[order(laufr$lowbpepct, decreasing = T),,drop=T][1:10,c("LAU_LABEL","lowbpepct" )]
bb <- laufr[order(laufr$lowosmpct, decreasing = T),,drop=T][1:10,c("LAU_LABEL","lowosmpct" )]
knitr::kable(cbind(aa,bb), row.names = F, digits = 1, col.names = c("Nom", "Pct équip. prox. BPE", "Nom", "Pct équip. prox. OSM"))| Nom | Pct équip. prox. BPE | Nom | Pct équip. prox. OSM |
|---|---|---|---|
| Metz | 17.1 | Metz | 34.5 |
| Thionville | 5.5 | Thionville | 5.6 |
| Sarreguemines | 3.1 | Forbach | 2.9 |
| Forbach | 2.9 | Sarreguemines | 2.5 |
| Saint-Avold | 2.3 | Longwy | 2.3 |
| Longwy | 1.9 | Montigny-lès-Metz | 2.3 |
| Montigny-lès-Metz | 1.8 | Hagondange | 1.7 |
| Freyming-Merlebach | 1.8 | Hettange-Grande | 1.2 |
| Creutzwald | 1.6 | Saint-Avold | 1.1 |
| Yutz | 1.4 | Farébersviller | 1.0 |
cc <- laufr[order(laufr$midbpepct, decreasing = T),,drop=T][1:10,c("LAU_LABEL","midbpepct" )]
dd <- laufr[order(laufr$midosmpct, decreasing = T),,drop=T][1:10,c("LAU_LABEL","midosmpct" )]
knitr::kable(cbind(cc,dd), row.names = F, digits = 1, col.names = c("Nom", "Pct équip. inter. BPE", "Nom", "Pct équip. inter. OSM"))| Nom | Pct équip. inter. BPE | Nom | Pct équip. inter. OSM |
|---|---|---|---|
| Metz | 21.5 | Metz | 28.8 |
| Thionville | 9.7 | Thionville | 12.2 |
| Sarreguemines | 5.5 | Forbach | 4.0 |
| Forbach | 3.6 | Longwy | 2.9 |
| Saint-Avold | 2.8 | Saint-Avold | 2.4 |
| Talange | 2.7 | Longeville-lès-Saint-Avold | 2.2 |
| Longwy | 2.0 | Augny | 2.0 |
| Mont-Saint-Martin | 2.0 | Terville | 2.0 |
| Creutzwald | 1.9 | Sarreguemines | 1.7 |
| Moulins-lès-Metz | 1.9 | Moulins-lès-Metz | 1.6 |
ee <- laufr[order(laufr$higbpepct, decreasing = T),,drop=T][1:10,c("LAU_LABEL","higbpepct" )]
ff <- laufr[order(laufr$higosmpct, decreasing = T),,drop=T][1:10,c("LAU_LABEL","higosmpct" )]
knitr::kable(cbind(ee,ff), row.names = F, digits = 1, col.names = c("Nom", "Pct équip. sup. BPE", "Nom", "Pct équip. sup. OSM"))| Nom | Pct équip. sup. BPE | Nom | Pct équip. sup. OSM |
|---|---|---|---|
| Metz | 14.8 | Thionville | 20.8 |
| Thionville | 11.1 | Metz | 14.6 |
| Forbach | 7.4 | Amnéville | 8.3 |
| Sarreguemines | 7.4 | Serémange-Erzange | 6.2 |
| Conflans-en-Jarnisy | 3.7 | J<U+009C>uf | 4.2 |
| Homécourt | 3.7 | Forbach | 4.2 |
| Jarny | 3.7 | Maizières-lès-Metz | 4.2 |
| J<U+009C>uf | 3.7 | Conflans-en-Jarnisy | 2.1 |
| Longwy | 3.7 | Homécourt | 2.1 |
| Piennes | 3.7 | Longwy | 2.1 |
Les équipements par niveaux de gamme sont maintenant dénombrés sur la grille régulière de 3km créée plus haut. Ceci afin de disposer d’une autre lecture territoriale du nombre d’équipements présents dans chacune des deux bases de données.
Comme avec les communes françaises, les équipements sont dénombrés par niveau de gamme, puis cartographiés.
## png
## 2
## png
## 2
## png
## 2
figure B12 à B14 - Equipements et gammes - OSM



Les différences absolue et relative du nombre d’équipements par niveau de gamme entre les bases OSM et BPE sont ensuite calculées puis cartographiées. Pour la visualisation des écarts relatifs, la taille du figuré est proportionnelle au nombre d’équipements BPE et OSM présent dans le carreau de grille. Ceci afin de restituer les effets de taille très hétérogènes sur l’espace d’étude.
# Ecart absolu
gridfr$lowdif <- gridfr$lowosm - gridfr$lowbpe
gridfr$middif <- gridfr$midosm - gridfr$midbpe
gridfr$higdif <- gridfr$higosm - gridfr$higbpe
# Suppression valeurs égales à 0
low <- gridfr[gridfr$lowdif != 0,]
mid <- gridfr[gridfr$middif != 0,]
hig <- gridfr[gridfr$higdif != 0,]
# Ecart relatif
low$lowrel <- (low$lowosm - low$lowbpe)/ low$lowbpe * 100
mid$midrel <- (mid$midosm - mid$midbpe)/ mid$midbpe * 100
hig$higrel <- (hig$higosm - hig$higbpe)/ hig$higbpe * 100
low$stock <- low$lowbpe + low$lowosm
mid$stock <- mid$midbpe + mid$midosm
hig$stock <- hig$higbpe + hig$higosm
# Gestion des valeursz infinies (pas d'équipement BPE)
low$lowrel[low$lowrel == Inf] <- 1000
mid$midrel[mid$midrel == Inf] <- 1000
hig$higrel[hig$higrel == Inf] <- 1000
png(file = "fig/B15_grid_3kdiff_proximite.png",width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
## Carto difference gamme proximité
breaks <- c(min(low$lowrel), -75, -50, -25, -10, -5, 0, max(low$lowrel))
col <- carto.pal(pal1 = "blue.pal", pal2 = "pink.pal", n1 = 6, n2 = 1)
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1)
propSymbolsChoroLayer(x = low, var = "stock", var2 = "lowrel", col = col,
inches = 0.2, breaks = breaks, symbols = "square", border = "white",
legend.var.pos = "n", legend.var2.pos = "n", add = TRUE)
legendSquaresSymbols(pos = "top",title.txt = "Nombre d'équipements\nOSM + BPE",
title.cex = 0.7, cex = 1,border = "black", lwd = 1, values.cex = 0.6,
var = c(max(low$stock), min(low$stock)), inches = 0.2, col = "grey",
frame = TRUE)
legendChoro(pos = "topright", title.txt = "OSM - BPE / BPE * 100 ",
title.cex = 0.7, values.cex = 0.6, breaks = breaks, col = col, cex = 0.6,
nodata.txt = "Pas d'équipement", frame = TRUE, border = "black")
layoutLayer(title = "Différence relative d'équipements OSM/BPE - Gamme de proximité",
sources = "BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
png(file = "fig/B16_grid_3kdiff_intermediaire.png",width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
## Carto difference gamme intermédiaire
breaks <- c(min(mid$midrel), -75, -50, -25, -10, -5, 0, max(mid$midrel))
col <- carto.pal(pal1 = "blue.pal", pal2 = "pink.pal", n1 = 6, n2 = 1)
# Différences relatives
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1)
propSymbolsChoroLayer(x = mid, var = "stock", var2 = "midrel",
col = col, inches = 0.2, breaks = breaks, symbols = "square",
border = "white", add = TRUE, legend.var.pos = "n", legend.var2.pos = "n")
legendSquaresSymbols(pos = "top",title.txt = "Nombre d'équipements\nOSM + BPE",
title.cex = 0.7, cex = 1,border = "black", lwd = 1, values.cex = 0.6,
var = c(max(mid$stock), min(mid$stock)), inches = 0.2, col = "grey",
frame = TRUE)
legendChoro(pos = "topright", title.txt = "OSM - BPE / BPE * 100 ",
title.cex = 0.7, values.cex = 0.6, breaks = breaks, col = col, cex = 0.6,
nodata.txt = "Pas d'équipement", frame = TRUE, border = "black")
layoutLayer(title = "Différence relative d'équipements OSM/BPE - Gamme intermédiaire",
sources = "BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
png(file = "fig/B17_grid_3kdiff_superieur.png",width = sizes[1], height = sizes[2],
res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
## Carto difference gamme supérieure
breaks <- c(min(hig$higrel), 0, 50, 75, 100, max(hig$higrel))
col <- carto.pal(pal1 = "blue.pal", pal2 = "pink.pal", n1 = 1, n2 = 4)
# Différences relatives
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1)
propSymbolsChoroLayer(x = hig, var = "stock", var2 = "higrel",
col = col, inches = 0.2, breaks = breaks, symbols = "square",
border = "white", legend.var.pos = "n",
legend.var2.pos = "n", add = T)
legendSquaresSymbols(pos = "top",title.txt = "Nombre d'équipements\nOSM + BPE",
title.cex = 0.7, cex = 1,border = "black", lwd = 1,
values.cex = 0.6,
var = c(max(hig$stock), min(hig$stock)),
inches = 0.2, col = "grey",
frame = TRUE)
legendChoro(pos = "topright", title.txt = "OSM - BPE / BPE * 100 ",
title.cex = 0.7, values.cex = 0.6, breaks = breaks, col = col, cex = 0.6,
nodata.txt = "Pas d'équipement", frame = TRUE, border = "black")
layoutLayer(title = "Différence relative d'équipements OSM/BPE - Gamme supérieure",
sources = "BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
figure B15 à B17 - Différence relative d’équipements OSM/BPE - par gamme



L’analyse se poursuit avec une analyse de complétude par présence ou absence des équipements dans les communes de l’espace d’étude. Pour chacun des 15 équipements sélectionnés, on cherche à coder par “1” une commune qui dispose d’au moins un équipement, et 0 celle qui n’en dispose pas.
L’idée consiste tout d’abord à évaluer le nombre d’équipements différents présents par commune pour les bases OSM et BPE. Ensuite et par équipement, nous proposons d’identifier les communes qui disposent de l’équipement pour les deux bases de données, aucune des deux ou une des deux bases. L’analyse se termine par l’identification des seuils démographiques d’apparition (25% des communes disposent de l’équipement) et de généralisation (75% des communes disposent de l’équipement) pour chacun des équipements.
Pour pouvoir mener à bien ces analyses, un travail préalable de préparation des données est nécessaire. On commence par dénombrer chaque équipement dans les communes françaises pour OSM et la BPE.
# Compter le nombre d'équipements BPE - OSM par commune française
for (i in levels(osm$categorie)) {
laufr[[paste0(i,"_osm")]] <- CountPt(x = laufr, pt = osm, var = "categorie", equip = i)
}
for (i in levels(bpe$categorie)) {
laufr[[paste0(i,"_bpe")]] <- CountPt(x = laufr, pt = bpe, var = "categorie", equip = i)
}Sur la base de ce dénombrement, on crée ensuite une typologie pour identifier les communes qui disposent d’un équipement dans la BPE et OSM, une des deux bases (et laquelle) ou dans aucune des deux. On calcule aussi le nombre d’équipements différents par commune.
# Retirer les géométries et sélectionner les bonnes colonnes
tmp <- st_set_geometry(laufr[,c(which(colnames(laufr) == "GISCO_ID"),
which(colnames(laufr) == "alimentation_osm"):
which(colnames(laufr) == "vetements_bpe"))], NULL)
# Typologie de présence
## Présence OSM = 2
for (i in colnames(tmp[which(colnames(tmp) == "alimentation_osm") : which(colnames(tmp) == "vetements_osm")])){
tmp[[paste0(i,"_pres")]] <- ifelse(tmp[[i]] > 0, 2, 0)
}
## Présence BPE = 4
for (i in colnames(tmp[which(colnames(tmp) == "alimentation_bpe") : which(colnames(tmp) == "vetements_bpe")])){
tmp[[paste0(i,"_pres")]] <- ifelse(tmp[[i]] > 0, 4, 0)
}
## Présence BPE + OSM
for (i in which(colnames(tmp) == "alimentation_osm") : which(colnames(tmp) == "vetements_osm")){
tmp[[paste0(substr(colnames(tmp)[i], 1, nchar(colnames(tmp)[i])-4),"_pres2")]] <- tmp[,i+30] + tmp[,i+45]
}
## Renommer les "labels"
for (i in which(colnames(tmp) == "alimentation_pres2"):which(colnames(tmp) =="vetements_pres2")){
tmp[[substr(colnames(tmp)[i],1, nchar(colnames(tmp)[i])-6)]] <- cut(tmp[,i],
breaks = c(0, 2, 4, 6, 7),
include.lowest = TRUE,
right = FALSE,
labels = c("Aucun des deux",
"OSM",
"BPE",
"OSM et BPE"))
}
# Nombre d'équipements différents par commune
# Présence OSM = 1
for (i in colnames(tmp[which(colnames(tmp) == "alimentation_osm") : which(colnames(tmp) == "vetements_osm")])){
tmp[[paste0(i,"_pres")]] <- ifelse(tmp[[i]] > 0, 1, 0)
}
## Présence BPE = 1
for (i in colnames(tmp[which(colnames(tmp) == "alimentation_bpe") : which(colnames(tmp) == "vetements_bpe")])){
tmp[[paste0(i,"_pres")]] <- ifelse(tmp[[i]] > 0, 1, 0)
}
tmp$osmEq <- apply(tmp[,which(colnames(tmp) == "alimentation_osm_pres"): which(colnames(tmp) == "vetements_osm_pres")], 1, sum)
tmp$bpeEq <- apply(tmp[,which(colnames(tmp) == "alimentation_bpe_pres"): which(colnames(tmp) == "vetements_bpe_pres")], 1, sum)
# Synthèse présence - absence tout équipement
# Présence OSM
tmp$totalOSM <- ifelse(tmp$osmEq > 0, 2, 0)
tmp$totalBPE <- ifelse(tmp$bpeEq > 0, 4, 0)
tmp$total <- tmp$totalBPE + tmp$totalOSM
tmp$total <- cut(tmp$total, breaks = c(0, 2, 4, 6, 7),
include.lowest = TRUE, right = FALSE,
labels = c("Aucun des deux", "OSM", "BPE", "OSM et BPE"))
# Jointure des colonnes utiles avec les géométries de référence
laufr <- merge(laufr, tmp[,c(1, which(colnames(tmp) == "alimentation"):length(tmp))], by.x = "GISCO_ID", by.y = "GISCO_ID",
all.x = TRUE)Le nombre d’équipements différents par commune est extrait du jeu de données et mis en forme afin de créer un diagramme en bâton qui représente la part des communes qui disposent de 0 à 15 équipements.
# Extraction du nombre d'équipements différents par commune pour OSM et BPE
equipO <- data.frame(laufr[,c("osmEq"), drop = TRUE])
equipB <- data.frame(laufr[,c("bpeEq"), drop = TRUE])
# Préparation des données
equipO$variable <- "OSM"
equipB$variable <- "BPE"
colnames(equipO)[1] <- "equip"
colnames(equipB)[1] <- "equip"
equip <- rbind(equipO, equipB)
count <- table(equip$variable, equip$equip)
count <- prop.table(count, 1) * 100
# Graphique - Barplot
png(file = "fig/B18_presence_barplot.png", width = 800, height = 600, res = 120)
par(mar=c(4,4,2,0), cex.main = 0.9, cex.lab = 0.8, cex.axis = 0.7, mfrow = c(1,1))
barplot(count, main= NULL,
xlab = "Nombre d'équipements différents (max = 15)",
ylab = "Part du nombre de communes (%)",
las = 2,
space = rep(c(1,0), nlevels(factor(equip$equip))),
border = NA,
col= c("#BEAED4", "#7FC97F"),
ylim = c(0,70),
beside = TRUE)
abline (h = seq(0, 70, 5), col = "#00000060", lwd = 0.5, lty = 3)
legend(x = "topright", legend = rownames(count) , cex=0.8,
fill= c("#BEAED4", "#7FC97F"), bty="n")
dev.off()## png
## 2
figure B18 - Nombre d’équipements différents

Ces valeurs sont ensuite cartographiées pour chacune des deux bases de données.
png(file = "fig/B19_presence_somme.png",width = sizes[1], height = hauteur,
res = res)
par(mar = c(0,0,1.2,0), mfrow = c(2,1))
breaks <- c(0,1,5,10,15)
col <- carto.pal("red.pal", n1 = 4)
choroLayer(laufr, var = "osmEq", legend.pos = "n", breaks = breaks, col = col, border = "white")
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
labelLayer(x = laufr[order(laufr$POP_2011, decreasing = T),][1:10,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.4,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
legendChoro(pos = "topright",
title.txt = "Nombre d'équipements différents\nprésents dans la commune\n(max = 15)",
title.cex = 0.8, values.cex = 0.6, breaks = breaks, col = col, cex = 0.6,
frame = TRUE, border = "black")
layoutLayer(title = "Présence/absence d'équipements (OSM)",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
posscale = c(4002561, 2879651), frame= FALSE, horiz = FALSE,
author = "UMS RIATE, 2019", col = "#990000")
choroLayer(laufr, var = "bpeEq", legend.pos = "n", breaks = breaks, col = col, border = "white")
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
labelLayer(x = laufr[order(laufr$POP_2011, decreasing = T),][1:10,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.4,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
legendChoro(pos = "topright",
title.txt = "Nombre d'équipements différents\nprésents dans la commune\n(max = 15)",
title.cex = 0.8, values.cex = 0.6, breaks = breaks, col = col, cex = 0.6,
frame = TRUE, border = "black")
layoutLayer(title = "Présence/absence d'équipements (BPE)",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
posscale = c(4002561, 2879651), frame= FALSE, horiz = FALSE,
author = "UMS RIATE, 2019", col = "#990000")
dev.off()## png
## 2
figure B19 - Présence/absence d’équipements (BPE)

On reprend la discrétisation proposée dans les représentations cartographiques ci-dessus pour croiser les résultats OSM et BPE. Les communes pas équipées sont celles qui n’ont aucun équipement. Les communes faiblement équipées comptabilisent entre 1 et 5 équipements. Les communes moyennement équipées entre 5 et 10 équipements. Les fortement équipées plus de 10 équipements.
La table ci-dessous représente le nombre de communes pas/faiblement/moyennement/fortement équipées pour les 2 sources de données; mais aussi les situations contradictoires (commune faiblement équipée pour une source de données, fortement pour l’autre).
# Extraction des données
equip <- laufr[,c("osmEq","bpeEq"), drop = TRUE]
# Discrétisation des données en reprenant les seuils de la représentation précédente
equip$osmcl <- cut(equip$osmEq, breaks = breaks, include.lowest = TRUE,
labels = c("pas équipée", "faible","moyenne", "forte"))
equip$bpecl <- cut(equip$bpeEq, breaks = breaks, include.lowest = TRUE,
labels = c("pas équipée", "faible","moyenne", "forte"))
# Dénombrement du nombre de communes et mise en forme
diversite <- table(equip$osmcl,equip$bpecl)
rownames(diversite) <- paste(rownames(diversite),"OSM", sep = "_" )
colnames(diversite) <- paste(colnames(diversite),"BPE", sep = "_" )
# Somme des lignes et des colonnes
total <- apply(diversite, 1, sum)
diversite <- cbind(diversite, total)
total <- apply(diversite, 2, sum)
diversite <- rbind(diversite, total)
# Visualisation de la table
knitr::kable(diversite, row.names = TRUE, digits = 1, padding = 0)| pas équipée_BPE | faible_BPE | moyenne_BPE | forte_BPE | total | |
|---|---|---|---|---|---|
| pas équipée_OSM | 388 | 145 | 18 | 2 | 553 |
| faible_OSM | 6 | 38 | 46 | 13 | 103 |
| moyenne_OSM | 0 | 2 | 16 | 19 | 37 |
| forte_OSM | 0 | 0 | 2 | 8 | 10 |
| total | 394 | 185 | 82 | 42 | 703 |
Cette analyse se poursuit équipement par équipement. On s’intéresse ici au nombre de communes disposant au moins d’un équipement du côté d’OSM, de la BPE, pour les deux bases de données et aucune des deux bases pour les 15 équipements pris séparément.
equip <- colnames(laufr)[which(colnames(laufr) == "alimentation"): which(colnames(laufr) == "total")]
equip <- equip[-c(16:19)]
# Extraction des présences / absences pour les 15 équipements
equip <- laufr[,equip, drop = TRUE]
# Nombre d'occurences
equip <- do.call(cbind, lapply(equip, summary))
equip <- data.frame(t(equip))
row.names(equip)[16] <- "Tout équipement confondu (15)"
knitr::kable(equip, row.names = TRUE, digits = 1, padding = 0)| Aucun.des.deux | OSM | BPE | OSM.et.BPE | |
|---|---|---|---|---|
| alimentation | 576 | 22 | 76 | 29 |
| ameublement | 627 | 4 | 47 | 25 |
| banque | 558 | 2 | 73 | 70 |
| boucherie | 585 | 3 | 93 | 22 |
| boulangerie | 447 | 1 | 157 | 98 |
| chaussures | 651 | 0 | 37 | 15 |
| cinema | 682 | 2 | 6 | 13 |
| coiffeur | 399 | 0 | 252 | 52 |
| electronique | 637 | 8 | 45 | 13 |
| opticien | 622 | 0 | 58 | 23 |
| pharmacie | 555 | 0 | 65 | 83 |
| restaurant | 367 | 15 | 157 | 164 |
| station_service | 604 | 18 | 1 | 80 |
| theatre | 687 | 11 | 1 | 4 |
| vetements | 605 | 0 | 69 | 29 |
| Tout équipement confondu (15) | 239 | 12 | 220 | 232 |
On représente maintenant ces présences/absences pour une sélection de 4 équipements sur une carte afin de pouvoir distinguer quelles sont les communes équipées en fonction de nos 2 sources de référence.
Les communes représentées en rouge sont celles qui disposent de l’équipement dans les deux bases de données. Celles en gris dans aucune des deux bases de données. Les communes qui comptabilise au moins un équipement côté OSM et aucun côté BPE en orange, et en jaune réciproquement.
# Couleurs pour les représentations cartographiques
col <- c("red", "orange", "yellow", "grey")
# une seule image par carte
hauteur <- hauteur / 2
# Banques
png(file = "fig/B20_presence_banque.png",width = sizes[1], height = hauteur , res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
typoLayer(laufr, var = "banque", col = col, legend.pos = "n", lwd = 0.2,
border = "white", legend.values.order = c("OSM et BPE", "OSM", "BPE","Aucun des deux"))
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
legendTypo(categ = c("OSM et BPE","OSM","BPE","Aucun des deux"),
col = col, pos = "topright", frame = TRUE,
cex = 0.6, title.txt = "Au moins un équipement\npar commune dans...")
labelLayer(x = laufr[order(laufr$POP_2011, decreasing = T),][1:5,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.6,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
layoutLayer(title = "Présence comparée de banques dans OSM et la BPE",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame = FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
# Cinemas
png(file = "fig/B21_presence_cinema.png",width = sizes[1], height = hauteur, res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
typoLayer(laufr, var = "cinema", col = col, legend.pos = "n",
border = "white", legend.values.order = c("OSM et BPE", "OSM", "BPE","Aucun des deux"))
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
legendTypo(categ = c("OSM et BPE","OSM","BPE","Aucun des deux"),
col = col, pos = "topright", frame = TRUE,
cex = 0.6, title.txt = "Au moins un équipement\npar commune dans...")
labelLayer(x = laufr[order(laufr$POP_2011, decreasing = T),][1:5,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.6,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
layoutLayer(title = "Présence comparée de cinémas dans OSM et la BPE",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame = FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
# Restaurants
png(file = "fig/B22_presence_restaurant.png",width = sizes[1], height = hauteur, res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
typoLayer(laufr, var = "restaurant", col = col, legend.pos = "n",
border = "white", legend.values.order = c("OSM et BPE", "OSM", "BPE","Aucun des deux"))
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
legendTypo(categ = c("OSM et BPE","OSM","BPE","Aucun des deux"),
col = col, pos = "topright", frame = TRUE,
cex = 0.6, title.txt = "Au moins un équipement\npar commune dans...")
labelLayer(x = laufr[order(laufr$POP_2011, decreasing = T),][1:5,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.6,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
layoutLayer(title = "Présence comparée de cafés et restaurants dans OSM et la BPE",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame = FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
# Pharmacies
col1 <- c("red", "yellow", "grey")
png(file = "fig/B23_presence_pharmacie.png",width = sizes[1], height = hauteur, res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
typoLayer(laufr, var = "pharmacie", col = col1, legend.pos = "n",
border = "white", legend.values.order = c("OSM et BPE", "BPE","Aucun des deux"))
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
legendTypo(categ = c("OSM et BPE","OSM","BPE","Aucun des deux"),
col = col, pos = "topright", frame = TRUE,
cex = 0.6, title.txt = "Au moins un équipement\npar commune dans...")
labelLayer(x = laufr[order(laufr$POP_2011, decreasing = T),][1:5,],
txt = "LAU_LABEL", halo=TRUE, cex = 0.6,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
layoutLayer(title = "Présence comparée de pharmacies dans OSM et la BPE",
sources = "Eurostat, LAU version 2018, BPE, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame = FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
figure B20 à B23 - Présence comparée d’équipements dans OSM et la BPE




On tente ici de caractériser la proportion des communes équipées selon leur poids démographique. Ces approches ont notamment été développées à plusieurs reprises à la fin des années 1990 pour caractériser la présence d’équipements au sein des communes françaises ( Petibon, 2000, Griffond-Boitier, 1995)
Pour chaque équipement, on cherche tout d’abord à évaluer la part des communes équipées pour OSM et la BPE selon des catégories démographiques bornées de la façon suivante : 0, 200, 500, 1000, 2000, 5000, 10000 et population maximale.
La première table présente les résultats pour OSM, la seconde pour la BPE et la troisième la différence de pourcentage observée entre les deux premières tables. Ainsi, la valeur “-50” pour les magasins d’ameublement et les communes de plus de 10000 habitants signifie qu’il y a un écart de 50 % entre la proportion de communes équipées pour cette catégorie de population du côté d’OSM (38.9 % des communes de plus de 10000 habitants disposent d’un magasin d’ameublement côté OSM) et de la BPE (88.9 %).
# Extraction des colonnes utiles : Populations et présence/absence par équipement
selecVar <- c("GISCO_ID", colnames(tmp[which(colnames(tmp) == "alimentation_osm_pres") : which(colnames(tmp) == "vetements_bpe_pres")]))
app <- tmp[,selecVar]
app <- merge(app, laufr[,c("GISCO_ID","POP_2011"), drop = T], by = "GISCO_ID", all.x = TRUE)
# Discrétisation population par classe
app$POP_CAT <- cut(app$POP_2011,
breaks = c(0, 200, 500, 1000, 2000, 5000, 10000, max(app$POP_2011)),
include.lowest = TRUE,
labels = c("0-200 hab.",
"200-500 hab.",
"500-1000 hab.",
"1000-2000 hab.",
"2000-5000 hab.",
"5000-10000 hab.",
"+ 10000 hab."))
# Jeu de données OSM
appO <- app[,c(2:16,32:33)]
# Nombre de communes par catégorie de population
tmp2 <- aggregate(appO[,c(1:15)],
by = list(categ = appO$POP_CAT),
FUN = length)
# Nombre de communes équipées par categorie de population
tmp1 <- aggregate(appO[,c(1:15)],
by = list(categorie = appO$POP_CAT),
FUN = sum)
# Part des communes équipées par catégorie de population
tmp3 <- tmp1[, -1] /tmp2[, -1] *100
# Regroupement d'informations
appO <- cbind(tmp1[,1],tmp2[,2],tmp3)
colnames(appO) <- c("OSM", "NB_COM.","Alimentation", "Ameublement", "Banque",
"Boucherie", "Boulangerie", "Chaussure", "Cinéma","Coiffeur",
"Electronique","Opticien","Pharmacie","Restaurant","Station_service",
"Théâtre", "Vêtements")# Jeu de données BPE
appB <- app[,c(17:33)]
# Nombre de communes par categorie de population
tmp2 <- aggregate(appB[,c(1:15)],
by = list(categorie = appB$POP_CAT),
FUN = length)
# Nombre de communes équipées par categorie de population
tmp1 <- aggregate(appB[,c(1:15)],
by = list(categorie = appB$POP_CAT),
FUN = sum)
# Part des communes équipées par catégorie de population
tmp3 <- tmp1[, -1] /tmp2[, -1] *100
# Regroupement d'informations
appB <- cbind(tmp1[,1],tmp2[,2],tmp3)
colnames(appB) <- c("BPE", "NB_COM.","Alimentation", "Ameublement", "Banque",
"Boucherie", "Boulangerie", "Chaussure", "Cinéma","Coiffeur",
"Electronique","Opticien","Pharmacie","Restaurant","Station_service",
"Théâtre", "Vêtements")# OSM - BPE
appDif <- appO[, -(1:2)] - appB[, -(1:2)]
appDif <- cbind(tmp1[,1], appDif)
colnames(appDif)[1] <- "OSM - BPE (%)"
knitr::kable(appO, row.names = TRUE, digits = 1, padding = 0)| OSM | NB_COM. | Alimentation | Ameublement | Banque | Boucherie | Boulangerie | Chaussure | Cinéma | Coiffeur | Electronique | Opticien | Pharmacie | Restaurant | Station_service | Théâtre | Vêtements | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0-200 hab. | 126 | 0.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 3.2 | 0.8 | 0.0 | 0.0 |
| 2 | 200-500 hab. | 200 | 1.0 | 1.0 | 0.0 | 1.5 | 1.5 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 7.0 | 1.0 | 0.0 | 0.0 |
| 3 | 500-1000 hab. | 154 | 3.9 | 1.3 | 1.3 | 1.3 | 6.5 | 0.0 | 0.0 | 1.3 | 1.3 | 0.0 | 1.9 | 22.7 | 7.1 | 0.0 | 1.9 |
| 4 | 1000-2000 hab. | 98 | 9.2 | 2.0 | 16.3 | 1.0 | 25.5 | 0.0 | 0.0 | 8.2 | 1.0 | 0.0 | 16.3 | 38.8 | 17.3 | 1.0 | 2.0 |
| 5 | 2000-5000 hab. | 79 | 19.0 | 12.7 | 32.9 | 12.7 | 40.5 | 6.3 | 7.6 | 29.1 | 8.9 | 11.4 | 45.6 | 60.8 | 39.2 | 2.5 | 8.9 |
| 6 | 5000-10000 hab. | 28 | 32.1 | 21.4 | 53.6 | 10.7 | 57.1 | 10.7 | 7.1 | 35.7 | 17.9 | 17.9 | 53.6 | 85.7 | 67.9 | 17.9 | 25.0 |
| 7 | + 10000 hab. | 18 | 50.0 | 38.9 | 72.2 | 33.3 | 72.2 | 38.9 | 38.9 | 50.0 | 33.3 | 50.0 | 72.2 | 88.9 | 94.4 | 38.9 | 55.6 |
| BPE | NB_COM. | Alimentation | Ameublement | Banque | Boucherie | Boulangerie | Chaussure | Cinéma | Coiffeur | Electronique | Opticien | Pharmacie | Restaurant | Station_service | Théâtre | Vêtements | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0-200 hab. | 126 | 1.6 | 0.8 | 0.0 | 2.4 | 1.6 | 0.0 | 0.0 | 6.3 | 0.0 | 0.0 | 0.0 | 7.9 | 0.0 | 0.0 | 4.0 |
| 2 | 200-500 hab. | 200 | 1.5 | 2.0 | 1.5 | 4.5 | 8.5 | 0.5 | 0.0 | 14.5 | 0.0 | 0.5 | 1.0 | 22.0 | 0.5 | 0.0 | 2.0 |
| 3 | 500-1000 hab. | 154 | 6.5 | 4.5 | 9.7 | 9.1 | 32.5 | 1.9 | 0.0 | 44.8 | 4.5 | 2.6 | 4.5 | 50.6 | 3.9 | 0.0 | 7.1 |
| 4 | 1000-2000 hab. | 98 | 19.4 | 7.1 | 29.6 | 19.4 | 67.3 | 2.0 | 0.0 | 76.5 | 6.1 | 5.1 | 29.6 | 70.4 | 15.3 | 0.0 | 6.1 |
| 5 | 2000-5000 hab. | 79 | 40.5 | 25.3 | 64.6 | 39.2 | 94.9 | 21.5 | 6.3 | 98.7 | 16.5 | 39.2 | 82.3 | 94.9 | 34.2 | 0.0 | 41.8 |
| 6 | 5000-10000 hab. | 28 | 78.6 | 60.7 | 100.0 | 82.1 | 100.0 | 53.6 | 17.9 | 100.0 | 71.4 | 82.1 | 100.0 | 100.0 | 57.1 | 3.6 | 82.1 |
| 7 | + 10000 hab. | 18 | 94.4 | 88.9 | 94.4 | 88.9 | 94.4 | 77.8 | 50.0 | 94.4 | 66.7 | 94.4 | 94.4 | 94.4 | 88.9 | 22.2 | 88.9 |
| OSM - BPE (%) | Alimentation | Ameublement | Banque | Boucherie | Boulangerie | Chaussure | Cinéma | Coiffeur | Electronique | Opticien | Pharmacie | Restaurant | Station_service | Théâtre | Vêtements | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0-200 hab. | -0.8 | -0.8 | 0.0 | -2.4 | -1.6 | 0.0 | 0.0 | -6.3 | 0.0 | 0.0 | 0.0 | -4.8 | 0.8 | 0.0 | -4.0 |
| 2 | 200-500 hab. | -0.5 | -1.0 | -1.5 | -3.0 | -7.0 | -0.5 | 0.0 | -14.5 | 0.0 | -0.5 | -1.0 | -15.0 | 0.5 | 0.0 | -2.0 |
| 3 | 500-1000 hab. | -2.6 | -3.2 | -8.4 | -7.8 | -26.0 | -1.9 | 0.0 | -43.5 | -3.2 | -2.6 | -2.6 | -27.9 | 3.2 | 0.0 | -5.2 |
| 4 | 1000-2000 hab. | -10.2 | -5.1 | -13.3 | -18.4 | -41.8 | -2.0 | 0.0 | -68.4 | -5.1 | -5.1 | -13.3 | -31.6 | 2.0 | 1.0 | -4.1 |
| 5 | 2000-5000 hab. | -21.5 | -12.7 | -31.6 | -26.6 | -54.4 | -15.2 | 1.3 | -69.6 | -7.6 | -27.8 | -36.7 | -34.2 | 5.1 | 2.5 | -32.9 |
| 6 | 5000-10000 hab. | -46.4 | -39.3 | -46.4 | -71.4 | -42.9 | -42.9 | -10.7 | -64.3 | -53.6 | -64.3 | -46.4 | -14.3 | 10.7 | 14.3 | -57.1 |
| 7 | + 10000 hab. | -44.4 | -50.0 | -22.2 | -55.6 | -22.2 | -38.9 | -11.1 | -44.4 | -33.3 | -44.4 | -22.2 | -5.6 | 5.6 | 16.7 | -33.3 |
Après avoir étudié la proportion de communes équipées par catégorie de population, on s’intéresse maintenant aux seuils d’apparition et de généralisation, notamment utilisés dans les travaux de Barzak et Hilal dans le rapport rétraction.
Le seuil d’apparition mesure le nombre d’habitants à partir duquel 25% des communes possèdent le service ». C’est à dire que 25% des communes équipées ont une population inférieure ou égale à cette taille. Pour l’INSEE ce seuil est fixé à 50%.
Le seuil de généralisation mesure le nombre d’habitants à partir duquel 75% des communes possèdent le service. Pour l’INSEE ce seuil est fixé à 90%".
Pour obtenir ces seuils, on ordonne les communes de l’espace d’étude par poids démographique (population 2011), auxquelles sont rattachées les présences et absences d’équipements codées en booléen (1/0). Ensuite et pour chaque commune, on calcule la part des communes plus peuplées (incluant cette commune) qui disposent de cet équipement.
Ainsi, pour la valeur la moins peuplées, cette valeur correspond à la part de communes équipées de l’ensemble de l’espace d’étude, puisque le calcul comprend l’ensemble des communes.
En revanche pour la valeur maximale (commune la plus peuplée), ce calcul ne prend en compte que cette commune, puisque qu’aucune commune n’est plus peuplée que celle-ci. Pour la commune la plus peuplée, la valeur de cet indice ne peut donc être égal qu’à 0 (commune non équipée) ou 100 (100 % des communes équipées).
A partir de ces valeurs, on peut produire des représentations graphiques qui montrent la part de communes équipées (axe Y) en fonction du poids démographique (communes peuplées de plus de tant d’habitants, en X). Le fait d’associer sur le même graphique les résultats pour OpenStreetMap et la BPE permet d’apprécier l’écart de complétude de cette base de données (écart entre les courbes) et les seuils démographiques existant (et comparables ou non) qui structurent la présence ou non des équipements dans la base de données.
On cherche enfin à extraire les valeurs d’apparition et de généralisation (population communale à partir de laquelle 25 % et 75 % des communes sont équipées) et de généralisation. En substance sur le graphique, cette valeur correspond à la première fois que les courbes OSM et BPE franchissent les seuils 25 % et 75 % sur le graphique. Pour certains équipements (restaurants par exemple), le seuil d’apparition est déjà atteint avec la commune la moins peuplée. On peut alors comparer sur un même graphique les valeur de ces seuils d’appartion pour OSM et la BPE pour l’ensemble des 15 équipements sélectionnés.
# Création Dataframe pour synthétiser les résultats (seuil apparition et généralisation)
equip <- c("Alimentation", "Ameublement", "Banque", "Boucherie", "Boulangerie",
"Chaussure","Cinéma","Coiffeur","Electronique","Opticien",
"Pharmacie","Restaurant","Station_service", "Théâtre", "Vêtements")
gamme <- c("Proximite", "Intermediaire", "Intermediaire", "Proximite",
"Proximite", "Intermediaire", "Superieure", "Proximite",
"Intermediaire", "Intermediaire", "Proximite", "Proximite",
"Intermediaire", "Superieure", "Intermediaire")df <- data.frame(equip, gamme)
df$OSM25 <- NA
df$BPE25 <- NA
df$OSM75 <- NA
df$BPE75 <- NA
# Calculs OSM
# Sélectionner présences/absences et population 2011
appO <- app[,c(2:16,32)]
# Ordonner sur la population
appO <- appO[order(appO$POP_2011),]
# Calcul de la part des communes équipées d'au moins X habitants
# > Somme des 1 à partir de chaque ligne que l'on divise par le nombre total de communes
# davantage peuplées (en incluant la commune en question)
for (i in colnames(appO[1:15])) {
for(j in 1:nrow(appO)) {
appO[[paste0(i,"_cum")]][j] <- sum(appO[[i]][j:nrow(appO)]) / (nrow(appO) - (j-1)) * 100
}
}
# Extraction seuil minimal 25 %
for (i in 17:31) {
popmin <- min(appO[appO[[i]] > 25, c("POP_2011")])
df$OSM25[i-16] <- popmin
}
# Extraction seuil minimal 75 %
for (i in 17:31) {
popmin <- min(appO[appO[[i]] > 75, c("POP_2011")])
df$OSM75[i-16] <- popmin
}
# Calculs BPE (on reproduit la même opération)
# Sélection et tri
appB <- app[,c(17:32)]
appB <- appB[order(appB$POP_2011),]
# Part des communes équipées
for (i in colnames(appB[1:15])) {
for(j in 1:nrow(appB)) {
appB[[paste0(i,"_cum")]][j] <- sum(appB[[i]][j:nrow(appB)]) / (nrow(appB) - (j-1)) * 100
}
}
# Extractions seuils 25 et 75
for (i in 17:31) {
popmin <- min(appB[appB[[i]] > 25, c("POP_2011")])
df$BPE25[i-16] <- popmin
}
for (i in 17:31) {
popmin <- min(appB[appB[[i]] > 75, c("POP_2011")])
df$BPE75[i-16] <- popmin
}
# Représentation graphique - boucle sur les 15 équipements
# pour les noms de fichiers on enlève les accents et on met en minuscules
for (i in 1:15){
png(file = paste0("fig/B24_apparition_",chartr("éèëêÉÈËÊàÀçÇâ", "eeeeEEEEaAcCa",tolower(df[i,1])),".png"), width = 800, height = 600, res = 120)
options(scipen = 5)
# Représentations valeurs OSM / BPE (lignes)
plot(appO$POP_2011, appO[,i+16], log = "x",
type = "l", col= "red", main = paste0("Seuils démographiques d'apparition - ", df[i,1]),
cex.lab = 0.8, cex.main = 0.9,
xlab = "Communes peuplées de X hab. et plus", ylab = "proportion de communes équipées (%)",
xlim = c(500,100000), ylim = c(0,100))
lines(appB$POP_2011, appB[,i+16], type = "l", col = "blue")
# Mise en page (affichage valeurs, lignes de repères etc)
abline (h = seq(0, 100, 5), col = "#00000060", lwd = 0.5, lty = 3)
abline (h = 25, col = "black", lwd = 1, lty = 3)
points(df[i,3], 25, col = "darkred", pch = 20)
text (df[i,3], 20, labels = round(df[i,3],0), cex = 0.7, col = "darkred")
points(df[i,4], 25, col = "darkblue", pch = 20)
text (df[i,4], 20, labels = round(df[i,4],0), cex = 0.7, col = "darkblue")
abline (h = 75, col = "black", lwd = 1, lty = 3)
points(df[i,5], 75, col = "darkred", pch = 20)
text (df[i,5], 70, labels = round(df[i,5],0), cex = 0.7, col = "darkred")
points(df[i,6], 75, col = "darkblue", pch = 20)
text (df[i,6], 70, labels = round(df[i,6],0), cex = 0.7, col = "darkblue")
legend("topleft", c("OSM","BPE"), col = c("red","blue"), pch = 1, cex = 0.8)
text(60000, 28, "Seuil d'apparition", cex = 0.6, font = 3)
text(60000, 78, "Seuil de généralisation", cex = 0.6, font = 3)
dev.off()
}
# Table de synthèse des résultats
knitr::kable(df, row.names = TRUE, digits = 1, padding = 0)| equip | gamme | OSM25 | BPE25 | OSM75 | BPE75 | |
|---|---|---|---|---|---|---|
| 1 | Alimentation | Proximite | 1561.2 | 442.9 | 21392.6 | 3841.3 |
| 2 | Ameublement | Intermediaire | 3095.5 | 858.2 | 21392.6 | 7127.3 |
| 3 | Banque | Intermediaire | 716.7 | 207.7 | 9396.9 | 1888.1 |
| 4 | Boucherie | Proximite | 8532.2 | 404.4 | 21392.6 | 3275.2 |
| 5 | Boulangerie | Proximite | 487.5 | 32.0 | 9485.3 | 734.2 |
| 6 | Chaussure | Intermediaire | 7603.3 | 1192.8 | 21392.6 | 10175.9 |
| 7 | Cinéma | Superieure | 6442.8 | 3747.3 | 21392.6 | 21392.6 |
| 8 | Coiffeur | Proximite | 1144.1 | 32.0 | 16315.4 | 576.4 |
| 9 | Electronique | Intermediaire | 4037.6 | 1130.0 | 21392.6 | 12376.0 |
| 10 | Opticien | Intermediaire | 2956.7 | 635.2 | 16214.3 | 2930.5 |
| 11 | Pharmacie | Proximite | 588.7 | 183.3 | 8038.2 | 1278.2 |
| 12 | Restaurant | Proximite | 32.0 | 32.0 | 2878.8 | 568.0 |
| 13 | Station_service | Intermediaire | 496.4 | 645.6 | 4474.7 | 8038.2 |
| 14 | Théâtre | Superieure | 4037.6 | 12376.0 | 41025.0 | 21392.6 |
| 15 | Vêtements | Intermediaire | 2956.7 | 553.5 | 13404.8 | 3515.4 |
figure B24 à B29 - Seuils d’apparition équipements de proximité






figure B30 à B36 - Seuils d’apparition équipements intermédiaires







figure B37 à B38 - Seuils d’apparition équipements supérieurs


png(file = "fig/B39_synthese25.png",width = sizes[1], height = hauteur, res = res)
par(mar=c(4,4,0,0))
plot(x = df$OSM25, y = df$BPE25, log = "xy",
xlim = c(10,50000),
ylim = c(10, 50000),
col = c("red","orange","black")[df$gamme], pch = 20,
xlab = "Seuil apparition OSM (25%)",
ylab = "Seuil apparition BPE (25%)",
main = NA,
cex.lab = 0.8)
abline (h = c(1:10 %o% 10^(1:4)), col = "#d4d4d4", lwd = 0.2, lty = 3)
abline (v = c(1:10 %o% 10^(1:4)), col = "#d4d4d4", lwd = 0.2, lty = 3)
abline (h = c(1:5 %o% 10^(1:4)), col = "#7a7a7a", lwd = 0.5, lty = 3)
abline (v = c(1:5 %o% 10^(1:4)), col = "#7a7a7a", lwd = 0.5, lty = 3)
abline(coef = c(0,1))
text(df$OSM25, df$BPE25, df$equip, cex = 0.5, pos = 4)
dev.off()## png
## 2
figure B39 - Synthèse : seuils d’apparition des équipements OSM et BPE

png(file = "fig/B40_synthese75.png",width = sizes[1], height = hauteur, res = res)
par(mar=c(4,4,0,0))
plot(x = df$OSM75, y = df$BPE75, log = "xy",
xlim = c(1000,50000),
ylim = c(1000, 50000),
col = c("red","orange","black")[df$gamme], pch = 20,
xlab = "Seuil apparition OSM (75%)",
ylab = "Seuil apparition BPE (75%)",
main = NA,
cex.lab = 0.8)
abline (h = c(1:10 %o% 10^(1:4)), col = "#d4d4d4", lwd = 0.2, lty = 3)
abline (v = c(1:10 %o% 10^(1:4)), col = "#d4d4d4", lwd = 0.2, lty = 3)
abline (h = c(1:5 %o% 10^(1:4)), col = "#7a7a7a", lwd = 0.5, lty = 3)
abline (v = c(1:5 %o% 10^(1:4)), col = "#7a7a7a", lwd = 0.5, lty = 3)
abline(coef = c(0,1))
text(df$OSM75, df$BPE75, df$equip, cex = 0.5, pos = 4)
dev.off()## png
## 2
figure B40 - Synthèse : seuils d’apparition des équipements OSM et BPE

Pour conclure l’analyse des écarts entre les bases BPE et OSM, une synthèse des observations sur les présences d’équipements et leur seuil d’apparition peut être conduite à l’aide de méthodes d’analyses multivariées. Il s’agit d’identifier les principales corrélations entre équipements présents, puis de regrouper les communes qui présentent les combinaisons les plus ressemblantes, en termes de diversité d’équipements et de niveau de rareté. Autrement dit, on cherche à comparer les communes sur la base des combinaisons de modalités de présence-absence (0/1) d’équipements qu’elles ont en commun (Husson et al, 2016) : elles seront regroupées si elles ont en commun un grand nombre de modalités ou bien si elles ont en commun une modalité rare (par exemple présence d’un cinéma), quelles que soient leurs différences par ailleurs.
Deux méthodes d’analyse multivariée sont successivement mobilisées (Husson et al., 2016 ): pour chacune des bases BPE et OSM, une Analyse en Composantes Multiples (ACM) est d’abord réalisée afin de transformer les variables qualitatives (modalités de présence ou d’absence d’équipement) en variables continues (coordonnées des communes sur les axes factoriels décrivant les principales corrélations entre modalités). Ces nouvelles valeurs sont ensuite traitées à partir d’une Classification Ascendante Hiérarchique (CAH) pour faire ressortir les principaux profils de communes. La comparaison des typologies de communes issues de la BPE et d’OSM est menée à partir d’une sélection restreinte de 7 équipements, qui ressortent des analyses de complétude comme les mieux renseignés dans OSM : les cafés-restaurants, les pharmacies et les stations-services pour les équipements les plus fréquents, les banques, les magasins d’électronique et les théâtres à un niveau intermédiaire, les cinémas en tant qu’équipement plus rare.
Pour chaque base, BPE et OSM, le tableau de données en entrée comprend en ligne les communes et en colonne les 7 équipements sélectionnés décrits par les modalités 1 (présence) ou 0 (absence). Ce tableau est transformé en tableau disjonctif complet, avec autant de variables que de modalités, soit 14 variables descriptives. Une ACM est d’abord réalisée pour transformer ces variables qualitatives en variables continues à l’aide du package Factominer (la création du tableau disjonctif complet est intégrée à la procédure de l’ACM dans Factominer). Les coordonnées des individus sur les composantes principales sont ensuite utilisées au sein d’une Classification Ascendante Hiérarchique.
L’analyse porte sur les 7 équipements les mieux renseignés dans OSM. On s’intéresse ici aux présences / absences des équipements (codées 1/0) selon les sources des données.
# Sélection des variables d"intérêt
row.names(tmp) <- tmp$GISCO_ID
#BPE
Equibpe7 <- tmp[,c("banque_bpe_pres", "cinema_bpe_pres" ,
"electronique_bpe_pres", "pharmacie_bpe_pres",
"restaurant_bpe_pres" ,"station_service_bpe_pres",
"theatre_bpe_pres")]
# OSM
Equiosm7 <- tmp[,c("banque_osm_pres", "cinema_osm_pres" ,
"electronique_osm_pres", "pharmacie_osm_pres",
"restaurant_osm_pres" ,"station_service_osm_pres",
"theatre_osm_pres")]
# Transfromation au format character des variables
for(i in c(1:ncol(Equibpe7))) {
Equibpe7[,i] <- as.character(Equibpe7[,i])
}
for(i in c(1:ncol(Equiosm7))) {
Equiosm7[,i] <- as.character(Equiosm7[,i])
}Un premier tri à plat permet de synthétiser le nombre de communes non équipées (0) ou équipées (1) pour chaque équipement et source de données de l’analyse.
## banque_bpe_pres cinema_bpe_pres electronique_bpe_pres pharmacie_bpe_pres
## 0 560 684 645 555
## 1 143 19 58 148
## restaurant_bpe_pres station_service_bpe_pres theatre_bpe_pres
## 0 382 622 698
## 1 321 81 5
## banque_osm_pres cinema_osm_pres electronique_osm_pres pharmacie_osm_pres
## 0 631 688 682 620
## 1 72 15 21 83
## restaurant_osm_pres station_service_osm_pres theatre_osm_pres
## 0 524 605 688
## 1 179 98 15
L’ACM sera réalisée séparément pour les équipements OSM et BPE. Pour la BPE, les 4 premiers facteurs résument 80 % de l’information initiale (déduit du tableau des valeurs propres). Pour les 7 équipements BPE, F1 résume quasiment la moitié de l’information (46%) et oppose sans surprise les communes équipées aux communes sans équipements. F2 (16%) porte sur les équipements rares, il oppose les communes équipées d’un théatre (et d’un cinéma, secondairement) aux communes qui n’en ont pas.
Les sorties les plus importantes de ce script sont jouées. Pour aller plus loin dans l’interprétation des résultats (graph des individus, des variables, etc.), le code est affiché ci-dessous sans être exécuté.
#BPE
# Exécuter l'ACM
res.mca.bpe <- MCA(Equibpe7, graph = FALSE)
# Tableau des valeurs propres (Eigenvalues)
res.mca.bpe$eig## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.46322347 46.322347 46.32235
## dim 2 0.16411004 16.411004 62.73335
## dim 3 0.09682918 9.682918 72.41627
## dim 4 0.08226622 8.226622 80.64289
## dim 5 0.07607998 7.607998 88.25089
## dim 6 0.07087855 7.087855 95.33874
## dim 7 0.04661255 4.661255 100.00000
# On réalise l'analyse des 4 premiers facteurs pour éviter le bruit des derniers facteurs qui rendrait la classif moins stable (Husson, 2016)
res.mca.bpe <- MCA(Equibpe7, ncp = 4, graph = FALSE)Pour visualiser le positionnement des variables et des individus sur les axes factoriels, ces commandes sont utiles.
# Pour dessiner le graphe des individus (variables = invisibles)
plot(res.mca.bpe, invisible="var", cex = 0.7)
# et des variables (individus = invisibles)
plot(res.mca.bpe, invisible="ind", cex=0.3)
# Pour l'analyse interactive de l'ACM, l'usage de FactoShiny est utile
res <- Factoshiny(Equibpe7) Une CAH est entreprise sur les 4 premiers facteurs de l’ACM. Pour la BPE, 5 clusters sont identifiés. On en ressort les conclusions suivantes :
# Réalisation de l'ACP
res.hcpc.bpe <- HCPC(res.mca.bpe, nb.clust = 5, graph = FALSE)
# Description des classes par les modalites (résultat le plus important pour l'interprétation)
xx <- res.hcpc.bpe$desc.var$category
xx <- lapply(xx, round, digits = 2)
xx[[1]][,c(1:3)] # Classe 1## Cla/Mod Mod/Cla Global
## restaurant_bpe_pres=restaurant_bpe_pres_0 99.21 100.00 54.34
## pharmacie_bpe_pres=pharmacie_bpe_pres_0 66.85 97.89 78.95
## banque_bpe_pres=banque_bpe_pres_0 65.00 96.04 79.66
## station_service_bpe_pres=station_service_bpe_pres_0 60.77 99.74 88.48
## electronique_bpe_pres=electronique_bpe_pres_0 58.60 99.74 91.75
## cinema_bpe_pres=cinema_bpe_pres_0 55.41 100.00 97.30
## theatre_bpe_pres=theatre_bpe_pres_0 54.30 100.00 99.29
## theatre_bpe_pres=theatre_bpe_pres_1 0.00 0.00 0.71
## cinema_bpe_pres=cinema_bpe_pres_1 0.00 0.00 2.70
## electronique_bpe_pres=electronique_bpe_pres_1 1.72 0.26 8.25
## station_service_bpe_pres=station_service_bpe_pres_1 1.23 0.26 11.52
## banque_bpe_pres=banque_bpe_pres_1 10.49 3.96 20.34
## pharmacie_bpe_pres=pharmacie_bpe_pres_1 5.41 2.11 21.05
## restaurant_bpe_pres=restaurant_bpe_pres_1 0.00 0.00 45.66
## Cla/Mod Mod/Cla Global
## restaurant_bpe_pres=restaurant_bpe_pres_1 60.75 100.00 45.66
## banque_bpe_pres=banque_bpe_pres_0 32.50 93.33 79.66
## electronique_bpe_pres=electronique_bpe_pres_0 29.92 98.97 91.75
## pharmacie_bpe_pres=pharmacie_bpe_pres_0 31.53 89.74 78.95
## station_service_bpe_pres=station_service_bpe_pres_0 30.06 95.90 88.48
## cinema_bpe_pres=cinema_bpe_pres_0 28.51 100.00 97.30
## cinema_bpe_pres=cinema_bpe_pres_1 0.00 0.00 2.70
## station_service_bpe_pres=station_service_bpe_pres_1 9.88 4.10 11.52
## pharmacie_bpe_pres=pharmacie_bpe_pres_1 13.51 10.26 21.05
## electronique_bpe_pres=electronique_bpe_pres_1 3.45 1.03 8.25
## banque_bpe_pres=banque_bpe_pres_1 9.09 6.67 20.34
## restaurant_bpe_pres=restaurant_bpe_pres_0 0.00 0.00 54.34
## Cla/Mod Mod/Cla Global
## pharmacie_bpe_pres=pharmacie_bpe_pres_1 67.57 91.74 21.05
## banque_bpe_pres=banque_bpe_pres_1 67.13 88.07 20.34
## restaurant_bpe_pres=restaurant_bpe_pres_1 33.02 97.25 45.66
## station_service_bpe_pres=station_service_bpe_pres_1 69.14 51.38 11.52
## electronique_bpe_pres=electronique_bpe_pres_1 70.69 37.61 8.25
## cinema_bpe_pres=cinema_bpe_pres_0 15.94 100.00 97.30
## cinema_bpe_pres=cinema_bpe_pres_1 0.00 0.00 2.70
## electronique_bpe_pres=electronique_bpe_pres_0 10.54 62.39 91.75
## station_service_bpe_pres=station_service_bpe_pres_0 8.52 48.62 88.48
## restaurant_bpe_pres=restaurant_bpe_pres_0 0.79 2.75 54.34
## banque_bpe_pres=banque_bpe_pres_0 2.32 11.93 79.66
## pharmacie_bpe_pres=pharmacie_bpe_pres_0 1.62 8.26 78.95
## Cla/Mod Mod/Cla Global
## cinema_bpe_pres=cinema_bpe_pres_1 78.95 100.00 2.70
## pharmacie_bpe_pres=pharmacie_bpe_pres_1 10.14 100.00 21.05
## banque_bpe_pres=banque_bpe_pres_1 9.79 93.33 20.34
## electronique_bpe_pres=electronique_bpe_pres_1 17.24 66.67 8.25
## station_service_bpe_pres=station_service_bpe_pres_1 13.58 73.33 11.52
## restaurant_bpe_pres=restaurant_bpe_pres_1 4.67 100.00 45.66
## restaurant_bpe_pres=restaurant_bpe_pres_0 0.00 0.00 54.34
## station_service_bpe_pres=station_service_bpe_pres_0 0.64 26.67 88.48
## electronique_bpe_pres=electronique_bpe_pres_0 0.78 33.33 91.75
## banque_bpe_pres=banque_bpe_pres_0 0.18 6.67 79.66
## pharmacie_bpe_pres=pharmacie_bpe_pres_0 0.00 0.00 78.95
## cinema_bpe_pres=cinema_bpe_pres_0 0.00 0.00 97.30
## Cla/Mod Mod/Cla Global
## theatre_bpe_pres=theatre_bpe_pres_1 100.00 100 0.71
## cinema_bpe_pres=cinema_bpe_pres_1 21.05 80 2.70
## station_service_bpe_pres=station_service_bpe_pres_1 6.17 100 11.52
## electronique_bpe_pres=electronique_bpe_pres_1 6.90 80 8.25
## banque_bpe_pres=banque_bpe_pres_1 3.50 100 20.34
## pharmacie_bpe_pres=pharmacie_bpe_pres_1 3.38 100 21.05
## restaurant_bpe_pres=restaurant_bpe_pres_1 1.56 100 45.66
## restaurant_bpe_pres=restaurant_bpe_pres_0 0.00 0 54.34
## pharmacie_bpe_pres=pharmacie_bpe_pres_0 0.00 0 78.95
## banque_bpe_pres=banque_bpe_pres_0 0.00 0 79.66
## electronique_bpe_pres=electronique_bpe_pres_0 0.16 20 91.75
## station_service_bpe_pres=station_service_bpe_pres_0 0.00 0 88.48
## cinema_bpe_pres=cinema_bpe_pres_0 0.15 20 97.30
## theatre_bpe_pres=theatre_bpe_pres_0 0.00 0 99.29
Le résultat du clustering est finalement ajouté au fichier de géométries initial pour être cartographié.
##
## 1 2 3 4 5
## 379 195 109 15 5
### Cartographie des classes
# Jointure résultat clustering - fichier de géométries
clustbpe$GISCO_ID <- row.names(clustbpe)
# Transformation en character de clust
clustbpe$clustbpe <- as.character(clustbpe$clust)
laufr <- merge(laufr, clustbpe[,c("GISCO_ID","clustbpe")], laufr, by.x = "GISCO_ID",
by.y = "GISCO_ID", all.x = TRUE)
# Carto classification centralités 7 équipements
png(file = "fig/B41_typo_BPE.png", width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
cols <- carto.pal(pal1 = "orange.pal", n1 = 5)
vals <- c("1","2","3","4","5")
plot(st_geometry(nuts3), col = "lightgrey", border = "ivory1", lwd = 1)
typoLayer(x = laufr, var="clustbpe",
col = cols, legend.values.order = vals,
legend.pos = "n", lwd = 0.2, border = "white", add = TRUE)
labelLayer(x = laufr[laufr$clustbpe == "5",],
txt = "LAU_LABEL", halo=TRUE, cex = 0.6,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
legendTypo(pos = "topright", title.txt = "Catégories d'équipement de la commune",
nodata = "n", col = cols,
categ = c("Aucun équipements", "Un équipement de base (cafés-restaurants)",
"Plusieurs équipements de base",
"Equipements rares incomplets",
"Tout équipements"), frame = TRUE)
layoutLayer(title = "Classification niveaux de centralités (BPE)",
sources = "BPE, 2018",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
figure B41 - Typologie de synthèse de présences et absences d’équipements BPE

# Pour aller plus loin dans l'analyse
# Indépendance des variables
res.hcpc.bpe$desc.var$test.chi2
# Description des classes par les individus Identification des « parangons »,
# qui sont les individus « moyens » de chaque classe,
# situés au centre du nuage de points de leur couleur
res.hcpc.bpe$desc.indLa démarche est reproduite pour OSM. Pour les 7 équipements OSM, F1 résume 43% de l’information et oppose les communes équipées aux communes qui ne comptent aucun des 7 équipements. F2 (14%) oppose les communes dotées équipements rares (cinema et théatre, secondairement magasin d’électronique) aux communes qui ne sont dotées que d’équipements banals (pharmacies, cafés-restaurant…).
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.43022713 43.022713 43.02271
## dim 2 0.14058546 14.058546 57.08126
## dim 3 0.11507581 11.507581 68.58884
## dim 4 0.09028848 9.028848 77.61769
## dim 5 0.08240042 8.240042 85.85773
## dim 6 0.07871638 7.871638 93.72937
## dim 7 0.06270633 6.270633 100.00000
L’interprétation de la CAH en 5 classes portant sur la présence/absence des équipements OSM donne les conclusions suivantes
## Cla/Mod Mod/Cla Global
## restaurant_osm_pres=restaurant_osm_pres_0 93.13 100.00 74.54
## station_service_osm_pres=station_service_osm_pres_0 80.66 100.00 86.06
## pharmacie_osm_pres=pharmacie_osm_pres_0 78.71 100.00 88.19
## banque_osm_pres=banque_osm_pres_0 76.23 98.57 89.76
## electronique_osm_pres=electronique_osm_pres_0 71.41 99.80 97.01
## theatre_osm_pres=theatre_osm_pres_0 70.93 100.00 97.87
## cinema_osm_pres=cinema_osm_pres_0 70.93 100.00 97.87
## theatre_osm_pres=theatre_osm_pres_1 0.00 0.00 2.13
## cinema_osm_pres=cinema_osm_pres_1 0.00 0.00 2.13
## electronique_osm_pres=electronique_osm_pres_1 4.76 0.20 2.99
## banque_osm_pres=banque_osm_pres_1 9.72 1.43 10.24
## pharmacie_osm_pres=pharmacie_osm_pres_1 0.00 0.00 11.81
## station_service_osm_pres=station_service_osm_pres_1 0.00 0.00 13.94
## restaurant_osm_pres=restaurant_osm_pres_1 0.00 0.00 25.46
## Cla/Mod Mod/Cla Global
## restaurant_osm_pres=restaurant_osm_pres_1 67.04 81.63 25.46
## station_service_osm_pres=station_service_osm_pres_1 53.06 35.37 13.94
## pharmacie_osm_pres=pharmacie_osm_pres_1 38.55 21.77 11.81
## electronique_osm_pres=electronique_osm_pres_0 21.55 100.00 97.01
## theatre_osm_pres=theatre_osm_pres_0 21.37 100.00 97.87
## cinema_osm_pres=cinema_osm_pres_0 21.37 100.00 97.87
## theatre_osm_pres=theatre_osm_pres_1 0.00 0.00 2.13
## cinema_osm_pres=cinema_osm_pres_1 0.00 0.00 2.13
## electronique_osm_pres=electronique_osm_pres_1 0.00 0.00 2.99
## pharmacie_osm_pres=pharmacie_osm_pres_0 18.55 78.23 88.19
## station_service_osm_pres=station_service_osm_pres_0 15.70 64.63 86.06
## restaurant_osm_pres=restaurant_osm_pres_0 5.15 18.37 74.54
## Cla/Mod Mod/Cla Global
## banque_osm_pres=banque_osm_pres_1 54.17 90.70 10.24
## pharmacie_osm_pres=pharmacie_osm_pres_1 42.17 81.40 11.81
## restaurant_osm_pres=restaurant_osm_pres_1 19.55 81.40 25.46
## station_service_osm_pres=station_service_osm_pres_1 26.53 60.47 13.94
## electronique_osm_pres=electronique_osm_pres_1 57.14 27.91 2.99
## electronique_osm_pres=electronique_osm_pres_0 4.55 72.09 97.01
## station_service_osm_pres=station_service_osm_pres_0 2.81 39.53 86.06
## restaurant_osm_pres=restaurant_osm_pres_0 1.53 18.60 74.54
## pharmacie_osm_pres=pharmacie_osm_pres_0 1.29 18.60 88.19
## banque_osm_pres=banque_osm_pres_0 0.63 9.30 89.76
## Cla/Mod Mod/Cla Global
## theatre_osm_pres=theatre_osm_pres_1 80.00 100.00 2.13
## restaurant_osm_pres=restaurant_osm_pres_1 6.15 91.67 25.46
## station_service_osm_pres=station_service_osm_pres_1 8.16 66.67 13.94
## banque_osm_pres=banque_osm_pres_1 9.72 58.33 10.24
## pharmacie_osm_pres=pharmacie_osm_pres_1 6.02 41.67 11.81
## cinema_osm_pres=cinema_osm_pres_1 13.33 16.67 2.13
## cinema_osm_pres=cinema_osm_pres_0 1.45 83.33 97.87
## pharmacie_osm_pres=pharmacie_osm_pres_0 1.13 58.33 88.19
## banque_osm_pres=banque_osm_pres_0 0.79 41.67 89.76
## station_service_osm_pres=station_service_osm_pres_0 0.66 33.33 86.06
## restaurant_osm_pres=restaurant_osm_pres_0 0.19 8.33 74.54
## theatre_osm_pres=theatre_osm_pres_0 0.00 0.00 97.87
## Cla/Mod Mod/Cla Global
## cinema_osm_pres=cinema_osm_pres_1 86.67 100.00 2.13
## station_service_osm_pres=station_service_osm_pres_1 12.24 92.31 13.94
## pharmacie_osm_pres=pharmacie_osm_pres_1 13.25 84.62 11.81
## electronique_osm_pres=electronique_osm_pres_1 33.33 53.85 2.99
## restaurant_osm_pres=restaurant_osm_pres_1 7.26 100.00 25.46
## banque_osm_pres=banque_osm_pres_1 13.89 76.92 10.24
## theatre_osm_pres=theatre_osm_pres_1 20.00 23.08 2.13
## theatre_osm_pres=theatre_osm_pres_0 1.45 76.92 97.87
## banque_osm_pres=banque_osm_pres_0 0.48 23.08 89.76
## restaurant_osm_pres=restaurant_osm_pres_0 0.00 0.00 74.54
## electronique_osm_pres=electronique_osm_pres_0 0.88 46.15 97.01
## pharmacie_osm_pres=pharmacie_osm_pres_0 0.32 15.38 88.19
## station_service_osm_pres=station_service_osm_pres_0 0.17 7.69 86.06
## cinema_osm_pres=cinema_osm_pres_0 0.00 0.00 97.87
##
## 1 2 3 4 5
## 488 147 43 12 13
Et aboutit à la cartographie suivante.
## png
## 2
figure B42 - Typologie de synthèse de présences et absences d’équipements OSM

UMS 2414 RIATE (CNRS - Université de Paris)