From 5b132805cc1b31da55f62a7a2985f202266bd9e3 Mon Sep 17 00:00:00 2001 From: "daniel.kalioudjoglou" <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Tue, 18 Feb 2025 16:01:22 +0100 Subject: [PATCH 01/16] 1ere etape de script --- data-raw/chargement_eco_ptz.R | 175 ++++++++++++++---------------- data-raw/chargement_eco_ptz_old.R | 109 +++++++++++++++++++ 2 files changed, 188 insertions(+), 96 deletions(-) create mode 100644 data-raw/chargement_eco_ptz_old.R diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index a2c01e7..8f17c48 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -1,109 +1,92 @@ - # chargement_eco_ptz - -# librairies --------- -library(readxl) +# librairies -------------- library(tidyverse) -library(tricky) library(lubridate) +library(COGiter) +library(sf) +# library(tricky) library(DBI) library(RPostgreSQL) library(datalibaba) library(googlesheets4) +library(stringr) rm(list = ls()) -# chargement et calcul ----------- -# chargement des données Eco-PTZ (Eco Prêts à Taux Zéro) -------- -# fichier cree a partir d une requete geokit 3 : -# "Dossiers publics/geokit3/Regions Pays de la Loire/DREAL/INDICATEURS TER DATA LAB/gk3_ECO_PTZ_france" -eco_ptz <- read_excel("extdata/gk3_eco_ptz.xlsx",sheet=1) %>% - set_standard_names()%>% - rename(date = date_d_emission_de_l_offre, - depcom = code_de_la_commune, - variable=eptz_libelle_nature_du_logement, - valeur=eptz_nombre_de_prets) %>% - select(depcom,date,variable,valeur)%>% - # filter(date>=2008) %>% - mutate(date=make_date(date,12,31))%>% - mutate(variable=str_replace(variable,'Maison individuelle', "nb_eptz.maison_individuelle") %>% - str_replace('Appartement',"nb_eptz.appartement"))%>% - mutate_if(is.character,as.factor) %>% - complete(depcom,date,variable,fill = list(valeur =0)) %>% - pivot_wider(names_from = variable,values_from = valeur) - - -# versement dans le sgbd/datamart.portrait_territoires ------------- -poster_data(data = eco_ptz, - db = "datamart", - schema = "portrait_territoires", - table = "source_eco_ptz", - post_row_name = FALSE, - overwrite = TRUE, - droits_schema = TRUE, - pk = c("depcom", "date"), # déclaration d'une clé primaire sur la table postée : on ne doit pas avoir deux lignes avec à la fois le même code commune et la meme date - user = "does") - -# METADONNEES------------------------------------ - -## On récupère la liste des variables qui sont à documenter dans le tableur google sheet à partir du jeu de données posté -var <- setdiff(names(eco_ptz), c("depcom", "date")) - -## récupération du nom du présent script source pour filtrer ensuite le référentiel des indicateurs -nom_script_sce <- rstudioapi::getActiveDocumentContext()$path %>% # utilisation de rstudioapi pour récupérer le nom du présent script - basename() %>% # on enlève le chemin d'accès pour ne garder que le nom du fichier - gsub(pattern = ".R$", "", .) # on enlève l'extension '.R' - -## authentification google sheet grâce au .Renviron -gs4_auth_configure(api_key = Sys.getenv("google_api_key")) -gs4_deauth() - - - -## chargement du référentiel indicateurs google sheet -metadata_indicateur <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", - sheet = "indicateurs") %>% - # on ne garde que les variables concernées par le présent script de chargement - filter(source == nom_script_sce) %>% - # on ajoute l'unité dans le libellé de la variable - mutate(libelle_variable = paste0(libelle_variable, " (unit\u00e9 : ", unite, ")")) %>% - select(variable, libelle_variable) %>% - # ajout des libellés pour depcom et date - bind_rows( - tribble( - ~variable, ~libelle_variable, - "depcom", "Code INSEE de la commune", - "date", "Millesime" - ) - ) - -## Vérification que la documentation des indicateurs est complète -all(var %in% metadata_indicateur$variable) # doit renvoyer TRUE - -## Envoi des libellés de variable dans le SGBD -post_dico_attr(dico = metadata_indicateur, table = "source_eco_ptz", schema = "portrait_territoires", - db = "datamart", user = "does") - -## Récupération des métadonnées de la source -nom_sce <- str_replace(nom_script_sce, "chargement_|ref_|specifique_", "") %>% - str_replace("indicateur_", "") %>% - str_replace("_cogiter|_cog$", "") - -metadata_source <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", - sheet = "sources") %>% - filter(source == nom_sce) %>% - mutate(com_table = paste0(source_lib, " - ", producteur, ".\n", descriptif_sources)) %>% - pull(com_table) %>% - # ajout de complement sur la généalogie - paste0(".\n", "Chargement des donn\u00e9es sur Geokit3") - -## commentaires de la table - -commenter_table(comment = metadata_source, - db = "datamart", - schema = "portrait_territoires", - table = "source_eco_ptz", - user = "does") +# a calculer +# Nombre d'eco-PTZ +# Nombre d'eco-PTZ par type de construction ( maison / appartement ) +# Nombre d'eco-PTZ par type de rénovation ( combles, murs, ...) + +# indicateurs utilisés +# DATP : Date d’émission de l’offre de prêt +# CINS : Code INSEE de la commune du logement +# CPLA : Code postal du logement +# VILL : Ville du logement +# ANAC : Année d’achèvement du logement +# NALO : Nature du logement +# MTTR : Montant total TTC des travaux +# DREZ : Durée de l’éco-prêt +# MTPR : Montant de l’éco-prêt (dernier déclaré) + +# paramêtres +millesime = 2023 #millesime du fichier +annee_conservee = 2013 # on supprime les années antérieures + +BASE_ECO_PTZ_DHUP<- read_delim(paste0("/nfs/data/partage-PTZ-EPTZ/PTZ-EPTZ/BASE_EPZ_DHUP_",millesime,"_DREAL.csv"), + delim = ";", escape_double = FALSE, trim_ws = TRUE) + +# suppression des années anciennes +base_intermediaire <- BASE_ECO_PTZ_DHUP %>% + mutate(DATP = str_sub(DATP,1,4)) %>% + filter (DATP >= annee_conservee) %>% + select(DATP,CINS,CPLA,VILL) + +#complétage du code insee +communes2 <- communes %>% #table des communes + select(DEPCOM,NOM_DEPCOM,DEP) %>% + mutate(NOM_DEPCOM = toupper(NOM_DEPCOM), #met tout en majuscules + NOM_DEPCOM = iconv(NOM_DEPCOM, from = "UTF-8", to = "ASCII//TRANSLIT"), #enlève les accents + NOM_DEPCOM = str_replace_all (NOM_DEPCOM,"[-']"," "), #remplace les tirets et apostrophes par des espaces + lien = paste(DEP,NOM_DEPCOM)) %>% + select(lien, DEPCOM) +communes3 <- communes2 %>% #creation d'une table dans laquelle on remplace "saint" par "st" + mutate(lien = str_replace (lien,"SAINTES","STES"), + lien = str_replace (lien,"SAINTE","STE"), + lien = str_replace (lien,"SAINTS","STS"), + lien = str_replace (lien,"SAINT","ST")) +communes2 <- rbind(communes2,communes3) %>% + unique() + +base_intermediaire2 <- base_intermediaire %>% + mutate(lien = paste(str_sub(CPLA,1,2),VILL)) %>% + left_join(communes2, by = "lien") + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data-raw/chargement_eco_ptz_old.R b/data-raw/chargement_eco_ptz_old.R new file mode 100644 index 0000000..a2c01e7 --- /dev/null +++ b/data-raw/chargement_eco_ptz_old.R @@ -0,0 +1,109 @@ + +# chargement_eco_ptz + + +# librairies --------- +library(readxl) +library(tidyverse) +library(tricky) +library(lubridate) +library(DBI) +library(RPostgreSQL) +library(datalibaba) +library(googlesheets4) + +rm(list = ls()) + +# chargement et calcul ----------- +# chargement des données Eco-PTZ (Eco Prêts à Taux Zéro) -------- +# fichier cree a partir d une requete geokit 3 : +# "Dossiers publics/geokit3/Regions Pays de la Loire/DREAL/INDICATEURS TER DATA LAB/gk3_ECO_PTZ_france" +eco_ptz <- read_excel("extdata/gk3_eco_ptz.xlsx",sheet=1) %>% + set_standard_names()%>% + rename(date = date_d_emission_de_l_offre, + depcom = code_de_la_commune, + variable=eptz_libelle_nature_du_logement, + valeur=eptz_nombre_de_prets) %>% + select(depcom,date,variable,valeur)%>% + # filter(date>=2008) %>% + mutate(date=make_date(date,12,31))%>% + mutate(variable=str_replace(variable,'Maison individuelle', "nb_eptz.maison_individuelle") %>% + str_replace('Appartement',"nb_eptz.appartement"))%>% + mutate_if(is.character,as.factor) %>% + complete(depcom,date,variable,fill = list(valeur =0)) %>% + pivot_wider(names_from = variable,values_from = valeur) + + +# versement dans le sgbd/datamart.portrait_territoires ------------- +poster_data(data = eco_ptz, + db = "datamart", + schema = "portrait_territoires", + table = "source_eco_ptz", + post_row_name = FALSE, + overwrite = TRUE, + droits_schema = TRUE, + pk = c("depcom", "date"), # déclaration d'une clé primaire sur la table postée : on ne doit pas avoir deux lignes avec à la fois le même code commune et la meme date + user = "does") + +# METADONNEES------------------------------------ + +## On récupère la liste des variables qui sont à documenter dans le tableur google sheet à partir du jeu de données posté +var <- setdiff(names(eco_ptz), c("depcom", "date")) + +## récupération du nom du présent script source pour filtrer ensuite le référentiel des indicateurs +nom_script_sce <- rstudioapi::getActiveDocumentContext()$path %>% # utilisation de rstudioapi pour récupérer le nom du présent script + basename() %>% # on enlève le chemin d'accès pour ne garder que le nom du fichier + gsub(pattern = ".R$", "", .) # on enlève l'extension '.R' + +## authentification google sheet grâce au .Renviron +gs4_auth_configure(api_key = Sys.getenv("google_api_key")) +gs4_deauth() + + + +## chargement du référentiel indicateurs google sheet +metadata_indicateur <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", + sheet = "indicateurs") %>% + # on ne garde que les variables concernées par le présent script de chargement + filter(source == nom_script_sce) %>% + # on ajoute l'unité dans le libellé de la variable + mutate(libelle_variable = paste0(libelle_variable, " (unit\u00e9 : ", unite, ")")) %>% + select(variable, libelle_variable) %>% + # ajout des libellés pour depcom et date + bind_rows( + tribble( + ~variable, ~libelle_variable, + "depcom", "Code INSEE de la commune", + "date", "Millesime" + ) + ) + +## Vérification que la documentation des indicateurs est complète +all(var %in% metadata_indicateur$variable) # doit renvoyer TRUE + +## Envoi des libellés de variable dans le SGBD +post_dico_attr(dico = metadata_indicateur, table = "source_eco_ptz", schema = "portrait_territoires", + db = "datamart", user = "does") + +## Récupération des métadonnées de la source +nom_sce <- str_replace(nom_script_sce, "chargement_|ref_|specifique_", "") %>% + str_replace("indicateur_", "") %>% + str_replace("_cogiter|_cog$", "") + +metadata_source <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", + sheet = "sources") %>% + filter(source == nom_sce) %>% + mutate(com_table = paste0(source_lib, " - ", producteur, ".\n", descriptif_sources)) %>% + pull(com_table) %>% + # ajout de complement sur la généalogie + paste0(".\n", "Chargement des donn\u00e9es sur Geokit3") + +## commentaires de la table + +commenter_table(comment = metadata_source, + db = "datamart", + schema = "portrait_territoires", + table = "source_eco_ptz", + user = "does") + + -- GitLab From 7f140b84f52d91070c7f08e397640a281ed95f15 Mon Sep 17 00:00:00 2001 From: "daniel.kalioudjoglou" <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Wed, 19 Feb 2025 17:29:24 +0100 Subject: [PATCH 02/16] creation des indicateurs --- data-raw/chargement_eco_ptz.R | 97 +++++++++++++++++++++++++++++++---- 1 file changed, 88 insertions(+), 9 deletions(-) diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index 8f17c48..7a1f179 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -22,14 +22,18 @@ rm(list = ls()) # indicateurs utilisés # DATP : Date d’émission de l’offre de prêt # CINS : Code INSEE de la commune du logement +# CSEN : # CPLA : Code postal du logement # VILL : Ville du logement +# NALO : Nature du logement: 1 = maison individuelle 2 = appartement +# TTRV : type de travaux + # ANAC : Année d’achèvement du logement -# NALO : Nature du logement # MTTR : Montant total TTC des travaux # DREZ : Durée de l’éco-prêt # MTPR : Montant de l’éco-prêt (dernier déclaré) + # paramêtres millesime = 2023 #millesime du fichier annee_conservee = 2013 # on supprime les années antérieures @@ -41,9 +45,20 @@ BASE_ECO_PTZ_DHUP<- read_delim(paste0("/nfs/data/partage-PTZ-EPTZ/PTZ-EPTZ/BASE_ base_intermediaire <- BASE_ECO_PTZ_DHUP %>% mutate(DATP = str_sub(DATP,1,4)) %>% filter (DATP >= annee_conservee) %>% - select(DATP,CINS,CPLA,VILL) + select(DATP,CINS,CPLA,VILL,NALO,TTRV,CSEN) %>% +# application des filtres +# CSEN est"V" (valide) +# si type de travaux (TTRV) = 4 (réhabilitation de système d’assainissement non collectif), +# la nature du logement (NALO) doit être égale à 1 (maison individuelle) + filter(CSEN == "V") %>% + mutate(NALO = case_when( + TTRV == "4" ~ 1, + TRUE~ NALO)) + + + -#complétage du code insee +#complétage du code insee-------------------------------------------------------- communes2 <- communes %>% #table des communes select(DEPCOM,NOM_DEPCOM,DEP) %>% mutate(NOM_DEPCOM = toupper(NOM_DEPCOM), #met tout en majuscules @@ -51,18 +66,82 @@ communes2 <- communes %>% #table des communes NOM_DEPCOM = str_replace_all (NOM_DEPCOM,"[-']"," "), #remplace les tirets et apostrophes par des espaces lien = paste(DEP,NOM_DEPCOM)) %>% select(lien, DEPCOM) -communes3 <- communes2 %>% #creation d'une table dans laquelle on remplace "saint" par "st" +communes2a <- communes2 %>% #creation d'une table dans laquelle on remplace "saint" par "st" mutate(lien = str_replace (lien,"SAINTES","STES"), lien = str_replace (lien,"SAINTE","STE"), lien = str_replace (lien,"SAINTS","STS"), - lien = str_replace (lien,"SAINT","ST")) -communes2 <- rbind(communes2,communes3) %>% + lien = str_replace (lien,"SAINT","ST") + ) +communes2b <- communes2 %>% #creation d'une table dans laquelle on remplace "saint" par "st" + mutate(lien = str_replace (lien,"LE ",""), + lien = str_replace (lien,"LES ",""), + lien = ifelse(str_detect(lien,"LA LONGEVILLE"), lien, str_replace (lien,"LA ","")), + # lien = str_replace (lien,"LA ",""), + lien = str_replace (lien,"L ","") + ) +communes2 <- rbind(communes2,communes2a,communes2b) %>% unique() -base_intermediaire2 <- base_intermediaire %>% - mutate(lien = paste(str_sub(CPLA,1,2),VILL)) %>% - left_join(communes2, by = "lien") +base_intermediaire2 <- base_intermediaire %>% + mutate(VILL = iconv(VILL, from = "UTF-8", to = "ASCII//TRANSLIT"), + VILL = toupper(VILL)) %>% #met tout en majuscules + mutate(lien = paste(ifelse(str_detect(CPLA,"^97"),str_sub(CPLA,1,3),str_sub(CPLA,1,2)),VILL)) %>% # SI DOM TOM (97) , prend les 3 premiers chiffres + mutate(lien = str_replace (lien,"SAINTES","STES"), + lien = str_replace (lien,"SAINTE","STE"), + lien = str_replace (lien,"SAINTS","STS"), + lien = str_replace (lien,"SAINT","ST"), + lien = str_replace_all (lien,"[-']"," "), #remplace les tirets et apostrophes par des espaces + ) %>% + left_join(communes2, by = "lien") %>% + mutate(CINS = case_when( + is.na(CINS)~ DEPCOM, + TRUE~ CINS)) +#fin complétage du code insee-------------------------------------------------------- +# après complétage, 1554 codes insee ne sont pas complétés +# à compléter pour tout remplir CINS + + +base_intermediaire3 <- base_intermediaire2 %>% + filter(!is.na(CINS)) %>% # filtre pour ne garder que les lignes avec code commune + select(date = DATP,DEPCOM = CINS, type_logt = NALO) %>% + mutate(type_logt = case_when( + type_logt == 1 ~ "individuel", + type_logt == 2 ~ "collectif", + TRUE ~ NA))%>% + arrange(DEPCOM) + +# dénombrement croisements type et état +eco_ptz1 <- base_intermediaire3 %>% + group_by(date,DEPCOM,type_logt) %>% + summarise(valeur = length(DEPCOM)) %>% + ungroup() +eco_ptz2 <- base_intermediaire3 %>% + group_by(date,DEPCOM) %>% + summarise(valeur = length(DEPCOM)) %>% + ungroup() %>% + mutate(type_logt = "total") %>% + select(date,DEPCOM,type_logt,valeur) +eco_ptz <- bind_rows( eco_ptz1,eco_ptz2) %>% + mutate(date=make_date(date,12,31)) %>% + filter(!str_starts(DEPCOM,"97"),!str_starts(DEPCOM,"98")) + + +# liste des communes de France +liste_communes_france <- communes %>% select(DEPCOM) %>% pull() %>% as.character() + +eco_ptz <- cogifier(eco_ptz, epci = F, departements = F,regions = F, metro = F) %>% + select (depcom = CodeZone, date, variable=type_logt, valeur) %>% + mutate(depcom = forcats::fct_drop(.data$depcom)) %>% #enlève les facteurs inutiles + mutate(depcom = fct_expand(depcom, liste_communes_france)) %>% + complete(depcom, date, variable, fill = list(valeur = 0)) %>% + filter(!str_starts(depcom,"97"),!str_starts(depcom,"98")) %>% + mutate(depcom = forcats::fct_drop(.data$depcom)) %>% #enlève les facteurs inutiles + pivot_wider(names_from = variable,values_from = valeur) + +save(eco_ptz,file="eco_ptz_chargement.RData") + + -- GitLab From a56d311e629f5e5dc789b67736e544e2d306b229 Mon Sep 17 00:00:00 2001 From: "daniel.kalioudjoglou" <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Wed, 19 Feb 2025 18:18:07 +0100 Subject: [PATCH 03/16] test sur les actions --- data-raw/chargement_eco_ptz.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index 7a1f179..2743d51 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -55,7 +55,9 @@ base_intermediaire <- BASE_ECO_PTZ_DHUP %>% TTRV == "4" ~ 1, TRUE~ NALO)) - +# repérage des actions +test_actions <- BASE_ECO_PTZ_DHUP %>% + select(DATP,CTA1,CTA2,CTA3,CTA4,CTA5,CTA6,CTTA1,CTTA2,CTTA3,CTTA4,CTTA5,CTTA6,CTTA7) #complétage du code insee-------------------------------------------------------- -- GitLab From 6fdfa966557316220e3c98f9dd8405ea1b195107 Mon Sep 17 00:00:00 2001 From: "daniel.kalioudjoglou" <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Fri, 21 Feb 2025 17:48:01 +0100 Subject: [PATCH 04/16] debut ajout des montants par type --- data-raw/chargement_eco_ptz.R | 108 ++++++++++++++++++++++++++++++---- 1 file changed, 97 insertions(+), 11 deletions(-) diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index 2743d51..8a18f82 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -33,6 +33,23 @@ rm(list = ls()) # DREZ : Durée de l’éco-prêt # MTPR : Montant de l’éco-prêt (dernier déclaré) +# Actions +# avant 2019 +# CTA1: isolation thermique des toitures +# CTA2: isolation thermique des murs +# CTA3: isolation thermique des parois vitrées et portes donnant sur l'extérieur +# CTA4: syst. chauf./PEC sanitaire +# CTA5: Equipts. chauf./énergie ren. +# CTA6: Equipts. PEC/énergi ren. +# à compter du 1/7/2019 +# CTTA1: isolation toiture +# CTTA2: isolation mur +# CTTA3: planchers bas +# CTTA4: isolation parois vitrées +# CTTA5: syst. chauf/PEC sanitaire +# CTTA6: équipts chauf/énergie renouvelable +# CTTA7: équipts PEC/énergie renouvelable + # paramêtres millesime = 2023 #millesime du fichier @@ -45,7 +62,7 @@ BASE_ECO_PTZ_DHUP<- read_delim(paste0("/nfs/data/partage-PTZ-EPTZ/PTZ-EPTZ/BASE_ base_intermediaire <- BASE_ECO_PTZ_DHUP %>% mutate(DATP = str_sub(DATP,1,4)) %>% filter (DATP >= annee_conservee) %>% - select(DATP,CINS,CPLA,VILL,NALO,TTRV,CSEN) %>% + select(DATP,CINS,CPLA,VILL,NALO,TTRV,CSEN,CTA1,CTA2,CTA3,CTA4,CTA5,CTA6,CTTA1,CTTA2,CTTA3,CTTA4,CTTA5,CTTA6,CTTA7) %>% # application des filtres # CSEN est"V" (valide) # si type de travaux (TTRV) = 4 (réhabilitation de système d’assainissement non collectif), @@ -53,11 +70,8 @@ base_intermediaire <- BASE_ECO_PTZ_DHUP %>% filter(CSEN == "V") %>% mutate(NALO = case_when( TTRV == "4" ~ 1, - TRUE~ NALO)) - -# repérage des actions -test_actions <- BASE_ECO_PTZ_DHUP %>% - select(DATP,CTA1,CTA2,CTA3,CTA4,CTA5,CTA6,CTTA1,CTTA2,CTTA3,CTTA4,CTTA5,CTTA6,CTTA7) + TRUE~ NALO)) %>% + select(-CSEN,-TTRV) #complétage du code insee-------------------------------------------------------- @@ -95,7 +109,6 @@ base_intermediaire2 <- base_intermediaire %>% lien = str_replace_all (lien,"[-']"," "), #remplace les tirets et apostrophes par des espaces ) %>% left_join(communes2, by = "lien") %>% - mutate(CINS = case_when( is.na(CINS)~ DEPCOM, TRUE~ CINS)) @@ -104,30 +117,103 @@ base_intermediaire2 <- base_intermediaire %>% # à compléter pour tout remplir CINS +#--------------------------------------------------------------------------------------------- + +# #test reconnaissance : marche pas +# retrouve_cinsee <- function(codepostal){ +# library(dplyr) +# library(httr) +# library(jsonlite) +# url <- "https://geo.api.gouv.fr/communes" +# response <- GET(url, query = list(codePostal = codepostal)) +# # response <- GET(url, query = list(codePostal = "35800")) +# c_insee <- fromJSON(content(response, "text")) +# +# if (length(c_insee) == 0) { +# return(NA) +# # return(data[[1]]$code) +# } else { +# c_insee2 <- c_insee %>% +# as.data.frame() %>% +# select(-codesPostaux) %>% +# # mutate(population) = as.numeric(population) %>% +# filter(population == max(population)) %>% +# select(nom) %>% pull() +# return(c_insee2) +# } +# } +# +# aaa <- retrouve_cinsee("35800") # ça ça fonctionne, mais pas pour la colonne +# +# +# base_intermediaire20 <- base_intermediaire %>% +# mutate(VILL = iconv(VILL, from = "UTF-8", to = "ASCII//TRANSLIT"), +# VILL = toupper(VILL)) +# base_intermediaire30 <- base_intermediaire20 %>% +# mutate(cinsee20 = retrouve_cinsee("35800")) +# base_intermediaire20$code_insee <- mapply(retrouve_cinsee, base_intermediaire20$CPLA) +# base_intermediaire20 <- base_intermediaire20 %>% +# mutate(code_insee = retrouve_cinsee(CPLA)) + +#--------------------------------------------------------------------------------------------- + base_intermediaire3 <- base_intermediaire2 %>% filter(!is.na(CINS)) %>% # filtre pour ne garder que les lignes avec code commune - select(date = DATP,DEPCOM = CINS, type_logt = NALO) %>% + select(-CPLA,-VILL,-lien,-DEPCOM) %>% + rename(date = "DATP",DEPCOM = "CINS", type_logt = "NALO") %>% mutate(type_logt = case_when( type_logt == 1 ~ "individuel", type_logt == 2 ~ "collectif", TRUE ~ NA))%>% arrange(DEPCOM) +# calculs nombre de prets individuels et collectifs-------------------------------------------------- # dénombrement croisements type et état -eco_ptz1 <- base_intermediaire3 %>% +eco_ptz1a <- base_intermediaire3 %>% group_by(date,DEPCOM,type_logt) %>% summarise(valeur = length(DEPCOM)) %>% ungroup() -eco_ptz2 <- base_intermediaire3 %>% +eco_ptz1b <- base_intermediaire3 %>% group_by(date,DEPCOM) %>% summarise(valeur = length(DEPCOM)) %>% ungroup() %>% mutate(type_logt = "total") %>% select(date,DEPCOM,type_logt,valeur) -eco_ptz <- bind_rows( eco_ptz1,eco_ptz2) %>% +eco_ptz1 <- bind_rows( eco_ptz1a,eco_ptz1b) %>% mutate(date=make_date(date,12,31)) %>% filter(!str_starts(DEPCOM,"97"),!str_starts(DEPCOM,"98")) +# calculs montants par type-------------------------------------------------- + +eco_ptz2a <- base_intermediaire3 %>% + select(-type_logt) %>% + group_by(date,DEPCOM) %>% + summarise(CTA1=sum(CTA1,na.rm=TRUE), + CTA2=sum(CTA2,na.rm=TRUE), + CTA3=sum(CTA3,na.rm=TRUE), + CTA4=sum(CTA4,na.rm=TRUE), + CTA5=sum(CTA5,na.rm=TRUE), + CTA6=sum(CTA6,na.rm=TRUE), + CTTA1=sum(CTTA1,na.rm=TRUE), + CTTA2=sum(CTTA2,na.rm=TRUE), + CTTA3=sum(CTTA3,na.rm=TRUE), + CTTA4=sum(CTTA4,na.rm=TRUE), + CTTA5=sum(CTTA5,na.rm=TRUE), + CTTA6=sum(CTTA6,na.rm=TRUE), + CTTA7=sum(CTTA7,na.rm=TRUE)) + +# faire cogification et ajouter zonages suppra + + + + + + + + + + + # liste des communes de France liste_communes_france <- communes %>% select(DEPCOM) %>% pull() %>% as.character() -- GitLab From 3f9c8d5f77e8fd05a9c4813651a369c76b78ed3c Mon Sep 17 00:00:00 2001 From: "daniel.kalioudjoglou" <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Mon, 24 Feb 2025 18:20:28 +0100 Subject: [PATCH 05/16] chargement et cogification debut indicateurs --- data-raw/chargement_eco_ptz.R | 131 +++++++++++++++++++++++--------- data-raw/cogification_eco_ptz.R | 111 ++++++++++++++------------- data-raw/indicateur_eco_ptz.R | 44 +++++++++++ 3 files changed, 197 insertions(+), 89 deletions(-) create mode 100644 data-raw/indicateur_eco_ptz.R diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index 8a18f82..da9c506 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -172,16 +172,15 @@ base_intermediaire3 <- base_intermediaire2 %>% eco_ptz1a <- base_intermediaire3 %>% group_by(date,DEPCOM,type_logt) %>% summarise(valeur = length(DEPCOM)) %>% - ungroup() + ungroup() %>% + rename(variable = type_logt) eco_ptz1b <- base_intermediaire3 %>% group_by(date,DEPCOM) %>% summarise(valeur = length(DEPCOM)) %>% ungroup() %>% mutate(type_logt = "total") %>% - select(date,DEPCOM,type_logt,valeur) -eco_ptz1 <- bind_rows( eco_ptz1a,eco_ptz1b) %>% - mutate(date=make_date(date,12,31)) %>% - filter(!str_starts(DEPCOM,"97"),!str_starts(DEPCOM,"98")) + select(date,DEPCOM,type_logt,valeur) %>% + rename(variable = type_logt) # calculs montants par type-------------------------------------------------- @@ -200,12 +199,25 @@ eco_ptz2a <- base_intermediaire3 %>% CTTA4=sum(CTTA4,na.rm=TRUE), CTTA5=sum(CTTA5,na.rm=TRUE), CTTA6=sum(CTTA6,na.rm=TRUE), - CTTA7=sum(CTTA7,na.rm=TRUE)) - -# faire cogification et ajouter zonages suppra - - + CTTA7=sum(CTTA7,na.rm=TRUE))%>% + pivot_longer(-c(date, DEPCOM), names_to = "variable", values_to = "valeur") %>% + ungroup() + +# calculs nombres par type-------------------------------------------------- +eco_ptz2b <- base_intermediaire3 %>% + select(-type_logt) +eco_ptz2b[eco_ptz2b == 0] <- NA +eco_ptz2b <- eco_ptz2b %>% + group_by(date,DEPCOM) %>% + summarise(across(everything(), ~ sum(!is.na(.)))) %>% + pivot_longer(-c(date, DEPCOM), names_to = "variable", values_to = "valeur") %>% + ungroup() %>% + mutate(variable = paste0("nb_",variable)) +# regroupements------------------------------------------------------------------ +eco_ptz <- bind_rows( eco_ptz1a,eco_ptz1b, eco_ptz2a,eco_ptz2b) %>% + mutate(date=make_date(date,12,31)) %>% + filter(!str_starts(DEPCOM,"97"),!str_starts(DEPCOM,"98")) @@ -218,8 +230,9 @@ eco_ptz2a <- base_intermediaire3 %>% # liste des communes de France liste_communes_france <- communes %>% select(DEPCOM) %>% pull() %>% as.character() +#cogifier, ajouter zonages supra et complete eco_ptz <- cogifier(eco_ptz, epci = F, departements = F,regions = F, metro = F) %>% - select (depcom = CodeZone, date, variable=type_logt, valeur) %>% + select (depcom = CodeZone, date, variable, valeur) %>% mutate(depcom = forcats::fct_drop(.data$depcom)) %>% #enlève les facteurs inutiles mutate(depcom = fct_expand(depcom, liste_communes_france)) %>% complete(depcom, date, variable, fill = list(valeur = 0)) %>% @@ -230,30 +243,76 @@ eco_ptz <- cogifier(eco_ptz, epci = F, departements = F,regions = F, metro = F) save(eco_ptz,file="eco_ptz_chargement.RData") - - - - - - - - - - - - - - - - - - - - - - - - - +# # versement dans le sgbd/datamart.portrait_territoires ------------- +# poster_data(data = eco_ptz, +# db = "datamart", +# schema = "portrait_territoires", +# table = "source_eco_ptz", +# post_row_name = FALSE, +# overwrite = TRUE, +# droits_schema = TRUE, +# pk = c("depcom", "date"), # déclaration d'une clé primaire sur la table postée : on ne doit pas avoir deux lignes avec à la fois le même code commune et la meme date +# user = "does") +# +# # METADONNEES------------------------------------ +# +# ## On récupère la liste des variables qui sont à documenter dans le tableur google sheet à partir du jeu de données posté +# var <- setdiff(names(eco_ptz), c("depcom", "date")) +# +# ## récupération du nom du présent script source pour filtrer ensuite le référentiel des indicateurs +# nom_script_sce <- rstudioapi::getActiveDocumentContext()$path %>% # utilisation de rstudioapi pour récupérer le nom du présent script +# basename() %>% # on enlève le chemin d'accès pour ne garder que le nom du fichier +# gsub(pattern = ".R$", "", .) # on enlève l'extension '.R' +# +# ## authentification google sheet grâce au .Renviron +# gs4_auth_configure(api_key = Sys.getenv("google_api_key")) +# gs4_deauth() +# +# +# +# ## chargement du référentiel indicateurs google sheet +# metadata_indicateur <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", +# sheet = "indicateurs") %>% +# # on ne garde que les variables concernées par le présent script de chargement +# filter(source == nom_script_sce) %>% +# # on ajoute l'unité dans le libellé de la variable +# mutate(libelle_variable = paste0(libelle_variable, " (unit\u00e9 : ", unite, ")")) %>% +# select(variable, libelle_variable) %>% +# # ajout des libellés pour depcom et date +# bind_rows( +# tribble( +# ~variable, ~libelle_variable, +# "depcom", "Code INSEE de la commune", +# "date", "Millesime" +# ) +# ) +# +# ## Vérification que la documentation des indicateurs est complète +# all(var %in% metadata_indicateur$variable) # doit renvoyer TRUE +# +# ## Envoi des libellés de variable dans le SGBD +# post_dico_attr(dico = metadata_indicateur, table = "source_eco_ptz", schema = "portrait_territoires", +# db = "datamart", user = "does") +# +# ## Récupération des métadonnées de la source +# nom_sce <- str_replace(nom_script_sce, "chargement_|ref_|specifique_", "") %>% +# str_replace("indicateur_", "") %>% +# str_replace("_cogiter|_cog$", "") +# +# metadata_source <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", +# sheet = "sources") %>% +# filter(source == nom_sce) %>% +# mutate(com_table = paste0(source_lib, " - ", producteur, ".\n", descriptif_sources)) %>% +# pull(com_table) %>% +# # ajout de complement sur la généalogie +# paste0(".\n", "Chargement des donn\u00e9es sur Geokit3") +# +# ## commentaires de la table +# +# commenter_table(comment = metadata_source, +# db = "datamart", +# schema = "portrait_territoires", +# table = "source_eco_ptz", +# user = "does") diff --git a/data-raw/cogification_eco_ptz.R b/data-raw/cogification_eco_ptz.R index 724368c..97b0cb7 100644 --- a/data-raw/cogification_eco_ptz.R +++ b/data-raw/cogification_eco_ptz.R @@ -11,61 +11,66 @@ library(datalibaba) rm(list = ls()) -source_eco_ptz <- importer_data(db = "datamart", - schema = "portrait_territoires", - table = "source_eco_ptz") +load("eco_ptz_chargement.RData") +source_eco_ptz <- eco_ptz + +# source_eco_ptz <- importer_data(db = "datamart", +# schema = "portrait_territoires", +# table = "source_eco_ptz") cogifiee_eco_ptz<-cogifier(source_eco_ptz %>% rename(DEPCOM=depcom))%>% mutate_if(is.factor,as.character) -poster_data(data = cogifiee_eco_ptz, - db = "datamart", - schema = "portrait_territoires", - table = "cogifiee_eco_ptz", - pk = c("TypeZone", "Zone", "CodeZone", "date"), - post_row_name = FALSE, - overwrite = TRUE, - droits_schema = TRUE, - user = "does") - -# commentaires de la table et des variables ------------- - -# récupération des commentaires de la table source -dico_var <- get_table_comments( - db = "datamart", - schema = "portrait_territoires", - table = "source_eco_ptz", - user = "does") - -# commentaire de la table -comm_table <- filter(dico_var, is.na(nom_col)) %>% - pull(commentaire) %>% - gsub("\nCommentaire.*$", "", .) - -commenter_table( - comment = comm_table, - db = "datamart", - schema = "portrait_territoires", - table = "cogifiee_eco_ptz", - user = "does" -) - -# commentaire des variables -comm_champ <- select(dico_var, nom_col, commentaire) %>% - filter(!is.na(nom_col), nom_col != "depcom") %>% - bind_rows( - tribble( - ~nom_col, ~commentaire, - "TypeZone", "Type de territoire", - "Zone", " Nom du territoire", - "CodeZone", "Code INSEE du territoire" - ) - ) +save(cogifiee_eco_ptz,file="eco_ptz_cogifiee.RData") -post_dico_attr( - dico = comm_champ, - db = "datamart", - schema = "portrait_territoires", - table = "cogifiee_eco_ptz", - user = "does" -) +# poster_data(data = cogifiee_eco_ptz, +# db = "datamart", +# schema = "portrait_territoires", +# table = "cogifiee_eco_ptz", +# pk = c("TypeZone", "Zone", "CodeZone", "date"), +# post_row_name = FALSE, +# overwrite = TRUE, +# droits_schema = TRUE, +# user = "does") +# +# # commentaires de la table et des variables ------------- +# +# # récupération des commentaires de la table source +# dico_var <- get_table_comments( +# db = "datamart", +# schema = "portrait_territoires", +# table = "source_eco_ptz", +# user = "does") +# +# # commentaire de la table +# comm_table <- filter(dico_var, is.na(nom_col)) %>% +# pull(commentaire) %>% +# gsub("\nCommentaire.*$", "", .) +# +# commenter_table( +# comment = comm_table, +# db = "datamart", +# schema = "portrait_territoires", +# table = "cogifiee_eco_ptz", +# user = "does" +# ) +# +# # commentaire des variables +# comm_champ <- select(dico_var, nom_col, commentaire) %>% +# filter(!is.na(nom_col), nom_col != "depcom") %>% +# bind_rows( +# tribble( +# ~nom_col, ~commentaire, +# "TypeZone", "Type de territoire", +# "Zone", " Nom du territoire", +# "CodeZone", "Code INSEE du territoire" +# ) +# ) +# +# post_dico_attr( +# dico = comm_champ, +# db = "datamart", +# schema = "portrait_territoires", +# table = "cogifiee_eco_ptz", +# user = "does" +# ) diff --git a/data-raw/indicateur_eco_ptz.R b/data-raw/indicateur_eco_ptz.R new file mode 100644 index 0000000..f887fb4 --- /dev/null +++ b/data-raw/indicateur_eco_ptz.R @@ -0,0 +1,44 @@ + +# indicateur_eco_ptz + +# librairies ------------- +library(dplyr) +library(tidyr) +library(lubridate) +library(COGiter) +library(DBI) +library(RPostgreSQL) +library(datalibaba) +library(googlesheets4) +library(purrr) +library(stringr) + +rm(list=ls()) + +# # chargement data ------------- +# cogifiee_eco_ptz <- importer_data(db = "datamart", +# schema = "portrait_territoires", +# table = "cogifiee_eco_ptz") +load("eco_ptz_cogifiee.RData") + +data_cogifiee<-pivot_longer(cogifiee_eco_ptz, + cols = CTA1 : total, + names_to = "variable", + values_to = "valeur") %>% + mutate_if(is.character,as.factor) + +## authentification google sheet grâce au .Renviron +gs4_auth_configure(api_key = Sys.getenv("google_api_key")) +gs4_deauth() + + +# supprimer les colonnes individuel, collectif et total +# calculer pour table nombre et table montants, le taux de chaque CTA (group byTypeZone code zone, zone, date) +# mutate taux =(valeur/sum(valeur)) +#supprimer les lignes de calcul +# regrouper les 2 tableaux + + + + + -- GitLab From 7cba2ce4345e288a667abc0264bedc0d6cc94ad2 Mon Sep 17 00:00:00 2001 From: "daniel.kalioudjoglou" <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Tue, 25 Feb 2025 16:00:39 +0100 Subject: [PATCH 06/16] fin de creation des indicateurs --- data-raw/chargement_eco_ptz.R | 59 ++++++++++++------- data-raw/indicateur_eco_ptz.R | 107 +++++++++++++++++++++++++++++++--- 2 files changed, 135 insertions(+), 31 deletions(-) diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index da9c506..2683870 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -184,28 +184,51 @@ eco_ptz1b <- base_intermediaire3 %>% # calculs montants par type-------------------------------------------------- +# eco_ptz2a <- base_intermediaire3 %>% +# select(-type_logt) %>% +# group_by(date,DEPCOM) %>% +# summarise(CTA1=sum(CTA1,na.rm=TRUE), +# CTA2=sum(CTA2,na.rm=TRUE), +# CTA3=sum(CTA3,na.rm=TRUE), +# CTA4=sum(CTA4,na.rm=TRUE), +# CTA5=sum(CTA5,na.rm=TRUE), +# CTA6=sum(CTA6,na.rm=TRUE), +# CTTA1=sum(CTTA1,na.rm=TRUE), +# CTTA2=sum(CTTA2,na.rm=TRUE), +# CTTA3=sum(CTTA3,na.rm=TRUE), +# CTTA4=sum(CTTA4,na.rm=TRUE), +# CTTA5=sum(CTTA5,na.rm=TRUE), +# CTTA6=sum(CTTA6,na.rm=TRUE), +# CTTA7=sum(CTTA7,na.rm=TRUE))%>% +# pivot_longer(-c(date, DEPCOM), names_to = "variable", values_to = "valeur") %>% +# ungroup() + eco_ptz2a <- base_intermediaire3 %>% select(-type_logt) %>% group_by(date,DEPCOM) %>% - summarise(CTA1=sum(CTA1,na.rm=TRUE), - CTA2=sum(CTA2,na.rm=TRUE), - CTA3=sum(CTA3,na.rm=TRUE), - CTA4=sum(CTA4,na.rm=TRUE), - CTA5=sum(CTA5,na.rm=TRUE), - CTA6=sum(CTA6,na.rm=TRUE), - CTTA1=sum(CTTA1,na.rm=TRUE), - CTTA2=sum(CTTA2,na.rm=TRUE), + summarise(CTTA1=sum(CTTA1,na.rm=TRUE)+sum(CTA1,na.rm=TRUE), + CTTA2=sum(CTTA2,na.rm=TRUE)+sum(CTA2,na.rm=TRUE), CTTA3=sum(CTTA3,na.rm=TRUE), - CTTA4=sum(CTTA4,na.rm=TRUE), - CTTA5=sum(CTTA5,na.rm=TRUE), - CTTA6=sum(CTTA6,na.rm=TRUE), - CTTA7=sum(CTTA7,na.rm=TRUE))%>% + CTTA4=sum(CTTA4,na.rm=TRUE)+sum(CTA3,na.rm=TRUE), + CTTA5=sum(CTTA5,na.rm=TRUE)+sum(CTA4,na.rm=TRUE), + CTTA6=sum(CTTA6,na.rm=TRUE)+sum(CTA5,na.rm=TRUE), + CTTA7=sum(CTTA7,na.rm=TRUE)+sum(CTA6,na.rm=TRUE))%>% pivot_longer(-c(date, DEPCOM), names_to = "variable", values_to = "valeur") %>% - ungroup() + ungroup() + # calculs nombres par type-------------------------------------------------- +# eco_ptz2b <- base_intermediaire3 %>% +# select(-type_logt) eco_ptz2b <- base_intermediaire3 %>% - select(-type_logt) + mutate(CTTA1= CTTA1 + CTA1, + CTTA2= CTTA2 + CTA2, + CTTA3= CTTA3, + CTTA4= CTTA4 + CTA3, + CTTA5= CTTA5 + CTA4, + CTTA6= CTTA6 + CTA5, + CTTA7= CTTA7 + CTA6)%>% + select(-type_logt,-CTA1,-CTA2,-CTA3,-CTA4,-CTA5,-CTA6) eco_ptz2b[eco_ptz2b == 0] <- NA eco_ptz2b <- eco_ptz2b %>% group_by(date,DEPCOM) %>% @@ -219,14 +242,6 @@ eco_ptz <- bind_rows( eco_ptz1a,eco_ptz1b, eco_ptz2a,eco_ptz2b) %>% mutate(date=make_date(date,12,31)) %>% filter(!str_starts(DEPCOM,"97"),!str_starts(DEPCOM,"98")) - - - - - - - - # liste des communes de France liste_communes_france <- communes %>% select(DEPCOM) %>% pull() %>% as.character() diff --git a/data-raw/indicateur_eco_ptz.R b/data-raw/indicateur_eco_ptz.R index f887fb4..71beed1 100644 --- a/data-raw/indicateur_eco_ptz.R +++ b/data-raw/indicateur_eco_ptz.R @@ -22,21 +22,110 @@ rm(list=ls()) load("eco_ptz_cogifiee.RData") data_cogifiee<-pivot_longer(cogifiee_eco_ptz, - cols = CTA1 : total, + cols = collectif : total, names_to = "variable", values_to = "valeur") %>% mutate_if(is.character,as.factor) -## authentification google sheet grâce au .Renviron -gs4_auth_configure(api_key = Sys.getenv("google_api_key")) -gs4_deauth() +#table des montants +data_montants <- data_cogifiee %>% + filter( grepl("^CT", variable)) %>% + group_by(TypeZone,Zone,CodeZone,date) %>% + mutate(valeur = round(valeur/sum(valeur)*100,2), + variable = paste("part_montant_",variable)) %>% + ungroup() +# table des nombres +data_nombre <- data_cogifiee %>% + filter( grepl("^nb", variable)) %>% + group_by(TypeZone,Zone,CodeZone,date) %>% + mutate(valeur = round(valeur/sum(valeur)*100,2), + variable = paste("part_",variable)) %>% + ungroup() -# supprimer les colonnes individuel, collectif et total -# calculer pour table nombre et table montants, le taux de chaque CTA (group byTypeZone code zone, zone, date) -# mutate taux =(valeur/sum(valeur)) -#supprimer les lignes de calcul -# regrouper les 2 tableaux +# regroupement des tables +indicateur_eco_ptz <- bind_rows(data_montants,data_nombre) +indicateur_eco_ptz$valeur<-na_if(indicateur_eco_ptz$valeur,NaN) +indicateur_eco_ptz <- indicateur_eco_ptz %>% + pivot_wider(names_from = variable,values_from = valeur) + +save(indicateur_eco_ptz,file="eco_ptz_indicateurs.RData") + + + +# # versement dans le sgbd/datamart.portrait_territoires ------------- +# poster_data(data = indicateur_eco_ptz, +# db = "datamart", +# schema = "portrait_territoires", +# table = "indicateur_eco_ptz", +# pk = c("TypeZone", "Zone", "CodeZone", "date"), +# post_row_name = FALSE, +# overwrite = TRUE, +# droits_schema = TRUE, +# user = "does") +# +# # METADONNEES------------------------------------ +# +# ## On récupère la liste des variables qui sont à documenter dans le tableur google sheet à partir du jeu de données posté +# var <- setdiff(names(indicateur_eco_ptz), c("TypeZone", "Zone" , "CodeZone" , "date")) +# +# ## récupération du nom du présent script source pour filtrer ensuite le référentiel des indicateurs +# nom_script_sce <- rstudioapi::getActiveDocumentContext()$path %>% # utilisation de rstudioapi pour récupérer le nom du présent script +# basename() %>% # on enlève le chemin d'accès pour ne garder que le nom du fichier +# gsub(pattern = ".R$", "", .) # on enlève l'extension '.R' +# +# ## authentification google sheet grâce au .Renviron +# gs4_auth_configure(api_key = Sys.getenv("google_api_key")) +# gs4_deauth() +# +# +# +# ## chargement du référentiel indicateurs google sheet +# metadata_indicateur <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", +# sheet = "indicateurs") %>% +# # on ne garde que les variables concernées par le présent script de chargement +# filter(source == nom_script_sce) %>% +# # on ajoute l'unité dans le libellé de la variable +# mutate(libelle_variable = paste0(libelle_variable, " (unit\u00e9 : ", unite, ")")) %>% +# select(variable, libelle_variable) %>% +# # ajout des libellés pour depcom et date +# bind_rows( +# tribble( +# ~variable, ~libelle_variable, +# "TypeZone", "Type de territoire", +# "Zone", " Nom du territoire", +# "CodeZone", "Code INSEE du territoire", +# "date", "Millesime" +# ) +# ) +# +# ## Vérification que la documentation des indicateurs est complète +# all(var %in% metadata_indicateur$variable) # doit renvoyer TRUE +# +# ## Envoi des libellés de variable dans le SGBD +# post_dico_attr(dico = metadata_indicateur, table = "indicateur_eco_ptz", schema = "portrait_territoires", +# db = "datamart", user = "does") +# +# ## Récupération des métadonnées de la source +# nom_sce <- str_replace(nom_script_sce, "chargement_|ref_|specifique_", "") %>% +# str_replace("indicateur_", "") %>% +# str_replace("_cogiter|_cog$", "") +# +# metadata_source <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", +# sheet = "sources") %>% +# filter(source == nom_sce) %>% +# mutate(com_table = paste0(source_lib, " - ", producteur, ".\n", descriptif_sources)) %>% +# pull(com_table) %>% +# # ajout de complement sur la généalogie +# paste0(".\n", "Chargement des donn\u00e9es sur serveur rstudio CGDD") +# +# ## commentaires de la table +# +# commenter_table(comment = metadata_source, +# db = "datamart", +# schema = "portrait_territoires", +# table = "indicateur_eco_ptz", +# user = "does") -- GitLab From 3e96ed3a8f73ae4be637c1da3fdc86822c42e109 Mon Sep 17 00:00:00 2001 From: "daniel.kalioudjoglou" <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Fri, 28 Feb 2025 16:58:09 +0100 Subject: [PATCH 07/16] modification des identifiants --- data-raw/chargement_eco_ptz.R | 62 ++++++----------- data-raw/chargement_eco_ptz_old.R | 109 ------------------------------ data-raw/indicateur_eco_ptz.R | 10 +-- 3 files changed, 26 insertions(+), 155 deletions(-) delete mode 100644 data-raw/chargement_eco_ptz_old.R diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index 2683870..70d8506 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -56,7 +56,8 @@ millesime = 2023 #millesime du fichier annee_conservee = 2013 # on supprime les années antérieures BASE_ECO_PTZ_DHUP<- read_delim(paste0("/nfs/data/partage-PTZ-EPTZ/PTZ-EPTZ/BASE_EPZ_DHUP_",millesime,"_DREAL.csv"), - delim = ";", escape_double = FALSE, trim_ws = TRUE) + delim = ";", escape_double = FALSE, locale = locale(decimal_mark = ","), trim_ws = TRUE) + # suppression des années anciennes base_intermediaire <- BASE_ECO_PTZ_DHUP %>% @@ -92,7 +93,6 @@ communes2b <- communes2 %>% #creation d'une table dans laquelle on remplace "s mutate(lien = str_replace (lien,"LE ",""), lien = str_replace (lien,"LES ",""), lien = ifelse(str_detect(lien,"LA LONGEVILLE"), lien, str_replace (lien,"LA ","")), - # lien = str_replace (lien,"LA ",""), lien = str_replace (lien,"L ","") ) communes2 <- rbind(communes2,communes2a,communes2b) %>% @@ -162,8 +162,8 @@ base_intermediaire3 <- base_intermediaire2 %>% select(-CPLA,-VILL,-lien,-DEPCOM) %>% rename(date = "DATP",DEPCOM = "CINS", type_logt = "NALO") %>% mutate(type_logt = case_when( - type_logt == 1 ~ "individuel", - type_logt == 2 ~ "collectif", + type_logt == 1 ~ "nb_eptz.maison_individuelle", + type_logt == 2 ~ "nb_eptz.appartement", TRUE ~ NA))%>% arrange(DEPCOM) @@ -178,57 +178,37 @@ eco_ptz1b <- base_intermediaire3 %>% group_by(date,DEPCOM) %>% summarise(valeur = length(DEPCOM)) %>% ungroup() %>% - mutate(type_logt = "total") %>% + mutate(type_logt = "nb_eptz.total") %>% select(date,DEPCOM,type_logt,valeur) %>% rename(variable = type_logt) # calculs montants par type-------------------------------------------------- -# eco_ptz2a <- base_intermediaire3 %>% -# select(-type_logt) %>% -# group_by(date,DEPCOM) %>% -# summarise(CTA1=sum(CTA1,na.rm=TRUE), -# CTA2=sum(CTA2,na.rm=TRUE), -# CTA3=sum(CTA3,na.rm=TRUE), -# CTA4=sum(CTA4,na.rm=TRUE), -# CTA5=sum(CTA5,na.rm=TRUE), -# CTA6=sum(CTA6,na.rm=TRUE), -# CTTA1=sum(CTTA1,na.rm=TRUE), -# CTTA2=sum(CTTA2,na.rm=TRUE), -# CTTA3=sum(CTTA3,na.rm=TRUE), -# CTTA4=sum(CTTA4,na.rm=TRUE), -# CTTA5=sum(CTTA5,na.rm=TRUE), -# CTTA6=sum(CTTA6,na.rm=TRUE), -# CTTA7=sum(CTTA7,na.rm=TRUE))%>% -# pivot_longer(-c(date, DEPCOM), names_to = "variable", values_to = "valeur") %>% -# ungroup() - eco_ptz2a <- base_intermediaire3 %>% select(-type_logt) %>% group_by(date,DEPCOM) %>% - summarise(CTTA1=sum(CTTA1,na.rm=TRUE)+sum(CTA1,na.rm=TRUE), - CTTA2=sum(CTTA2,na.rm=TRUE)+sum(CTA2,na.rm=TRUE), - CTTA3=sum(CTTA3,na.rm=TRUE), - CTTA4=sum(CTTA4,na.rm=TRUE)+sum(CTA3,na.rm=TRUE), - CTTA5=sum(CTTA5,na.rm=TRUE)+sum(CTA4,na.rm=TRUE), - CTTA6=sum(CTTA6,na.rm=TRUE)+sum(CTA5,na.rm=TRUE), - CTTA7=sum(CTTA7,na.rm=TRUE)+sum(CTA6,na.rm=TRUE))%>% + summarise(eptz.ctta1=sum(CTTA1,na.rm=TRUE)+sum(CTA1,na.rm=TRUE), + eptz.ctta2=sum(CTTA2,na.rm=TRUE)+sum(CTA2,na.rm=TRUE), + eptz.ctta3=sum(CTTA3,na.rm=TRUE), + eptz.ctta4=sum(CTTA4,na.rm=TRUE)+sum(CTA3,na.rm=TRUE), + eptz.ctta5=sum(CTTA5,na.rm=TRUE)+sum(CTA4,na.rm=TRUE), + eptz.ctta6=sum(CTTA6,na.rm=TRUE)+sum(CTA5,na.rm=TRUE), + eptz.ctta7=sum(CTTA7,na.rm=TRUE)+sum(CTA6,na.rm=TRUE))%>% pivot_longer(-c(date, DEPCOM), names_to = "variable", values_to = "valeur") %>% ungroup() # calculs nombres par type-------------------------------------------------- -# eco_ptz2b <- base_intermediaire3 %>% -# select(-type_logt) eco_ptz2b <- base_intermediaire3 %>% - mutate(CTTA1= CTTA1 + CTA1, - CTTA2= CTTA2 + CTA2, - CTTA3= CTTA3, - CTTA4= CTTA4 + CTA3, - CTTA5= CTTA5 + CTA4, - CTTA6= CTTA6 + CTA5, - CTTA7= CTTA7 + CTA6)%>% - select(-type_logt,-CTA1,-CTA2,-CTA3,-CTA4,-CTA5,-CTA6) + mutate(eptz.ctta1= CTTA1 + CTA1, + eptz.ctta2= CTTA2 + CTA2, + eptz.ctta3= CTTA3, + eptz.ctta4= CTTA4 + CTA3, + eptz.ctta5= CTTA5 + CTA4, + eptz.ctta6= CTTA6 + CTA5, + eptz.ctta7= CTTA7 + CTA6)%>% + select(date, DEPCOM,eptz.ctta1,eptz.ctta2,eptz.ctta3,eptz.ctta4, + eptz.ctta5,eptz.ctta6,eptz.ctta7) eco_ptz2b[eco_ptz2b == 0] <- NA eco_ptz2b <- eco_ptz2b %>% group_by(date,DEPCOM) %>% diff --git a/data-raw/chargement_eco_ptz_old.R b/data-raw/chargement_eco_ptz_old.R deleted file mode 100644 index a2c01e7..0000000 --- a/data-raw/chargement_eco_ptz_old.R +++ /dev/null @@ -1,109 +0,0 @@ - -# chargement_eco_ptz - - -# librairies --------- -library(readxl) -library(tidyverse) -library(tricky) -library(lubridate) -library(DBI) -library(RPostgreSQL) -library(datalibaba) -library(googlesheets4) - -rm(list = ls()) - -# chargement et calcul ----------- -# chargement des données Eco-PTZ (Eco Prêts à Taux Zéro) -------- -# fichier cree a partir d une requete geokit 3 : -# "Dossiers publics/geokit3/Regions Pays de la Loire/DREAL/INDICATEURS TER DATA LAB/gk3_ECO_PTZ_france" -eco_ptz <- read_excel("extdata/gk3_eco_ptz.xlsx",sheet=1) %>% - set_standard_names()%>% - rename(date = date_d_emission_de_l_offre, - depcom = code_de_la_commune, - variable=eptz_libelle_nature_du_logement, - valeur=eptz_nombre_de_prets) %>% - select(depcom,date,variable,valeur)%>% - # filter(date>=2008) %>% - mutate(date=make_date(date,12,31))%>% - mutate(variable=str_replace(variable,'Maison individuelle', "nb_eptz.maison_individuelle") %>% - str_replace('Appartement',"nb_eptz.appartement"))%>% - mutate_if(is.character,as.factor) %>% - complete(depcom,date,variable,fill = list(valeur =0)) %>% - pivot_wider(names_from = variable,values_from = valeur) - - -# versement dans le sgbd/datamart.portrait_territoires ------------- -poster_data(data = eco_ptz, - db = "datamart", - schema = "portrait_territoires", - table = "source_eco_ptz", - post_row_name = FALSE, - overwrite = TRUE, - droits_schema = TRUE, - pk = c("depcom", "date"), # déclaration d'une clé primaire sur la table postée : on ne doit pas avoir deux lignes avec à la fois le même code commune et la meme date - user = "does") - -# METADONNEES------------------------------------ - -## On récupère la liste des variables qui sont à documenter dans le tableur google sheet à partir du jeu de données posté -var <- setdiff(names(eco_ptz), c("depcom", "date")) - -## récupération du nom du présent script source pour filtrer ensuite le référentiel des indicateurs -nom_script_sce <- rstudioapi::getActiveDocumentContext()$path %>% # utilisation de rstudioapi pour récupérer le nom du présent script - basename() %>% # on enlève le chemin d'accès pour ne garder que le nom du fichier - gsub(pattern = ".R$", "", .) # on enlève l'extension '.R' - -## authentification google sheet grâce au .Renviron -gs4_auth_configure(api_key = Sys.getenv("google_api_key")) -gs4_deauth() - - - -## chargement du référentiel indicateurs google sheet -metadata_indicateur <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", - sheet = "indicateurs") %>% - # on ne garde que les variables concernées par le présent script de chargement - filter(source == nom_script_sce) %>% - # on ajoute l'unité dans le libellé de la variable - mutate(libelle_variable = paste0(libelle_variable, " (unit\u00e9 : ", unite, ")")) %>% - select(variable, libelle_variable) %>% - # ajout des libellés pour depcom et date - bind_rows( - tribble( - ~variable, ~libelle_variable, - "depcom", "Code INSEE de la commune", - "date", "Millesime" - ) - ) - -## Vérification que la documentation des indicateurs est complète -all(var %in% metadata_indicateur$variable) # doit renvoyer TRUE - -## Envoi des libellés de variable dans le SGBD -post_dico_attr(dico = metadata_indicateur, table = "source_eco_ptz", schema = "portrait_territoires", - db = "datamart", user = "does") - -## Récupération des métadonnées de la source -nom_sce <- str_replace(nom_script_sce, "chargement_|ref_|specifique_", "") %>% - str_replace("indicateur_", "") %>% - str_replace("_cogiter|_cog$", "") - -metadata_source <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", - sheet = "sources") %>% - filter(source == nom_sce) %>% - mutate(com_table = paste0(source_lib, " - ", producteur, ".\n", descriptif_sources)) %>% - pull(com_table) %>% - # ajout de complement sur la généalogie - paste0(".\n", "Chargement des donn\u00e9es sur Geokit3") - -## commentaires de la table - -commenter_table(comment = metadata_source, - db = "datamart", - schema = "portrait_territoires", - table = "source_eco_ptz", - user = "does") - - diff --git a/data-raw/indicateur_eco_ptz.R b/data-raw/indicateur_eco_ptz.R index 71beed1..37a77bb 100644 --- a/data-raw/indicateur_eco_ptz.R +++ b/data-raw/indicateur_eco_ptz.R @@ -22,25 +22,25 @@ rm(list=ls()) load("eco_ptz_cogifiee.RData") data_cogifiee<-pivot_longer(cogifiee_eco_ptz, - cols = collectif : total, + cols = eptz.ctta1 : nb_eptz.total, names_to = "variable", values_to = "valeur") %>% mutate_if(is.character,as.factor) #table des montants data_montants <- data_cogifiee %>% - filter( grepl("^CT", variable)) %>% + filter( grepl("^eptz.ct", variable)) %>% group_by(TypeZone,Zone,CodeZone,date) %>% mutate(valeur = round(valeur/sum(valeur)*100,2), - variable = paste("part_montant_",variable)) %>% + variable = paste0("part_montant_",variable)) %>% ungroup() # table des nombres data_nombre <- data_cogifiee %>% - filter( grepl("^nb", variable)) %>% + filter( grepl("^nb_eptz.ct", variable)) %>% group_by(TypeZone,Zone,CodeZone,date) %>% mutate(valeur = round(valeur/sum(valeur)*100,2), - variable = paste("part_",variable)) %>% + variable = paste0("part_",variable)) %>% ungroup() # regroupement des tables -- GitLab From 51f16704653d318feb94dc899270da33c9805b8e Mon Sep 17 00:00:00 2001 From: "daniel.kalioudjoglou" <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Mon, 3 Mar 2025 11:33:52 +0100 Subject: [PATCH 08/16] ajout des chargements sgbd --- data-raw/chargement_eco_ptz.R | 88 ++++------------------------ data-raw/cogification_eco_ptz.R | 83 +++++++++----------------- data-raw/indicateur_eco_ptz.R | 100 +++++--------------------------- 3 files changed, 53 insertions(+), 218 deletions(-) diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index 70d8506..251780c 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -1,11 +1,10 @@ -# chargement_eco_ptz +# chargement_eco_ptz (a exécuter sur le serveur rstudio du SDES) # librairies -------------- library(tidyverse) library(lubridate) library(COGiter) library(sf) -# library(tricky) library(DBI) library(RPostgreSQL) library(datalibaba) @@ -235,79 +234,16 @@ eco_ptz <- cogifier(eco_ptz, epci = F, departements = F,regions = F, metro = F) mutate(depcom = forcats::fct_drop(.data$depcom)) %>% #enlève les facteurs inutiles pivot_wider(names_from = variable,values_from = valeur) -save(eco_ptz,file="eco_ptz_chargement.RData") - - -# # versement dans le sgbd/datamart.portrait_territoires ------------- -# poster_data(data = eco_ptz, -# db = "datamart", -# schema = "portrait_territoires", -# table = "source_eco_ptz", -# post_row_name = FALSE, -# overwrite = TRUE, -# droits_schema = TRUE, -# pk = c("depcom", "date"), # déclaration d'une clé primaire sur la table postée : on ne doit pas avoir deux lignes avec à la fois le même code commune et la meme date -# user = "does") -# -# # METADONNEES------------------------------------ -# -# ## On récupère la liste des variables qui sont à documenter dans le tableur google sheet à partir du jeu de données posté -# var <- setdiff(names(eco_ptz), c("depcom", "date")) -# -# ## récupération du nom du présent script source pour filtrer ensuite le référentiel des indicateurs -# nom_script_sce <- rstudioapi::getActiveDocumentContext()$path %>% # utilisation de rstudioapi pour récupérer le nom du présent script -# basename() %>% # on enlève le chemin d'accès pour ne garder que le nom du fichier -# gsub(pattern = ".R$", "", .) # on enlève l'extension '.R' -# -# ## authentification google sheet grâce au .Renviron -# gs4_auth_configure(api_key = Sys.getenv("google_api_key")) -# gs4_deauth() -# -# -# -# ## chargement du référentiel indicateurs google sheet -# metadata_indicateur <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", -# sheet = "indicateurs") %>% -# # on ne garde que les variables concernées par le présent script de chargement -# filter(source == nom_script_sce) %>% -# # on ajoute l'unité dans le libellé de la variable -# mutate(libelle_variable = paste0(libelle_variable, " (unit\u00e9 : ", unite, ")")) %>% -# select(variable, libelle_variable) %>% -# # ajout des libellés pour depcom et date -# bind_rows( -# tribble( -# ~variable, ~libelle_variable, -# "depcom", "Code INSEE de la commune", -# "date", "Millesime" -# ) -# ) -# -# ## Vérification que la documentation des indicateurs est complète -# all(var %in% metadata_indicateur$variable) # doit renvoyer TRUE -# -# ## Envoi des libellés de variable dans le SGBD -# post_dico_attr(dico = metadata_indicateur, table = "source_eco_ptz", schema = "portrait_territoires", -# db = "datamart", user = "does") -# -# ## Récupération des métadonnées de la source -# nom_sce <- str_replace(nom_script_sce, "chargement_|ref_|specifique_", "") %>% -# str_replace("indicateur_", "") %>% -# str_replace("_cogiter|_cog$", "") -# -# metadata_source <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", -# sheet = "sources") %>% -# filter(source == nom_sce) %>% -# mutate(com_table = paste0(source_lib, " - ", producteur, ".\n", descriptif_sources)) %>% -# pull(com_table) %>% -# # ajout de complement sur la généalogie -# paste0(".\n", "Chargement des donn\u00e9es sur Geokit3") -# -# ## commentaires de la table -# -# commenter_table(comment = metadata_source, -# db = "datamart", -# schema = "portrait_territoires", -# table = "source_eco_ptz", -# user = "does") +# save(eco_ptz,file="eco_ptz_chargement.RData") +# versement dans le sgbd EcoSQL/datamart.portrait_territoires ------------- +source("R/poster_documenter_data.R", encoding = "UTF-8") +poster_documenter_it( + df = eco_ptz, + nom_table_sgbd = "source_eco_ptz", + comm_source_en_plus = "Données chargées depuis le serveur RStudio du SDES pour les DREALs", + secret = TRUE, + user = Sys.getenv("user_ecosql_stat"), + serveur = Sys.getenv("server_ecosql") +) diff --git a/data-raw/cogification_eco_ptz.R b/data-raw/cogification_eco_ptz.R index 97b0cb7..345127d 100644 --- a/data-raw/cogification_eco_ptz.R +++ b/data-raw/cogification_eco_ptz.R @@ -8,69 +8,40 @@ library(RPostgreSQL) library(dplyr) library(COGiter) library(datalibaba) +library(googlesheets4) rm(list = ls()) -load("eco_ptz_chargement.RData") -source_eco_ptz <- eco_ptz +# process sans SGBD +# load("eco_ptz_chargement.RData") +# source_eco_ptz <- eco_ptz # source_eco_ptz <- importer_data(db = "datamart", # schema = "portrait_territoires", # table = "source_eco_ptz") -cogifiee_eco_ptz<-cogifier(source_eco_ptz %>% rename(DEPCOM=depcom))%>% - mutate_if(is.factor,as.character) +# process SGBD -save(cogifiee_eco_ptz,file="eco_ptz_cogifiee.RData") +# récupération des données sur EcoSQL +source_eco_ptz <- importer_data(db = "datamart", schema = "portrait_territoires", table = "source_eco_ptz") %>% + rename_with(.cols = any_of("depcom"), .fn = toupper) +# versement des données préparées sur le serveur du SDES sur SGBD DREAL +poster_documenter_it( + df = source_eco_ptz, + nom_table_sgbd = "source_eco_ptz", + comm_source_en_plus = "Données chargées depuis le serveur RStudio du SDES pour les DREALs", + secret = TRUE +) -# poster_data(data = cogifiee_eco_ptz, -# db = "datamart", -# schema = "portrait_territoires", -# table = "cogifiee_eco_ptz", -# pk = c("TypeZone", "Zone", "CodeZone", "date"), -# post_row_name = FALSE, -# overwrite = TRUE, -# droits_schema = TRUE, -# user = "does") -# -# # commentaires de la table et des variables ------------- -# -# # récupération des commentaires de la table source -# dico_var <- get_table_comments( -# db = "datamart", -# schema = "portrait_territoires", -# table = "source_eco_ptz", -# user = "does") -# -# # commentaire de la table -# comm_table <- filter(dico_var, is.na(nom_col)) %>% -# pull(commentaire) %>% -# gsub("\nCommentaire.*$", "", .) -# -# commenter_table( -# comment = comm_table, -# db = "datamart", -# schema = "portrait_territoires", -# table = "cogifiee_eco_ptz", -# user = "does" -# ) -# -# # commentaire des variables -# comm_champ <- select(dico_var, nom_col, commentaire) %>% -# filter(!is.na(nom_col), nom_col != "depcom") %>% -# bind_rows( -# tribble( -# ~nom_col, ~commentaire, -# "TypeZone", "Type de territoire", -# "Zone", " Nom du territoire", -# "CodeZone", "Code INSEE du territoire" -# ) -# ) -# -# post_dico_attr( -# dico = comm_champ, -# db = "datamart", -# schema = "portrait_territoires", -# table = "cogifiee_eco_ptz", -# user = "does" -# ) +# cogification et versement des données cogifiées dans le SGBD +eco_ptz <- cogifier_it(nom_source = "source_eco_ptz", secret = TRUE) + +# cogifiee_eco_ptz<-cogifier(source_eco_ptz %>% rename(DEPCOM=depcom))%>% +# mutate_if(is.factor,as.character) +# save(cogifiee_eco_ptz,file="eco_ptz_cogifiee.RData") + + +# versement dans le sgbd/datamart.portrait_territoires et metadonnee ------------- +poster_documenter_post_cogifier(source = "eco_ptz", + user = Sys.getenv("user_ecosql_stat"), + serveur = Sys.getenv("server_ecosql")) diff --git a/data-raw/indicateur_eco_ptz.R b/data-raw/indicateur_eco_ptz.R index 37a77bb..0d4eae0 100644 --- a/data-raw/indicateur_eco_ptz.R +++ b/data-raw/indicateur_eco_ptz.R @@ -15,11 +15,12 @@ library(stringr) rm(list=ls()) -# # chargement data ------------- -# cogifiee_eco_ptz <- importer_data(db = "datamart", -# schema = "portrait_territoires", -# table = "cogifiee_eco_ptz") -load("eco_ptz_cogifiee.RData") +# chargement data ------------- +cogifiee_eco_ptz <- importer_data(db = "datamart", + schema = "portrait_territoires", + table = "cogifiee_eco_ptz") + +# load("eco_ptz_cogifiee.RData") data_cogifiee<-pivot_longer(cogifiee_eco_ptz, cols = eptz.ctta1 : nb_eptz.total, @@ -49,85 +50,12 @@ indicateur_eco_ptz$valeur<-na_if(indicateur_eco_ptz$valeur,NaN) indicateur_eco_ptz <- indicateur_eco_ptz %>% pivot_wider(names_from = variable,values_from = valeur) -save(indicateur_eco_ptz,file="eco_ptz_indicateurs.RData") - - - -# # versement dans le sgbd/datamart.portrait_territoires ------------- -# poster_data(data = indicateur_eco_ptz, -# db = "datamart", -# schema = "portrait_territoires", -# table = "indicateur_eco_ptz", -# pk = c("TypeZone", "Zone", "CodeZone", "date"), -# post_row_name = FALSE, -# overwrite = TRUE, -# droits_schema = TRUE, -# user = "does") -# -# # METADONNEES------------------------------------ -# -# ## On récupère la liste des variables qui sont à documenter dans le tableur google sheet à partir du jeu de données posté -# var <- setdiff(names(indicateur_eco_ptz), c("TypeZone", "Zone" , "CodeZone" , "date")) -# -# ## récupération du nom du présent script source pour filtrer ensuite le référentiel des indicateurs -# nom_script_sce <- rstudioapi::getActiveDocumentContext()$path %>% # utilisation de rstudioapi pour récupérer le nom du présent script -# basename() %>% # on enlève le chemin d'accès pour ne garder que le nom du fichier -# gsub(pattern = ".R$", "", .) # on enlève l'extension '.R' -# -# ## authentification google sheet grâce au .Renviron -# gs4_auth_configure(api_key = Sys.getenv("google_api_key")) -# gs4_deauth() -# -# -# -# ## chargement du référentiel indicateurs google sheet -# metadata_indicateur <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", -# sheet = "indicateurs") %>% -# # on ne garde que les variables concernées par le présent script de chargement -# filter(source == nom_script_sce) %>% -# # on ajoute l'unité dans le libellé de la variable -# mutate(libelle_variable = paste0(libelle_variable, " (unit\u00e9 : ", unite, ")")) %>% -# select(variable, libelle_variable) %>% -# # ajout des libellés pour depcom et date -# bind_rows( -# tribble( -# ~variable, ~libelle_variable, -# "TypeZone", "Type de territoire", -# "Zone", " Nom du territoire", -# "CodeZone", "Code INSEE du territoire", -# "date", "Millesime" -# ) -# ) -# -# ## Vérification que la documentation des indicateurs est complète -# all(var %in% metadata_indicateur$variable) # doit renvoyer TRUE -# -# ## Envoi des libellés de variable dans le SGBD -# post_dico_attr(dico = metadata_indicateur, table = "indicateur_eco_ptz", schema = "portrait_territoires", -# db = "datamart", user = "does") -# -# ## Récupération des métadonnées de la source -# nom_sce <- str_replace(nom_script_sce, "chargement_|ref_|specifique_", "") %>% -# str_replace("indicateur_", "") %>% -# str_replace("_cogiter|_cog$", "") -# -# metadata_source <- read_sheet("https://docs.google.com/spreadsheets/d/1n-dhtrJM3JwFVz5WSEGOQzQ8A0G7VT_VcxDe5gh6zSo/edit#gid=60292277", -# sheet = "sources") %>% -# filter(source == nom_sce) %>% -# mutate(com_table = paste0(source_lib, " - ", producteur, ".\n", descriptif_sources)) %>% -# pull(com_table) %>% -# # ajout de complement sur la généalogie -# paste0(".\n", "Chargement des donn\u00e9es sur serveur rstudio CGDD") -# -# ## commentaires de la table -# -# commenter_table(comment = metadata_source, -# db = "datamart", -# schema = "portrait_territoires", -# table = "indicateur_eco_ptz", -# user = "does") - - - - +# save(indicateur_eco_ptz,file="eco_ptz_indicateurs.RData") +# versement dans le sgbd/datamart.portrait_territoires et metadonnées --------- +source("R/poster_documenter_ind.R", encoding = "UTF-8") +poster_documenter_ind( + df = indicateur_eco_ptz, + nom_table_sgbd = "indicateur_eco_ptz", + comm_source_en_plus = "Chargement des donn\u00e9es sur serveur rstudio CGDD" +) -- GitLab From 7559fc9e602af4286f890409645184f19ca97f87 Mon Sep 17 00:00:00 2001 From: Daniel Kalioudjoglou <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Thu, 6 Mar 2025 09:33:27 +0100 Subject: [PATCH 09/16] chargement dans sgbd --- data-raw/chargement_eco_ptz.R | 2 +- data-raw/cogification_eco_ptz.R | 32 +++++++++++++------------------- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index 251780c..8279623 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -244,6 +244,6 @@ poster_documenter_it( nom_table_sgbd = "source_eco_ptz", comm_source_en_plus = "Données chargées depuis le serveur RStudio du SDES pour les DREALs", secret = TRUE, - user = Sys.getenv("user_ecosql_stat"), + user = "ecosql_stat", serveur = Sys.getenv("server_ecosql") ) diff --git a/data-raw/cogification_eco_ptz.R b/data-raw/cogification_eco_ptz.R index 345127d..f0f1419 100644 --- a/data-raw/cogification_eco_ptz.R +++ b/data-raw/cogification_eco_ptz.R @@ -11,37 +11,31 @@ library(datalibaba) library(googlesheets4) rm(list = ls()) - -# process sans SGBD -# load("eco_ptz_chargement.RData") -# source_eco_ptz <- eco_ptz - -# source_eco_ptz <- importer_data(db = "datamart", -# schema = "portrait_territoires", -# table = "source_eco_ptz") +source("R/cogifier_it.R") +source("R/poster_doc_post_cogifier.R") +source("R/poster_documenter_data.R", encoding = "UTF-8") # process SGBD # récupération des données sur EcoSQL -source_eco_ptz <- importer_data(db = "datamart", schema = "portrait_territoires", table = "source_eco_ptz") %>% - rename_with(.cols = any_of("depcom"), .fn = toupper) +eco_ptz <- importer_data(db = "datamart", + schema = "portrait_territoires", + table = "source_eco_ptz", + user = "ecosql_stat", + server = Sys.getenv("server_ecosql")) %>% + # rename_with(.cols = any_of("depcom"), .fn = toupper) + # versement des données préparées sur le serveur du SDES sur SGBD DREAL poster_documenter_it( - df = source_eco_ptz, + df = eco_ptz, nom_table_sgbd = "source_eco_ptz", comm_source_en_plus = "Données chargées depuis le serveur RStudio du SDES pour les DREALs", secret = TRUE ) # cogification et versement des données cogifiées dans le SGBD -eco_ptz <- cogifier_it(nom_source = "source_eco_ptz", secret = TRUE) - -# cogifiee_eco_ptz<-cogifier(source_eco_ptz %>% rename(DEPCOM=depcom))%>% -# mutate_if(is.factor,as.character) -# save(cogifiee_eco_ptz,file="eco_ptz_cogifiee.RData") +cogifier_it(nom_source = "eco_ptz", secret = TRUE) # versement dans le sgbd/datamart.portrait_territoires et metadonnee ------------- -poster_documenter_post_cogifier(source = "eco_ptz", - user = Sys.getenv("user_ecosql_stat"), - serveur = Sys.getenv("server_ecosql")) +poster_documenter_post_cogifier(source = "eco_ptz") -- GitLab From 4ffcdafac515f22fa60db7250c55ed947fee9b8c Mon Sep 17 00:00:00 2001 From: "daniel.kalioudjoglou" <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Thu, 6 Mar 2025 15:43:51 +0100 Subject: [PATCH 10/16] modification des fonctions d export --- R/poster_doc_post_cogifier.R | 11 +++++++---- R/poster_documenter_data.R | 34 +++++++++++++++++----------------- R/poster_documenter_ind.R | 29 +++++++++++++++-------------- 3 files changed, 39 insertions(+), 35 deletions(-) diff --git a/R/poster_doc_post_cogifier.R b/R/poster_doc_post_cogifier.R index 8913a8e..5d026d6 100644 --- a/R/poster_doc_post_cogifier.R +++ b/R/poster_doc_post_cogifier.R @@ -4,17 +4,18 @@ library(dplyr) # une fonction pour propager les commentaires de tables et de champs à la table cogifiée -poster_documenter_post_cogifier <- function(source = "combustible_principal_rp") { +poster_documenter_post_cogifier <- function(source = "combustible_principal_rp", user = "does", serveur = NULL) { # creation du nom des tables tbl_source <- paste0("source_", source) tbl_cogifiee <- paste0("cogifiee_", source) # récupération des commentaires de la table source dico_var <- get_table_comments( + server = serveur, db = "datamart", schema = "portrait_territoires", table = tbl_source, - user = "does") + user = user) # commentaire de la table comm_table <- filter(dico_var, is.na(nom_col)) %>% @@ -22,11 +23,12 @@ poster_documenter_post_cogifier <- function(source = "combustible_principal_rp") gsub("\nCommentaire.*$", "", .) commenter_table( + server = serveur, comment = comm_table, db = "datamart", schema = "portrait_territoires", table = tbl_cogifiee, - user = "does" + user = user ) # commentaire des variables @@ -43,10 +45,11 @@ poster_documenter_post_cogifier <- function(source = "combustible_principal_rp") post_dico_attr( dico = comm_champ, + server = serveur, db = "datamart", schema = "portrait_territoires", table = tbl_cogifiee, - user = "does" + user = user ) } diff --git a/R/poster_documenter_data.R b/R/poster_documenter_data.R index c719eca..924d10d 100644 --- a/R/poster_documenter_data.R +++ b/R/poster_documenter_data.R @@ -1,7 +1,7 @@ library(datalibaba) library(googlesheets4) -poster_documenter_it <- function(df = pop10, nom_table_sgbd = "source_pop_rgp_insee", +poster_documenter_it <- function(df = pop10, nom_table_sgbd = "source_pop_rgp_insee", user = "does", serveur = NULL, secret = FALSE, comm_source_en_plus = "T\u00e9l\u00e9chargement depuis...") { # Vérif clé primaire : une ligne par commune et par date @@ -13,15 +13,15 @@ poster_documenter_it <- function(df = pop10, nom_table_sgbd = "source_pop_rgp_in # CHARGEMENT de la table dans le SGBD - datalibaba::poster_data(data = df, - db = "datamart", - schema = "portrait_territoires", - table = nom_table_sgbd, - post_row_name = FALSE, - overwrite = TRUE, - droits_schema = TRUE, - pk = c("depcom", "date"), # déclaration d'une clé primaire sur la table postée : on ne doit pas avoir deux lignes avec à la fois le même code commune et la meme date - user = "does") + datalibaba::poster_data(data = df, server = serveur, + db = "datamart", + schema = "portrait_territoires", + table = nom_table_sgbd, + post_row_name = FALSE, + overwrite = TRUE, + droits_schema = !secret, + pk = c("depcom", "date"), # déclaration d'une clé primaire sur la table postée : on ne doit pas avoir deux lignes avec à la fois le même code commune et la meme date + user = user) # RECUPERATION DES METADONNEES @@ -65,9 +65,9 @@ poster_documenter_it <- function(df = pop10, nom_table_sgbd = "source_pop_rgp_in "V\u00e9rifier si df contient bien toutes les variables attendues et adpatez le r\u00e9f\u00e9rentiel des indicateurs au besoin.")) - ## Envoi des libellés de variable dans le SGBD + ## Envoi des libellés de variable en commentaire de champ dans le SGBD datalibaba::post_dico_attr(dico = metadata_indicateur, table = nom_table_sgbd, schema = "portrait_territoires", - db = "datamart", user = "does") + db = "datamart", user = user, server = serveur) ## Récupération des métadonnées de la source nom_sce <- stringr::str_replace(nom_script_sce, "chargement_|ref_|specifique_", "") %>% @@ -84,12 +84,12 @@ poster_documenter_it <- function(df = pop10, nom_table_sgbd = "source_pop_rgp_in ## commentaires de la table - datalibaba::commenter_table(comment = metadata_source, - db = "datamart", - schema = "portrait_territoires", - table = nom_table_sgbd, - user = "does") + db = "datamart", + server = serveur, + schema = "portrait_territoires", + table = nom_table_sgbd, + user = user) } diff --git a/R/poster_documenter_ind.R b/R/poster_documenter_ind.R index cacdb64..e124a62 100644 --- a/R/poster_documenter_ind.R +++ b/R/poster_documenter_ind.R @@ -2,7 +2,7 @@ library(datalibaba) library(googlesheets4) poster_documenter_ind <- function(df = indicateur_bimotor_menages, nom_table_sgbd = "indicateur_bimotor_menages", - comm_source_en_plus = "", nom_script_sce = NULL) { + comm_source_en_plus = "", nom_script_sce = NULL, user = "does", serveur = NULL, secret = FALSE) { # Vérif clé primaire : une ligne par commune et par date doublons <- df %>% @@ -14,14 +14,15 @@ poster_documenter_ind <- function(df = indicateur_bimotor_menages, nom_table_sgb # CHARGEMENT de la table dans le SGBD datalibaba::poster_data(data = df, - db = "datamart", - schema = "portrait_territoires", - table = nom_table_sgbd, - post_row_name = FALSE, - overwrite = TRUE, - droits_schema = TRUE, - pk = c("TypeZone", "CodeZone", "date"), # déclaration d'une clé primaire sur la table postée : on ne doit pas avoir deux lignes avec à la fois la même zone et la meme date - user = "does") + server = serveur, + db = "datamart", + schema = "portrait_territoires", + table = nom_table_sgbd, + post_row_name = FALSE, + overwrite = TRUE, + droits_schema = !secret, + pk = c("TypeZone", "CodeZone", "date"), # déclaration d'une clé primaire sur la table postée : on ne doit pas avoir deux lignes avec à la fois la même zone et la meme date + user = use) # RECUPERATION DES METADONNEES @@ -76,7 +77,7 @@ poster_documenter_ind <- function(df = indicateur_bimotor_menages, nom_table_sgb ## Envoi des libellés de variable dans le SGBD datalibaba::post_dico_attr(dico = metadata_indicateur, table = nom_table_sgbd, schema = "portrait_territoires", - db = "datamart", user = "does") + db = "datamart", server = serveur, user = user) ## Récupération des métadonnées de la source nom_sce <- stringr::str_replace(nom_script_sce, "chargement_|ref_|specifique_", "") %>% @@ -96,10 +97,10 @@ poster_documenter_ind <- function(df = indicateur_bimotor_menages, nom_table_sgb ## commentaires de la table datalibaba::commenter_table(comment = metadata_source, - db = "datamart", - schema = "portrait_territoires", - table = nom_table_sgbd, - user = "does") + db = "datamart", + schema = "portrait_territoires", + table = nom_table_sgbd, + user = user, server = serveur) } -- GitLab From 12510229a543c710b74d313e8d553b0772affd03 Mon Sep 17 00:00:00 2001 From: Daniel Kalioudjoglou <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Thu, 6 Mar 2025 16:10:11 +0100 Subject: [PATCH 11/16] dernieres modifs --- R/cogifier_it.R | 6 +++--- data-raw/cogification_eco_ptz.R | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/R/cogifier_it.R b/R/cogifier_it.R index 039df16..c9f73b8 100644 --- a/R/cogifier_it.R +++ b/R/cogifier_it.R @@ -2,7 +2,7 @@ library(dplyr) library(COGiter) library(datalibaba) -cogifier_it <- function(nom_source = "besoins_chaleur_cerema", ...){ +cogifier_it <- function(nom_source = "besoins_chaleur_cerema", user = "does", serveur = NULL, secret = FALSE, ...){ df_source <- importer_data(db = "datamart", schema = "portrait_territoires", table = paste0("source_", nom_source)) %>% @@ -18,8 +18,8 @@ cogifier_it <- function(nom_source = "besoins_chaleur_cerema", ...){ pk = c("TypeZone", "Zone", "CodeZone", "date"), post_row_name = FALSE, overwrite = TRUE, - droits_schema = TRUE, - user = "does") + droits_schema = !secret, + user = user) return(df_cogifie) } diff --git a/data-raw/cogification_eco_ptz.R b/data-raw/cogification_eco_ptz.R index f0f1419..4cd0c22 100644 --- a/data-raw/cogification_eco_ptz.R +++ b/data-raw/cogification_eco_ptz.R @@ -22,7 +22,7 @@ eco_ptz <- importer_data(db = "datamart", schema = "portrait_territoires", table = "source_eco_ptz", user = "ecosql_stat", - server = Sys.getenv("server_ecosql")) %>% + server = Sys.getenv("server_ecosql")) # rename_with(.cols = any_of("depcom"), .fn = toupper) # versement des données préparées sur le serveur du SDES sur SGBD DREAL -- GitLab From f1a8d0af79596df4ba10e8d8dd8ed94f0824ddf7 Mon Sep 17 00:00:00 2001 From: Daniel Kalioudjoglou <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Tue, 25 Mar 2025 11:35:04 +0100 Subject: [PATCH 12/16] modification methode de chargement --- data-raw/chargement_eco_ptz.R | 33 +++++++++++++++++++++++++++++++++ data-raw/cogification_eco_ptz.R | 22 ---------------------- data-raw/indicateur_eco_ptz.R | 1 + 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index 8279623..9d7f49b 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -247,3 +247,36 @@ poster_documenter_it( user = "ecosql_stat", serveur = Sys.getenv("server_ecosql") ) + + +#------------------------------------------------------------------------------------------------------------------ +#------------------------------------------------------------------------------------------------------------------ +# 2e partie, à éxécuter sur le PC de bureau (hors serveur SDES) +#------------------------------------------------------------------------------------------------------------------ +#------------------------------------------------------------------------------------------------------------------ + +# librairies ------ +library(DBI) +library(RPostgreSQL) +library(dplyr) +library(COGiter) +library(datalibaba) +library(googlesheets4) + +rm(list = ls()) +source("R/poster_documenter_data.R", encoding = "UTF-8") + +# récupération des données sur EcoSQL +eco_ptz <- importer_data(db = "datamart", + schema = "portrait_territoires", + table = "source_eco_ptz", + user = "ecosql_stat", + server = Sys.getenv("server_ecosql")) + +# versement des données sur SGBD DREAL +poster_documenter_it( + df = eco_ptz, + nom_table_sgbd = "source_eco_ptz", + comm_source_en_plus = "Données chargées depuis le serveur RStudio du SDES pour les DREALs", + secret = TRUE +) diff --git a/data-raw/cogification_eco_ptz.R b/data-raw/cogification_eco_ptz.R index 4cd0c22..08b48d2 100644 --- a/data-raw/cogification_eco_ptz.R +++ b/data-raw/cogification_eco_ptz.R @@ -1,7 +1,5 @@ - # cogification_eco_ptz - # librairies ------ library(DBI) library(RPostgreSQL) @@ -13,29 +11,9 @@ library(googlesheets4) rm(list = ls()) source("R/cogifier_it.R") source("R/poster_doc_post_cogifier.R") -source("R/poster_documenter_data.R", encoding = "UTF-8") - -# process SGBD - -# récupération des données sur EcoSQL -eco_ptz <- importer_data(db = "datamart", - schema = "portrait_territoires", - table = "source_eco_ptz", - user = "ecosql_stat", - server = Sys.getenv("server_ecosql")) - # rename_with(.cols = any_of("depcom"), .fn = toupper) - -# versement des données préparées sur le serveur du SDES sur SGBD DREAL -poster_documenter_it( - df = eco_ptz, - nom_table_sgbd = "source_eco_ptz", - comm_source_en_plus = "Données chargées depuis le serveur RStudio du SDES pour les DREALs", - secret = TRUE -) # cogification et versement des données cogifiées dans le SGBD cogifier_it(nom_source = "eco_ptz", secret = TRUE) - # versement dans le sgbd/datamart.portrait_territoires et metadonnee ------------- poster_documenter_post_cogifier(source = "eco_ptz") diff --git a/data-raw/indicateur_eco_ptz.R b/data-raw/indicateur_eco_ptz.R index 0d4eae0..6c5d665 100644 --- a/data-raw/indicateur_eco_ptz.R +++ b/data-raw/indicateur_eco_ptz.R @@ -59,3 +59,4 @@ poster_documenter_ind( nom_table_sgbd = "indicateur_eco_ptz", comm_source_en_plus = "Chargement des donn\u00e9es sur serveur rstudio CGDD" ) + -- GitLab From 9f5e7e766b0a2a5e8208020f5bfd527f462bde7d Mon Sep 17 00:00:00 2001 From: Daniel Kalioudjoglou <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Tue, 25 Mar 2025 12:36:07 +0100 Subject: [PATCH 13/16] correction erreur dans fonction manque un r a user --- R/poster_documenter_ind.R | 2 +- data-raw/indicateur_eco_ptz.R | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/R/poster_documenter_ind.R b/R/poster_documenter_ind.R index e124a62..25d80b0 100644 --- a/R/poster_documenter_ind.R +++ b/R/poster_documenter_ind.R @@ -22,7 +22,7 @@ poster_documenter_ind <- function(df = indicateur_bimotor_menages, nom_table_sgb overwrite = TRUE, droits_schema = !secret, pk = c("TypeZone", "CodeZone", "date"), # déclaration d'une clé primaire sur la table postée : on ne doit pas avoir deux lignes avec à la fois la même zone et la meme date - user = use) + user = user) # RECUPERATION DES METADONNEES diff --git a/data-raw/indicateur_eco_ptz.R b/data-raw/indicateur_eco_ptz.R index 6c5d665..63cd2a8 100644 --- a/data-raw/indicateur_eco_ptz.R +++ b/data-raw/indicateur_eco_ptz.R @@ -50,8 +50,6 @@ indicateur_eco_ptz$valeur<-na_if(indicateur_eco_ptz$valeur,NaN) indicateur_eco_ptz <- indicateur_eco_ptz %>% pivot_wider(names_from = variable,values_from = valeur) -# save(indicateur_eco_ptz,file="eco_ptz_indicateurs.RData") - # versement dans le sgbd/datamart.portrait_territoires et metadonnées --------- source("R/poster_documenter_ind.R", encoding = "UTF-8") poster_documenter_ind( -- GitLab From 557b4bf7bc00ea833f9eb07de09c329f60a37c46 Mon Sep 17 00:00:00 2001 From: "daniel.kalioudjoglou" <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Fri, 28 Mar 2025 17:45:42 +0100 Subject: [PATCH 14/16] tests sur apariement communes --- data-raw/chargement_eco_ptz.R | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index 9d7f49b..732d117 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -127,7 +127,7 @@ base_intermediaire2 <- base_intermediaire %>% # response <- GET(url, query = list(codePostal = codepostal)) # # response <- GET(url, query = list(codePostal = "35800")) # c_insee <- fromJSON(content(response, "text")) -# +# # if (length(c_insee) == 0) { # return(NA) # # return(data[[1]]$code) @@ -141,8 +141,12 @@ base_intermediaire2 <- base_intermediaire %>% # return(c_insee2) # } # } +# # +# base_intermediaire2b <- base_intermediaire2 %>% filter(is.na(CINS)) +# vecteur <- base_intermediaire2b %>% select(CPLA) %>% pull() +# vecteur2 <- unlist(sapply(vecteur, retrouve_cinsee)) # -# aaa <- retrouve_cinsee("35800") # ça ça fonctionne, mais pas pour la colonne +# aaa <- retrouve_cinsee("44680") # ça ça fonctionne, mais pas pour la colonne # # # base_intermediaire20 <- base_intermediaire %>% -- GitLab From a87402f1eed0941a0854e033c80dd7d63292d964 Mon Sep 17 00:00:00 2001 From: "daniel.kalioudjoglou" <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Mon, 7 Apr 2025 16:11:43 +0200 Subject: [PATCH 15/16] Resolution de la fonction de recherche --- data-raw/chargement_eco_ptz.R | 83 +++++++++++++++++++++++++---------- 1 file changed, 60 insertions(+), 23 deletions(-) diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index 732d117..85adcd3 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -10,6 +10,7 @@ library(RPostgreSQL) library(datalibaba) library(googlesheets4) library(stringr) +library(stringdist) rm(list = ls()) @@ -119,31 +120,67 @@ base_intermediaire2 <- base_intermediaire %>% #--------------------------------------------------------------------------------------------- # #test reconnaissance : marche pas -# retrouve_cinsee <- function(codepostal){ -# library(dplyr) -# library(httr) -# library(jsonlite) -# url <- "https://geo.api.gouv.fr/communes" -# response <- GET(url, query = list(codePostal = codepostal)) -# # response <- GET(url, query = list(codePostal = "35800")) -# c_insee <- fromJSON(content(response, "text")) # -# if (length(c_insee) == 0) { -# return(NA) -# # return(data[[1]]$code) -# } else { -# c_insee2 <- c_insee %>% -# as.data.frame() %>% -# select(-codesPostaux) %>% -# # mutate(population) = as.numeric(population) %>% -# filter(population == max(population)) %>% -# select(nom) %>% pull() -# return(c_insee2) -# } -# } -# # +# +# + + + + + + + +# FONCTION QUI CHOISIT DANS UNE LISTE LE CODE INSEE DONT LE NOM DE LA COMMUNE EST LE PLUS PROCHE +retrouve_cinsee <- function(codepostal, ville){ + library(dplyr) + library(httr) + library(jsonlite) + #récupère la table des communes avec ce code postal + url <- "https://geo.api.gouv.fr/communes" + response <- GET(url, query = list(codePostal = codepostal)) + # response <- GET(url, query = list(codePostal = "35800")) + c_insee <- fromJSON(content(response, "text")) + + if (length(c_insee) == 0) { # si pas de code insee ou code inexistant + return(NA) + # return(data[[1]]$code) + } else { + c_insee2 <- c_insee %>% + as.data.frame() %>% + select(nom, code) %>% #ne garde que les colonnes nécessaires + mutate(nom = toupper(nom), #met tout en majuscules + nom = str_replace (nom,"SAINTES","STES"), + nom = str_replace (nom,"SAINTE","STE"), + nom = str_replace (nom,"SAINTS","STS"), + nom = str_replace (nom,"SAINT","ST"), + nom = str_replace_all (nom,"[-']"," "))#remplace les tirets et apostrophes par des espaces + + list_com <- c_insee2 %>% pull(nom) # liste des communes avec ce code postal + list_code <- c_insee2 %>% pull(code) # liste des codes insee + + #liste des communes avec le code postal + liste_communes <- c(list_com,list_code) + + # recherche commune avec texte le plus proche + library(stringdist) + distances <- stringdist(ville,list_com,method ="jw") + indice_min <- which.min(distances) + texte_proche <- list_com[indice_min] + + numero_dans_liste <- which(list_com == texte_proche) + code_insee_proche <- list_code[numero_dans_liste] + + # return(texte_proche) + return(code_insee_proche) + } +} +# +# df <- base_intermediaire3 %>% +# mutate(comm100 = mapply(retrouve_cinsee(CPLA,VILL))) +# # # base_intermediaire2b <- base_intermediaire2 %>% filter(is.na(CINS)) # vecteur <- base_intermediaire2b %>% select(CPLA) %>% pull() +# vecteur2 <- sapply(vecteur, retrouve_cinsee) # vecteur2 <- unlist(sapply(vecteur, retrouve_cinsee)) # # aaa <- retrouve_cinsee("44680") # ça ça fonctionne, mais pas pour la colonne @@ -155,7 +192,7 @@ base_intermediaire2 <- base_intermediaire %>% # base_intermediaire30 <- base_intermediaire20 %>% # mutate(cinsee20 = retrouve_cinsee("35800")) # base_intermediaire20$code_insee <- mapply(retrouve_cinsee, base_intermediaire20$CPLA) -# base_intermediaire20 <- base_intermediaire20 %>% +# base_intermediaire20 <- base_intermediaire20 %>% # mutate(code_insee = retrouve_cinsee(CPLA)) #--------------------------------------------------------------------------------------------- -- GitLab From 0ffe4a6c2bbb1ee45201e7b1273a539642b60a11 Mon Sep 17 00:00:00 2001 From: "daniel.kalioudjoglou" <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Tue, 8 Apr 2025 20:34:48 +0200 Subject: [PATCH 16/16] finalisation fonction recherche code insee dans eco ptz --- data-raw/chargement_eco_ptz.R | 180 +++++++++++++++++----------------- 1 file changed, 91 insertions(+), 89 deletions(-) diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index 85adcd3..33a0066 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -59,78 +59,30 @@ BASE_ECO_PTZ_DHUP<- read_delim(paste0("/nfs/data/partage-PTZ-EPTZ/PTZ-EPTZ/BASE_ delim = ";", escape_double = FALSE, locale = locale(decimal_mark = ","), trim_ws = TRUE) -# suppression des années anciennes + base_intermediaire <- BASE_ECO_PTZ_DHUP %>% mutate(DATP = str_sub(DATP,1,4)) %>% - filter (DATP >= annee_conservee) %>% + filter (DATP >= annee_conservee) %>% # suppression des années anciennes select(DATP,CINS,CPLA,VILL,NALO,TTRV,CSEN,CTA1,CTA2,CTA3,CTA4,CTA5,CTA6,CTTA1,CTTA2,CTTA3,CTTA4,CTTA5,CTTA6,CTTA7) %>% # application des filtres -# CSEN est"V" (valide) -# si type de travaux (TTRV) = 4 (réhabilitation de système d’assainissement non collectif), -# la nature du logement (NALO) doit être égale à 1 (maison individuelle) - filter(CSEN == "V") %>% - mutate(NALO = case_when( - TTRV == "4" ~ 1, - TRUE~ NALO)) %>% - select(-CSEN,-TTRV) - - -#complétage du code insee-------------------------------------------------------- -communes2 <- communes %>% #table des communes - select(DEPCOM,NOM_DEPCOM,DEP) %>% - mutate(NOM_DEPCOM = toupper(NOM_DEPCOM), #met tout en majuscules - NOM_DEPCOM = iconv(NOM_DEPCOM, from = "UTF-8", to = "ASCII//TRANSLIT"), #enlève les accents - NOM_DEPCOM = str_replace_all (NOM_DEPCOM,"[-']"," "), #remplace les tirets et apostrophes par des espaces - lien = paste(DEP,NOM_DEPCOM)) %>% - select(lien, DEPCOM) -communes2a <- communes2 %>% #creation d'une table dans laquelle on remplace "saint" par "st" - mutate(lien = str_replace (lien,"SAINTES","STES"), - lien = str_replace (lien,"SAINTE","STE"), - lien = str_replace (lien,"SAINTS","STS"), - lien = str_replace (lien,"SAINT","ST") - ) -communes2b <- communes2 %>% #creation d'une table dans laquelle on remplace "saint" par "st" - mutate(lien = str_replace (lien,"LE ",""), - lien = str_replace (lien,"LES ",""), - lien = ifelse(str_detect(lien,"LA LONGEVILLE"), lien, str_replace (lien,"LA ","")), - lien = str_replace (lien,"L ","") - ) -communes2 <- rbind(communes2,communes2a,communes2b) %>% - unique() - -base_intermediaire2 <- base_intermediaire %>% + filter(CSEN == "V") %>% # CSEN est"V" (valide) + mutate(NALO = case_when( + TTRV == "4" ~ 1, # si type de travaux (TTRV) = 4 (réhabilitation de système d’assainissement non collectif) + TRUE~ NALO)) %>% # la nature du logement (NALO) doit être égale à 1 (maison individuelle) + select(-CSEN,-TTRV) %>% +# mise au format des noms de communes mutate(VILL = iconv(VILL, from = "UTF-8", to = "ASCII//TRANSLIT"), - VILL = toupper(VILL)) %>% #met tout en majuscules - mutate(lien = paste(ifelse(str_detect(CPLA,"^97"),str_sub(CPLA,1,3),str_sub(CPLA,1,2)),VILL)) %>% # SI DOM TOM (97) , prend les 3 premiers chiffres - mutate(lien = str_replace (lien,"SAINTES","STES"), - lien = str_replace (lien,"SAINTE","STE"), - lien = str_replace (lien,"SAINTS","STS"), - lien = str_replace (lien,"SAINT","ST"), - lien = str_replace_all (lien,"[-']"," "), #remplace les tirets et apostrophes par des espaces - ) %>% - left_join(communes2, by = "lien") %>% - mutate(CINS = case_when( - is.na(CINS)~ DEPCOM, - TRUE~ CINS)) -#fin complétage du code insee-------------------------------------------------------- -# après complétage, 1554 codes insee ne sont pas complétés -# à compléter pour tout remplir CINS - + VILL = toupper(VILL), #met tout en majuscules + VILL = str_replace (VILL,"SAINTES","STES"), + VILL = str_replace (VILL,"SAINTE","STE"), + VILL = str_replace (VILL,"SAINTS","STS"), + VILL = str_replace (VILL,"SAINT","ST"), + VILL = str_replace_all (VILL,"[-']"," ") #remplace les tirets et apostrophes par des espaces + ) + # mutate(lien = paste(ifelse(str_detect(CPLA,"^97"),str_sub(CPLA,1,3),str_sub(CPLA,1,2)),VILL)) # SI DOM TOM (97) , prend les 3 premiers chiffres #--------------------------------------------------------------------------------------------- - -# #test reconnaissance : marche pas -# -# -# - - - - - - - -# FONCTION QUI CHOISIT DANS UNE LISTE LE CODE INSEE DONT LE NOM DE LA COMMUNE EST LE PLUS PROCHE +# Fonction qui à partir du code postal et du nom de commune, même approximatif, renvoie le code Insee de la commune retrouve_cinsee <- function(codepostal, ville){ library(dplyr) library(httr) @@ -158,9 +110,6 @@ retrouve_cinsee <- function(codepostal, ville){ list_com <- c_insee2 %>% pull(nom) # liste des communes avec ce code postal list_code <- c_insee2 %>% pull(code) # liste des codes insee - #liste des communes avec le code postal - liste_communes <- c(list_com,list_code) - # recherche commune avec texte le plus proche library(stringdist) distances <- stringdist(ville,list_com,method ="jw") @@ -174,32 +123,85 @@ retrouve_cinsee <- function(codepostal, ville){ return(code_insee_proche) } } -# -# df <- base_intermediaire3 %>% -# mutate(comm100 = mapply(retrouve_cinsee(CPLA,VILL))) -# # -# base_intermediaire2b <- base_intermediaire2 %>% filter(is.na(CINS)) -# vecteur <- base_intermediaire2b %>% select(CPLA) %>% pull() -# vecteur2 <- sapply(vecteur, retrouve_cinsee) -# vecteur2 <- unlist(sapply(vecteur, retrouve_cinsee)) -# -# aaa <- retrouve_cinsee("44680") # ça ça fonctionne, mais pas pour la colonne -# -# -# base_intermediaire20 <- base_intermediaire %>% -# mutate(VILL = iconv(VILL, from = "UTF-8", to = "ASCII//TRANSLIT"), -# VILL = toupper(VILL)) -# base_intermediaire30 <- base_intermediaire20 %>% -# mutate(cinsee20 = retrouve_cinsee("35800")) -# base_intermediaire20$code_insee <- mapply(retrouve_cinsee, base_intermediaire20$CPLA) -# base_intermediaire20 <- base_intermediaire20 %>% -# mutate(code_insee = retrouve_cinsee(CPLA)) +#-Remplissage de la colonne CINS (code insee)------------------------------------------------------------------------------------------- + +# séparation table remplie et table sans les codes insee +base_inter_manquantes <- base_intermediaire %>% filter(is.na(CINS)) %>% + select(-CINS) +base_inter_complete <- base_intermediaire %>% filter(!is.na(CINS)) + +# recherche des codes insee (on applique la fonction) +base_inter_manquantes$CINS <- mapply(retrouve_cinsee, + base_inter_manquantes$CPLA, + base_inter_manquantes$VILL) +# ATTENTION: OPERATION TRES LONGUE (30 minutes) + +# transformation de la colonne du format list en format texte +base_inter_manquantes2 <- base_inter_manquantes +base_inter_manquantes2$CINS <- lapply(base_inter_manquantes2$CINS, function(x) if (is.null(x)|| length(x) == 0) NA else x) # remplace les NULL ou character(0) par NA +base_inter_manquantes2$CINS <- unlist(base_inter_manquantes2$CINS, use.names = FALSE) + +# regroupement des tables +base_intermediaire2 <- bind_rows(base_inter_complete,base_inter_manquantes2) + +# nombre de lignes avec CINS = NA +nb_na <- base_intermediaire2 %>% filter(is.na(CINS)) %>% nrow() %>% as.numeric() +print(paste("il reste",nb_na,"lignes avec code insee non rempli")) + +#-----------remplir les lignes manquantes quand on n'a que le code postal (on met la commune principale)------------- +# ne s'effectue que s'il reste des lignes à NA +if(nb_na == 0){ +}else{ + base_intermediaire2a <- base_intermediaire2 %>% filter(is.na(CINS)) + base_intermediaire2b <- base_intermediaire2 %>% filter(!is.na(CINS)) + + retrouve_cinsee_pop_max <- function(codepostal){ + library(dplyr) + library(httr) + library(jsonlite) + #récupère la table des communes avec ce code postal + url <- "https://geo.api.gouv.fr/communes" + response <- GET(url, query = list(codePostal = codepostal)) + c_insee <- fromJSON(content(response, "text")) + + if (length(c_insee) == 0) { # si pas de code insee ou code inexistant + return(NA) + # return(data[[1]]$code) + } else { + c_insee2 <- c_insee %>% + as.data.frame() %>% + filter(population == max(population)) %>% # filtre sur la commune à la population la plus élevée + pull(code) + + return(c_insee2) #renvoie le code insee de la commune la plus peuplée + } + } + + # recherche des codes insee (on applique la fonction) + base_intermediaire2a$CINS <- mapply(retrouve_cinsee_pop_max,base_intermediaire2a$CPLA) + + # transformation de la colonne du format list en format texte + base_intermediaire2a$CINS <- lapply(base_intermediaire2a$CINS, function(x) if (is.null(x)|| length(x) == 0) NA else x) # remplace les NULL ou character(0) par NA + base_intermediaire2a$CINS <- unlist(base_intermediaire2a$CINS, use.names = FALSE) + + # regroupement des tables + base_intermediaire2 <- bind_rows(base_intermediaire2a,base_intermediaire2b) +} + +# Vérification des lignes restantes sans code insee +nb_na <- base_intermediaire2 %>% filter(is.na(CINS)) %>% nrow() %>% as.numeric() # nombre de lignes avec CINS = NA +print(paste("il reste",nb_na,"lignes avec code insee non rempli")) +if(nb_na != 0){ + stop("il reste des codes insee non remplis, si vous continuez, les lignes correspondantes seront supprimées") +} +base_intermediaire2 <- base_intermediaire2 %>% filter(!is.na(CINS)) # suppression des lignes avec CINS= NA + #--------------------------------------------------------------------------------------------- base_intermediaire3 <- base_intermediaire2 %>% filter(!is.na(CINS)) %>% # filtre pour ne garder que les lignes avec code commune - select(-CPLA,-VILL,-lien,-DEPCOM) %>% + select(-CPLA,-VILL) %>% rename(date = "DATP",DEPCOM = "CINS", type_logt = "NALO") %>% mutate(type_logt = case_when( type_logt == 1 ~ "nb_eptz.maison_individuelle", -- GitLab