vignettes/articles/import-MET-THg-23-19.Rmd
import-MET-THg-23-19.Rmd
knitr::opts_chunk$set(eval = FALSE)
Ce document permet d’importer les mesures de laboratoire pour le rapport MET-Thg-23-19
Première étape, on veut être en mesure de restaurer la base de données si l’importation introduit des erreurs dans la base de données.
db_path <- "Z:/07-Données BD/Database/contaminants-rlavoie-eccc.sqlite"
db_bak <- stringr::str_replace(
db_path,
pattern = ".sqlite",
replacement = glue::glue("-{format(Sys.Date(), '%Y%m%d')}.bak.sqlite")
)
file.copy(db_path, db_bak)
lab_results_file <- "Z:/03-Labo/Results Reports/À entrer dans la BD/MET-THg-23-19 - RALA01-2023.xlsx"
# Informations sur les échantillons
sampleInfoLab <- readxl::read_xlsx(lab_results_file, "SampleInfo")
# Informations sur les mesures
measurementsLab <- readxl::read_xlsx(lab_results_file, "SampleData")
report <- data.frame(
id_report = "MET-Thg-23-19",
id_project = "RALA01-2023",
report_date = "2024-07-31",
report_access_path = stringr::str_replace("Z:/03-Labo/Results Reports/À entrer dans la BD/MET-THg-23-19 - RALA01-2023.xlsx", "À entrer dans la BD", "Saisie dans la BD")
)
On valide si le projet existe déjà dans la base de données
toxbox::search_tbl(con, "project", id_project = "RALA01-2023")
Il existe déjà dans la base de données. On peut donc importer les métadonnées du rapport qui seront attaché à ce projet.
DBI::dbWriteTable(con, "report", report, append = TRUE)
field_sample <- sampleInfoLab |> dplyr::select(
id_lab_sample = SampleID,
id_field_sample = ClientID,
collection_date = CollectionDate,
id_site = Location,
id_species = Species,
tissue = Tissue,
age = Age
)
On valide si le ou les site(s) de collecte des échantillons existent dans la base de données
On isole dans un premier temps les sites présent dans les résultats envoyés par le laboratoire.
(sitesLab <- dplyr::distinct(sampleInfoLab, Location, Latitude, Longitude))
On recherche dans la base de données les sites à l’aide de mots clés.
betchouanes_site_db <- toxbox::search_tbl(con, "sites", id_site = "%betchouanes%")
mingan_site_db <- toxbox::search_tbl(con, "sites", id_site = "%mingan%")
Après avoir chercher les sites dans la base de données, nous pouvons nous apercevoir que le site de betchouanes est déjà renseigné dans la base de données mais pas le site de Longue-Pointe-de-Mingan. On ajoute donc ce site.
add_site <- sitesLab |>
dplyr::filter(Location == "Longue-Pointe-de-Mingan") |>
dplyr::select(
id_site = Location,
lat = Latitude,
lon = Longitude
) |>
dplyr::mutate(
province = 'Québec',
srid = 4326
)
DBI::dbWriteTable(con, "sites", add_site, append = TRUE)
On vérifie que le site a bel et bien été ajouté dans la base de données.
toxbox::search_tbl(con, "sites", id_site = "Longue-Pointe-de-Mingan")
field_sample <- field_sample |>
dplyr::mutate(
id_site = dplyr::case_when(
stringr::str_detect(id_site, "Ile a Calculot des Betchouanes") == TRUE ~ betchouanes_site_db$id_site,
.default = id_site
)
)
On liste les espèces en premier les espèces présente dans les résultats de laboratoire.
unique(field_sample$id_species)
On compare avec la liste des espèces présentes dans la base de données.
DBI::dbReadTable(con, "species")
On créé un tableau avec les espèces qui ne sont pas présentes dans la base de données.
new_species <- tibble::tribble(
~org_species, ~id_species, ~organism, ~genus, ~species, ~vernacular_fr, ~vernacular_en,
"Alose sp.", "SHSP", "Fish", "Alosa", "Alosa sp.", "Alose", "Shad",
"Gadidae sp.", "COSP", "Fish", "Gadidae", "Gadidae sp.", "Morue", "Cod",
"Lompenie tachete", "DASH", "Fish", "Gadidae", "Leptoclinus maculatus", "Lompénie tachetée", "Daubed shanny"
)
On ajoute ces espèces dans la base de données
DBI::dbWriteTable(con, "species", dplyr::select(new_species, -org_species)
, append = TRUE)
On valide visuellement que les nouvelles espèces se retrouvent bien dans la base de données
DBI::dbReadTable(con, "species")
On effectue la correspondance entre les codes espèces du rapport de laboratoire et ceux de la base de données.
field_sample <- field_sample |> dplyr::mutate(
id_species = dplyr::case_when(
id_species == "Alose sp." ~ "SHSP",
id_species == "Capelan" ~ "CAPE",
id_species == "Gadidae sp." ~ "COSP",
id_species == "Lancon" ~ "SAND",
id_species == "Lompenie tachete" ~ "DASH",
.default = NA
)
) |> dplyr::filter(!is.na(id_species))
Les étapes précédentes ont permis de mettre à jour les tables de références pour les sites et les espèces.
On peut maintenant procéder à importer les données sur les échantillons et les mesures.
dplyr::select(field_sample, id_field_sample, collection_date, id_site, id_species, age, tissue) |>
dplyr::distinct() |>
(\(data) DBI::dbWriteTable(con, "field_sample", data, append = TRUE))()
dplyr::select(field_sample, id_lab_sample) |>
dplyr::distinct() |>
(\(data) DBI::dbWriteTable(con, "lab_sample", data, append = TRUE))()
Cette table effectue la liaison entre les échantillons de laboratoire et les échantillons de terrain.
dplyr::select(field_sample, id_lab_sample, id_field_sample) |>
dplyr::distinct() |>
(\(data) DBI::dbWriteTable(con, "lab_field_sample", data, append = TRUE))()
# Set method detection limit
MDL <- 0.0001
dplyr::select(measurements, id_lab_sample, id_analyte, value, percent_moisture = pmoisture) |>
dplyr::mutate(is_censored = ifelse(value > MDL, 0, 1)) |>
dplyr::mutate(id_report = report$id_report) |>
(\(data) DBI::dbWriteTable(con, "lab_measurement", data, append = TRUE))()