Skip to content
Snippets Groups Projects
Commit 33df1457 authored by ronan.vignard's avatar ronan.vignard
Browse files

Merge branch 'dev' into 'master'

Finalisation de flat_insert_ars_into_analyse.Rmd

See merge request !10
parents d737c0a1 b42f29c8
No related branches found
No related tags found
1 merge request!10Finalisation de flat_insert_ars_into_analyse.Rmd
# Generated by roxygen2: do not edit by hand # Generated by roxygen2: do not edit by hand
export(add_code_analyse)
export(add_code_prelevement) export(add_code_prelevement)
export(create_nitrate_analyse_table) export(create_nitrate_analyse_table)
export(create_nitrate_prelevement_table) export(create_nitrate_prelevement_table)
......
# WARNING - Generated by {fusen} from dev/flat_insert_ars_into_analyse.Rmd: do not edit by hand
#' 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_analyse_{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)
}
...@@ -63,6 +63,19 @@ flat_import_hubeau_rw_data.Rmd: ...@@ -63,6 +63,19 @@ flat_import_hubeau_rw_data.Rmd:
check: true check: true
document: true document: true
overwrite: ask overwrite: ask
flat_insert_ars_into_analyse.Rmd:
path: dev/flat_insert_ars_into_analyse.Rmd
state: active
R: R/add_code_analyse.R
tests: []
vignettes: vignettes/insertion-des-analyses-ars.Rmd
inflate:
flat_file: dev/flat_insert_ars_into_analyse.Rmd
vignette_name: Insertion des analyses ARS
open_vignette: true
check: true
document: true
overwrite: ask
flat_insert_ars_into_prelevement.Rmd: flat_insert_ars_into_prelevement.Rmd:
path: dev/flat_insert_ars_into_prelevement.Rmd path: dev/flat_insert_ars_into_prelevement.Rmd
state: active state: active
......
---
title: "Insertion des analyses 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}
# 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 :
```{r filter-param_nom_ars, eval=FALSE}
# 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` :
```{r replace-strings-with-na, eval=FALSE}
# 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:
```{r replace-dot_ana_param_alpha_resultat, eval=FALSE}
# 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 :
```{r mutate-from_ana_param_alpha_resultat, eval=FALSE}
# Ajouter les colonnes code_remarque, resultat_analyse et limite_quantification
nitrate_analyse_ars <- nitrate_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_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 :
```{r replace-inferior_superior, eval=FALSE}
# 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 :
```{r change-fieldtypes, eval=FALSE}
# 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 :
```{r load-nitrate_prelevement, eval=FALSE}
# Charger la table nitrates.nitrate_prelevement_v0_15
nitrate_prelevement <- datalibaba::importer_data(
table = "nitrate_prelevement_v0_15",
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 :
```{r select-distinct-rows-ars, eval=FALSE}
# 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 :
```{r join-prelvement_ars, eval=FALSE}
# Joindre les dataframes nitrate_analyse_ars et nitrate_prelevement
nitrate_analyse_ars <- nitrate_analyse_ars |>
left_join(nitrate_prelevement |>
select(code_station, date_prelevement, code_prelevement),
by = c("code_station" = "code_station", "date_prelevement" = "date_prelevement"))
```
```{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_analyse_{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_analyse_ars <- add_code_analyse(
nitrate_analyse_ars, "v0_15")
# Afficher le dataframe pour vérifier les modifications
print(nitrate_analyse_ars)
```
# Chargement en base
On corrige l'ordre des champs les champs utiles à la table des analyses :
```{r select-variables-ars-final, eval=FALSE}
# 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 :
```{r insert-into_nitrate_prelevement_v0_15, eval=FALSE}
# Charger les données dans une nouvelle table en base
datalibaba::poster_data(data = nitrate_analyse_ars,
table = "nitrate_analyse_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_analyse_ars_v0_15",
source_schema = "nitrates",
target_table = "nitrate_analyse_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_analyse.Rmd", vignette_name = "Insertion des analyses ARS")
```
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/add_code_analyse.R
\name{add_code_analyse}
\alias{add_code_analyse}
\title{Ajouter une variable code_analyse au dataframe}
\usage{
add_code_analyse(dataframe, version)
}
\arguments{
\item{dataframe}{Un dataframe contenant les données sur lesquelles ajouter
la variable \code{code_analyse}.}
\item{version}{Une chaîne de caractères représentant la version de la
séquence à utiliser.}
}
\value{
Un dataframe avec une nouvelle colonne \code{code_analyse} contenant
les valeurs de la séquence PostgreSQL.
}
\description{
Cette fonction ajoute une nouvelle variable \code{code_analyse}
au dataframe en utilisant une séquence PostgreSQL dynamique. La séquence est
construite en fonction du paramètre \code{version} fourni.
}
---
title: "Insertion des analyses ARS"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{insertion-des-analyses-ars}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
```{r setup}
library(data.nitrates)
```
<!-- WARNING - This vignette is generated by {fusen} from dev/flat_insert_ars_into_analyse.Rmd: do not edit by hand -->
# 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}
# 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 :
```{r filter-param_nom_ars, eval = FALSE}
# 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` :
```{r replace-strings-with-na, eval = FALSE}
# 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:
```{r replace-dot_ana_param_alpha_resultat, eval = FALSE}
# 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 :
```{r mutate-from_ana_param_alpha_resultat, eval = FALSE}
# Ajouter les colonnes code_remarque, resultat_analyse et limite_quantification
nitrate_analyse_ars <- nitrate_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_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 :
```{r replace-inferior_superior, eval = FALSE}
# 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 :
```{r change-fieldtypes, eval = FALSE}
# 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 :
```{r load-nitrate_prelevement, eval = FALSE}
# Charger la table nitrates.nitrate_prelevement_v0_15
nitrate_prelevement <- datalibaba::importer_data(
table = "nitrate_prelevement_v0_15",
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 :
```{r select-distinct-rows-ars, eval = FALSE}
# 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 :
```{r join-prelvement_ars, eval = FALSE}
# Joindre les dataframes nitrate_analyse_ars et nitrate_prelevement
nitrate_analyse_ars <- nitrate_analyse_ars |>
left_join(nitrate_prelevement |>
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 :
```{r add_code_analyse_ars, eval = FALSE}
# Utiliser la fonction add_code_analyse_ars avec la version souhaitée
nitrate_analyse_ars <- add_code_analyse(
nitrate_analyse_ars, "v0_15")
# Afficher le dataframe pour vérifier les modifications
print(nitrate_analyse_ars)
```
# Chargement en base
On corrige l'ordre des champs les champs utiles à la table des analyses :
```{r select-variables-ars-final, eval = FALSE}
# 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 :
```{r insert-into_nitrate_prelevement_v0_15, eval = FALSE}
# Charger les données dans une nouvelle table en base
datalibaba::poster_data(data = nitrate_analyse_ars,
table = "nitrate_analyse_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_analyse_ars_v0_15",
source_schema = "nitrates",
target_table = "nitrate_analyse_v0_15",
target_schema = "nitrates",
role = "admin")
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment