Insertion des analyses ARS
insertion-des-analyses-ars.Rmd
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")