diff --git a/R/cogifier_it.R b/R/cogifier_it.R index 039df16eb72ef73edaf9362347e81201f35a8007..c9f73b8687039bff0ddfc4ae066f1fd297fe86e2 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/R/poster_doc_post_cogifier.R b/R/poster_doc_post_cogifier.R index 8913a8ed26299c3f4f95232cb531be1775859923..5d026d67d306f677b2792d08dc488cbb51269a92 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 c719eca2296afa7067853b76b761d592326ab628..924d10d823fee213373f8d5b112ae4b71d83949d 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 cacdb64d6e8c838ec24ae47c24f60f8ee2f7c74b..25d80b0cd9b37b77d69b2fb0ddfee687112a4a2a 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 = user) # 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) } diff --git a/data-raw/chargement_eco_ptz.R b/data-raw/chargement_eco_ptz.R index a2c01e74e8e93517a77b12f21be5c81dd03a500f..33a006651e03bb7a64b0fe337d8d3614bb075ef3 100644 --- a/data-raw/chargement_eco_ptz.R +++ b/data-raw/chargement_eco_ptz.R @@ -1,109 +1,325 @@ +# chargement_eco_ptz (a exécuter sur le serveur rstudio du SDES) -# chargement_eco_ptz - - -# librairies --------- -library(readxl) +# librairies -------------- library(tidyverse) -library(tricky) library(lubridate) +library(COGiter) +library(sf) library(DBI) library(RPostgreSQL) library(datalibaba) library(googlesheets4) +library(stringr) +library(stringdist) 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)) %>% +# 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 +# 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 +# MTTR : Montant total TTC des travaux +# 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 +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, locale = locale(decimal_mark = ","), trim_ws = TRUE) + + + +base_intermediaire <- BASE_ECO_PTZ_DHUP %>% + mutate(DATP = str_sub(DATP,1,4)) %>% + 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 + 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 + 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 + +#--------------------------------------------------------------------------------------------- +# 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) + 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 + + # 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) + } +} +#-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) %>% + rename(date = "DATP",DEPCOM = "CINS", type_logt = "NALO") %>% + mutate(type_logt = case_when( + type_logt == 1 ~ "nb_eptz.maison_individuelle", + type_logt == 2 ~ "nb_eptz.appartement", + TRUE ~ NA))%>% + arrange(DEPCOM) + +# calculs nombre de prets individuels et collectifs-------------------------------------------------- +# dénombrement croisements type et état +eco_ptz1a <- base_intermediaire3 %>% + group_by(date,DEPCOM,type_logt) %>% + summarise(valeur = length(DEPCOM)) %>% + ungroup() %>% + rename(variable = type_logt) +eco_ptz1b <- base_intermediaire3 %>% + group_by(date,DEPCOM) %>% + summarise(valeur = length(DEPCOM)) %>% + ungroup() %>% + 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(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 %>% + 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) %>% + 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")) + +# 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, 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") -# 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") +# 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 = "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 724368c98e63b27d94cc2cd9deb345ba0d0a1439..08b48d2cad43e464b480e8e3686fdd5bdcf35cc3 100644 --- a/data-raw/cogification_eco_ptz.R +++ b/data-raw/cogification_eco_ptz.R @@ -1,71 +1,19 @@ - # cogification_eco_ptz - # librairies ------ library(DBI) library(RPostgreSQL) library(dplyr) library(COGiter) library(datalibaba) +library(googlesheets4) rm(list = ls()) +source("R/cogifier_it.R") +source("R/poster_doc_post_cogifier.R") -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" - ) - ) +# cogification et versement des données cogifiées dans le SGBD +cogifier_it(nom_source = "eco_ptz", secret = TRUE) -post_dico_attr( - dico = comm_champ, - db = "datamart", - schema = "portrait_territoires", - table = "cogifiee_eco_ptz", - user = "does" -) +# 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 new file mode 100644 index 0000000000000000000000000000000000000000..63cd2a8d8c2dc0f5edfee6edf87fc5589f49f0b1 --- /dev/null +++ b/data-raw/indicateur_eco_ptz.R @@ -0,0 +1,60 @@ + +# 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 = 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("^eptz.ct", variable)) %>% + group_by(TypeZone,Zone,CodeZone,date) %>% + mutate(valeur = round(valeur/sum(valeur)*100,2), + variable = paste0("part_montant_",variable)) %>% + ungroup() + +# table des nombres +data_nombre <- data_cogifiee %>% + filter( grepl("^nb_eptz.ct", variable)) %>% + group_by(TypeZone,Zone,CodeZone,date) %>% + mutate(valeur = round(valeur/sum(valeur)*100,2), + variable = paste0("part_",variable)) %>% + ungroup() + +# 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) + +# 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" +) +