Passer au contenu
library(data.nitrates)
# 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

Consolidation et insertion des données de l’ARS dans la table des analyses

Chargement des données ARS brutes

La table des données brutes Nitrates de l’ARS est chargée :

# Charger la table nitrates.nitrate_data_analyse_ars
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 supprime les enregistrements correspondants à des totaux :

# Supprimer les lignes ne correspondant pas à une analyse
nitrate_analyse_ars <- nitrate_data_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 :

# Remplacer chaînes de caractère dans la colonne ana_param_alpha_resultat
nitrate_analyse_ars <- nitrate_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:

# Remplacer les valeurs dans les colonnes ana_param_alpha_resultat et param_code
nitrate_analyse_ars <- nitrate_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 :

# Ajouter les colonnes code_remarque, resultat_analyse et limite_quantification
nitrate_analyse_ars <- nitrate_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 sélectionne les champs utiles à la table des analyses :

# Sélectionner les variables
nitrate_analyse_ars <- nitrate_analyse_ars |>
  dplyr::select(code_station = ins_code_national,
                code_intervenant = geo_dept_ddass_gest_code,
                date_prelevement = plv_date,
                nom_parametre = param_nom,
                date_analyse = anl_date_fin_analyse,
                resultat_analyse,
                code_parametre = param_code,
                code_remarque,
                limite_quantification)

On supprime les caractères < et > dans les variables resultat_analyse et limite_quantification :

# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification
nitrate_analyse_ars <- nitrate_analyse_ars |>
  dplyr::mutate(resultat_analyse = 
                  stringr::str_replace(resultat_analyse, ">", ""),
                limite_quantification = 
                  stringr::str_replace(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_analyse_ars <- nitrate_analyse_ars |>
  dplyr::mutate(resultat_analyse = as.numeric(resultat_analyse),
                limite_quantification = as.numeric(limite_quantification),
                code_parametre = as.integer(code_parametre))

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_analyse_ars <- nitrate_analyse_ars |>
  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_analyse_ars et nitrate_prelevement
nitrate_analyse_ars <- nitrate_analyse_ars |>
  dplyr::left_join(nitrate_prelevement |>
                     dplyr::select(code_station, date_prelevement, code_prelevement), 
                   by = c("code_station" = "code_station", "date_prelevement" = "date_prelevement"))

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

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

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

Préparation pour l’insertion 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_analyse_ars <- nitrate_analyse_ars |>
  dplyr::select(code_analyse,
                code_intervenant,
                code_prelevement,
                code_parametre,
                code_station,
                date_analyse,
                resultat_analyse,
                code_remarque,
                limite_quantification)

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

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

Insertion des analyses ARS 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_ars_", version), 
                                  source_schema = "nitrates", 
                                  target_table = glue::glue("nitrate_analyse_", version), 
                                  target_schema = "nitrates",
                                  role = "admin")