Passer au contenu
library(data.nitrates)
# Lire le fichier de configuration
config <- yaml::read_yaml("config.yml")

# Accéder à la valeur pour version
version <- config$version

Consolidation et insertion des analyses Hub’eau ESU dans la table des analyses

Chargement des analyses Hub’eau ESU

La table des données brutes Nitrates Hub’eau ESU est chargée :

# Charger la table qualite_cours_d_eau.nitrate_qualite_rivieres_analyse_pc
nitrate_qualite_rivieres_analyses <- datalibaba::importer_data(
  table = "nitrate_qualite_rivieres_analyse_pc",
  schema = "qualite_cours_d_eau",
  db = "si_eau",
  user = "admin"
)

Consolidation des analyses Hub’eau ESU

On remplace des valeurs dans limite_detection et limite_quantification :

# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification
nitrate_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
  dplyr::mutate(
    resultat = stringr::str_replace(resultat, "\\,", "."),
    limite_detection = stringr::str_replace(limite_detection, "\\,", "."),
    limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".")
    )

On sélectionne les champs utiles à la table des analyses :

# Sélectionner les variables
nitrate_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
  dplyr::select(code_station,
                code_intervenant = code_laboratoire,
                date_prelevement,
                date_analyse,
                resultat_analyse = resultat,
                code_parametre,
                code_fraction_analysee = code_fraction,
                code_remarque,
                limite_detection,
                limite_quantification)

On modifie le type des variables resultat_analyse et limite_quantification :

# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification
nitrate_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
  dplyr::mutate(resultat_analyse = as.numeric(resultat_analyse),
                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_analysee),
                code_remarque = as.integer(code_remarque)
                )

Jointure avec la table des prélèvements créée auparavant

La table des prélèvements est chargée :

# Charger la table nitrates.nitrate_prelevement_version
nitrate_prelevement <- datalibaba::importer_data(
  table = glue::glue("nitrate_prelevement_", version),
  schema = "nitrates",
  db = "si_eau",
  user = "admin"
)

On dédoublonne les lignes en utilisant les champs code_station et date_prelevement afin de ne conserver qu’un prélèvement par station et date donnée :

# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
nitrate_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
  dplyr::distinct(code_station, date_prelevement, .keep_all = TRUE)

On joint le dataframe des prélèvements pour récupérer la variable code_prelevement :

# Joindre les dataframes nitrate_qualite_rivieres_analyses et nitrate_prelevement
nitrate_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
  dplyr::left_join(nitrate_prelevement |>
                     dplyr::select(code_station, date_prelevement, code_prelevement), 
                   by = c("code_station" = "code_station", "date_prelevement" = "date_prelevement"))

On dédoublonne les lignes en utilisant les champs code_prelevement, code_parametre et resultat_analyse afin de ne conserver qu’une analyse :

# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
nitrate_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
  dplyr::distinct(code_prelevement, code_parametre, resultat_analyse, .keep_all = TRUE)

On ajoute un identifiant unique s’appuyant sur une séquence stockée en base :

# Utiliser la fonction add_code_analyse() avec la version souhaitée
nitrate_qualite_rivieres_analyses <- add_code_analyse(
  nitrate_qualite_rivieres_analyses, version)

# Afficher le dataframe pour vérifier les modifications
print(nitrate_qualite_rivieres_analyses)

Chargement en base

On corrige l’ordre des champs les champs utiles à la table des analyses :

# Sélectionner les variables dans l'ordre des champs de la table à alimenter
nitrate_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
  dplyr::select(code_analyse,
                code_intervenant,
                code_prelevement,
                code_parametre,
                code_fraction_analysee,
                date_analyse,
                resultat_analyse,
                code_remarque,
                limite_detection,
                limite_quantification)

On charge les données consolidées dans une table dédiée :

# Charger les données dans une nouvelle table en base
datalibaba::poster_data(data = nitrate_qualite_rivieres_analyses, 
                        table = glue::glue("nitrate_analyse_hubeau_esu_", version),
                        schema = "nitrates", 
                        db = "si_eau",
                        overwrite = TRUE,
                        pk = "code_analyse",
                        user = "admin")

Insertion des analyses Hub’eau ESU en base dans la table globale

On insère enfin les enregistrements de cette table dans la table globale :

# Insérer les données de la table du dernier millésime vers la table complète
collectr::import_and_merge_tables(database = "si_eau",
                                  source_table = glue::glue("nitrate_analyse_hubeau_esu_", version),
                                  source_schema = "nitrates", 
                                  target_table = glue::glue("nitrate_analyse_", version),
                                  target_schema = "nitrates",
                                  role = "admin")