# définition du répertoire
<- paste0("file:///C:/Users/Public/Documents/MiDAS_parquet/Vague 4")
dir_spark
# création d'un calendrier avec les dates de début et de fin de mois
<- data.frame(debut_mois = seq.Date(as.Date("2010/01/01"),
calendrier as.Date("2030/01/01"),
by = "+1 months")) %>%
mutate(fin_mois = (debut_mois + months(1)) -1,
mois = paste0(substr(debut_mois,1,4),substr(debut_mois,6,7)))
# mois d'intérêt
<- "2023-06-01"
mois <- paste0(substr(ymd(as.Date(mois)),6,7), substr(ymd(as.Date(mois)),3,4))
mois_cnaf <- paste0(substr(mois,1,4),substr(mois,6,7))
mois_m = pull(calendrier %>% filter(mois == mois_m) %>% select(fin_mois))
fin_mois_m = pull(calendrier %>% filter(mois == mois_m) %>% select(debut_mois))
debut_mois_m
### A. Indicateurs RSA ------------
# Table Ménage
<- spark_read_parquet(sc, paste0(dir_spark,"/Allstat/menage/cnaf_menage_", mois_cnaf, ".parquet"),
table_menage memory = FALSE) %>%
::mutate(id_menage = paste0(NORDALLC,NUMCAF)) %>% # création d'un identifiant ménage
dplyrwindow_order(id_menage) %>%
group_by(id_menage) %>%
filter(row_number() == 1) %>% # Dédoublonne
ungroup()
# Table minimas sociaux
<- spark_read_parquet(sc, paste0(dir_spark,
table_ms_rsa "/Allstat/minsoc/cnaf_minsoc_", mois_cnaf, ".parquet"), memory=FALSE) %>%
::filter(RSAVERS %in% c("RSA droit commun", "RSA droit local",
dplyr"RSA jeune", "RSA expérimental", "C", "L", "J", "E")) %>%
::mutate(id_menage = paste0(NORDALLC,NUMCAF)) %>% # création d'un identifiant ménage
dplyrwindow_order(id_midas) %>%
group_by(id_midas) %>%
filter(row_number() == 1) %>% # Dédoublonne
ungroup()
# left_join des tables prestations et ménage
<- table_ms_rsa %>%
ms_rsa left_join(table_menage, by="id_menage", suffix=c("_ms","_men")) %>%
#left_join(table_topconj, by=c("id_midas"="id_midas", "id_menage"="id_menage")) %>% # dans la vague 4, la variable TOPCONJ est présente directement dans la table ménage. Pour les autres vagues, il faut exécuter ce left_join.
collect() %>%
::mutate(
dplyr# situation familiale :
COUPLE = ifelse(RSSITFAM %in% c("Couple", "3"), 1,0),
ISOLE_FEMME = ifelse(RSSITFAM %in% c("Isolé femme", "2"), 1,0),
ISOLE_HOMME = ifelse(RSSITFAM %in% c("Isolé homme", "1") ,1,0),
SIT_FAM_INCONNUE = ifelse(RSSITFAM %in% c("Sans signification ou inconnue", "0"),1,0),
# age à la fin du mois d'intérêt :
AGE = ifelse(TOP_CONJ == 1, # rajouter l'âge du conjoint
trunc(time_length(interval(as.Date(DTNAICON), fin_mois_m), "years")),
trunc(time_length(interval(as.Date(DTNAIRES), fin_mois_m), "years"))),
AGE_25 = ifelse(AGE < 25, 1,0),
AGE_25_34 = ifelse(AGE >= 25 & AGE < 35, 1,0),
AGE_35_44 = ifelse(AGE >= 35 & AGE < 45, 1,0),
AGE_45_54 = ifelse(AGE >= 45 & AGE < 55, 1,0),
AGE_55 = ifelse(AGE >= 55, 1,0),
AGE_inconnu = ifelse(is.na(AGE),1,0),
# nombre d'enfants et autres personnes à charge :
RSENAUTC = as.numeric(RSENAUTC),
ENFCHAR_0 = ifelse(RSENAUTC == 0,1,0),
ENFCHAR_1 = ifelse(RSENAUTC == 1,1,0),
ENFCHAR_2 = ifelse(RSENAUTC == 2,1,0),
ENFCHAR_3plus = ifelse(RSENAUTC >= 3,1,0),
# département :
departement = if_else(nchar(CODEPOSD) == 4, # retraiter les départements 1 à 9 en leur rajoutant 0 (01 à 09)
paste0("0",substr(CODEPOSD, 1, 1)),
substr(CODEPOSD, 1 ,2)),
dep_numcaf = substr(NUMCAF_ms,1,2),
outremer = ifelse(dep_numcaf %in% c("97", "98"), 1, 0) # département d'outre-mer
%>%
) ::mutate(
dplyrmetropole = ifelse(outremer == 0, 1, 0), # résident en France métropolitaine
isole_senf = ifelse(COUPLE == 0 & RSENAUTC == 0, 1, 0), # personne seule sans enfant
parent_isole = ifelse(COUPLE == 0 & RSENAUTC > 0, 1, 0), # personne seule avec enfant
couple_senf = ifelse(COUPLE == 1 & RSENAUTC == 0, 1, 0), # couple sans enfant
couple_enf = ifelse(COUPLE == 1 & RSENAUTC > 0, 1, 0), # couple avec enfant
homme_seul = ifelse(ISOLE_HOMME == 1 & RSENAUTC == 0, 1, 0), # homme seul sans enfant
femme_seule = ifelse(ISOLE_FEMME == 1 & RSENAUTC == 0, 1, 0), # femme seule sans enfant
rsa_maji = ifelse(RSAMAJI == "1", 1, 0), # RSA majoré parent isolé
sans_rsa_maji = ifelse(RSAMAJI %in% c("0", "2"), 1, 0), # pas de RSA majoré
rsa_jeunes = ifelse(RSAVERS_ms %in% c("RSA jeune", "J"), 1, 0), # RSA jeunes
cumul_rsa_ppa = ifelse(PPAVERS != "0", 1, 0) # cumul RSA et prime d'activité
)
# nombre de foyers bénéficiaires du RSA
<- ms_rsa %>%
nb_foyers_rsa group_by(id_menage) %>%
summarise(nb_menage = n())
# nombre de bénéficiaires du RSA (responsables de dossier + conjoints)
<- ms_rsa %>%
verif_externe_rsa ::mutate(TOP_CONJ = as.numeric(TOP_CONJ)) %>%
dplyrsummarise(
nb_rsa = n(), # nb de bénéficiaires du RSA : responsables dossiers + conjoints
nb_conjoints = sum(TOP_CONJ, na.rm=TRUE), # nb conjoints
%>%
) ::mutate(
dplyrnb_rspd = nb_rsa - nb_conjoints, # nb de responsables de dossier
)
# catégories d'allocataires du RSA : selon l'âge, la situation familiale, le département de résidence
# A partir de là toutes les statistiques sont calculées au niveau individuel, sur les responsables dossiers uniquement (TOP_CONJ == 0) afin de reproduire les indicateurs publiés par la Cnaf
<- ms_rsa %>%
verif_externe_rsa_rspd ::filter(TOP_CONJ == 0) %>% # ne garder que les responsables de dossier
dplyrsummarise(
nb_enfcha = sum(RSENAUTC, na.rm=TRUE), # nb enfants ou autres personnes à charge
nb_metropole = sum(metropole, na.rm=TRUE), # nb de résidents metropole
nb_outremer = sum(outremer, na.rm=TRUE), # nb de résidents DROM
nb_hommes_seuls = sum(homme_seul, na.rm=TRUE), # nb hommes seuls sans enfants
nb_femmes_seules = sum(femme_seule, na.rm=TRUE), # nb femmes seules sans enfants
nb_parent_isole = sum(parent_isole, na.rm=TRUE), # nb personnes seules avec enfants
nb_couple_senf = sum(couple_senf, na.rm=TRUE), # nb couples sans enfants
nb_couple_enf = sum(couple_enf, na.rm=TRUE), # nb couples avec enfants
nb_25 = sum(AGE_25, na.rm=TRUE),
nb_25_34 = sum(AGE_25_34, na.rm=TRUE),
nb_35_44 = sum(AGE_35_44, na.rm=TRUE),
nb_45_54 = sum(AGE_45_54, na.rm=TRUE),
nb_55 = sum(AGE_55, na.rm=TRUE),
nb_sans_rsamaji = sum(sans_rsa_maji, na.rm=TRUE), #sans majoration pour parent isole
nb_rsamaji = sum(rsa_maji, na.rm=TRUE), # avec majoration pour parent isole
nb_rsa_jeunes = sum(rsa_jeunes, na.rm=TRUE), # RSA jeune
nb_cumul_rsa_ppa = sum(cumul_rsa_ppa, na.rm=TRUE) # cumul RSA et prime activité
)
Reproduction d’indicateurs cibles
Allocataires du RSA pour un mois donné : nombre de foyers, d’adultes bénéficiaires et d’autres personnes à charge
Cette fiche propose un code permettant de reproduire les indicateurs publiés par la Cnaf sur les allocataires du RSA pour un mois donné : nombre de foyers sociaux, nombre d’adultes (responsable du dossier et éventuel conjoint), et nombre d’éventuels enfants et autres personnes à charge. Plusieurs sous-catégories de bénéficiaires du RSA sont également reproduites, en fonction de l’âge, de la situation familiale et du département de résidence.
Pour calculer ces indicateurs, les tables ménages, minimas sociaux et top_conj sont utilisées.
Remarque : la chaîne de caractère fournie à la fonction as.Date doit être de la forme “AAAA-MM-JJ”.
Le code proposé ci-dessous utilise sparklyr et dplyr.