Utilisation des fonctions métier
truffles.Rmd
library(truffles)
library(DBI)
library(lubridate)
#>
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#>
#> date, intersect, setdiff, union
Introduction
Le package {truffles} fournit des fonctionnalités pour gérer les données relatives aux truffes trouvées sous les chênes. Cette vignette détaille les étapes de base pour utiliser le package.
Connexion à une base de données
La première étape consiste à se connecter à une base de données contenant les informations sur les chênes, les truffes et les resemis.
Préparation de la base de données pour les tests
Nous créons une base de données temporaire pour effectuer nos tests sans altérer les données originales.
Création des tables
conn_usage <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
# Création de la table truffe dans la base de données
DBI::dbWriteTable(
conn_usage,
"truffe",
data.frame(
idtruffle = character(),
idoak = character(),
date_found = numeric(),
weight = numeric(),
estimation = logical(),
comment = character()
)
)
DBI::dbWriteTable(
conn_usage,
"chenes",
data.frame(
idoak = character(),
lon = numeric(),
lat = numeric(),
type = character(),
present = numeric(),
planting_date = numeric(),
reensemence = numeric()
)
)
DBI::dbWriteTable(
conn_usage,
"reens",
data.frame(
idoak = character(),
date_reens = numeric()
)
)
chenes_ <- structure(
list(
idoak = c("1", "2", "3", "4", "5"),
lon = c(1.53193333748493, 1.53198654139325, 1.53203490858186, 1.53208085741133, 1.53213164296051),
lat = c(47.9984324222873, 47.9984696419663, 47.9985181893329, 47.99855540895, 47.998600719752),
type = c("Normal", "Normal", "Normal", "Normal", "Green"),
present = c(1L, 1L, 1L, 1L, 1L),
planting_date = c("2024-01-15", "2023-12-20", "2023-11-05", "2024-02-10", "2023-10-25")
),
row.names = c(NA, -5L),
class = c("tbl_df", "tbl", "data.frame")
)
DBI::dbWriteTable(
conn_usage,
"chenes",
chenes_,
overwrite = TRUE
)
reens_ <- structure(
list(
idoak = c("5", "5", "1"),
date_reens = c(19128, 19043, 19605)
),
row.names = c(
NA,
3L
),
class = "data.frame"
)
DBI::dbWriteTable(
conn_usage,
"reens",
reens_,
overwrite = TRUE
)
Chargement des données
Nous chargeons les données à partir de la base de données. Nous supposons que les tables de la base de données contiennent les informations suivantes :
- chenes : données sur les chênes
- truffe : données sur les truffes trouvées
- reens : données sur les resemis
chenes <- dbReadTable(conn_usage, name = "chenes")
truffe <- dbReadTable(conn_usage, name = "truffe")
reens <- dbReadTable(conn_usage, name = "reens")
Filtrage des chênes présents
Nous filtrons les chênes présents dans la base de données.
chenes <- chenes |>
dplyr::filter(present == 1)
Ajout d’une nouvelle truffe avec toutes les informations
Nous ajoutons une nouvelle truffe avec toutes les informations requises.
Ajout de la nouvelle truffe
write_db_new_truffe(
conn = conn_usage,
theidoak = "5",
date_found = "2024-01-01",
weight = 25,
estimation = 0,
comment = "Un commentaire"
)
#> WRITING in DB truffe
Ajout d’une nouvelle truffe sans weight
Nous ajoutons une nouvelle truffe sans spécifier le weight.
write_db_new_truffe(
conn = conn_usage,
theidoak = "1",
date_found = "2024-01-01",
weight = NA,
estimation = 1,
comment = "weight a completer plus tard"
)
#> WRITING in DB truffe
Ajout d’une nouvelle truffe avec estimation du weight
Nous ajoutons une nouvelle truffe en estimant son weight.
write_db_new_truffe(
conn = conn_usage,
theidoak = "3",
date_found = "2024-02-01",
weight = 100,
estimation = 1,
comment = "Un weight estime"
)
#> WRITING in DB truffe
Vérification des résultats
Nous vérifions le nombre total de truffes ajoutées.
truffe <- dbReadTable(conn_usage, name = "truffe")
truffe
#> idtruffle idoak date_found weight estimation
#> 1 0568a3baaa2cf75937c414d53c275006 5 2024-01-01 25 0
#> 2 9990ecfe90214380d4db726ea44cbeaf 1 2024-01-01 NA 1
#> 3 86ddc862954e0a02185f3cc86e152a23 3 2024-02-01 100 1
#> comment
#> 1 2024-01-01 : Un commentaire
#> 2 2024-01-01 : weight a completer plus tard
#> 3 2024-02-01 : Un weight estime
Complétion d’informations
info <- get_info_chene_last_truffe(dbtruffe = truffe, theidoak = "3")
update_db_truffe(
conn_usage,
idtruffle = info$idtruffle,
idoak = info$idoak,
date_found = info$date_found,
weight = 32,
comment = "J'avais surestimé",
estimation = 0
)
#> UPDATE db truffe
Récupération des informations
truffe <- dbReadTable(conn_usage, name = "truffe")
Nous récupèrons les informations du chêne truffier n°5 :
get_info(
dbchene = chenes,
dbtruffe = truffe,
dbreensemence = reens,
theidoak = "3"
)
#> $chene
#> $chene$type
#> [1] "Normal"
#>
#> $chene$planting_date
#> [1] "2023-11-05"
#>
#>
#> $truffes
#> $truffes$weight_tot
#> [1] 32
#>
#> $truffes$derniere_truffe
#> [1] "2024-02-01"
#>
#> $truffes$last_comment
#> [1] "2024-02-01 : 2024-02-01 : J'avais surestimé"
#>
#> $truffes$other_comments
#> [1] "-"
#>
#>
#> $reensemence
#> [1] "-"
La dernière truffe trouvée pour le chêne n°5
get_info_chene_last_truffe(dbtruffe = truffe, theidoak = "5")
#> idtruffle idoak date_found weight estimation
#> 1 0568a3baaa2cf75937c414d53c275006 5 2024-01-01 25 0
#> comment estim_js
#> 1 2024-01-01 : Un commentaire
Calcul d’aggrégation:
weight total de truffes trouvés
weight_truffles_by(truffe)
#> # A tibble: 1 × 1
#> weight
#> <dbl>
#> 1 57
weight total de truffes trouvés par annee
weight_truffles_by(truffe, annee = year(as.Date(date_found)))
#> # A tibble: 1 × 2
#> annee weight
#> <dbl> <dbl>
#> 1 2024 57
weight total de truffes trouvés par annee et par type
truffes_chene <- truffe |>
dplyr::inner_join(chenes, by = "idoak")
weight_truffles_by(truffes_chene, annee = lubridate::year(as.Date(date_found)), type)
#> # A tibble: 2 × 3
#> annee type weight
#> <dbl> <chr> <dbl>
#> 1 2024 Green 25
#> 2 2024 Normal 32
Déconnexion de la base de données
DBI::dbDisconnect(conn_usage)