knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%" )
La SGF (pour Statistique Générale de la France) est l'ancêtre de l'Insee, à savoir un service ministériel chargé de collecter et analyser des statistiques pour le gouvernement français entre 1833 et 1940.
Une partie de ces données a été saisie dans les années 1980 par une équipe de chercheurs franco-américains à l'Inter-University Consortium for Political and Social Research (ICPSR), situé à Ann Arbor, Michigan, États-Unis. L'Insee a publié ici 200 tableurs au format dbf portant sur les recensements de la population, la démographie et l'enseignement primaire, entre 1800 et 1925.
Le package sgf
regroupe, normalise et documente ces indicateurs disponibles dans la plupart des cas à l'échelon géographique du département (des arrondissements voire des chefs-lieux d'arrondissements dans quelques rares cas). Il permet également de cartographier ces indicateurs au millésime géographique du département ou de l'arrondissement correspondant au millésime de la donnée.
sgf
est composé de :
data_SGF : table contenant l'ensemble des données en format long (libellés, identifiants, millésime de la donnée et millésime de la géographie)
2 tables de données géographiques (format sf dataframe) :
geo_ARR_SGF_histo : contours géographiques des arrondissements (avec leur code et libellé) selon le millésime de la géographie (1801/1826/1876, cf. "géographie ci-dessous)
1 fonction :
Données statistiques : SGF, ICPSR, Insee, insee.fr/fr/information/1300622
Fonds cartographiques : F. Salmon, 2019, fondsdecarte.free.fr/
Documentation, géoréférencement : Observatoire des Territoires.
Le package sgf
peut être installé depuis github via la commande suivante :
``` {r eval=F} remotes::install_github("observatoire-territoires/sgf")
Pour accéder à la documentation décrivant les tables de données, par exemple celle listant les indicateurs : ``` {r eval=F, echo=T, message=F, warning=F} ?sgf::indicateurs_SGF
Les contours des départements de France métropolitaine ont évolué sur la période que couvre les données de la SGF.
Les 5 millésimes de cette géographie départementale sont disponibles dans la table geo_DEP_SGF_histo
(idem pour les contours des arrondissements dans la table geo_ARR_SGF_histo
) :
library(tidyverse) library(sf) load( file = "./data/geo_DEP_SGF_histo.rda") geo_DEP_SGF_histo_modifs <- geo_DEP_SGF_histo %>% mutate(modif = case_when(CODGEO %in% '82' & ANNEE_GEOGRAPHIE == 1826 ~ "création", CODGEO %in% '73' & ANNEE_GEOGRAPHIE == 1866 ~ "création", CODGEO %in% '74' & ANNEE_GEOGRAPHIE == 1866 ~ "création", CODGEO %in% '06' & ANNEE_GEOGRAPHIE == 1866 ~ "création", CODGEO %in% '83' & ANNEE_GEOGRAPHIE == 1866 ~ "modification", CODGEO %in% '54' & ANNEE_GEOGRAPHIE == 1876 ~ "création", CODGEO %in% '90' & ANNEE_GEOGRAPHIE == 1876 ~ "création", CODGEO %in% '88' & ANNEE_GEOGRAPHIE == 1876 ~ "modification", CODGEO %in% '57' & ANNEE_GEOGRAPHIE == 1918 ~ "création", CODGEO %in% '67' & ANNEE_GEOGRAPHIE == 1918 ~ "création", CODGEO %in% '68' & ANNEE_GEOGRAPHIE == 1918 ~ "création")) %>% # ajout des départements supprimés en 1876 rbind.data.frame(geo_DEP_SGF_histo %>% filter(ANNEE_GEOGRAPHIE == 1866 & CODGEO %in% c('57','67','68')) %>% mutate(ANNEE_GEOGRAPHIE = 1876) %>% mutate(modif = "suppression")) ggplot(data = geo_DEP_SGF_histo_modifs ) + geom_sf(aes(fill = modif), color = "grey70", lwd = 0.2) + geom_sf_text(aes(label = CODGEO), color = "grey20", size = 1.5, fontface = "bold") + scale_fill_manual(name = "Modifications successives\ndepuis 1801", values =c("green", "orange", "red"), na.translate = F, na.value = "grey") + facet_wrap(~ ANNEE_GEOGRAPHIE, ncol = 3) + theme(axis.text = element_blank(), axis.title = element_blank(), text = element_text(size = 10,face = "bold"), strip.text.x = element_text(size = 10, colour = "white"), strip.background = element_rect(fill="grey20", colour=NA,size=0), legend.position = c(0.85,0.3), legend.key.size = unit(0.2, "cm"), legend.key.width = unit(0.4,"cm") , legend.title = element_text(size = 7), legend.text = element_text(size = 5), axis.ticks = element_blank()) + labs( title = "Contours des départements de France métropolitaine" ) + coord_sf(crs = st_crs(2154), datum = NA)
La recherche des indicateurs se fait directement dans la table indicateurs_SGF :
library(sgf)
View(indicateurs_SGF)
indicateurs_SGF %>% slice(1:3) %>% kableExtra::kable() %>% kableExtra::kable_styling(font_size = 6.5, bootstrap_options = c("striped", "hover", "condensed", "responsive"))
DT::datatable(indicateurs_SGF %>% slice(1:2000))
Une fois le niveau géographique (variable 'TYPE_NIVGEO'), la source (variable 'TABLEAU') et l'identifiant (variable 'VAR_COD') des indicateurs sélectionnés, la fonction sgf_sfdf permet de générer un sf dataframe des territoires avec les indicateurs correspondants, au format large :
DEP_pop_1866 <- sgf_sfdf(TYPE_NIVGEO = "DEP", SRC ="REC_T25", LISTE_VAR_COD = c(215, 177, 183)) glimpse(DEP_pop_1866)
Puis on peut cartographier le tout avec ggplot
par exemple :
library(ggplot2) library(scales) library(hrbrthemes) ggplot() + geom_sf(data = DEP_pop_1866 %>% mutate(personnes_sachant_lire_et_ecrire_total_1866_pct = personnes_sachant_lire_et_ecrire_total_1866 / total_general_de_la_population_total_1866), aes(fill= personnes_sachant_lire_et_ecrire_total_1866_pct), color = "grey20", lwd = 0.15) + scale_fill_distiller(name = "", palette = "RdBu", labels = percent_format(accuracy =1), direction = 1) + theme_ipsum() + theme(axis.text = element_blank(), axis.title = element_blank(), axis.ticks = element_blank()) + labs( title = "Part de la population sachant lire et écrire", subtitle = "En 1866, par département", caption = "Sources : Insee - SGF - ICPSR - F.Salmon - OT" )
Autre exemple avec une cartographie d'un indicateur à la maille arrondissement en symboles proportionnels :
ARR_pop_sexe_1851 <- sgf_sfdf(TYPE_NIVGEO = "ARR", SRC ="REC_T01", LISTE_VAR_COD = c(11,12,13,14)) %>% mutate(ratio_femmes_hommes_1851 = (total_du_sexe_feminin_1851 / total_du_sexe_masculin_1851) *100 ) ggplot() + geom_sf(data = ARR_pop_sexe_1851, fill="grey80", color = "grey90" , lwd = 0.35) + geom_sf(data = geo_DEP_SGF_histo %>% filter(ANNEE_GEOGRAPHIE == 1826), fill=NA, color = "grey95", lwd = 0.75 ) + geom_sf(data = ARR_pop_sexe_1851 %>% st_centroid(of_largest_polygon=T), aes(fill= ratio_femmes_hommes_1851, size = total_du_sexe_masculin_1851 + total_du_sexe_feminin_1851 ), color = "grey40", shape = 21) + scale_fill_gradientn(colours = c("#1b7837", "white", "#762a83"), name = "Nombre de femmes\npour 100 hommes", breaks = c(70,80,90,100,105,110,115), values = scales::rescale(c(70, 92, 100, 104, 115))) + scale_size_continuous(labels=function(x) format(x, big.mark = " ", scientific = FALSE), range = c(1,12), name = "Population totale") + guides(fill = guide_legend(reverse=T)) + theme_ipsum() + theme(axis.text = element_blank(), axis.title = element_blank(), axis.ticks = element_blank()) + labs( title = "Sex-ratio en 1851", subtitle = "Par arrondissement", caption = "Sources : Insee - SGF - ICPSR - F.Salmon - OT" ) + theme(legend.position = c(0.95,0.5), axis.line=element_blank(), axis.title=element_blank(), axis.text=element_blank() )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.