Direction régionale de l’Insee Île-de-France
DPLYR pour manipuler les données Insee.Note
Un package est un ensemble de fonctions développées par des utilisateurs de R, qui améliorent ou étendent les fonctionnalités de base. Avant d’installer un package, il est indispensable de déterminer précisément nos besoins, car certaines fonctions d’un package peuvent entrer en conflit. Par exemple, la fonction select existe dans les packages DPLYR et MASS et n’ont pas le même objectif. Cela peut causer des erreurs difficiles à repérer.
On va également installer le package GGPLOT2 pour les sorties graphiques.
Concernant les sorties tableaux on va installer le package DT et KABLEEXTRA.
TABLOID développé par deux agents Insee disponible sur le dépôt Github du compte InseeFrLab, pour les statistiques descriptives.library, cela consiste à indiquer à R qu’on souhaite les utiliser dans la session courante.Depuis 2011, on peut retracer les changements de résidence un an avant l’enquête du recensement de la population (RP), ce qui donne un historique sur la période 2011-2022.
C’est à partir de la variable IRAN obtenue à partir de la question : « Où habitiez-vous un an auparavant ? » que l’on va dénombrer les migrants infra et supra communales. Cette question du RP permet de mettre en avant, soit un maintien dans le logement, soit un déménagement à l’échelle la plus fine, c’est-à-dire communale. ℹ️
format Parquet est privilégie et accessible à cette adresse :Note
download.file est une fonction qui permet de télécharger un fichier localement depuis Internet (url), dans le chemin indiqué par l’option destfile.
17 357 182 lignes et 33 colonnes
IPONDL, IPONDI, IPONDF).Les noms de variables (colonnes) et les libellés (lignes) ne sont pas explicites (tableau. 1). Subséquement, il faut se référer aux métadonnées ➡️
Ci-dessous la ligne de code R pour importer les métadonnées ⬇️
meta |>
filter(COD_VAR == "IRAN") |>
select(-c(LIB_VAR, LONG_VAR)) |>
DT::datatable(options = list(dom = 't', scrollY = 500, scroller = TRUE))ajouter_libelles <- function(data, dico, vars) {
purrr::reduce(vars, function(df, var) {
dico_var <- dico %>%
filter(.data[["COD_VAR"]] == var) %>%
select(COD_MOD, LIB_MOD) %>%
mutate(LIB_MOD = paste(COD_MOD, "-", LIB_MOD) ) %>%
rename(!!var := COD_MOD,
!!paste0(var, "_LIB") := LIB_MOD)
df %>%
mutate(!!var := as.character(.data[[var]])) %>%
left_join(dico_var, by = var)},
.init = data)}reduce du package purr. permet le traitement à la chaîne.
Avertissement
Sur ce point, il est important de rappeler que R est un langage sensible à la casse, ce qui signifie que variable et Variable renvoient à deux objets différents.
# Le code permet ...
migcom_rp22 = ajouter_libelles(migcom_rp22, meta, "IRAN")
migcom_rp22_dep93 = filter(migcom_rp22, substr(COMMUNE,1,2) == "93") |>
mutate(IRAN_TRICHO = forcats::fct_recode( case_when(IRAN %in% c("0", "1") ~ "1",
IRAN %in% c("2", "3") ~ "2",
TRUE ~ "3"),
"1 - Stable" = "1",
"2 - Migrant au sein de la SSD" = "2",
"3 - Migrant vers la SSD" = "3") )# Package essentiel : tabloid
tableau_iran_dep93 = tab_build(arrange(migcom_rp22_dep93, IRAN),
var_rows = c(IRAN_TRICHO, IRAN_LIB),
var_stat = IPONDI, stat = "sum") %>%
left_join(tab_pct(., pct = "col") |>
tab_round(n = 0, guarantee_100 = TRUE, option = "closest", verbose = TRUE),
by = c("IRAN_TRICHO", "IRAN_LIB") ) |>
mutate(sum.x = round(sum.x) ) |>
rename("Individus" = sum.x, "%" = sum.y) |>
tab_render() %>%
kableExtra::kable_paper("hover", full_width = F)| IRAN_TRICHO | IRAN_LIB | Individus | % |
|---|---|---|---|
| 1 - Stable | 0 - Commune ou arrondissement de rattachement | 3 550 | 0 |
| 1 - Stable | 1 - Dans le même logement | 1 536 150 | 93 |
| 1 - Stable | Ensemble | 1 539 700 | 93 |
| 2 - Migrant au sein de la SSD | 2 - Dans un autre logement de la même commune | 35 714 | 2 |
| 2 - Migrant au sein de la SSD | 3 - Dans une autre commune du département | 30 240 | 2 |
| 2 - Migrant au sein de la SSD | Ensemble | 65 954 | 4 |
| 3 - Migrant vers la SSD | 4 - Dans un autre département de la région | 31 862 | 2 |
| 3 - Migrant vers la SSD | 5 - Hors de la région de résidence actuelle : en métropole | 9 668 | 1 |
| 3 - Migrant vers la SSD | 6 - Hors de la région de résidence actuelle : dans un DOM | 661 | 0 |
| 3 - Migrant vers la SSD | 7 - Hors de la région de résidence actuelle : dans un TOM-COM | 47 | 0 |
| 3 - Migrant vers la SSD | 8 - A l'étranger dans l'Union Européenne (27 pays membres) | 1 415 | 0 |
| 3 - Migrant vers la SSD | 9 - A l'étranger hors Union Européenne | 7 494 | 0 |
| 3 - Migrant vers la SSD | Ensemble | 51 146 | 3 |
| Ensemble | Ensemble | 1 656 801 | 100 |
| IRAN_TRICHO | IRAN_LIB | Individus | % |
|---|---|---|---|
| 1 - Stable | 0 - Commune ou arrondissement de rattachement | 3 550 | 0 |
| 1 - Stable | 1 - Dans le même logement | 1 536 150 | 93 |
| 1 - Stable | Ensemble | 1 539 700 | 93 |
| 2 - Migrant au sein de la SSD | 2 - Dans un autre logement de la même commune | 35 714 | 2 |
| 2 - Migrant au sein de la SSD | 3 - Dans une autre commune du département | 30 240 | 2 |
| 2 - Migrant au sein de la SSD | Ensemble | 65 954 | 4 |
| 3 - Migrant vers la SSD | 4 - Dans un autre département de la région | 31 862 | 2 |
| 3 - Migrant vers la SSD | 5 - Hors de la région de résidence actuelle : en métropole | 9 668 | 1 |
| 3 - Migrant vers la SSD | 6 - Hors de la région de résidence actuelle : dans un DOM | 661 | 0 |
| 3 - Migrant vers la SSD | 7 - Hors de la région de résidence actuelle : dans un TOM-COM | 47 | 0 |
| 3 - Migrant vers la SSD | 8 - A l'étranger dans l'Union Européenne (27 pays membres) | 1 415 | 0 |
| 3 - Migrant vers la SSD | 9 - A l'étranger hors Union Européenne | 7 494 | 0 |
| 3 - Migrant vers la SSD | Ensemble | 51 146 | 3 |
| Ensemble | Ensemble | 1 656 801 | 100 |
migcom_rp22_dep93 |>
ajouter_libelles(meta, "CATPC") %>%
tab_build(.,
var_rows = CATPC_LIB,
var_stat = IPONDI, stat = "sum") %>%
left_join(tab_pct(., pct = "col") |>
tab_round(n = 0, guarantee_100 = TRUE, option = "closest", verbose = TRUE),
by = "CATPC_LIB" ) |>
mutate(sum.x = round(sum.x) ) |>
rename("Individus" = sum.x, "%" = sum.y) |>
tab_render()| CATPC_LIB | Individus | % |
|---|---|---|
| 0 - Population des ménages | 1 633 473 | 99 |
| 1 - Population des communautés | 20 823 | 1 |
| 2 - Population des habitations mobiles, sans abri, bateliers | 2 505 | 0 |
| Ensemble | 1 656 801 | 100 |
| IRAN_TRICHO | IRAN_LIB | Individus | % |
|---|---|---|---|
| 1 - Stable | 1 - Dans le même logement | 1 518 467 | 93 |
| 1 - Stable | Ensemble | 1 518 467 | 93 |
| 2 - Migrant au sein de la SSD | 2 - Dans un autre logement de la même commune | 35 268 | 2 |
| 2 - Migrant au sein de la SSD | 3 - Dans une autre commune du département | 29 425 | 2 |
| 2 - Migrant au sein de la SSD | Ensemble | 64 693 | 4 |
| 3 - Migrant vers la SSD | 4 - Dans un autre département de la région | 31 235 | 2 |
| 3 - Migrant vers la SSD | 5 - Hors de la région de résidence actuelle : en métropole | 9 575 | 1 |
| 3 - Migrant vers la SSD | 6 - Hors de la région de résidence actuelle : dans un DOM | 651 | 0 |
| 3 - Migrant vers la SSD | 7 - Hors de la région de résidence actuelle : dans un TOM-COM | 47 | 0 |
| 3 - Migrant vers la SSD | Ensemble | 41 508 | 3 |
| Ensemble | Ensemble | 1 624 668 | 100 |
Le recensement rénové livre une photographie “réelle” de la population à un moment donné que pour les communes de moins de 10 000 habitants dont l’année de recensement est celle médiane d’une période quinquennale, soit 2006 pour 2004-2008, 2011 pour 2009-2013… Pour les de 10 000 habitants ou plus, il s’agit d’une estimation élaborée et souffrant des biais inhérents à la méthode du recensement rénové.
Pour toutes les variables, qu’elles soient issues de l’exploitation principale ou complémentaire, le sondage pratiqué entraîne une marge d’incertitude sur les résultats. Avec le recensement rénové, plus l’échelle est petite, plus le risque d’erreur est important.
Cf: Fiche de précision des résultats du recensement
Important
Les résultats statistiques doivent donc être interprétés avec prudence, en particulier lorsque les effectifs sont faibles. Il convient de tenir compte des marges d’erreur et, lorsque cela est possible, des intervalles de confiance.
| IRAN_TRICHO | IRAN_LIB | Individus | % |
|---|---|---|---|
| 1 - Stable | 1 - Dans le même logement | 1 518 467 | 93 |
| 1 - Stable | Ensemble | 1 518 467 | 93 |
| 2 - Migrant au sein de la SSD | 2 - Dans un autre logement de la même commune | 35 268 | 2 |
| 2 - Migrant au sein de la SSD | 3 - Dans une autre commune du département | 29 425 | 2 |
| 2 - Migrant au sein de la SSD | Ensemble | 64 693 | 4 |
| 3 - Migrant vers la SSD | 4 - Dans un autre département de la région | 31 235 | 2 |
| 3 - Migrant vers la SSD | 5 - Hors de la région de résidence actuelle : en métropole | 9 575 | 1 |
| 3 - Migrant vers la SSD | 6 - Hors de la région de résidence actuelle : dans un DOM | 651 | 0 |
| 3 - Migrant vers la SSD | 7 - Hors de la région de résidence actuelle : dans un TOM-COM | 47 | 0 |
| 3 - Migrant vers la SSD | Ensemble | 41 508 | 3 |
| Ensemble | Ensemble | 1 624 668 | 100 |
| IRAN_TRICHO | IRAN_LIB | Individus | % |
|---|---|---|---|
| 1 - Stable | 1 - Dans le même logement | 1 518 467 | 92 |
| 1 - Stable | Ensemble | 1 518 467 | 92 |
| 2 - Migrant au sein de la SSD | 2 - Dans un autre logement de la même commune | 35 268 | 2 |
| 2 - Migrant au sein de la SSD | 3 - Dans une autre commune du département | 29 425 | 2 |
| 2 - Migrant au sein de la SSD | Ensemble | 64 693 | 4 |
| 3 - Migrant depuis la SSD | 5 - Hors de la région de résidence actuelle : en métropole | 23 111 | 2 |
| 3 - Migrant depuis la SSD | 4 - Dans un autre département de la région | 37 085 | 2 |
| 3 - Migrant depuis la SSD | Ensemble | 60 195 | 4 |
| Ensemble | Ensemble | 1 643 355 | 100 |
Définition
worktable = filter(migcom_rp22, CATPC == "0") |>
mutate(Zone = case_when( substr(COMMUNE,1,2) == "75" ~ "2-Paris",
substr(COMMUNE,1,2) == "93" ~ "1-Seine-Saint-Denis",
substr(COMMUNE,1,2) %in% c("92","94") ~ "3-Petite couronne",
substr(COMMUNE,1,2) %in% c("77","78","91","95") ~ "4-Grande couronne",
TRUE ~ "5-Province et DROM" ) )
worktable = bind_rows(
filter(worktable,
substr(COMMUNE,1,2) == "93",
!c( IRAN %in% c( 0:3 ) ) ) |>
mutate(STATUT = "Migrants vers la Seine-Saint-Denis",
Zone = case_when( substr(DCRAN,1,2) == "75" ~ "2-Paris",
substr(DCRAN,1,2) == "93" ~ "1-Seine-Saint-Denis",
substr(DCRAN,1,2) %in% c("92","94") ~ "3-Petite couronne",
substr(DCRAN,1,2) %in% c("77","78","91","95") ~ "4-Grande couronne",
TRUE ~ "5-Province et DROM" ) ),
filter(worktable,
substr(DCRAN,1,2) == "93",
!c( IRAN %in% c( 0:3 ) ) ) |>
mutate(STATUT = "Migrants depuis la Seine-Saint-Denis"),
filter(worktable,
substr(COMMUNE,1,2) == "93",
IRAN %in% c( "2", "3" ) ) |>
mutate(STATUT = "Migrants au sein de la Seine-Saint-Denis") )
worktable_hors_etr = filter(worktable, !c(IRAN %in% c("8", "9")))tab_build(worktable_hors_etr, var_rows = STATUT, var_stat = IPONDI, stat = "sum") |>
mutate(sum = round(sum, -2))Pour en savoir plus : Mobilités résidentielles des cadres en Seine-Saint-Denis : une intensification récente
tab_build(arrange(worktable_hors_etr, Zone),
var_rows = Zone, var_cols = STATUT, var_stat = IPONDI,
stat = "sum") |>
mutate(Ensemble = `Migrants vers la Seine-Saint-Denis` - `Migrants depuis la Seine-Saint-Denis`) |>
rename("Solde migratoire" = "Ensemble") |>
mutate(across(where(is.numeric), ~ round(.x, -2))) |>
tab_render() |>
kableExtra::kable_styling(font_size = 30)| Zone | Migrants au sein de la Seine-Saint-Denis | Migrants vers la Seine-Saint-Denis | Migrants depuis la Seine-Saint-Denis | Solde migratoire |
|---|---|---|---|---|
| 1-Seine-Saint-Denis | 64 700 | 0 | 0 | 0 |
| 2-Paris | 0 | 13 400 | 6 700 | 6 600 |
| 3-Petite couronne | 0 | 8 700 | 10 100 | -1 400 |
| 4-Grande couronne | 0 | 9 200 | 20 300 | -11 100 |
| 5-Province et DROM | 0 | 10 300 | 23 100 | -12 800 |
| Ensemble | 64 700 | 41 500 | 60 200 | -18 700 |
Pour en savoir plus : Mobilités résidentielles des cadres en Seine-Saint-Denis : une intensification récente
Note
Les caractéristiques des migrants sont connues uniquement à la date du recensement, pas au moment du déménagement.
worktable |> arrange(IRAN) |> ajouter_libelles(meta, "INATC") |>
mutate(IRAN_LIB = case_when(IRAN %in% c("8", "9") ~ "A l'étranger",
IRAN %in% c(5:7) ~ "Province et DROM",
TRUE ~ IRAN_LIB)) %>%
tab_build(.,
var_rows = c(STATUT, IRAN_LIB),
var_cols = INATC_LIB,
var_stat = IPONDI, stat = "sum") %>%
tab_pct(., pct = "row") |>
tab_round(n = 0, guarantee_100 = TRUE, option = "closest", verbose = TRUE) |>
tab_render() |> kableExtra::kable_styling(font_size = 26)| STATUT | IRAN_LIB | 1 - Français | 2 - Etrangers | Ensemble |
|---|---|---|---|---|
| Migrants au sein de la Seine-Saint-Denis | 2 - Dans un autre logement de la même commune | 67 | 33 | 100 |
| Migrants au sein de la Seine-Saint-Denis | 3 - Dans une autre commune du département | 61 | 39 | 100 |
| Migrants au sein de la Seine-Saint-Denis | Ensemble | 64 | 36 | 100 |
| Migrants vers la Seine-Saint-Denis | 4 - Dans un autre département de la région | 73 | 27 | 100 |
| Migrants vers la Seine-Saint-Denis | Province et DROM | 74 | 26 | 100 |
| Migrants vers la Seine-Saint-Denis | A l'étranger | 21 | 79 | 100 |
| Migrants vers la Seine-Saint-Denis | Ensemble | 64 | 36 | 100 |
| Migrants depuis la Seine-Saint-Denis | 4 - Dans un autre département de la région | 75 | 25 | 100 |
| Migrants depuis la Seine-Saint-Denis | Province et DROM | 88 | 12 | 100 |
| Migrants depuis la Seine-Saint-Denis | Ensemble | 80 | 20 | 100 |
| Ensemble | Ensemble | 70 | 30 | 100 |
tableau_repartition_par_age = tab_build(worktable_hors_etr,
var_rows = AGEREVQ, var_cols = STATUT, var_stat = IPONDI, stat = "sum") |>
tab_pct(pct = 'col') |>
tab_round(n = 2, guarantee_100 = TRUE, option = "closest", verbose = TRUE)
tableau_pourgraphique_repartition_par_age = tableau_repartition_par_age %>%
mutate(across(where(is.numeric), ~ .x / 5)) |>
select(-Ensemble) |>
filter(AGEREVQ != "Ensemble") |>
tidyr::pivot_longer(-1) |>
group_by(name) |>
mutate( AGEREVQ = seq(0, by = 5, length.out = n()) )|>
arrange(AGEREVQ) |>
reframe(
AGEREVQ = c(0, AGEREVQ),
value = c(first(value), value)
)| AGEREVQ | Migrants vers la Seine-Saint-Denis | Migrants depuis la Seine-Saint-Denis | Migrants au sein de la Seine-Saint-Denis | AGEREVQ_LIB |
|---|---|---|---|---|
| 000 | 4,78 | 7,18 | 9,22 | 000 - 0 à 4 ans |
| 005 | 3,31 | 6,65 | 8,69 | 005 - 5 à 9 ans |
| 010 | 3,12 | 4,72 | 6,49 | 010 - 10 à 14 ans |
| 015 | 5,31 | 4,21 | 5,31 | 015 - 15 à 19 ans |
| 020 | 17,13 | 10,40 | 8,39 | 020 - 20 à 24 ans |
| 025 | 22,77 | 16,40 | 13,06 | 025 - 25 à 29 ans |
| 030 | 16,83 | 13,33 | 12,91 | 030 - 30 à 34 ans |
| 035 | 9,79 | 9,99 | 10,47 | 035 - 35 à 39 ans |
| 040 | 5,48 | 6,72 | 7,71 | 040 - 40 à 44 ans |
| 045 | 4,05 | 4,41 | 5,32 | 045 - 45 à 49 ans |
| 050 | 2,51 | 3,30 | 3,90 | 050 - 50 à 54 ans |
| 055 | 1,74 | 2,91 | 3,17 | 055 - 55 à 59 ans |
| 060 | 1,08 | 3,66 | 1,96 | 060 - 60 à 64 ans |
| 065 | 0,92 | 2,47 | 1,29 | 065 - 65 à 69 ans |
| 070 | 0,42 | 1,60 | 0,75 | 070 - 70 à 74 ans |
| 075 | 0,30 | 0,83 | 0,65 | 075 - 75 à 79 ans |
| 080 | 0,19 | 0,55 | 0,35 | 080 - 80 à 84 ans |
| 085 | 0,16 | 0,42 | 0,25 | 085 - 85 à 89 ans |
| 090 | 0,07 | 0,19 | 0,09 | 090 - 90 à 94 ans |
| 095 | 0,04 | 0,05 | 0,02 | 095 - 95 à 99 ans |
| 100 | 0,00 | 0,01 | 0,00 | 100 - 100 à 104 ans |
| Ensemble | 100,00 | 100,00 | 100,00 | - |
tableau_repartition_par_gs = tab_build(ajouter_libelles(worktable_hors_etr, meta, "GS") |>
filter(GS != "1") |>
arrange(GS),
var_rows = GS_LIB,
var_cols = STATUT,
var_stat = IPONDI, stat = "sum") %>%
left_join(tab_pct(., pct = "col") |>
tab_round(n = 0, guarantee_100 = TRUE, option = "closest", verbose = TRUE) %>%
rename_with(~ paste0(.x, " %"), tail(names(.), 4)),
by = c("GS_LIB") ) |>
mutate(across(2:5, ~ round(.x, -2)))| GS_LIB | Migrants vers la Seine-Saint-Denis | Migrants depuis la Seine-Saint-Denis | Migrants au sein de la Seine-Saint-Denis | Ensemble | Migrants vers la Seine-Saint-Denis % | Migrants depuis la Seine-Saint-Denis % | Migrants au sein de la Seine-Saint-Denis % | Ensemble % |
|---|---|---|---|---|---|---|---|---|
| 2 - Artisan, commerçant et chef d'entreprise | 1 100 | 1 500 | 1 700 | 4 300 | 3 | 2 | 3 | 2 |
| 3 - Cadres | 9 500 | 10 100 | 6 300 | 25 900 | 23 | 17 | 10 | 16 |
| 4 - Profession intermédiaire | 7 000 | 8 700 | 8 200 | 23 800 | 17 | 14 | 13 | 14 |
| 5 - Employé | 5 800 | 7 600 | 9 400 | 22 800 | 14 | 13 | 14 | 14 |
| 6 - Ouvrier | 3 000 | 4 000 | 6 500 | 13 500 | 7 | 7 | 10 | 8 |
| Z - Sans objet | 15 100 | 28 400 | 32 600 | 76 000 | 36 | 47 | 50 | 46 |
| Ensemble | 41 500 | 60 200 | 64 700 | 166 400 | 100 | 100 | 100 | 100 |
# MOCO = 11 Enfants d'un couple
# MOCO = 12 Enfants d'une famille monoparentale
tableau_repartition_par_moco = worktable_hors_etr |>
mutate(MOCO = case_when(MOCO == "12" ~ "23",
MOCO == "11" ~ "22",
TRUE ~ MOCO)) %>%
ajouter_libelles(meta, "MOCO") |>
filter(LPRM == "1") |>
arrange(MOCO) %>%
tab_build(.,
var_rows = MOCO_LIB,
var_cols = STATUT,
var_stat = IPONDI, stat = "sum") %>%
left_join(tab_pct(., pct = "col") |>
tab_round(n = 0, guarantee_100 = TRUE, option = "closest", verbose = TRUE) %>%
rename_with(~ paste0(.x, " %"), tail(names(.), 4)),
by = c("MOCO_LIB") ) |>
mutate(across(2:5, ~ round(.x, -2)))| MOCO_LIB | Migrants vers la Seine-Saint-Denis | Migrants depuis la Seine-Saint-Denis | Migrants au sein de la Seine-Saint-Denis | Ensemble | Migrants vers la Seine-Saint-Denis % | Migrants depuis la Seine-Saint-Denis % | Migrants au sein de la Seine-Saint-Denis % | Ensemble % |
|---|---|---|---|---|---|---|---|---|
| 21 - Adultes d'un couple sans enfant | 4 600 | 6 900 | 4 500 | 16 000 | 21 | 24 | 16 | 20 |
| 22 - Adultes d'un couple avec enfant(s) | 2 900 | 6 200 | 7 700 | 16 900 | 13 | 21 | 28 | 21 |
| 23 - Adultes d'une famille monoparentale | 1 500 | 2 400 | 4 300 | 8 200 | 7 | 8 | 15 | 10 |
| 31 - Hors famille dans ménage de plusieurs personnes | 1 700 | 1 300 | 1 300 | 4 400 | 8 | 5 | 5 | 6 |
| 32 - Personnes vivant seules | 11 300 | 12 300 | 10 100 | 33 600 | 51 | 42 | 36 | 43 |
| Ensemble | 22 100 | 29 200 | 27 900 | 79 200 | 100 | 100 | 100 | 100 |
.. et d’autres choses encore !
Notamment, pour aller plus loin dans l’utilisation de R :