diff --git a/dev/config_fusen.yaml b/dev/config_fusen.yaml index e69b44b403d1790ab4571f7f6bd70bcf4dfe7fae..e52cefe248b2fa089ac1e17fcecd38703474ebfa 100644 --- a/dev/config_fusen.yaml +++ b/dev/config_fusen.yaml @@ -102,6 +102,21 @@ flat_insert_ars_into_prelevement.Rmd: check: true document: true overwrite: ask +flat_insert_data.Rmd: + path: dev/flat_insert_data.Rmd + state: active + R: [] + tests: [] + vignettes: vignettes/insertion-des-prelevements-et-analyses.Rmd + inflate: + flat_file: dev/flat_insert_data.Rmd + vignette_name: Insertion des prélèvements et analyses + open_vignette: true + check: true + document: true + overwrite: ask + clean: ask + codecov: false flat_insert_hubeau_eso_into_analyse.Rmd: path: dev/flat_insert_hubeau_eso_into_analyse.Rmd state: active diff --git a/dev/flat_insert_data.Rmd b/dev/flat_insert_data.Rmd new file mode 100644 index 0000000000000000000000000000000000000000..1742891101b14e7f9bc0a620a7deba602c5a9b41 --- /dev/null +++ b/dev/flat_insert_data.Rmd @@ -0,0 +1,417 @@ +--- +title: "Insertion des pr\u00e9l\u00e8vements et analyses" +output: html_document +editor_options: + chunk_output_type: console +--- + +```{r development, include=FALSE} +library(testthat) +library(yaml) +library(datalibaba) +library(dplyr) +library(stringr) +library(glue) +library(DBI) +library(RPostgres) +``` + +```{r development-load} +# Load already included functions if relevant +pkgload::load_all(export_all = FALSE) +``` + +```{r config, eval=FALSE} +# Lire le fichier de configuration +config <- yaml::read_yaml("config.yml") + +# Accéder aux valeurs pour version et last_year +version <- config$version +last_year <- config$last_year +``` + +# Données ESO et ESU de l'ARS + +## Chargement des données ARS brutes + +La table des données brutes Nitrates de l'ARS est chargée : +```{r load_nitrate_data_analyse_ars, eval=FALSE} +nitrate_data_analyse_ars <- datalibaba::importer_data( + table = "nitrate_data_analyse_ars", + schema = "nitrates", + db = "si_eau", + user = "admin" +) +``` + +## Consolidation des données ARS + +On ajoute les variables `source` et `code_support` : +```{r add_source_code_support, eval=FALSE} +# Ajouter les variables source et code_support +nitrate_prelevement_analyse_ars <- nitrate_data_analyse_ars |> + dplyr::mutate( + source = "ARS", + code_reseau = NA, + code_support = 3, + code_fraction_analysee = NA, + limite_detection = NA, + ) +``` + +On remplace "h" par ":" dans la variable `plv_heure` : +```{r replace_in_plv_heure, eval=FALSE} +# Remplacer "h" par ":" dans la colonne plv_heure +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::mutate(plv_heure = stringr::str_replace_all(plv_heure, "h", ":")) +``` + +On supprime les enregistrements correspondants à des totaux : +```{r filter_param_nom_ars, eval=FALSE} +# Supprimer les lignes ne correspondant pas à une analyse +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::filter(!stringr::str_starts(param_nom, "Total")) +``` + +On remplace les chaînes de caractère par NA dans la variable `ana_param_alpha_resultat` : +```{r replace_strings_with_na, eval=FALSE} +# Remplacer chaînes de caractère dans la colonne ana_param_alpha_resultat +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::mutate( + ana_param_alpha_resultat = dplyr::case_when( + ana_param_alpha_resultat %in% c("TRACES", "PRESENCE", "SEUIL", "ILLISIBL", "N.M.", "O", "?", ",", " ") ~ NA_character_, + TRUE ~ ana_param_alpha_resultat + ) + ) +``` + +On remplace des valeurs dans ana_param_alpha_resultat et param_code: +```{r replace_dot_ana_param_alpha_resultat, eval=FALSE} +# Remplacer les valeurs dans les colonnes ana_param_alpha_resultat et param_code +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::mutate( + ana_param_alpha_resultat = stringr::str_replace(ana_param_alpha_resultat, "\\,", "."), + param_code = stringr::str_replace(param_code, "NO3", "1340") + ) +``` + +On affecte le code_remarque et la valeur des variables resultat_analyse et limite_quantification : +```{r mutate_from_ana_param_alpha_resultat, eval=FALSE} +# Ajouter les colonnes code_remarque, resultat_analyse et limite_quantification +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::mutate( + # Ajout de la colonne code_remarque selon la condition spécifiée + code_remarque = dplyr::case_when( + stringr::str_starts(ana_param_alpha_resultat, "<") ~ 10, + TRUE ~ 1 + ), + # Renommage conditionnel des colonnes + resultat_analyse = dplyr::case_when( + stringr::str_starts(ana_param_alpha_resultat, "<") ~ as.character(ana_param_valeur_traduite), + TRUE ~ ana_param_alpha_resultat + ), + limite_quantification = dplyr::case_when( + stringr::str_starts(ana_param_alpha_resultat, "<") ~ ana_param_alpha_resultat, + TRUE ~ NA_character_ # Utilisation de NA pour les valeurs non pertinentes + ) + ) +``` + +On supprime "<" dans la variable `limite_quantification` : +```{r replace_in_plv_heure, eval=FALSE} +# Remplacer "h" par ":" dans la colonne plv_heure +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::mutate(limite_quantification = stringr::str_replace_all(limite_quantification, "<", "")) +``` + +On sélectionne les champs utiles à la table des prélèvements et analyse : +```{r select_variables, eval=FALSE} +# Sélectionner les variables +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::select(code_intervenant = geo_dept_ddass_gest_code, + source, + code_reseau, + code_station = ins_code_national, + date_prelevement = plv_date, + heure_prelevement = plv_heure, + code_support, + nature_eau, + id_usage = usage, + id_prelevement_motif = plv_motif, + date_analyse = anl_date_fin_analyse, + resultat_analyse, + code_parametre = param_code, + code_fraction_analysee, + code_remarque, + limite_detection, + limite_quantification) + +``` + +# Données Hub'eau ESO + +## Chargement des prélèvements Hub'eau ESO + +La table des données brutes Nitrates Hub'eau ESO est chargée : +```{r load_nitrate_qualite_nappes_analyses, eval=FALSE} +# Charger la table `qualite_nappes_eau_souterraine.nitrate_qualite_nappes_analyses` +nitrate_qualite_nappes_prelevements <- datalibaba::importer_data( + table = "nitrate_qualite_nappes_analyses", + schema = "qualite_nappes_eau_souterraine", + db = "si_eau", + user = "admin" +) +``` + +## Filtre par code_producteur pour exclure les données ARS + +On sélectionne les code_producteur correspondants aux enregistrements hors +données ARS de la région : +```{r select_code_producteur_hubeau_eso, eval=FALSE} +# Filtrer pour exclure les données ARS +nitrate_prelevement_analyse_hubeau_eso <- nitrate_qualite_nappes_prelevements |> + dplyr::filter(!code_producteur %in% c('44','49','53','72','85')) +``` + +## Consolidation des prélèvements Hub'eau ESO + +On ajoute les variables `source`, `code_support` et `nature_eau` : +```{r add_source_code_support_hubeau_eso, eval=FALSE} +# Ajouter les variables source, code_support et nature_eau +nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |> + dplyr::mutate( + source = "ADES", + heure_prelevement = NA, + code_support = 3, + nature_eau = "ESO", + id_usage = NA, + id_prelevement_motif = NA, + date_analyse = NA) +``` + +On remplace des valeurs dans limite_detection et limite_quantification : +```{r replace_dot_limite_detection, eval=FALSE} +# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification +nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |> + dplyr::mutate( + resultat = stringr::str_replace(resultat, "\\,", "."), + limite_detection = stringr::str_replace(limite_detection, "\\,", "."), + limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".") + ) + +``` + +On modifie le type des variables numériques et on les renomme : +```{r change-fieldtypes, eval=FALSE} +# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification +nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |> + dplyr::rename(code_intervenant = code_lieu_analyse, + code_reseau = codes_reseau, + code_station = bss_id, + date_prelevement = date_debut_prelevement + ) |> + dplyr::mutate(code_support = as.integer(code_support), + resultat_analyse = as.numeric(resultat), + limite_detection = as.numeric(limite_detection), + limite_quantification = as.numeric(limite_quantification), + code_parametre = as.integer(code_param), + code_fraction_analysee = as.integer(code_fraction), + code_remarque = as.integer(code_remarque_analyse) + ) + +``` + +On sélectionne les champs utiles à la table des prélèvements et analyses : +```{r select_variables_hubeau_eso, eval=FALSE} +# Sélectionner les variables +nitrate_prelevement_analyse_hubeau_eso <- + nitrate_prelevement_analyse_hubeau_eso |> + dplyr::select(code_intervenant, + source, + code_reseau, + code_station, + date_prelevement, + heure_prelevement, + code_support, + nature_eau, + id_usage, + id_prelevement_motif, + date_analyse, + resultat_analyse, + code_parametre, + code_fraction_analysee, + code_remarque, + limite_detection, + limite_quantification) + +``` + +# Données Hub'eau ESU + +## Chargement des prélèvements Hub'eau ESU + +La table des données brutes Nitrates Hub'eau ESU est chargée : +```{r load-nitrate_qualite_rivieres_analyse_pc, eval=FALSE} +# Charger la table qualite_nappes_eau_souterraine.nitrate_qualite_rivieres_analyse_pc +nitrate_qualite_rivieres_prelevements <- datalibaba::importer_data( + table = "nitrate_qualite_rivieres_analyse_pc", + schema = "qualite_cours_d_eau", + db = "si_eau", + user = "admin" +) +``` + +On remplace des valeurs dans `limite_detection` et `limite_quantification` : +```{r replace-dot_limite_detection, eval=FALSE} +# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification +nitrate_prelevement_analyse_hubeau_esu <- nitrate_qualite_rivieres_prelevements |> + dplyr::mutate( + resultat = stringr::str_replace(resultat, "\\,", "."), + limite_detection = stringr::str_replace(limite_detection, "\\,", "."), + limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".") + ) +``` + +On ajoute les variables `source` et `nature_eau` : +```{r add-source_code_support_hubeau_esu, eval=FALSE} +# Ajouter les variables source et nature_eau +nitrate_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |> + dplyr::mutate( + source = "Na\u00efades", + heure_prelevement = NA, + code_support = 3, + nature_eau = "ESU", + id_usage = NA, + id_prelevement_motif = NA, + date_analyse = NA) +``` + +On modifie le type des variables resultat_analyse et limite_quantification : +```{r change-fieldtypes, eval=FALSE} +# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification +nitrate_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |> + dplyr::mutate(resultat_analyse = as.numeric(resultat), + limite_detection = as.numeric(limite_detection), + limite_quantification = as.numeric(limite_quantification), + code_parametre = as.integer(code_parametre), + code_fraction_analysee = as.integer(code_fraction), + code_remarque = as.integer(code_remarque) + ) +``` + +On sélectionne les champs utiles à la table des prélèvements et analyses : +```{r select_variables_hubeau_eso, eval=FALSE} +# Sélectionner les variables +nitrate_prelevement_analyse_hubeau_esu <- + nitrate_prelevement_analyse_hubeau_esu|> + dplyr::select(code_intervenant = code_laboratoire, + source, + code_reseau, + code_station, + date_prelevement, + heure_prelevement, + code_support, + nature_eau, + id_usage, + id_prelevement_motif, + date_analyse, + resultat_analyse, + code_parametre, + code_fraction_analysee, + code_remarque, + limite_detection, + limite_quantification) +``` + +# Publication en base + +## Agréation des données dans un dataframe unique + +```{r agregate_data, eval=FALSE} +# Lier les trois dataframes par source dans un dataframe global +nitrate_prelevement_analyse <- + rbind(nitrate_prelevement_analyse_ars, + nitrate_prelevement_analyse_hubeau_eso, + nitrate_prelevement_analyse_hubeau_esu) +``` + +## Insertion du dataframe en base + +On insère enfin le dataframe consolidé dans la table globale et versionnée +des analyses et prélèvements : +```{r insert_into_nitrate_prelevement_analyse_version, eval=FALSE} +# Charger les données dans une nouvelle table en base +datalibaba::poster_data(data = nitrate_prelevement_analyse, + table = glue::glue("nitrate_prelevement_analyse_", version), + schema = "nitrates", + db = "si_eau", + overwrite = TRUE, + #pk = "code_prelevement_analyse", + user = "admin") +``` + +## Renommage de l'identifiant + +```{r rename_id_row__, eval=FALSE} +collectr::rename_field(database = "si_eau", + schema = "nitrates", + table = glue::glue("nitrate_prelevement_analyse_", version), + old_field = "id_row__", + new_field = "code_prelevement_analyse", + role = "admin") +``` + +## Ajout des commentaires + +```{r add_comments, eval=FALSE} +# Établir une connexion à la base de données PostgreSQL +connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") + +# Génération de la date du jour +date_now <- format(Sys.Date(), "%d/%m/%Y") + +# Liste des requêtes SQL +table_comment <- glue::glue("COMMENT ON TABLE nitrates.nitrate_prelevement_analyse_{version} IS + 'Table des prélèvements et analyses 2007-{last_year} (version {version} du {date_now})';") + +# Exécuter la commande SQL +DBI::dbExecute(connexion, table_comment) + +# Ajouter les commentaires sur chaque champ +comments_sql <- glue::glue( + "COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_prelevement_analyse IS 'Identifiant du pr\u00e9l\u00e8vement'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_intervenant IS 'Identifiant de l''intervenant'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.source IS 'Source de la donn\u00e9e'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_reseau IS 'Identifiant du r\u00e9seau'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_station IS 'Identifiant de la station'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_prelevement IS 'Date du pr\u00e9l\u00e8vement'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.heure_prelevement IS 'Heure du pr\u00e9l\u00e8vement'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_support IS 'Code du support de pr\u00e9l\u00e8vement'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.nature_eau IS 'Nature de l''eau du pr\u00e9l\u00e8vement (ESO/ESU)'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_usage IS 'Code de l''usage du pr\u00e9l\u00e8vement'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_prelevement_motif IS 'Code du motif du pr\u00e9l\u00e8vement'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_parametre IS 'Identifiant du param\u00e8tre analys\u00e9'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_fraction_analysee IS 'Identifiant de la fraction analys\u00e9e'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_analyse IS 'Date de l''analyse'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.resultat_analyse IS 'R\u00e9sultat de l''analyse'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_remarque IS 'Code validant la donn\u00e9e'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_detection IS 'Limite de d\u00e9tection'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_quantification IS 'Limite de quantification';" +) + + + # Exécuter chaque commande SQL + for (sql in c(comments_sql)) { + DBI::dbExecute(connexion, sql) + } + + # Fermeture de la connexion à la base de données + DBI::dbDisconnect(connexion) +``` + + +```{r development-inflate, eval=FALSE} +# Run but keep eval=FALSE to avoid infinite loop +# Execute in the console directly +fusen::inflate(flat_file = "dev/flat_insert_data.Rmd", vignette_name = "Insertion des pr\u00e9l\u00e8vements et analyses") +``` diff --git a/vignettes/insertion-des-prelevements-et-analyses.Rmd b/vignettes/insertion-des-prelevements-et-analyses.Rmd new file mode 100644 index 0000000000000000000000000000000000000000..53ef4faa30584e6c177d43278442a105aee69b06 --- /dev/null +++ b/vignettes/insertion-des-prelevements-et-analyses.Rmd @@ -0,0 +1,485 @@ +--- +title: "Insertion des prélèvements et analyses" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Insertion des prélèvements et analyses} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +```{r} +library(data.nitrates) +``` + +<!-- WARNING - This vignette is generated by {fusen} from dev/flat_insert_data.Rmd: do not edit by hand --> + + + + +```{r config} +#| eval: no + +# Lire le fichier de configuration +config <- yaml::read_yaml("config.yml") + +# Accéder aux valeurs pour version et last_year +version <- config$version +last_year <- config$last_year +``` + + +# Données ESO et ESU de l'ARS + +## Chargement des données ARS brutes + +La table des données brutes Nitrates de l'ARS est chargée : +```{r load_nitrate_data_analyse_ars} +#| eval: no + +nitrate_data_analyse_ars <- datalibaba::importer_data( + table = "nitrate_data_analyse_ars", + schema = "nitrates", + db = "si_eau", + user = "admin" +) +``` + + +## Consolidation des données ARS + +On ajoute les variables `source` et `code_support` : +```{r add_source_code_support} +#| eval: no + +# Ajouter les variables source et code_support +nitrate_prelevement_analyse_ars <- nitrate_data_analyse_ars |> + dplyr::mutate( + source = "ARS", + code_reseau = NA, + code_support = 3, + code_fraction_analysee = NA, + limite_detection = NA, + ) +``` + + +On remplace "h" par ":" dans la variable `plv_heure` : +```{r replace_in_plv_heure} +#| eval: no + +# Remplacer "h" par ":" dans la colonne plv_heure +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::mutate(plv_heure = stringr::str_replace_all(plv_heure, "h", ":")) +``` + + +On supprime les enregistrements correspondants à des totaux : +```{r filter_param_nom_ars} +#| eval: no + +# Supprimer les lignes ne correspondant pas à une analyse +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::filter(!stringr::str_starts(param_nom, "Total")) +``` + + +On remplace les chaînes de caractère par NA dans la variable `ana_param_alpha_resultat` : +```{r replace_strings_with_na} +#| eval: no + +# Remplacer chaînes de caractère dans la colonne ana_param_alpha_resultat +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::mutate( + ana_param_alpha_resultat = dplyr::case_when( + ana_param_alpha_resultat %in% c("TRACES", "PRESENCE", "SEUIL", "ILLISIBL", "N.M.", "O", "?", ",", " ") ~ NA_character_, + TRUE ~ ana_param_alpha_resultat + ) + ) +``` + + +On remplace des valeurs dans ana_param_alpha_resultat et param_code: +```{r replace_dot_ana_param_alpha_resultat} +#| eval: no + +# Remplacer les valeurs dans les colonnes ana_param_alpha_resultat et param_code +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::mutate( + ana_param_alpha_resultat = stringr::str_replace(ana_param_alpha_resultat, "\\,", "."), + param_code = stringr::str_replace(param_code, "NO3", "1340") + ) +``` + + +On affecte le code_remarque et la valeur des variables resultat_analyse et limite_quantification : +```{r mutate_from_ana_param_alpha_resultat} +#| eval: no + +# Ajouter les colonnes code_remarque, resultat_analyse et limite_quantification +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::mutate( + # Ajout de la colonne code_remarque selon la condition spécifiée + code_remarque = dplyr::case_when( + stringr::str_starts(ana_param_alpha_resultat, "<") ~ 10, + TRUE ~ 1 + ), + # Renommage conditionnel des colonnes + resultat_analyse = dplyr::case_when( + stringr::str_starts(ana_param_alpha_resultat, "<") ~ as.character(ana_param_valeur_traduite), + TRUE ~ ana_param_alpha_resultat + ), + limite_quantification = dplyr::case_when( + stringr::str_starts(ana_param_alpha_resultat, "<") ~ ana_param_alpha_resultat, + TRUE ~ NA_character_ # Utilisation de NA pour les valeurs non pertinentes + ) + ) +``` + + +On supprime "<" dans la variable `limite_quantification` : +```{r replace_in_plv_heure-1} +#| eval: no + +# Remplacer "h" par ":" dans la colonne plv_heure +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::mutate(limite_quantification = stringr::str_replace_all(limite_quantification, "<", "")) +``` + + +On sélectionne les champs utiles à la table des prélèvements et analyse : +```{r select_variables} +#| eval: no + +# Sélectionner les variables +nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |> + dplyr::select(code_intervenant = geo_dept_ddass_gest_code, + source, + code_reseau, + code_station = ins_code_national, + date_prelevement = plv_date, + heure_prelevement = plv_heure, + code_support, + nature_eau, + id_usage = usage, + id_prelevement_motif = plv_motif, + date_analyse = anl_date_fin_analyse, + resultat_analyse, + code_parametre = param_code, + code_fraction_analysee, + code_remarque, + limite_detection, + limite_quantification) + +``` + + +# Données Hub'eau ESO + +## Chargement des prélèvements Hub'eau ESO + +La table des données brutes Nitrates Hub'eau ESO est chargée : +```{r load_nitrate_qualite_nappes_analyses} +#| eval: no + +# Charger la table `qualite_nappes_eau_souterraine.nitrate_qualite_nappes_analyses` +nitrate_qualite_nappes_prelevements <- datalibaba::importer_data( + table = "nitrate_qualite_nappes_analyses", + schema = "qualite_nappes_eau_souterraine", + db = "si_eau", + user = "admin" +) +``` + + +## Filtre par code_producteur pour exclure les données ARS + +On sélectionne les code_producteur correspondants aux enregistrements hors +données ARS de la région : +```{r select_code_producteur_hubeau_eso} +#| eval: no + +# Filtrer pour exclure les données ARS +nitrate_prelevement_analyse_hubeau_eso <- nitrate_qualite_nappes_prelevements |> + dplyr::filter(!code_producteur %in% c('44','49','53','72','85')) +``` + + +## Consolidation des prélèvements Hub'eau ESO + +On ajoute les variables `source`, `code_support` et `nature_eau` : +```{r add_source_code_support_hubeau_eso} +#| eval: no + +# Ajouter les variables source, code_support et nature_eau +nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |> + dplyr::mutate( + source = "ADES", + heure_prelevement = NA, + code_support = 3, + nature_eau = "ESO", + id_usage = NA, + id_prelevement_motif = NA, + date_analyse = NA) +``` + + +On remplace des valeurs dans limite_detection et limite_quantification : +```{r replace_dot_limite_detection} +#| eval: no + +# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification +nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |> + dplyr::mutate( + resultat = stringr::str_replace(resultat, "\\,", "."), + limite_detection = stringr::str_replace(limite_detection, "\\,", "."), + limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".") + ) + +``` + + +On modifie le type des variables numériques et on les renomme : +```{r change-fieldtypes} +#| eval: no + +# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification +nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |> + dplyr::rename(code_intervenant = code_lieu_analyse, + code_reseau = codes_reseau, + code_station = bss_id, + date_prelevement = date_debut_prelevement + ) |> + dplyr::mutate(code_support = as.integer(code_support), + resultat_analyse = as.numeric(resultat), + limite_detection = as.numeric(limite_detection), + limite_quantification = as.numeric(limite_quantification), + code_parametre = as.integer(code_param), + code_fraction_analysee = as.integer(code_fraction), + code_remarque = as.integer(code_remarque_analyse) + ) + +``` + + +On sélectionne les champs utiles à la table des prélèvements et analyses : +```{r select_variables_hubeau_eso} +#| eval: no + +# Sélectionner les variables +nitrate_prelevement_analyse_hubeau_eso <- + nitrate_prelevement_analyse_hubeau_eso |> + dplyr::select(code_intervenant, + source, + code_reseau, + code_station, + date_prelevement, + heure_prelevement, + code_support, + nature_eau, + id_usage, + id_prelevement_motif, + date_analyse, + resultat_analyse, + code_parametre, + code_fraction_analysee, + code_remarque, + limite_detection, + limite_quantification) + +``` + + +# Données Hub'eau ESU + +## Chargement des prélèvements Hub'eau ESU + +La table des données brutes Nitrates Hub'eau ESU est chargée : +```{r load-nitrate_qualite_rivieres_analyse_pc} +#| eval: no + +# Charger la table qualite_nappes_eau_souterraine.nitrate_qualite_rivieres_analyse_pc +nitrate_qualite_rivieres_prelevements <- datalibaba::importer_data( + table = "nitrate_qualite_rivieres_analyse_pc", + schema = "qualite_cours_d_eau", + db = "si_eau", + user = "admin" +) +``` + + +On remplace des valeurs dans `limite_detection` et `limite_quantification` : +```{r replace-dot_limite_detection} +#| eval: no + +# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification +nitrate_prelevement_analyse_hubeau_esu <- nitrate_qualite_rivieres_prelevements |> + dplyr::mutate( + resultat = stringr::str_replace(resultat, "\\,", "."), + limite_detection = stringr::str_replace(limite_detection, "\\,", "."), + limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".") + ) +``` + + +On ajoute les variables `source` et `nature_eau` : +```{r add-source_code_support_hubeau_esu} +#| eval: no + +# Ajouter les variables source et nature_eau +nitrate_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |> + dplyr::mutate( + source = "Na\u00efades", + heure_prelevement = NA, + code_support = 3, + nature_eau = "ESU", + id_usage = NA, + id_prelevement_motif = NA, + date_analyse = NA) +``` + + +On modifie le type des variables resultat_analyse et limite_quantification : +```{r change-fieldtypes-2} +#| eval: no + +# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification +nitrate_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |> + dplyr::mutate(resultat_analyse = as.numeric(resultat), + limite_detection = as.numeric(limite_detection), + limite_quantification = as.numeric(limite_quantification), + code_parametre = as.integer(code_parametre), + code_fraction_analysee = as.integer(code_fraction), + code_remarque = as.integer(code_remarque) + ) +``` + + +On sélectionne les champs utiles à la table des prélèvements et analyses : +```{r select_variables_hubeau_eso-3} +#| eval: no + +# Sélectionner les variables +nitrate_prelevement_analyse_hubeau_esu <- + nitrate_prelevement_analyse_hubeau_esu|> + dplyr::select(code_intervenant = code_laboratoire, + source, + code_reseau, + code_station, + date_prelevement, + heure_prelevement, + code_support, + nature_eau, + id_usage, + id_prelevement_motif, + date_analyse, + resultat_analyse, + code_parametre, + code_fraction_analysee, + code_remarque, + limite_detection, + limite_quantification) +``` + + +# Publication en base + +## Agréation des données dans un dataframe unique +```{r agregate_data} +#| eval: no + +# Lier les trois dataframes par source dans un dataframe global +nitrate_prelevement_analyse <- + rbind(nitrate_prelevement_analyse_ars, + nitrate_prelevement_analyse_hubeau_eso, + nitrate_prelevement_analyse_hubeau_esu) +``` + + +## Insertion du dataframe en base + +On insère enfin le dataframe consolidé dans la table globale et versionnée +des analyses et prélèvements : +```{r insert_into_nitrate_prelevement_analyse_version} +#| eval: no + +# Charger les données dans une nouvelle table en base +datalibaba::poster_data(data = nitrate_prelevement_analyse, + table = glue::glue("nitrate_prelevement_analyse_", version), + schema = "nitrates", + db = "si_eau", + overwrite = TRUE, + #pk = "code_prelevement_analyse", + user = "admin") +``` + + +## Renommage de l'identifiant +```{r rename_id_row__} +#| eval: no + +collectr::rename_field(database = "si_eau", + schema = "nitrates", + table = glue::glue("nitrate_prelevement_analyse_", version), + old_field = "id_row__", + new_field = "code_prelevement_analyse", + role = "admin") +``` + + +## Ajout des commentaires +```{r add_comments} +#| eval: no + +# Établir une connexion à la base de données PostgreSQL +connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") + +# Génération de la date du jour +date_now <- format(Sys.Date(), "%d/%m/%Y") + +# Liste des requêtes SQL +table_comment <- glue::glue("COMMENT ON TABLE nitrates.nitrate_prelevement_analyse_{version} IS + 'Table des prélèvements et analyses 2007-{last_year} (version {version} du {date_now})';") + +# Exécuter la commande SQL +DBI::dbExecute(connexion, table_comment) + +# Ajouter les commentaires sur chaque champ +comments_sql <- glue::glue( + "COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_prelevement_analyse IS 'Identifiant du pr\u00e9l\u00e8vement'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_intervenant IS 'Identifiant de l''intervenant'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.source IS 'Source de la donn\u00e9e'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_reseau IS 'Identifiant du r\u00e9seau'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_station IS 'Identifiant de la station'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_prelevement IS 'Date du pr\u00e9l\u00e8vement'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.heure_prelevement IS 'Heure du pr\u00e9l\u00e8vement'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_support IS 'Code du support de pr\u00e9l\u00e8vement'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.nature_eau IS 'Nature de l''eau du pr\u00e9l\u00e8vement (ESO/ESU)'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_usage IS 'Code de l''usage du pr\u00e9l\u00e8vement'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_prelevement_motif IS 'Code du motif du pr\u00e9l\u00e8vement'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_parametre IS 'Identifiant du param\u00e8tre analys\u00e9'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_fraction_analysee IS 'Identifiant de la fraction analys\u00e9e'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_analyse IS 'Date de l''analyse'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.resultat_analyse IS 'R\u00e9sultat de l''analyse'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_remarque IS 'Code validant la donn\u00e9e'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_detection IS 'Limite de d\u00e9tection'; + COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_quantification IS 'Limite de quantification';" +) + + + # Exécuter chaque commande SQL + for (sql in c(comments_sql)) { + DBI::dbExecute(connexion, sql) + } + + # Fermeture de la connexion à la base de données + DBI::dbDisconnect(connexion) +``` + +