Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • dreal-pdl/csd/eau-milieux-aquatiques/data.nitrates
1 result
Show changes
Commits on Source (7)
Showing
with 579 additions and 2287 deletions
......@@ -7,11 +7,6 @@ Authors@R:
Description: Import des données nitrates à partir des sources ARS et
Hub'eau dans une base de données PostgreSQL.
License: MIT + file LICENSE
Imports:
datalibaba,
DBI,
dplyr,
glue
Suggests:
knitr,
rmarkdown
......
# Generated by roxygen2: do not edit by hand
export(add_code_analyse)
export(add_code_prelevement)
export(add_code_prelevement_analyse)
export(create_nitrate_analyse_table)
export(create_nitrate_prelevement_table)
export(create_table_nitrate_prelevement_analyse)
importFrom(DBI,dbDisconnect)
importFrom(DBI,dbGetQuery)
importFrom(datalibaba,connect_to_db)
importFrom(dplyr,mutate)
importFrom(glue,glue)
# WARNING - Generated by {fusen} from dev/flat_create_tables_sequences.Rmd: do not edit by hand # nolint: line_length_linter.
#' 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
#' @examples
#' # Crée un dataframe fictif avec les colonnes nécessaires pour l'exemple
#' dataframe <- data.frame(
#' id_prelevement = 1:5,
#' autre_colonne = sample(letters, 5)
#' )
#' # Définir une version pour l'exemple
#' version <- "v1"
#'
#' # Utiliser la fonction add_code_analyse() avec la version souhaitée
#' dataframe <- add_code_analyse(
#' dataframe, version)
#'
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")
# Créer la séquence correspondant à la table
create_sequence <- glue::glue("CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_analyse_{version}_code_analyse_seq
INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1;")
# Exécuter le script dans la base de données
DBI::dbExecute(connexion, create_sequence)
# 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)
}
# WARNING - Generated by {fusen} from dev/flat_create_tables_sequences.Rmd: do not edit by hand # nolint: line_length_linter.
#' Ajouter une variable code_prelevement au dataframe
#'
#' @description Cette fonction ajoute une nouvelle variable `code_prelevement`
#' 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_prelevement`.
#' @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_prelevement` contenant
#' les valeurs de la séquence PostgreSQL.
#'
#' @importFrom DBI dbGetQuery dbDisconnect
#' @importFrom dplyr mutate
#' @importFrom glue glue
#' @importFrom datalibaba connect_to_db
#' @export
#' @examples
#' # Crée un dataframe fictif avec les colonnes nécessaires pour l'exemple
#' dataframe <- data.frame(
#' id_prelevement = 1:5,
#' autre_colonne = sample(letters, 5)
#' )
#' # Définir une version pour l'exemple
#' version <- "v1"
#'
#' # Utiliser la fonction add_code_prelevement() avec la version souhaitée
#' dataframe <- add_code_prelevement(
#' dataframe, version)
#'
add_code_prelevement <- function(dataframe, version) {
# Établir une connexion à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
# Créer la séquence correspondant à la table
create_sequence <- glue::glue("CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_prelevement_{version}_code_prelevement_seq
INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1;")
# Exécuter le script dans la base de données
DBI::dbExecute(connexion, create_sequence)
# Construire le nom de la séquence
sequence_name <- glue::glue("nitrates.nitrate_prelevement_{version}_code_prelevement_seq")
# Initialiser une liste pour stocker les valeurs de la séquence
code_prelevements <- 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_prelevement")
result <- DBI::dbGetQuery(connexion, query)
code_prelevements <- c(code_prelevements, result$code_prelevement)
}
# Ajouter la nouvelle variable au dataframe
dataframe <- dataframe |>
dplyr::mutate(code_prelevement = code_prelevements)
# Fermer la connexion à la base de données
DBI::dbDisconnect(connexion)
return(dataframe)
}
# WARNING - Generated by {fusen} from dev/flat_create_table_sequence.Rmd: do not edit by hand # nolint: line_length_linter.
#' Ajouter une variable code_prelevement_analyse au dataframe
#'
#' @description Cette fonction ajoute une nouvelle variable
#' `code_prelevement_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_prelevement_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_prelevement_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
#' @examples
#' # Crée un dataframe fictif avec les colonnes nécessaires pour l'exemple
#' dataframe <- data.frame(
#' id_prelevement = 1:5,
#' autre_colonne = sample(letters, 5)
#' )
#' # Définir une version pour l'exemple
#' version <- "v1"
#'
#' # Utiliser la fonction add_code_prelevement() avec la version souhaitée
#' dataframe <- add_code_prelevement_analyse(
#' dataframe, version)
#'
add_code_prelevement_analyse <- function(dataframe, version) {
# Établir une connexion à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
# Créer la séquence correspondant à la table
create_sequence <- glue::glue("CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_prelevement_analyse_{version}_code_prelevement_analyse_seq
INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1;")
# Exécuter le script dans la base de données
DBI::dbExecute(connexion, create_sequence)
# Construire le nom de la séquence
sequence_name <- glue::glue("nitrates.nitrate_prelevement_analyse_{version}_code_prelevement_analyse_seq")
# Initialiser une liste pour stocker les valeurs de la séquence
code_prelevements_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_prelevement_analyse")
result <- DBI::dbGetQuery(connexion, query)
code_prelevements_analyses <- c(code_prelevements_analyses, result$code_prelevement_analyse)
}
# Ajouter la nouvelle variable au dataframe
dataframe <- dataframe |>
dplyr::mutate(code_prelevement_analyse = code_prelevements_analyses)
# Fermer la connexion à la base de données
DBI::dbDisconnect(connexion)
return(dataframe)
}
# WARNING - Generated by {fusen} from dev/flat_create_tables_sequences.Rmd: do not edit by hand # nolint: line_length_linter.
#' Créer une table d'analyses de nitrates
#'
#' @description Cette fonction crée une table dans une base de données PostgreSQL
#' pour stocker les informations relatives aux analyses de nitrates, incluant
#' les contraintes et les séquences nécessaires.
#'
#' @param version String. Version de la table (par exemple, 'v1').
#' @param last_year Integer. L'année la plus récente incluse dans les données de la table.
#'
#' @return String. Le script SQL utilisé pour créer la table.
#' @export
#' @importFrom datalibaba connect_to_db
create_nitrate_analyse_table <- function(version, last_year) {
# Établir une connexion à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
# Génération de la date du jour
date_now <- format(Sys.Date(), "%d/%m/%Y")
# Création du script avec l'ajout des paramètres
sql_script <- glue::glue("
CREATE TABLE IF NOT EXISTS nitrates.nitrate_analyse_{version}
(
code_analyse serial NOT NULL,
code_intervenant character varying(20),
code_prelevement integer,
code_parametre bigint,
code_fraction_analysee integer,
date_analyse date,
resultat_analyse double precision,
code_remarque integer,
limite_detection double precision,
limite_quantification double precision,
CONSTRAINT pk_nitrate_analyse_{version} PRIMARY KEY (code_analyse),
CONSTRAINT fk_n_fraction_analysee FOREIGN KEY (code_fraction_analysee)
REFERENCES sandre.n_fraction_analysee (code_fraction_analysee) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET DEFAULT,
-- CONSTRAINT fk_n_intervenant FOREIGN KEY (code_intervenant)
-- REFERENCES qualite_cours_d_eau.n_intervenant (code_intervenant) MATCH SIMPLE
-- ON UPDATE CASCADE ON DELETE SET DEFAULT,
CONSTRAINT fk_n_remarque FOREIGN KEY (code_remarque)
REFERENCES sandre.n_remarque (code_remarque) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_parametre FOREIGN KEY (code_parametre)
REFERENCES qualite_cours_d_eau.parametre (code_parametre) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET DEFAULT
)
WITH (
OIDS=FALSE
);
ALTER TABLE nitrates.nitrate_analyse_{version}
OWNER TO adminpsql;
GRANT ALL ON TABLE nitrates.nitrate_analyse_{version} TO adminpsql;
GRANT ALL ON TABLE nitrates.nitrate_analyse_{version} TO writer_production;
GRANT SELECT ON TABLE nitrates.nitrate_analyse_{version} TO reader_production;
COMMENT ON TABLE nitrates.nitrate_analyse_{version}
IS 'Table des analyses 2007-{last_year} (version {version} du {date_now})';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_analyse IS 'Identifiant de l''analyse';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_intervenant IS 'Identifiant du laboratoire ayant effectu\u00e9 l''analyse';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_prelevement IS 'Identifiant du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_parametre IS 'Identifiant du param\u00e8tre analys\u00e9';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_fraction_analysee IS 'Identifiant de la fraction analys\u00e9e';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.date_analyse IS 'Date de l''analyse';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.resultat_analyse IS 'R\u00e9sultat de l''analyse';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_remarque IS 'Code validant la donn\u00e9e';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.limite_detection IS 'Limite de d\u00e9tection';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.limite_quantification IS 'Limite de quantification';
CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_analyse_{version}_code_analyse_seq
INCREMENT 1
START 1
MINVALUE 1
MAXVALUE 2147483647
CACHE 1;
ALTER SEQUENCE nitrates.nitrate_analyse_{version}_code_analyse_seq
OWNER TO adminpsql;
")
# Exécution du script dans la base de données
DBI::dbExecute(connexion, sql_script)
# Fermeture de la connexion à la base de données
DBI::dbDisconnect(connexion)
return(sql_script)
}
# WARNING - Generated by {fusen} from dev/flat_create_tables_sequences.Rmd: do not edit by hand # nolint: line_length_linter.
#' Créer une table de prélèvements de nitrates
#'
#' @description Cette fonction crée une table dans une base de données PostgreSQL
#' pour stocker les informations relatives aux prélèvements de nitrates,
#' incluant les contraintes et les séquences nécessaires.
#'
#' @param version String. Version de la table (par exemple, 'v1').
#' @param last_year Integer. L'année la plus récente incluse dans les données de la table.
#'
#' @return String. Le script SQL utilisé pour créer la table.
#' @export
#' @importFrom datalibaba connect_to_db
create_nitrate_prelevement_table <- function(version, last_year) {
# Établir une connexion à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
# Génération de la date du jour
date_now <- format(Sys.Date(), "%d/%m/%Y")
# Création du script avec l'ajout des paramètres
sql_script <- glue::glue("
CREATE TABLE IF NOT EXISTS nitrates.nitrate_prelevement_{version}
(
code_prelevement serial NOT NULL,
code_intervenant character varying(20),
source character varying(10),
code_reseau character varying(254),
code_station character varying(10),
date_prelevement date,
heure_prelevement character varying(8),
code_support int,
nature_eau character varying(3),
id_usage character varying(3),
id_prelevement_motif character varying(2),
commentaire character varying(254),
CONSTRAINT pk_nitrate_prelevement_{version} PRIMARY KEY (code_prelevement),
CONSTRAINT fk_n_support FOREIGN KEY (code_support)
REFERENCES sandre.n_support (code_support) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET DEFAULT
)
WITH (
OIDS=FALSE
);
ALTER TABLE nitrates.nitrate_prelevement_{version}
OWNER TO adminpsql;
GRANT ALL ON TABLE nitrates.nitrate_prelevement_{version} TO adminpsql;
GRANT ALL ON TABLE nitrates.nitrate_prelevement_{version} TO writer_production;
GRANT SELECT ON TABLE nitrates.nitrate_prelevement_{version} TO reader_production;
COMMENT ON TABLE nitrates.nitrate_prelevement_{version}
IS 'Table des pr\u00e9l\u00e8vements 2007-{last_year} (version {version} du {date_now})';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_prelevement IS 'Identifiant du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_intervenant IS 'Identifiant de l''intervenant';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.source IS 'Source de la donn\u00e9e';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_reseau IS 'Identifiant du r\u00e9seau';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_station IS 'Identifiant de la station';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.date_prelevement IS 'Date du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.heure_prelevement IS 'Heure du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_support IS 'Code du support de pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.nature_eau IS 'Nature de l''eau du pr\u00e9l\u00e8vement (ESO/ESU)';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.id_usage IS 'Code de l''usage du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.id_prelevement_motif IS 'Code du motif du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.commentaire IS 'Commentaire';
CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_prelevement_{version}_code_prelevement_seq
INCREMENT 1
START 1
MINVALUE 1
MAXVALUE 2147483647
CACHE 1;
ALTER SEQUENCE nitrates.nitrate_prelevement_{version}_code_prelevement_seq
OWNER TO adminpsql;
")
# Exécution du script dans la base de données
DBI::dbExecute(connexion, sql_script)
# Fermeture de la connexion à la base de données
DBI::dbDisconnect(connexion)
return(sql_script)
}
# WARNING - Generated by {fusen} from dev/flat_create_table_sequence.Rmd: do not edit by hand # nolint: line_length_linter.
#' Créer une table de prélèvements et analyses de nitrates
#'
#' @description Cette fonction crée une table dans une base de données PostgreSQL
#' pour stocker les informations relatives aux prélèvements et analyses de
#' nitrates, incluant les contraintes et les séquences nécessaires.
#'
#' @param version String. Version de la table (par exemple, 'v1').
#' @param last_year Integer. L'année la plus récente incluse dans les données de la table.
#'
#' @return String. Le script SQL utilisé pour créer la table.
#' @export
#' @importFrom datalibaba connect_to_db
create_table_nitrate_prelevement_analyse <- function(version, last_year) {
# Établir une connexion à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
# Génération de la date du jour
date_now <- format(Sys.Date(), "%d/%m/%Y")
# Liste des requêtes SQL
sql_commands <- c(
glue::glue("CREATE TABLE IF NOT EXISTS nitrates.nitrate_prelevement_analyse_{version} (
code_prelevement_analyse serial NOT NULL,
code_intervenant character varying(20),
source character varying(10),
code_reseau character varying(254),
code_station character varying(10),
date_prelevement date,
heure_prelevement character varying(8),
code_support integer,
nature_eau character varying(3),
id_usage character varying(3),
id_prelevement_motif character varying(2),
commentaire character varying(254),
code_parametre bigint,
code_fraction_analysee integer,
date_analyse date,
resultat_analyse double precision,
code_remarque integer,
limite_detection double precision,
limite_quantification double precision,
CONSTRAINT pk_nitrate_prelevement_analyse_{version} PRIMARY KEY (code_prelevement_analyse),
CONSTRAINT fk_n_support FOREIGN KEY (code_support)
REFERENCES sandre.n_support (code_support) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET DEFAULT,
CONSTRAINT fk_parametre FOREIGN KEY (code_parametre)
REFERENCES qualite_cours_d_eau.parametre (code_parametre) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET DEFAULT,
CONSTRAINT fk_n_fraction_analysee FOREIGN KEY (code_fraction_analysee)
REFERENCES sandre.n_fraction_analysee (code_fraction_analysee) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET DEFAULT,
CONSTRAINT fk_n_remarque FOREIGN KEY (code_remarque)
REFERENCES sandre.n_remarque (code_remarque) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
) WITH (OIDS=FALSE);"),
glue::glue("ALTER TABLE nitrates.nitrate_prelevement_analyse_{version} OWNER TO adminpsql;"),
glue::glue("GRANT ALL ON TABLE nitrates.nitrate_prelevement_analyse_{version} TO adminpsql;"),
glue::glue("GRANT ALL ON TABLE nitrates.nitrate_prelevement_analyse_{version} TO writer_production;"),
glue::glue("GRANT SELECT ON TABLE nitrates.nitrate_prelevement_analyse_{version} TO reader_production;"),
glue::glue("COMMENT ON TABLE nitrates.nitrate_prelevement_analyse_{version} IS
'Table des prélèvements et analyses 2007-{last_year} (version {version} du {date_now})';"),
glue::glue("CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_prelevement_analyse_{version}_code_prelevement_analyse_seq
INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1;"),
glue::glue("ALTER SEQUENCE nitrates.nitrate_prelevement_analyse_{version}_code_prelevement_analyse_seq
OWNER TO adminpsql;")
)
# Ajout des commentaires sur chaque champ
comments_sql <- c(
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_prelevement_analyse IS 'Identifiant du prélèvement';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_intervenant IS 'Identifiant de l''intervenant';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.source IS 'Source de la donnée';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_reseau IS 'Identifiant du réseau';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_station IS 'Identifiant de la station';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_prelevement IS 'Date du prélèvement';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.heure_prelevement IS 'Heure du prélèvement';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_support IS 'Code du support de prélèvement';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.nature_eau IS 'Nature de l''eau du prélèvement (ESO/ESU)';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_usage IS 'Code de l''usage du prélèvement';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_prelevement_motif IS 'Code du motif du prélèvement';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.commentaire IS 'Commentaire';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_parametre IS 'Identifiant du paramètre analysé';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_fraction_analysee IS 'Identifiant de la fraction analysée';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_analyse IS 'Date de l''analyse';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.resultat_analyse IS 'Résultat de l''analyse';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_remarque IS 'Code validant la donnée';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_detection IS 'Limite de détection';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_quantification IS 'Limite de quantification';")
)
# Exécuter chaque commande SQL
for (sql in c(sql_commands, comments_sql)) {
DBI::dbExecute(connexion, sql)
}
# Fermeture de la connexion à la base de données
DBI::dbDisconnect(connexion)
# Retourne toutes les commandes exécutées
return(c(sql_commands, comments_sql))
}
......@@ -102,6 +102,66 @@ flat_insert_ars_into_prelevement.Rmd:
check: true
document: true
overwrite: ask
flat_insert_data.Rmd:
path: dev/flat_insert_data.Rmd
state: active
R: []
tests: []
vignettes: vignettes/insertion-des-prelevements-et-analyses.Rmd
inflate:
flat_file: dev/flat_insert_data.Rmd
vignette_name: Insertion des prélèvements et analyses
open_vignette: true
check: true
document: true
overwrite: ask
clean: ask
codecov: false
flat_insert_data_ars.Rmd:
path: dev/flat_insert_data_ars.Rmd
state: active
R: []
tests: []
vignettes: vignettes/insertion-des-prelevements-et-analyses-ars.Rmd
inflate:
flat_file: dev/flat_insert_data_ars.Rmd
vignette_name: Insertion des prélèvements et analyses ARS
open_vignette: true
check: true
document: true
overwrite: ask
clean: ask
codecov: false
flat_insert_data_hubeau_eso.Rmd:
path: dev/flat_insert_data_hubeau_eso.Rmd
state: active
R: []
tests: []
vignettes: vignettes/insertion-des-prelevements-et-analyses-hubeau-eso.Rmd
inflate:
flat_file: dev/flat_insert_data_hubeau_eso.Rmd
vignette_name: Insertion des prélèvements et analyses Hubeau ESO
open_vignette: true
check: true
document: true
overwrite: ask
clean: ask
codecov: false
flat_insert_data_hubeau_esu.Rmd:
path: dev/flat_insert_data_hubeau_esu.Rmd
state: active
R: []
tests: []
vignettes: vignettes/insertion-des-prelevements-et-analyses-hubeau-esu.Rmd
inflate:
flat_file: dev/flat_insert_data_hubeau_esu.Rmd
vignette_name: Insertion des prélèvements et analyses Hubeau ESU
open_vignette: true
check: true
document: true
overwrite: ask
clean: ask
codecov: false
flat_insert_hubeau_eso_into_analyse.Rmd:
path: dev/flat_insert_hubeau_eso_into_analyse.Rmd
state: active
......
---
title: "Cr\u00e9ation des tables et des s\u00e9quences"
output: html_document
editor_options:
chunk_output_type: console
---
```{r development, include=FALSE}
library(testthat)
library(yaml)
library(glue)
library(DBI)
library(datalibaba)
```
```{r development-load}
# Load already included functions if relevant
pkgload::load_all(export_all = FALSE)
```
```{r config, eval=FALSE}
# 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
```
# Présentation
Cette page contient les fonctions permettant :
- de créer en base la table `nitrates.nitrate_prelevement_analyse_version`,
- d'incrémenter la séquence correspondante au moment de l'import des données.
# Création de la table en base
## Création de la table des prélèvements et analyses et ajout des commentaires
```{r function-create_table_nitrate_prelevement_analyse, eval=FALSE}
#' Créer une table de prélèvements et analyses de nitrates
#'
#' @description Cette fonction crée une table dans une base de données PostgreSQL
#' pour stocker les informations relatives aux prélèvements et analyses de
#' nitrates, incluant les contraintes et les séquences nécessaires.
#'
#' @param version String. Version de la table (par exemple, 'v1').
#' @param last_year Integer. L'année la plus récente incluse dans les données de la table.
#'
#' @return String. Le script SQL utilisé pour créer la table.
#' @export
#' @importFrom datalibaba connect_to_db
create_table_nitrate_prelevement_analyse <- function(version, last_year) {
# Établir une connexion à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
# Génération de la date du jour
date_now <- format(Sys.Date(), "%d/%m/%Y")
# Liste des requêtes SQL
sql_commands <- c(
glue::glue("CREATE TABLE IF NOT EXISTS nitrates.nitrate_prelevement_analyse_{version} (
code_prelevement_analyse serial NOT NULL,
code_intervenant character varying(20),
source character varying(10),
code_reseau character varying(254),
code_station character varying(10),
date_prelevement date,
heure_prelevement character varying(8),
code_support integer,
nature_eau character varying(3),
id_usage character varying(3),
id_prelevement_motif character varying(2),
commentaire character varying(254),
code_parametre bigint,
code_fraction_analysee integer,
date_analyse date,
resultat_analyse double precision,
code_remarque integer,
limite_detection double precision,
limite_quantification double precision,
CONSTRAINT pk_nitrate_prelevement_analyse_{version} PRIMARY KEY (code_prelevement_analyse),
CONSTRAINT fk_n_support FOREIGN KEY (code_support)
REFERENCES sandre.n_support (code_support) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET DEFAULT,
CONSTRAINT fk_parametre FOREIGN KEY (code_parametre)
REFERENCES qualite_cours_d_eau.parametre (code_parametre) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET DEFAULT,
CONSTRAINT fk_n_fraction_analysee FOREIGN KEY (code_fraction_analysee)
REFERENCES sandre.n_fraction_analysee (code_fraction_analysee) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET DEFAULT,
CONSTRAINT fk_n_remarque FOREIGN KEY (code_remarque)
REFERENCES sandre.n_remarque (code_remarque) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
) WITH (OIDS=FALSE);"),
glue::glue("ALTER TABLE nitrates.nitrate_prelevement_analyse_{version} OWNER TO adminpsql;"),
glue::glue("GRANT ALL ON TABLE nitrates.nitrate_prelevement_analyse_{version} TO adminpsql;"),
glue::glue("GRANT ALL ON TABLE nitrates.nitrate_prelevement_analyse_{version} TO writer_production;"),
glue::glue("GRANT SELECT ON TABLE nitrates.nitrate_prelevement_analyse_{version} TO reader_production;"),
glue::glue("COMMENT ON TABLE nitrates.nitrate_prelevement_analyse_{version} IS
'Table des prélèvements et analyses 2007-{last_year} (version {version} du {date_now})';"),
glue::glue("CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_prelevement_analyse_{version}_code_prelevement_analyse_seq
INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1;"),
glue::glue("ALTER SEQUENCE nitrates.nitrate_prelevement_analyse_{version}_code_prelevement_analyse_seq
OWNER TO adminpsql;")
)
# Ajout des commentaires sur chaque champ
comments_sql <- c(
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_prelevement_analyse IS 'Identifiant du prélèvement';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_intervenant IS 'Identifiant de l''intervenant';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.source IS 'Source de la donnée';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_reseau IS 'Identifiant du réseau';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_station IS 'Identifiant de la station';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_prelevement IS 'Date du prélèvement';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.heure_prelevement IS 'Heure du prélèvement';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_support IS 'Code du support de prélèvement';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.nature_eau IS 'Nature de l''eau du prélèvement (ESO/ESU)';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_usage IS 'Code de l''usage du prélèvement';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_prelevement_motif IS 'Code du motif du prélèvement';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.commentaire IS 'Commentaire';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_parametre IS 'Identifiant du paramètre analysé';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_fraction_analysee IS 'Identifiant de la fraction analysée';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_analyse IS 'Date de l''analyse';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.resultat_analyse IS 'Résultat de l''analyse';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_remarque IS 'Code validant la donnée';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_detection IS 'Limite de détection';"),
glue::glue("COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_quantification IS 'Limite de quantification';")
)
# Exécuter chaque commande SQL
for (sql in c(sql_commands, comments_sql)) {
DBI::dbExecute(connexion, sql)
}
# Fermeture de la connexion à la base de données
DBI::dbDisconnect(connexion)
# Retourne toutes les commandes exécutées
return(c(sql_commands, comments_sql))
}
```
Création de la table `nitrates.nitrate_prelevement_version` :
```{r create_create_table_nitrate_prelevement_analyse, eval=FALSE}
# Création du script SQL avec la version choisie
sql <- create_table_nitrate_prelevement_analyse(version, last_year)
```
# Incrémentation de la séquence
## Incrémentation de la table des prélèvements et des analyses
```{r function-add_code_prelevement_analyse, eval=FALSE}
#' Ajouter une variable code_prelevement_analyse au dataframe
#'
#' @description Cette fonction ajoute une nouvelle variable
#' `code_prelevement_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_prelevement_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_prelevement_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_prelevement_analyse <- function(dataframe, version) {
# Établir une connexion à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
# Créer la séquence correspondant à la table
create_sequence <- glue::glue("CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_prelevement_analyse_{version}_code_prelevement_analyse_seq
INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1;")
# Exécuter le script dans la base de données
DBI::dbExecute(connexion, create_sequence)
# Construire le nom de la séquence
sequence_name <- glue::glue("nitrates.nitrate_prelevement_analyse_{version}_code_prelevement_analyse_seq")
# Initialiser une liste pour stocker les valeurs de la séquence
code_prelevements_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_prelevement_analyse")
result <- DBI::dbGetQuery(connexion, query)
code_prelevements_analyses <- c(code_prelevements_analyses, result$code_prelevement_analyse)
}
# Ajouter la nouvelle variable au dataframe
dataframe <- dataframe |>
dplyr::mutate(code_prelevement_analyse = code_prelevements_analyses)
# Fermer la connexion à la base de données
DBI::dbDisconnect(connexion)
return(dataframe)
}
```
La fonction est utilisée au moment d'importer les données des différentes
sources dans la table `nitrates.nitrate_prelevement_analyse_version` :
```{r example_add_code_prelevement_analyse, eval=FALSE}
# Crée un dataframe fictif avec les colonnes nécessaires pour l'exemple
dataframe <- data.frame(
id_prelevement = 1:5,
autre_colonne = sample(letters, 5)
)
# Définir une version pour l'exemple
version <- "v1"
# Utiliser la fonction add_code_prelevement() avec la version souhaitée
dataframe <- add_code_prelevement_analyse(
dataframe, version)
```
```{r development-skeleton-dir, eval=FALSE}
# Créer de l'arborescence et des fichiers du template
usethis::use_rmarkdown_template(
template_name = "Cr\u00e9ation de la table et de la s\u00e9quence",
template_dir = "creation-de-la-table-et-de-la-sequence",
template_description = "Cr\u00e9ation de la table et de la s\u00e9quence",
template_create_dir = TRUE
)
```
```{r development-skeleton-copy, eval=FALSE}
# Définir les chemins source et destination
source_file <- "dev/flat_create_tables_sequences.Rmd"
destination_dir <- "inst/rmarkdown/templates/creation-de-la-table-et-de-la-sequence/skeleton"
destination_file <- file.path(destination_dir, "skeleton.Rmd")
# Copier et renommer le fichier
file.copy(from = source_file, to = destination_file, overwrite = TRUE)
message("File copied and renamed successfully.")
```
```{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_create_table_sequence.Rmd", vignette_name = "creation-de-la-table-et-de-la-sequence")
```
---
title: "Cr\u00e9ation des tables et des s\u00e9quences"
output: html_document
editor_options:
chunk_output_type: console
---
```{r development, include=FALSE}
library(testthat)
library(yaml)
library(glue)
library(DBI)
library(datalibaba)
```
```{r development-load}
# Load already included functions if relevant
pkgload::load_all(export_all = FALSE)
```
```{r config, eval=FALSE}
# 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
```
# Présentation
Cette page contient les fonctions permettant :
- de créer en base les tables `nitrates.nitrate_prelevement_version` et `nitrates.nitrate_analyse_version`,
- d'incrémenter les séquences correspondantes au moment de l'import des données.
# Création des tables en base
## Création de la table des prélèvements et ajout des commentaires
```{r function-create_nitrate_prelevement_table, eval=FALSE}
#' Créer une table de prélèvements de nitrates
#'
#' @description Cette fonction crée une table dans une base de données PostgreSQL
#' pour stocker les informations relatives aux prélèvements de nitrates,
#' incluant les contraintes et les séquences nécessaires.
#'
#' @param version String. Version de la table (par exemple, 'v1').
#' @param last_year Integer. L'année la plus récente incluse dans les données de la table.
#'
#' @return String. Le script SQL utilisé pour créer la table.
#' @export
#' @importFrom datalibaba connect_to_db
create_nitrate_prelevement_table <- function(version, last_year) {
# Établir une connexion à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
# Génération de la date du jour
date_now <- format(Sys.Date(), "%d/%m/%Y")
# Création du script avec l'ajout des paramètres
sql_script <- glue::glue("
CREATE TABLE IF NOT EXISTS nitrates.nitrate_prelevement_{version}
(
code_prelevement serial NOT NULL,
code_intervenant character varying(20),
source character varying(10),
code_reseau character varying(254),
code_station character varying(10),
date_prelevement date,
heure_prelevement character varying(8),
code_support int,
nature_eau character varying(3),
id_usage character varying(3),
id_prelevement_motif character varying(2),
commentaire character varying(254),
CONSTRAINT pk_nitrate_prelevement_{version} PRIMARY KEY (code_prelevement),
CONSTRAINT fk_n_support FOREIGN KEY (code_support)
REFERENCES sandre.n_support (code_support) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET DEFAULT
)
WITH (
OIDS=FALSE
);
ALTER TABLE nitrates.nitrate_prelevement_{version}
OWNER TO adminpsql;
GRANT ALL ON TABLE nitrates.nitrate_prelevement_{version} TO adminpsql;
GRANT ALL ON TABLE nitrates.nitrate_prelevement_{version} TO writer_production;
GRANT SELECT ON TABLE nitrates.nitrate_prelevement_{version} TO reader_production;
COMMENT ON TABLE nitrates.nitrate_prelevement_{version}
IS 'Table des pr\u00e9l\u00e8vements 2007-{last_year} (version {version} du {date_now})';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_prelevement IS 'Identifiant du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_intervenant IS 'Identifiant de l''intervenant';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.source IS 'Source de la donn\u00e9e';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_reseau IS 'Identifiant du r\u00e9seau';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_station IS 'Identifiant de la station';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.date_prelevement IS 'Date du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.heure_prelevement IS 'Heure du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_support IS 'Code du support de pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.nature_eau IS 'Nature de l''eau du pr\u00e9l\u00e8vement (ESO/ESU)';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.id_usage IS 'Code de l''usage du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.id_prelevement_motif IS 'Code du motif du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.commentaire IS 'Commentaire';
CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_prelevement_{version}_code_prelevement_seq
INCREMENT 1
START 1
MINVALUE 1
MAXVALUE 2147483647
CACHE 1;
ALTER SEQUENCE nitrates.nitrate_prelevement_{version}_code_prelevement_seq
OWNER TO adminpsql;
")
# Exécution du script dans la base de données
DBI::dbExecute(connexion, sql_script)
# Fermeture de la connexion à la base de données
DBI::dbDisconnect(connexion)
return(sql_script)
}
```
Création de la table `nitrates.nitrate_prelevement_version` :
```{r create_nitrate_prelevement_table_version, eval=FALSE}
# Création du script SQL avec la version choisie
sql <- create_nitrate_prelevement_table(version, last_year)
```
## Création de la table des analyses et ajout des commentaires
```{r function-create_nitrate_analyse_table, eval=FALSE}
#' Créer une table d'analyses de nitrates
#'
#' @description Cette fonction crée une table dans une base de données PostgreSQL
#' pour stocker les informations relatives aux analyses de nitrates, incluant
#' les contraintes et les séquences nécessaires.
#'
#' @param version String. Version de la table (par exemple, 'v1').
#' @param last_year Integer. L'année la plus récente incluse dans les données de la table.
#'
#' @return String. Le script SQL utilisé pour créer la table.
#' @export
#' @importFrom datalibaba connect_to_db
create_nitrate_analyse_table <- function(version, last_year) {
# Établir une connexion à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
# Génération de la date du jour
date_now <- format(Sys.Date(), "%d/%m/%Y")
# Création du script avec l'ajout des paramètres
sql_script <- glue::glue("
CREATE TABLE IF NOT EXISTS nitrates.nitrate_analyse_{version}
(
code_analyse serial NOT NULL,
code_intervenant character varying(20),
code_prelevement integer,
code_parametre bigint,
code_fraction_analysee integer,
date_analyse date,
resultat_analyse double precision,
code_remarque integer,
limite_detection double precision,
limite_quantification double precision,
CONSTRAINT pk_nitrate_analyse_{version} PRIMARY KEY (code_analyse),
CONSTRAINT fk_n_fraction_analysee FOREIGN KEY (code_fraction_analysee)
REFERENCES sandre.n_fraction_analysee (code_fraction_analysee) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET DEFAULT,
-- CONSTRAINT fk_n_intervenant FOREIGN KEY (code_intervenant)
-- REFERENCES qualite_cours_d_eau.n_intervenant (code_intervenant) MATCH SIMPLE
-- ON UPDATE CASCADE ON DELETE SET DEFAULT,
CONSTRAINT fk_n_remarque FOREIGN KEY (code_remarque)
REFERENCES sandre.n_remarque (code_remarque) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_parametre FOREIGN KEY (code_parametre)
REFERENCES qualite_cours_d_eau.parametre (code_parametre) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET DEFAULT
)
WITH (
OIDS=FALSE
);
ALTER TABLE nitrates.nitrate_analyse_{version}
OWNER TO adminpsql;
GRANT ALL ON TABLE nitrates.nitrate_analyse_{version} TO adminpsql;
GRANT ALL ON TABLE nitrates.nitrate_analyse_{version} TO writer_production;
GRANT SELECT ON TABLE nitrates.nitrate_analyse_{version} TO reader_production;
COMMENT ON TABLE nitrates.nitrate_analyse_{version}
IS 'Table des analyses 2007-{last_year} (version {version} du {date_now})';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_analyse IS 'Identifiant de l''analyse';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_intervenant IS 'Identifiant du laboratoire ayant effectu\u00e9 l''analyse';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_prelevement IS 'Identifiant du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_parametre IS 'Identifiant du param\u00e8tre analys\u00e9';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_fraction_analysee IS 'Identifiant de la fraction analys\u00e9e';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.date_analyse IS 'Date de l''analyse';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.resultat_analyse IS 'R\u00e9sultat de l''analyse';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_remarque IS 'Code validant la donn\u00e9e';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.limite_detection IS 'Limite de d\u00e9tection';
COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.limite_quantification IS 'Limite de quantification';
CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_analyse_{version}_code_analyse_seq
INCREMENT 1
START 1
MINVALUE 1
MAXVALUE 2147483647
CACHE 1;
ALTER SEQUENCE nitrates.nitrate_analyse_{version}_code_analyse_seq
OWNER TO adminpsql;
")
# Exécution du script dans la base de données
DBI::dbExecute(connexion, sql_script)
# Fermeture de la connexion à la base de données
DBI::dbDisconnect(connexion)
return(sql_script)
}
```
Création de la table `nitrates.nitrate_analyse_version` :
```{r create_nitrate_analyse_table, eval=FALSE}
# Création du script SQL avec la version choisie
sql <- create_nitrate_analyse_table(version, last_year)
```
# Incrémentation des séquences
## Incrémentation de la table des prélèvements
```{r function-add_code_prelevement, eval=FALSE}
#' Ajouter une variable code_prelevement au dataframe
#'
#' @description Cette fonction ajoute une nouvelle variable `code_prelevement`
#' 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_prelevement`.
#' @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_prelevement` 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_prelevement <- function(dataframe, version) {
# Établir une connexion à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
# Créer la séquence correspondant à la table
create_sequence <- glue::glue("CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_prelevement_{version}_code_prelevement_seq
INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1;")
# Exécuter le script dans la base de données
DBI::dbExecute(connexion, create_sequence)
# Construire le nom de la séquence
sequence_name <- glue::glue("nitrates.nitrate_prelevement_{version}_code_prelevement_seq")
# Initialiser une liste pour stocker les valeurs de la séquence
code_prelevements <- 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_prelevement")
result <- DBI::dbGetQuery(connexion, query)
code_prelevements <- c(code_prelevements, result$code_prelevement)
}
# Ajouter la nouvelle variable au dataframe
dataframe <- dataframe |>
dplyr::mutate(code_prelevement = code_prelevements)
# Fermer la connexion à la base de données
DBI::dbDisconnect(connexion)
return(dataframe)
}
```
La fonction est utilisée au moment d'importer les données des différentes
sources dans la table `nitrates.nitrate_prelevement_version` :
```{r example_add_code_prelevement, eval=FALSE}
# Crée un dataframe fictif avec les colonnes nécessaires pour l'exemple
dataframe <- data.frame(
id_prelevement = 1:5,
autre_colonne = sample(letters, 5)
)
# Définir une version pour l'exemple
version <- "v1"
# Utiliser la fonction add_code_prelevement() avec la version souhaitée
dataframe <- add_code_prelevement(
dataframe, version)
```
## Incrémentation de la table des analyses
```{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")
# Créer la séquence correspondant à la table
create_sequence <- glue::glue("CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_analyse_{version}_code_analyse_seq
INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1;")
# Exécuter le script dans la base de données
DBI::dbExecute(connexion, create_sequence)
# 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)
}
```
La fonction est utilisée au moment d'importer les données des différentes
sources dans la table `nitrates.nitrate_analyse_version` :
On ajoute un identifiant unique s'appuyant sur une séquence stockée en base :
```{r example_add_code_analyse, eval=FALSE}
# Crée un dataframe fictif avec les colonnes nécessaires pour l'exemple
dataframe <- data.frame(
id_prelevement = 1:5,
autre_colonne = sample(letters, 5)
)
# Définir une version pour l'exemple
version <- "v1"
# Utiliser la fonction add_code_analyse() avec la version souhaitée
dataframe <- add_code_analyse(
dataframe, version)
```
```{r development-skeleton-dir, eval=FALSE}
# Créer de l'arborescence et des fichiers du template
usethis::use_rmarkdown_template(
template_name = "Cr\u00e9ation des tables et des s\u00e9quences",
template_dir = "creation-des-tables-et-des-sequences",
template_description = "Cr\u00e9ation des tables et des s\u00e9quences",
template_create_dir = TRUE
)
```
```{r development-skeleton-copy, eval=FALSE}
# Définir les chemins source et destination
source_file <- "dev/flat_create_tables_sequences.Rmd"
destination_dir <- "inst/rmarkdown/templates/creation-des-tables-et-des-sequences/skeleton"
destination_file <- file.path(destination_dir, "skeleton.Rmd")
# Copier et renommer le fichier
file.copy(from = source_file, to = destination_file, overwrite = TRUE)
message("File copied and renamed successfully.")
```
```{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_create_tables_sequences.Rmd", vignette_name = "Cr\u00e9ation des tables et des s\u00e9quences")
```
---
title: "Insertion des analyses ARS"
output: html_document
editor_options:
chunk_output_type: console
---
```{r development, include=FALSE}
library(testthat)
library(yaml)
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)
```
```{r config, eval=FALSE}
# Lire le fichier de configuration
config <- yaml::read_yaml("config.yml")
# Accéder à la valeur pour version
version <- config$version
```
# 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 :
```{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 |>
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 :
```{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_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 :
```{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 |>
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 :
```{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, 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 :
```{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_version, eval=FALSE}
# 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 :
```{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 = glue::glue("nitrate_analyse_ars_", version),
source_schema = "nitrates",
target_table = glue::glue("nitrate_analyse_", version),
target_schema = "nitrates",
role = "admin")
```
```{r development-skeleton-dir, eval=FALSE}
# Créer initialement l'arborescence et des fichiers du template
usethis::use_rmarkdown_template(
template_name = "Insertion des analyses ARS",
template_dir = "insertion-des-analyses-ars",
template_description = "Insertion des analyses ARS",
template_create_dir = TRUE
)
```
```{r development-skeleton-copy, eval=FALSE}
# Définir les chemins source et destination
source_file <- "dev/flat_insert_ars_into_analyse.Rmd"
destination_dir <- "inst/rmarkdown/templates/insertion-des-analyses-ars/skeleton"
destination_file <- file.path(destination_dir, "skeleton.Rmd")
# Copier et renommer le fichier
file.copy(from = source_file, to = destination_file, overwrite = TRUE)
message("File copied and renamed successfully.")
```
```{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")
```
---
title: "Insertion des pr\u00e9l\u00e8vements ARS"
output: html_document
editor_options:
chunk_output_type: console
---
```{r development, include=FALSE}
library(testthat)
library(yaml)
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)
```
```{r config, eval=FALSE}
# Lire le fichier de configuration
config <- yaml::read_yaml("config.yml")
# Accéder à la valeur pour version
version <- config$version
```
# Consolidation et insertion des données de l'ARS dans la table des prélèvements
## Chargement des données ARS brutes et des stations ESO
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"
)
```
La table des stations ESO est chargée afin de remplacer ultérieurement le code SISE-EAUX par le code BSS pour les prélèvements ESO :
```{r load-nitrate_station_eso, eval=FALSE}
station_eso <- datalibaba::importer_data(
table = "station_eso",
schema = "stations",
db = "si_eau",
user = "admin"
)
```
## Consolidation des données ARS
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 sélectionne les champs utiles à la table des prélèvements :
```{r select-variables-ars, eval=FALSE}
# Sélectionner les variables
nitrate_data_analyse_ars <- nitrate_data_analyse_ars |>
dplyr::select(code_intervenant = geo_dept_ddass_gest_code,
source,
code_station = ins_code_national,
date_prelevement = plv_date,
heure_prelevement = plv_heure,
code_support,
nature_eau,
id_usage = usage,
id_prelevement_motif = plv_motif)
```
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)
```
On met à jour le champs code_station avec le code BSS :
```{r update_code_bss, eval=FALSE}
nitrate_data_analyse_ars <- nitrate_data_analyse_ars |>
dplyr::left_join(station_eso, by = c("code_station" = "code_sise_eaux"), suffix = c("_ars", "_station_eso"))
nitrate_data_analyse_ars <- nitrate_data_analyse_ars |>
dplyr::mutate(code_station = ifelse(!is.na(code_station_station_eso), code_station_station_eso, code_station)) |>
dplyr::select(-code_station_station_eso, -source_station_eso)
```
On ne conserve que les champs utiles à la table des prélèvements :
```{r select-variables-ars_v2, eval=FALSE}
nitrate_data_analyse_ars <- nitrate_data_analyse_ars |>
dplyr::select(code_intervenant,
source = source_ars,
code_station,
date_prelevement,
heure_prelevement,
code_support,
nature_eau,
id_usage,
id_prelevement_motif)
```
On ajoute un identifiant unique s'appuyant sur une séquence stockée en base :
```{r add_code_prelevement_ars, eval=FALSE}
# Utiliser la fonction add_code_prelevement() avec la version souhaitée
nitrate_data_analyse_ars <- add_code_prelevement(
nitrate_data_analyse_ars, version)
# 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_16, eval=FALSE}
# Charger les données dans une nouvelle table en base
datalibaba::poster_data(data = nitrate_data_analyse_ars,
table = glue::glue("nitrate_prelevement_ars_", version),
schema = "nitrates",
db = "si_eau",
overwrite = TRUE,
pk = "code_prelevement",
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 = glue::glue("nitrate_prelevement_ars_", version),
source_schema = "nitrates",
target_table = glue::glue("nitrate_prelevement_", version),
target_schema = "nitrates",
role = "admin")
```
```{r development-skeleton-dir, eval=FALSE}
# Créer initialement l'arborescence et des fichiers du template
usethis::use_rmarkdown_template(
template_name = "Insertion des pr\u00e9l\u00e8vements ARS",
template_dir = "insertion-des-prelevements-ars",
template_description = "Insertion des pr\u00e9l\u00e8vements ARS",
template_create_dir = TRUE
)
```
```{r development-skeleton-copy, eval=FALSE}
# Définir les chemins source et destination
source_file <- "dev/flat_insert_ars_into_prelevement.Rmd"
destination_dir <- "inst/rmarkdown/templates/insertion-des-prelevements-ars/skeleton"
destination_file <- file.path(destination_dir, "skeleton.Rmd")
# Copier et renommer le fichier
file.copy(from = source_file, to = destination_file, overwrite = TRUE)
message("File copied and renamed successfully.")
```
```{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")
```
---
title: "Insertion des pr\u00e9l\u00e8vements et analyses"
output: html_document
editor_options:
chunk_output_type: console
---
```{r development, include=FALSE}
library(testthat)
library(yaml)
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)
```
```{r config, eval=FALSE}
# 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
```
# Données ESO et ESU de l'ARS
## 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 ajoute les variables `source` et `code_support` :
```{r add_source_code_support, eval=FALSE}
# Ajouter les variables source et code_support
nitrate_prelevement_analyse_ars <- nitrate_data_analyse_ars |>
dplyr::mutate(
source = "ARS",
code_reseau = NA,
code_support = 3,
code_fraction_analysee = NA,
limite_detection = NA,
)
```
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_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
dplyr::mutate(plv_heure = stringr::str_replace_all(plv_heure, "h", ":"))
```
On supprime les enregistrements correspondants à des totaux :
```{r filter_param_nom_ars, eval=FALSE}
# Supprimer les lignes ne correspondant pas à une analyse
nitrate_prelevement_analyse_ars <- nitrate_prelevement_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_prelevement_analyse_ars <- nitrate_prelevement_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_prelevement_analyse_ars <- nitrate_prelevement_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_prelevement_analyse_ars <- nitrate_prelevement_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 supprime "<" dans la variable `limite_quantification` :
```{r replace_in_plv_heure, eval=FALSE}
# Remplacer "h" par ":" dans la colonne plv_heure
nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
dplyr::mutate(limite_quantification = stringr::str_replace_all(limite_quantification, "<", ""))
```
On sélectionne les champs utiles à la table des prélèvements et analyse :
```{r select_variables, eval=FALSE}
# Sélectionner les variables
nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
dplyr::select(code_intervenant = geo_dept_ddass_gest_code,
source,
code_reseau,
code_station = ins_code_national,
date_prelevement = plv_date,
heure_prelevement = plv_heure,
code_support,
nature_eau,
id_usage = usage,
id_prelevement_motif = plv_motif,
date_analyse = anl_date_fin_analyse,
resultat_analyse,
code_parametre = param_code,
code_fraction_analysee,
code_remarque,
limite_detection,
limite_quantification)
```
# Données Hub'eau ESO
## Chargement des prélèvements Hub'eau ESO
La table des données brutes Nitrates Hub'eau ESO est chargée :
```{r load_nitrate_qualite_nappes_analyses, eval=FALSE}
# Charger la table `qualite_nappes_eau_souterraine.nitrate_qualite_nappes_analyses`
nitrate_qualite_nappes_prelevements <- datalibaba::importer_data(
table = "nitrate_qualite_nappes_analyses",
schema = "qualite_nappes_eau_souterraine",
db = "si_eau",
user = "admin"
)
```
## Filtre par code_producteur pour exclure les données ARS
On sélectionne les code_producteur correspondants aux enregistrements hors
données ARS de la région :
```{r select_code_producteur_hubeau_eso, eval=FALSE}
# Filtrer pour exclure les données ARS
nitrate_prelevement_analyse_hubeau_eso <- nitrate_qualite_nappes_prelevements |>
dplyr::filter(!code_producteur %in% c('44','49','53','72','85'))
```
## Consolidation des prélèvements Hub'eau ESO
On ajoute les variables `source`, `code_support` et `nature_eau` :
```{r add_source_code_support_hubeau_eso, eval=FALSE}
# Ajouter les variables source, code_support et nature_eau
nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |>
dplyr::mutate(
source = "ADES",
heure_prelevement = NA,
code_support = 3,
nature_eau = "ESO",
id_usage = NA,
id_prelevement_motif = NA,
date_analyse = NA)
```
On remplace des valeurs dans limite_detection et limite_quantification :
```{r replace_dot_limite_detection, eval=FALSE}
# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification
nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |>
dplyr::mutate(
resultat = stringr::str_replace(resultat, "\\,", "."),
limite_detection = stringr::str_replace(limite_detection, "\\,", "."),
limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".")
)
```
On modifie le type des variables numériques et on les renomme :
```{r change-fieldtypes, eval=FALSE}
# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification
nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |>
dplyr::rename(code_intervenant = code_lieu_analyse,
code_reseau = codes_reseau,
code_station = bss_id,
date_prelevement = date_debut_prelevement
) |>
dplyr::mutate(code_support = as.integer(code_support),
resultat_analyse = as.numeric(resultat),
limite_detection = as.numeric(limite_detection),
limite_quantification = as.numeric(limite_quantification),
code_parametre = as.integer(code_param),
code_fraction_analysee = as.integer(code_fraction),
code_remarque = as.integer(code_remarque_analyse)
)
```
On sélectionne les champs utiles à la table des prélèvements et analyses :
```{r select_variables_hubeau_eso, eval=FALSE}
# Sélectionner les variables
nitrate_prelevement_analyse_hubeau_eso <-
nitrate_prelevement_analyse_hubeau_eso |>
dplyr::select(code_intervenant,
source,
code_reseau,
code_station,
date_prelevement,
heure_prelevement,
code_support,
nature_eau,
id_usage,
id_prelevement_motif,
date_analyse,
resultat_analyse,
code_parametre,
code_fraction_analysee,
code_remarque,
limite_detection,
limite_quantification)
```
# Données Hub'eau ESU
## Chargement des prélèvements Hub'eau ESU
La table des données brutes Nitrates Hub'eau ESU est chargée :
```{r load-nitrate_qualite_rivieres_analyse_pc, eval=FALSE}
# Charger la table qualite_nappes_eau_souterraine.nitrate_qualite_rivieres_analyse_pc
nitrate_qualite_rivieres_prelevements <- datalibaba::importer_data(
table = "nitrate_qualite_rivieres_analyse_pc",
schema = "qualite_cours_d_eau",
db = "si_eau",
user = "admin"
)
```
On remplace des valeurs dans `limite_detection` et `limite_quantification` :
```{r replace-dot_limite_detection, eval=FALSE}
# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification
nitrate_prelevement_analyse_hubeau_esu <- nitrate_qualite_rivieres_prelevements |>
dplyr::mutate(
resultat = stringr::str_replace(resultat, "\\,", "."),
limite_detection = stringr::str_replace(limite_detection, "\\,", "."),
limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".")
)
```
On ajoute les variables `source` et `nature_eau` :
```{r add-source_code_support_hubeau_esu, eval=FALSE}
# Ajouter les variables source et nature_eau
nitrate_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |>
dplyr::mutate(
source = "Na\u00efades",
heure_prelevement = NA,
code_support = 3,
nature_eau = "ESU",
id_usage = NA,
id_prelevement_motif = NA,
date_analyse = NA)
```
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_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |>
dplyr::mutate(resultat_analyse = as.numeric(resultat),
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),
code_remarque = as.integer(code_remarque)
)
```
On sélectionne les champs utiles à la table des prélèvements et analyses :
```{r select_variables_hubeau_eso, eval=FALSE}
# Sélectionner les variables
nitrate_prelevement_analyse_hubeau_esu <-
nitrate_prelevement_analyse_hubeau_esu|>
dplyr::select(code_intervenant = code_laboratoire,
source,
code_reseau,
code_station,
date_prelevement,
heure_prelevement,
code_support,
nature_eau,
id_usage,
id_prelevement_motif,
date_analyse,
resultat_analyse,
code_parametre,
code_fraction_analysee,
code_remarque,
limite_detection,
limite_quantification)
```
# Publication en base
## Agréation des données dans un dataframe unique
```{r agregate_data, eval=FALSE}
# Lier les trois dataframes par source dans un dataframe global
nitrate_prelevement_analyse <-
rbind(nitrate_prelevement_analyse_ars,
nitrate_prelevement_analyse_hubeau_eso,
nitrate_prelevement_analyse_hubeau_esu)
```
## Insertion du dataframe en base
On insère enfin le dataframe consolidé dans la table globale et versionnée
des analyses et prélèvements :
```{r insert_into_nitrate_prelevement_analyse_version, eval=FALSE}
# Charger les données dans une nouvelle table en base
datalibaba::poster_data(data = nitrate_prelevement_analyse,
table = glue::glue("nitrate_prelevement_analyse_", version),
schema = "nitrates",
db = "si_eau",
overwrite = TRUE,
#pk = "code_prelevement_analyse",
user = "admin")
```
## Renommage de l'identifiant
```{r rename_id_row__, eval=FALSE}
collectr::rename_field(database = "si_eau",
schema = "nitrates",
table = glue::glue("nitrate_prelevement_analyse_", version),
old_field = "id_row__",
new_field = "code_prelevement_analyse",
role = "admin")
```
## Ajout des commentaires
```{r add_comments, eval=FALSE}
# Établir une connexion à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
# Génération de la date du jour
date_now <- format(Sys.Date(), "%d/%m/%Y")
# Liste des requêtes SQL
table_comment <- glue::glue("COMMENT ON TABLE nitrates.nitrate_prelevement_analyse_{version} IS
'Table des prélèvements et analyses 2007-{last_year} (version {version} du {date_now})';")
# Exécuter la commande SQL
DBI::dbExecute(connexion, table_comment)
# Ajouter les commentaires sur chaque champ
comments_sql <- glue::glue(
"COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_prelevement_analyse IS 'Identifiant du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_intervenant IS 'Identifiant de l''intervenant';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.source IS 'Source de la donn\u00e9e';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_reseau IS 'Identifiant du r\u00e9seau';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_station IS 'Identifiant de la station';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_prelevement IS 'Date du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.heure_prelevement IS 'Heure du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_support IS 'Code du support de pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.nature_eau IS 'Nature de l''eau du pr\u00e9l\u00e8vement (ESO/ESU)';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_usage IS 'Code de l''usage du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_prelevement_motif IS 'Code du motif du pr\u00e9l\u00e8vement';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_parametre IS 'Identifiant du param\u00e8tre analys\u00e9';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_fraction_analysee IS 'Identifiant de la fraction analys\u00e9e';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_analyse IS 'Date de l''analyse';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.resultat_analyse IS 'R\u00e9sultat de l''analyse';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_remarque IS 'Code validant la donn\u00e9e';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_detection IS 'Limite de d\u00e9tection';
COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_quantification IS 'Limite de quantification';"
)
# Exécuter chaque commande SQL
for (sql in c(comments_sql)) {
DBI::dbExecute(connexion, sql)
}
# Fermeture de la connexion à la base de données
DBI::dbDisconnect(connexion)
```
```{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_data.Rmd", vignette_name = "Insertion des pr\u00e9l\u00e8vements et analyses")
```
......@@ -14,13 +14,11 @@ library(stringr)
library(glue)
library(DBI)
library(RPostgres)
```
```{r development-load}
# Load already included functions if relevant
pkgload::load_all(export_all = FALSE)
```
```{r config, eval=FALSE}
......@@ -67,7 +65,9 @@ nitrate_prelevement_analyse_ars <- nitrate_data_analyse_ars |>
dplyr::mutate(
source = "ARS",
code_reseau = NA,
code_support = 3
code_support = 3,
code_fraction_analysee = NA,
limite_detection = NA,
)
```
......@@ -133,6 +133,13 @@ nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
```
On supprime "<" dans la variable `limite_quantification` :
```{r replace_in_plv_heure, eval=FALSE}
# Remplacer "h" par ":" dans la colonne plv_heure
nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
dplyr::mutate(limite_quantification = stringr::str_replace_all(limite_quantification, "<", ""))
```
On sélectionne les champs utiles à la table des prélèvements et analyse :
```{r select_variables, eval=FALSE}
# Sélectionner les variables
......@@ -147,61 +154,19 @@ nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
nature_eau,
id_usage = usage,
id_prelevement_motif = plv_motif,
nom_parametre = param_nom,
date_analyse = anl_date_fin_analyse,
resultat_analyse,
code_parametre = param_code,
code_fraction_analysee,
code_remarque,
limite_detection,
limite_quantification)
```
# Publication en base
## Insertion dans une table intermédiaire
On ajoute un identifiant unique s'appuyant sur une séquence stockée en base :
```{r add_code_prelevement_ars, eval=FALSE}
# Utiliser la fonction add_code_prelevement_analyse() avec la version souhaitée
nitrate_prelevement_analyse_ars <- add_code_prelevement_analyse(
nitrate_prelevement_analyse_ars, version)
# Afficher le dataframe pour vérifier les modifications
print(nitrate_prelevement_analyse_ars)
```
On charge les données consolidées dans un table dédiée :
```{r insert_into_nitrate_prelevement_analyse_version, eval=FALSE}
# Charger les données dans une nouvelle table en base
datalibaba::poster_data(data = nitrate_prelevement_analyse_ars,
table = glue::glue("nitrate_prelevement_analyse_ars", version),
schema = "nitrates",
db = "si_eau",
overwrite = TRUE,
pk = "code_prelevement",
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 = glue::glue("nitrate_prelevement_analyse_ars", version),
source_schema = "nitrates",
target_table = glue::glue("nitrate_prelevement_analyse", version),
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_data_ars.Rmd", vignette_name = "Go further")
fusen::inflate(flat_file = "dev/flat_insert_data_ars.Rmd", vignette_name = "Insertion des pr\u00e9l\u00e8vements et analyses ARS")
```
......@@ -66,7 +66,8 @@ nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso
code_support = 3,
nature_eau = "ESO",
id_usage = NA,
id_prelevement_motif = NA)
id_prelevement_motif = NA,
date_analyse = NA)
```
On remplace des valeurs dans limite_detection et limite_quantification :
......@@ -103,7 +104,7 @@ nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso
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 :
donnée (à supprimer ?) :
```{r select_distinct_rows_hubeau_eso, eval=FALSE}
# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |>
......@@ -113,7 +114,8 @@ nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso
On sélectionne les champs utiles à la table des prélèvements et analyses :
```{r select_variables_hubeau_eso, eval=FALSE}
# Sélectionner les variables
nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |>
nitrate_prelevement_analyse_hubeau_eso <-
nitrate_prelevement_analyse_hubeau_eso |>
dplyr::select(code_intervenant,
source,
code_reseau,
......@@ -124,6 +126,7 @@ nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso
nature_eau,
id_usage,
id_prelevement_motif,
date_analyse,
resultat_analyse,
code_parametre,
code_fraction_analysee,
......@@ -133,7 +136,6 @@ nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso
```
```{r development-inflate, eval=FALSE}
# Run but keep eval=FALSE to avoid infinite loop
# Execute in the console directly
......
......@@ -44,6 +44,89 @@ nitrate_qualite_rivieres_prelevements <- datalibaba::importer_data(
)
```
On remplace des valeurs dans `limite_detection` et `limite_quantification` :
```{r replace-dot_limite_detection, eval=FALSE}
# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification
nitrate_prelevement_analyse_hubeau_esu <- nitrate_qualite_rivieres_prelevements |>
dplyr::mutate(
resultat = stringr::str_replace(resultat, "\\,", "."),
limite_detection = stringr::str_replace(limite_detection, "\\,", "."),
limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".")
)
```
On ajoute les variables `source` et `nature_eau` :
```{r add-source_code_support_hubeau_esu, eval=FALSE}
# Ajouter les variables source et nature_eau
nitrate_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |>
dplyr::mutate(
source = "Na\u00efades",
heure_prelevement = NA,
code_support = 3,
nature_eau = "ESU",
id_usage = NA,
id_prelevement_motif = NA,
date_analyse = NA)
```
On modifie le type de la variable `code_support` de character en integer
(à supprimer ?) :
```{r change-type_code_support, eval=FALSE}
# Convertir la variable code_support de character en integer
nitrate_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |>
dplyr::mutate(code_support = as.integer(code_support))
```
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 (à supprimer ?) :
```{r select-distinct-rows_hubeau_esu, eval=FALSE}
# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
nitrate_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |>
dplyr::distinct(code_station, date_prelevement, .keep_all = TRUE)
```
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_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |>
dplyr::mutate(resultat_analyse = as.numeric(resultat),
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),
code_remarque = as.integer(code_remarque)
)
```
On sélectionne les champs utiles à la table des prélèvements et analyses :
```{r select_variables_hubeau_eso, eval=FALSE}
# Sélectionner les variables
nitrate_prelevement_analyse_hubeau_esu <-
nitrate_prelevement_analyse_hubeau_esu|>
dplyr::select(code_intervenant = code_laboratoire,
source,
code_reseau,
code_station,
date_prelevement,
heure_prelevement,
code_support,
nature_eau,
id_usage,
id_prelevement_motif,
date_analyse,
resultat_analyse,
code_parametre,
code_fraction_analysee,
code_remarque,
limite_detection,
limite_quantification)
```
```{r development-inflate, eval=FALSE}
# Run but keep eval=FALSE to avoid infinite loop
# Execute in the console directly
......
---
title: "Insertion des analyses Hubeau ESO"
output: html_document
editor_options:
chunk_output_type: console
---
```{r development, include=FALSE}
library(testthat)
library(yaml)
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)
```
```{r config, eval=FALSE}
# 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 ESO dans la table des analyses
## Chargement des analyses Hub'eau ESO
La table des données brutes Nitrates Hub'eau ESO est chargée :
```{r load-nitrate_qualite_nappes_analyses, eval=FALSE}
# Charger la table qualite_nappes_eau_souterraine.nitrate_qualite_nappes_analyses
nitrate_qualite_nappes_analyses <- datalibaba::importer_data(
table = "nitrate_qualite_nappes_analyses",
schema = "qualite_nappes_eau_souterraine",
db = "si_eau",
user = "admin"
)
```
## Filtre par code_producteur pour exclure les données ARS
On sélectionne les code_producteur correspondants aux enregistrements hors
données ARS de la région :
```{r select-code_producteur_hubeau_eso, eval=FALSE}
# Filtrer pour exclure les données ARS
nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_analyses |>
dplyr::filter(!code_producteur %in% c('44','49','53','72','85'))
```
## Consolidation des données Hub'eau ESO
On remplace des valeurs dans limite_detection et limite_quantification :
```{r replace-dot_limite_detection, eval=FALSE}
# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification
nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_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 :
```{r select-variables-hubeau_eso, eval=FALSE}
# Sélectionner les variables
nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_analyses |>
dplyr::select(code_station = bss_id,
code_intervenant = code_lieu_analyse,
date_prelevement = date_debut_prelevement,
date_analyse = date_debut_prelevement,
resultat_analyse = resultat,
code_parametre = code_param,
code_fraction_analysee = code_fraction,
code_remarque = code_remarque_analyse,
limite_detection,
limite_quantification)
```
On modifie le type des variables numériques :
```{r change-fieldtypes, eval=FALSE}
# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification
nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_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 :
```{r load-nitrate_prelevement, eval=FALSE}
# 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 :
```{r select-distinct-rows_hubeau_eso, eval=FALSE}
# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_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 :
```{r join-prelevement_hubeau_eso, eval=FALSE}
# Joindre les dataframes nitrate_qualite_nappes_analyses et nitrate_prelevement
nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_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 :
```{r select-distinct-rows_hubeau_eso_2, eval=FALSE}
# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_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 :
```{r add_code_analyse_hubeau_eso, eval=FALSE}
# Utiliser la fonction add_code_analyse() avec la version souhaitée
nitrate_qualite_nappes_analyses <- add_code_analyse(
nitrate_qualite_nappes_analyses, version)
# Afficher le dataframe pour vérifier les modifications
print(nitrate_qualite_nappes_analyses)
```
# Chargement en base
On corrige l'ordre des champs les champs utiles à la table des analyses :
```{r select-variables-hubeau_eso_final, eval=FALSE}
# Sélectionner les variables dans l'ordre des champs de la table à alimenter
nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_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 un table dédiée :
```{r insert-into_nitrate_prelevement_v0_xx, eval=FALSE}
# Charger les données dans une nouvelle table en base
datalibaba::poster_data(data = nitrate_qualite_nappes_analyses,
table = glue::glue("nitrate_analyse_hubeau_eso_", version),
schema = "nitrates",
db = "si_eau",
overwrite = TRUE,
pk = "code_analyse",
user = "admin")
```
# Insertion des données Hub'eau ESO en base dans la table globale
On insère enfin les enregistrements de cette table dans la table globale :
```{r import_and_merge_tables_hubeau_eso, 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 = glue::glue("nitrate_analyse_hubeau_eso_", version),
source_schema = "nitrates",
target_table = glue::glue("nitrate_analyse_", version),
target_schema = "nitrates",
role = "admin")
```
```{r development-skeleton-dir, eval=FALSE}
# Créer initialement l'arborescence et des fichiers du template
usethis::use_rmarkdown_template(
template_name = "Insertion des analyses Hubeau ESO",
template_dir = "insertion-des-analyses-hubeau-eso",
template_description = "Insertion des analyses Hubeau ESO",
template_create_dir = TRUE
)
```
```{r development-skeleton-copy, eval=FALSE}
# Définir les chemins source et destination
source_file <- "dev/flat_insert_hubeau_eso_into_analyse.Rmd"
destination_dir <- "inst/rmarkdown/templates/insertion-des-analyses-hubeau-eso/skeleton"
destination_file <- file.path(destination_dir, "skeleton.Rmd")
# Copier et renommer le fichier
file.copy(from = source_file, to = destination_file, overwrite = TRUE)
message("File copied and renamed successfully.")
```
```{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_hubeau_eso_into_analyse.Rmd", vignette_name = "Insertion des analyses Hubeau ESO")
```
---
title: "Insertion des pr\u00e9l\u00e8vements Hubeau ESO"
output: html_document
editor_options:
chunk_output_type: console
---
```{r development, include=FALSE}
library(testthat)
library(yaml)
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)
```
```{r config, eval=FALSE}
# Lire le fichier de configuration
config <- yaml::read_yaml("config.yml")
# Accéder à la valeur pour version
version <- config$version
```
# Consolidation et insertion des données Hub'eau ESO dans la table des prélèvements
## Chargement des prélèvements Hub'eau ESO
La table des données brutes Nitrates Hub'eau ESO est chargée :
```{r load-nitrate_qualite_nappes_analyses, eval=FALSE}
# Charger la table qualite_nappes_eau_souterraine.nitrate_qualite_rivieres_analyse_pc
nitrate_qualite_nappes_prelevements <- datalibaba::importer_data(
table = "nitrate_qualite_nappes_analyses",
schema = "qualite_nappes_eau_souterraine",
db = "si_eau",
user = "admin"
)
```
## Filtre par code_producteur pour exclure les données ARS
On sélectionne les code_producteur correspondants aux enregistrements hors
données ARS de la région :
```{r select-code_producteur_hubeau_eso, eval=FALSE}
# Filtrer pour exclure les données ARS
nitrate_qualite_nappes_prelevements <- nitrate_qualite_nappes_prelevements |>
dplyr::filter(!code_producteur %in% c('44','49','53','72','85'))
```
## Consolidation des prélèvements Hub'eau ESO
On ajoute les variables `source`, `code_support` et `nature_eau` :
```{r add-source_code_support_hubeau_eso, eval=FALSE}
# Ajouter les variables source, code_support et nature_eau
nitrate_qualite_nappes_prelevements <- nitrate_qualite_nappes_prelevements |>
dplyr::mutate(
source = "ADES",
code_support = 3,
nature_eau = "ESO")
```
On sélectionne les champs utiles à la table des prélèvements :
```{r select-variables_hubeau_eso, eval=FALSE}
# Sélectionner les variables
nitrate_qualite_nappes_prelevements <- nitrate_qualite_nappes_prelevements |>
dplyr::select(source,
code_reseau = codes_reseau,
code_station = bss_id,
date_prelevement = date_debut_prelevement,
code_support,
nature_eau)
```
On modifie le type de la variable `code_support` de character en integer :
```{r change-type_code_support, eval=FALSE}
# Convertir la variable code_support de character en integer
nitrate_qualite_nappes_prelevements <- nitrate_qualite_nappes_prelevements |>
dplyr::mutate(code_support = as.integer(code_support))
```
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_hubeau_eso, eval=FALSE}
# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
nitrate_qualite_nappes_prelevements <- nitrate_qualite_nappes_prelevements |>
dplyr::distinct(code_station, date_prelevement, .keep_all = TRUE)
```
On ajoute un identifiant unique s'appuyant sur une séquence stockée en base :
```{r add_code_prelevement_hubeau_eso, eval=FALSE}
# Utiliser la fonction add_code_prelevement() avec la version souhaitée
nitrate_qualite_nappes_prelevements <- add_code_prelevement(
nitrate_qualite_nappes_prelevements, version)
# Afficher le dataframe pour vérifier les modifications
print(nitrate_qualite_nappes_prelevements)
```
On charge les données consolidées dans un table dédiée :
```{r insert-into_nitrate_prelevement_hubeau_eso, eval=FALSE}
# Charger les données dans une nouvelle table en base
datalibaba::poster_data(data = nitrate_qualite_nappes_prelevements,
table = glue::glue("nitrate_prelevement_hubeau_eso_", version),
schema = "nitrates",
db = "si_eau",
overwrite = TRUE,
pk = "code_prelevement",
user = "admin")
```
# Insertion des prélèvements Hub'eau ESO en base dans la table globale
On insère enfin les enregistrements de cette table dans la table globale :
```{r import_and_merge_tables_hubeau_eso, eval=FALSE}
# Insérer les prélèvements Hub'eau ESO vers la table complète
collectr::import_and_merge_tables(database = "si_eau",
source_table = glue::glue("nitrate_prelevement_hubeau_eso_", version),
source_schema = "nitrates",
target_table = glue::glue("nitrate_prelevement_", version),
target_schema = "nitrates",
role = "admin")
```
```{r development-skeleton-dir, eval=FALSE}
# Créer initialement l'arborescence et des fichiers du template
usethis::use_rmarkdown_template(
template_name = "Insertion des pr\u00e9l\u00e8vements Hubeau ESO",
template_dir = "insertion-des-prelevements-hubeau-eso",
template_description = "Insertion des pr\u00e9l\u00e8vements Hubeau ESO",
template_create_dir = TRUE
)
```
```{r development-skeleton-copy, eval=FALSE}
# Définir les chemins source et destination
source_file <- "dev/flat_insert_hubeau_eso_into_prelevement.Rmd"
destination_dir <- "inst/rmarkdown/templates/insertion-des-prelevements-hubeau-eso/skeleton"
destination_file <- file.path(destination_dir, "skeleton.Rmd")
# Copier et renommer le fichier
file.copy(from = source_file, to = destination_file, overwrite = TRUE)
message("File copied and renamed successfully.")
```
```{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_hubeau_eso_into_prelevement.Rmd", vignette_name = "Insertion des pr\u00e9l\u00e8vements Hubeau ESO")
```
---
title: "Insertion des analyses Hubeau ESU"
output: html_document
editor_options:
chunk_output_type: console
---
```{r development, include=FALSE}
library(testthat)
library(yaml)
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)
```
```{r config, eval=FALSE}
# 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 :
```{r load-nitrate_qualite_rivieres_analyse_pc, eval=FALSE}
# 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 :
```{r replace-dot_limite_detection, eval=FALSE}
# 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 :
```{r select-variables-hubeau_esu, eval=FALSE}
# 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 :
```{r change-fieldtypes, eval=FALSE}
# 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 :
```{r load-nitrate_prelevement, eval=FALSE}
# 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 :
```{r select-distinct-rows_hubeau_esu, eval=FALSE}
# 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 :
```{r join-prelevement_hubeau_esu, eval=FALSE}
# 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 :
```{r select-distinct-rows_hubeau_esu_2, eval=FALSE}
# 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 :
```{r add_code_analyse_hubeau_esu, eval=FALSE}
# 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 :
```{r select-variables-hubeau_esu_final, eval=FALSE}
# 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 :
```{r insert-into_nitrate_analyse_hubeau_esu_version, eval=FALSE}
# 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 :
```{r import_and_merge_tables_hubeau_esu, 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 = glue::glue("nitrate_analyse_hubeau_esu_", version),
source_schema = "nitrates",
target_table = glue::glue("nitrate_analyse_", version),
target_schema = "nitrates",
role = "admin")
```
```{r development-skeleton-dir, eval=FALSE}
# Créer de l'arborescence et des fichiers du template
usethis::use_rmarkdown_template(
template_name = "Insertion des analyses Hubeau ESU",
template_dir = "insertion-des-analyses-hubeau-esu",
template_description = "Insertion des analyses Hubeau ESU",
template_create_dir = TRUE
)
```
```{r development-skeleton-copy, eval=FALSE}
# Définir les chemins source et destination
source_file <- "dev/flat_insert_hubeau_esu_into_analyse.Rmd"
destination_dir <- "inst/rmarkdown/templates/insertion-des-analyses-hubeau-esu/skeleton"
destination_file <- file.path(destination_dir, "skeleton.Rmd")
# Copier et renommer le fichier
file.copy(from = source_file, to = destination_file, overwrite = TRUE)
message("File copied and renamed successfully.")
```
```{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_hubeau_esu_into_analyse.Rmd", vignette_name = "Insertion des analyses Hubeau ESU")
```