knitr::opts_chunk$set(echo = TRUE)
Cette vignette a pour but d'expliciter l'usage d'impactR
et la manière dont il est possible de l'utiliser dans le cadre d'un suivi de collecte de données et du nettoyage. Commençons par charger le package.
# Si vous n'avez pas encore installé le package # devtools::install_github("impactR) library(impactR)
Ci-dessus, on peut charger des données exemple collectées.
# Load dataset in environment data(data) # Show the first lines and types of airports' tibble data <- data |> tibble::as_tibble() data
La plupart des fonctions de impactR
sont écrites en supposant que les données fournies peuvent être converties en tibble, puisqu'elles utilisent largement le tidyverse.
Supposons que nous ayons une feuille 'survey' composée comme suit :
data(survey) survey <- survey |> tibble::as_tibble(survey) survey
La première chose à faire avec l'objet 'survey', car il sera utilisé ailleurs : il faut séparer en deux la colonne 'type'.
# Miseà part l'argument 'col_to_split' (la colonne à séparer), les autres paramètres sont les paramètres par défaut survey <- survey |> split_survey( col_to_split = "type", into = c("type", "list_name"), sep = " ", fill = "right") survey
Afin de pouvoir obtenir les valeurs dites aberrantes (pour les variables numériques), vous pouvez utiliser la fonction make_log_outlier
qui permet d'obtenir deux types de valeurs aberrantes : l'écart par rapport à la moyenne en utilisant la fonction outliers_sd
et l'écart interquartile en utilisant la fonction outliers_iqr
.
# Utilitaire pour obtenir toutes les variables numériques #numeric_cols(data) # Obtenir toutes les colonnes numériques : cela inclut par exemple les identifiants numériques des énumérateurs ou les points GPS. #numeric_cols(data, survey) # Obtenir toutes les colonnes numériques en utilisant la feuille 'survey' de l'outil Kobo (uniquement les calculate, integer, etc.) # Valeurs aberrantes interquartle (règle des 1,5 fois par défaut) #outliers_iqr(data, col = i_enquete_age,times = 1.5, id_col = uuid) # La colonne d'identifiant 'id_col' est habituellement "uuid" avec Kobo # Valeurs aberrantes à la moyenne #outliers_sd(data, i_enquete_age, times = 3, id_col = uuid) # Fabriquer le journal de nettoyage entier pour toutes les variables numériques (en prenant en compte l'outil Kobo) log_outliers <- make_log_outlier(data, survey, id_col = uuid, today, i_enum_id, i_zad) log_outliers
Cette fonction nécessite que la question Kobo avec la réponse "autre" soit définie comme "variable" pour la question parent et "autre_variable" pour la question parent. "autre_" peut être différent selon les outils et est défini dans la question suivante par l'argument "autre", qui est la chaîne de caractères de chaque début de variable autre codée dans Kobo. Dans l'exemple qui suit, il s'agit de "autre_".
# Obtenir les autres other_cols <- other_cols(data, "autre_", id_col = uuid) other_cols # Obtenir les autres parents other_parent_cols(data, other_cols, "autre_", id_col = uuid) # Fabriquer le journal de nettoyage des "autres" log_others <- make_log_other(data, survey, "autre_", uuid, today, i_enum_id, i_zad) log_others
Il suffit d'avoir produit en amont un fichier Excel de vérification logique, qu'il est par ailleurs possible de modifier au cours de la collecte.
data(check_list) check_list <- check_list |> tibble::as_tibble() check_list
Le tableur excel de vérifications doit suivre quelques règles pour pouvoir être lu par les fonctions d'impactR [ajouter la liste]. Par exemple, il est nécessaire que toutes les variables présentes dans les tests logiques (colonne 'logical_test' du tableau de vérifications) existent aussi dans les données, objet data
. Pour cela, on peut utiliser la fonction check_check_list
, qui vise à valider ou non un tableur de vérifications logiques [note : elle n'est pas encore robuste, mais elle permet déjà de faire un certain nombre de contrôles].
Par exemple, ci-dessous la colonne survey_duration
n'existe pas dans les données data
. Pourtant, il y a des vérifications logiques qui la prennent en compte dans le tableur de vérifications logiques check_list
. Si on lance la commande suivante, on obtiendrait une erreur :
check_check_list(check_list, data) # following column/s from `question_name` is/are missing in `.tbl`: survey_duration, survey_duration, survey_duration
On va donc jouter la colonne de durée d'enquête à l'aide de la fonction survey_duration
. On en profite pour assi ajouter la différence de temps entre deux enquêtes par enquêteur.rice :
data <- data |> survey_duration(start, end, new_colname = "survey_duration") #|> # NOT RUN! # survey_difftime(start, end, new_colname = "survey_difftime", i_enum_id) data$survey_duration
On peut vérifier de nouveau le tableur de vérifications logiques :
check_check_list(check_list, data)
Cette fois-ci, c'est bon, la fonction donne TRUE
, on peut donc procéder avec la production du log de nettoyage.
log_check_list <- make_log_from_check_list(data, survey, check_list, uuid, today, i_enum_id, i_zad) log_check_list
Pour terminer, il nous suffit de combiner tous ces journaux de nettoyage en un seul. On peut ensuite l'exporter en fichier excel.
log <- list(log_outliers, log_check_list, log_others) |> purrr::map(~ .x |> dplyr::mutate(dplyr::across(.fns = as.character))) |> dplyr::bind_rows() |> readr::type_convert()
Il est aussi possible d'utiliser la fonction make_all_logs
qui combine ces trois fonctions et ne sort qu'un unique journal de nettoyage.
log <- make_all_logs(data, survey, check_list, "autre_", uuid, today, i_enum_id, i_zad) log
Enfin, il existe plusieurs manière d'exporter. Ici on donne l'exemple avec le package writexl
:
# Not run! La plus simple # writexl::write_xlsx(log, "output/log.xlsx) # On peut y ajouter la date du jour pour permettre le suivi # writexl::write_xlsx(log, paste0("output/log_", Sys.Date(), ".xlsx))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.