Skip to content
Snippets Groups Projects

Intégration des paramètres version, last_year et filepath_data_ars

Merged ronan.vignard requested to merge dev into master
1 file
+ 231
0
Compare changes
  • Side-by-side
  • Inline
+ 231
0
---
title: "Insertion des pr\u00e9l\u00e8vements ARS"
output: html_document
editor_options:
chunk_output_type: console
---
```{r development, include=FALSE}
library(testthat)
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)
```
# Consolidation et insertion des données de l'ARS dans la table des prélèvements
## 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 supprime les enregistrements correspondants à des totaux :
```{r filter-param_nom_ars, eval=FALSE}
nitrate_data_analyse_ars_test <- 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` :
```{r}
nitrate_data_analyse_ars_test <- nitrate_data_analyse_ars_test |>
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 les points par des virgules dans ana_param_alpha_resultat :
```{r replace-dot_ana_param_alpha_resultat, eval=FALSE}
# Remplacer les valeurs dans la colonne ana_param_alpha_resultat
nitrate_data_analyse_ars_test <- nitrate_data_analyse_ars_test |>
dplyr::mutate(ana_param_alpha_resultat =
stringr::str_replace(ana_param_alpha_resultat, "^.$", ","))
```
```{r mutate-from_ana_param_alpha_resultat, eval=FALSE}
nitrate_data_analyse_ars <- nitrate_data_analyse_ars |>
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 :
```{r select-variables-ars, eval=FALSE}
# Sélectionner les variables
nitrate_data_analyse_ars <- nitrate_data_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,
limite_quantification,
code_parametre = param_code)
```
# Consolidation de la variable `resultat_analyse`
```{r select-param_nom_ars, eval=FALSE}
nitrate_data_analyse_ars <- nitrate_data_analyse_ars |>
dplyr::filter(!stringr::str_starts(ana_param_alpha_resultat, "<"))
```
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_data_analyse_ars <- nitrate_data_analyse_ars |>
dplyr::mutate(plv_heure = stringr::str_replace_all(plv_heure, "h", ":"))
```
On ajoute les variables `source` et `code_support` :
```{r add-source_code_support_ars, eval=FALSE}
# Ajouter les variables source et code_support
nitrate_data_analyse_ars <- nitrate_data_analyse_ars |>
dplyr::mutate(
source = "ARS",
code_support = 3
)
```
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_data_analyse_ars <- nitrate_data_analyse_ars |>
dplyr::mutate(plv_heure = stringr::str_replace_all(plv_heure, "h", ":"))
```
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 :
```{r select-distinct-rows-ars, eval=FALSE}
# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
nitrate_data_analyse_ars <- nitrate_data_analyse_ars |>
dplyr::distinct(code_station, date_prelevement, .keep_all = TRUE)
```
```{r function-add_code_analyse, eval=FALSE}
#' Ajouter une variable code_analyse au dataframe
#'
#' @description Cette fonction ajoute une nouvelle variable `code_analyse`
#' au dataframe en utilisant une séquence PostgreSQL dynamique. La séquence est
#' construite en fonction du paramètre `version` fourni.
#'
#' @param dataframe Un dataframe contenant les données sur lesquelles ajouter
#' la variable `code_analyse`.
#' @param version Une chaîne de caractères représentant la version de la
#' séquence à utiliser.
#'
#' @return Un dataframe avec une nouvelle colonne `code_analyse` contenant
#' les valeurs de la séquence PostgreSQL.
#'
#' @importFrom DBI dbGetQuery dbDisconnect
#' @importFrom dplyr mutate
#' @importFrom glue glue
#' @importFrom datalibaba connect_to_db
#' @export
add_code_analyse <- function(dataframe, version) {
# Établir une connexion à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
# Construire le nom de la séquence
sequence_name <- glue::glue("nitrates.nitrate_prelevement_{version}_code_analyse_seq")
# Initialiser une liste pour stocker les valeurs de la séquence
code_analyses <- c()
# Pour chaque ligne du dataframe, obtenir une valeur de la séquence
for (i in 1:nrow(dataframe)) {
query <- glue::glue("SELECT nextval(\'{sequence_name}\') AS code_analyse")
result <- DBI::dbGetQuery(connexion, query)
code_analyses <- c(code_analyses, result$code_analyse)
}
# Ajouter la nouvelle variable au dataframe
dataframe <- dataframe |>
dplyr::mutate(code_analyse = code_analyses)
# Fermer la connexion à la base de données
DBI::dbDisconnect(connexion)
return(dataframe)
}
```
On ajoute un identifiant unique s'appuyant sur une séquence stockée en base :
```{r add_code_analyse_ars, eval=FALSE}
# Utiliser la fonction add_code_analyse_ars avec la version souhaitée
nitrate_data_analyse_ars <- add_code_analyse(
nitrate_data_analyse_ars, "v0_15")
# Afficher le dataframe pour vérifier les modifications
print(nitrate_data_analyse_ars)
```
On charge les données consolidées dans un table dédiée :
```{r insert-into_nitrate_prelevement_v0_15, eval=FALSE}
# Charger les données dans une nouvelle table en base
datalibaba::poster_data(data = nitrate_data_analyse_ars,
table = "nitrate_prelevement_ars_v0_15",
schema = "nitrates",
db = "si_eau",
overwrite = TRUE,
pk = "code_analyse",
user = "admin")
```
# Insertion des données ARS du nouveau millésime en base dans la table globale
On insère enfin les enregistrements de cette table dans la table globale :
```{r import_and_merge_tables_ars, eval=FALSE}
# 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 = "nitrate_prelevement_ars_v0_15",
source_schema = "nitrates",
target_table = "nitrate_prelevement_v0_15",
target_schema = "nitrates",
role = "admin")
```
```{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_ars_into_prelevement.Rmd", vignette_name = "Insertion des pr\u00e9l\u00e8vements ARS")
```
Loading