knitr::opts_chunk$set(echo = TRUE)

Pourquoi ?

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

Contrôle de la qualité des données

Journal de nettoyage des valeurs aberrantes

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

Journal de nettoyage des "autres"

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

Journal de nettoyage basé sur une liste de vérifications

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

Journal de nettoyage complet et exportation

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))


gnoblet/impactR documentation built on March 20, 2023, 2:24 a.m.