Importer et exporter des données avec Tidyverse

De EduTech Wiki
Version datée du 11 janvier 2023 à 14:21 par Mattia A. Fritz (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Cet article est en construction: un auteur est en train de le modifier.

En principe, le ou les auteurs en question devraient bientôt présenter une meilleure version.



Pensée computationnelle avec R
à finaliser débutant
2023/01/11
Catégorie: R


Introduction

L'ecosystème Tidyverse met à disposition plusieurs fonctions pour importer et exporter des données qui représentent des alternatives aux modalités mises à disposition de base par R. Cet article propose un aperçu technique des ces fonctions, ainsi que quelques éléments de réflexion et des bonnes pratiques pour l'organisation et la structuration des fichiers qui contiennent des données.

L'article représente cependant une introduction souple et pragmatique à l'importation et exportation des données, tandis que des contraintes plus strictes et déontologiques sont de plus en plus fréquentes et même demandées dans certaines situations (e.g. Data Management Plan, projet pour des fonds, etc.). Vous pouvez considérer cet article comme un premier pas dans des directions plus articulées.

Pour des informations plus approfondies sur les données de recherche, voir :

Avantages des fonctions Tidyverse

Les avantages d'utiliser les fonctions de Tidyverse concernent principalement :

  • Possibilité d'importer depuis différentes sources (fichiers de text, spreadsheet, autres logiciels d'analyse statistique, ...) ;
  • Homogénéité des formats des données une fois importées, indépendamment du type de source originale ;
  • Les données sont déjà prêtes pour le traitement successif, comme par exemple l'organisation, la manipulation, la visualisation, la modélisation, ou la communication des résultats.
  • Possibilité de créer un flux d'importation automatisé qui maintient les données originales, c'est-à-dire les données brutes récoltés
  • Exportation des données dans des formats propices à l'archivage et au partage (formats textuels plutôt que formats propriétaires ou nécessitant de logiciels particuliers)

Objectifs de l'article

L'article vise à un double objectif :

  • Technique
    Fournir des exemples d'importations et exportations de données qui peuvent être utiles dans des situations fréquentes en sciences sociales ;
  • Pratique
    Sensibiliser à l'importance de bien organiser les données, en appliquant des bonnes pratiques sur l'organisation des fichiers et l'organisation des données à l'intérieur des fichiers.

Pour atteindre ces objectifs, l'article utilise certains fonctions des paquets tidyr et dplyr qui sont traités de manière plus approfondies dans les articles :

Prérequis

L'article s'adresse à un public débutant dans l'importation et l'exportation des données avec un langage de programmation et ne requière donc pas de conniassances préalables particulières. Les articles suivantes peuvent néanmoins fournir des informations utiles avant de suivre les contenus présentés dans cette page :

De plus, il est conseillé de disposer du logiciel RStudio qui facilite certaines opérations à travers une interface graphique, bien qu'au final, l'importation se fait directement avec du code.

Comprendre l'importation et l'exportation des données

Avant de rentrer dans les détails de l'importation et l'exportation des données, il est utile d'aborder les deux démarches de manière unifiée et conceptuelle. L'importation et l'exportation de données sont étroitement liées aux concepts d'encodage et décodage de l'information :

  • L'encodage de l'information consiste à appliquer à de l'information un système de transformation pour permettre le passage au format digital et le stockage sur un dispositif en forme de fichier
  • Le décodage de l'information consiste dans le mécanisme inverse, c'est-à-dire récupérer de l'information depuis un fichier pour qu'elle soit utilisable à l'intérieur d'un contexte donné

L'importation des données

Lorsqu'on importe des données dans R, les étapes suivantes sont nécessaires :

  1. Il faut que l'information soit encodée de manière compréhensible par R, c'est-à-dire stockée dans un fichier que R (ou Tidyverse à l’occurrence) est capable de décoder pour pouvoir ensuite utiliser l'information
  2. Il faut diriger R vers le fichier qui contient l'information, c'est-à-dire pointer au chemin du fichier
  3. Même à l'intérieur d'un format spécifique des données (e.g. le format .csv), il peut y avoir des possibilités différentes pour encoder l'information. Il faut donc spécifier comment distinguer les différentes informations contenues dans un fichier
    Par exemple, on peut délimiter les colonnes d'un jeu de données des manières suivantes :
    • Avec un point virgule ; comme par exemple colonne1; colonne2; colonne3; ...
    • Avec une virgule , comme par exemple colonne1, colonne2, colonne3, ...
    • Avec une indentation d'espaces (ou tab)
  4. Il faut contrôler que le format des données d'origine correspond au format interprété par l'importation de R. En d'autres termes, si la colonne du fichier d'origine contient des chiffres, il faut veiller à ce que R importe bien ces données en tant que chiffres et non pas comme suite de caractères
  5. Il faut que R puisse distinguer entre le contenu et la structure des données, ce qui se manifeste par exemple avec l'importation de la première ligne d'un jeu de données comme le nom des variables/colonnes et non pas comme la première ligne des données
  6. Il faut exécuter la fonction qui met en place les étapes précédentes pour que les données soient transférées du fichier à l'environnement de la session de R pour qu'on puisse les utiliser dans les scripts

Des problèmes peuvent surgir à chaque étape de la liste. L'importation des données est donc une phase délicate qu'on a souvent la tendance à négliger car on est préssé-es de passer aux étapes d'analyse. Cependant, pour que les analyses soient précises et fonctionnelles, il faut une triangulation d'événements :

  • R doit pouvoir comprendre les données disponibles dans le type de fichier dans lequel les données sont stockées
  • Le fichier spécifique avec les données doit pouvoir être trouvé et lu par R
  • La connaissance que l'utilisateur a du contenu du fichier doit se refléter dans la connaissance que R a du fichier, c'est-à-dire que l'utilisateur et R doivent partager exactement la même structure des données, notamment en termes de noms des variables/colonnes, de type de données associé à chaque variable/colonne, etc. S'il existe un mismatch entre ce que l'utilisateur pense que R a importé et ce que R a réellement importé, il peut y avoir des comportements inattendus ou des erreurs dans les analyses.

L'exportation des données

Pour exporter des données, les étapes suivantes sont nécessaires :

  1. Il faut déterminer quelle structure de données disponible dans R vous voulez exporter et à quel moment
    Si vous effectuez plusieurs manipulations sur un jeu de données pour l'organiser, le nettoyer, etc., les mêmes données existent dans l'environnement de R à différents stades. Il faut donc veiller à ce que ce soit bien la version finale, ou la version d'intérêt, à être exportée
  2. Il faut choisir le type de format dans lequel les données seront encodées pour le stockage dans un fichier. Ce choix détermine notamment quels types de logiciels ou fonction de R il faudra ensuite utiliser pour importer à nouveau les données depuis le fichier
  3. Il faut choisir le pointage à un chemin spécifique où sauvegarder physiquement le fichier et lui donner un nom qui, idéalement, permet de retracer son contenu

En prêtant attention à l'exécution de ces étapes, on maximise les chances que les données puissent être réutilisées facilement dans le futur et/ou partagées facilement avec d'autres personnes intéressées. Il existe notamment la possibilité d'exporter les données sous forme de paquet de R plutôt que de simple fichier, notamment pour des jeux de données qui peuvent avoir un intérêt général. Cette possibilité ne sera cependant pas traitée dans cet article.

Bonnes pratiques générales

Nous proposons ici une liste de bonnes pratiques générales au sujet des données dans des projets de recherche. Il s'agit de quelques recommandations de base, qui peuvent être par la suite complexifiées et adaptées selon les besoins des projets. À ce propos, des ressources plus spécifiques, depuis lesquelles la plupart de ces recommandations sont tirées d'ailleurs, sont proposées à la fin de cet article.

Nommer et organiser les dossiers qui contiennent les fichiers avec données

Une première bonne pratique consiste à garder tous les fichiers qui contiennent des données dans le même répertoire d'un projet, par exemple dans un dossier qui s'appelle data. Il est bien que ce dossier soit placé à la racine du dossier qui contient votre projet (e.g. le dossier de travail dans un projet RStudio. Ensuite, ce dossier peut contenir deux autres sous-dossiers :

  • Un dossier pour les données brutes, au du moins les plus brutes possibles.
  • Un dossier pour les données transformées pour des finalités de partage ou d'archivage

Une arborescence possible du dossier contenant les données serait donc :

|- data
  |- raw
     |- fichier-avec-donnes-brutes.extension
     |- autre-fichier-avec-donnes-brutes.extension
  |- transformed
     |- fichier-final.extension
     |- autre-fichier-final.extension

Nous proposons ici les noms des dossiers raw et transformed, mais d'autres solutions sont envisageables. Si possible, le dossier avec les données brutes devrait apparaître avant le dossier avec les données finalisées.

Des ultérieurs sous-dossiers pour mieux organiser les données sont envisageables, mais conseillées seulement avec un grand nombre de fichiers et des relations sémantiques qui suggèrent une sous-division (e.g. plusieurs études/expériences dans un projet, dont chaque avec beaucoup de fichiers différents). Autrement, il est plus simple d'insérer les fichiers directement dans les dossiers, avec des bonnes stratégies de nommage (voir sous-section suivante).

Dossier avec les données brutes

Dans ce dossier, insérez les fichiers avec des données avec le moins de manipulations préalables possible au niveau de leur contenu. Vous pouvez par contre modifier le nom du fichier (voir plus bas).

L'un des intérêts d'utiliser un langage de programmation pour analyser des données consiste à pouvoir tracer, documenter et automatiser les transformations effectuées sur des données. Pour cette raison, le moins de manipulations sont faites en dehors de R (e.g. renommer une colonne, effacer des données, corriger des fautes, ...), le plus votre processus de transformation des données sera transparent.

Si vous comptez partager à la fois les données brutes et finalisées de votre projet, pensez néanmoins à enlever toutes les informations sensibles même dans les fichiers du dossier raw ou équivalent. Vous pouvez par exemple ajouter un troisième dossier private qu'il faudra par la suite éviter de partager, par exemple en l'ignorant dans un système de gestion de versions.

|- data
  |- private
    |- ...
  |- raw
    |- ...
  |- transformed
    |-

De cette manière, vous pouvez créer deux flux de transformations séquentiels :

private --> [scripts privées] --> raw --> [scripts publics] --> transformed

Lors du partage de votre projet, vous pouvez ainsi partager seulement le dossier raw, les scripts de transformations pour passer de raw à transformed, et enfin le dossier transformed.

Au contraire, le dossier private et les scripts de transformations pour passer de private à raw (e.g. anonymisation automatisée des données), ne seront pas partagé avec le reste du projet.

Dossier avec les données finalisées

Le dossier avec les données finalisées contient les différentes sources de données utilisées pour les analyses de votre projet. Ces fichiers sont générée automatiquement à travers des scripts de R et donc exportées à chaque fois que vous lancez les scripts de transformations. De cette manière, vous êtes certain-es de disposer toujours de la dernière version des fichiers finalisées, avec les données utilisées vraiment dans vos analyses.

Le dossier avec les données finalisées peut contenir plus des fichiers par rapport au dossier avec les données brutes. Cela s'explique par le fait que, parfois, on utilise deux versions de la même source, par exemple avec des filtres différents, selon le type d'analyse à faire.

Imaginez une situation dans laquelle les participant-es à une étude doivent effectuer une tâche de type performance et ensuite passer un questionnaire en ligne. Vous pouvez décider de mener une analyse sur tous les questionnaires, mais une deuxième analyse seulement sur les questionnaires des participants en fonction de leur résultats à la tâche performance.

Dans le script de R, vous pouvez lancer ces deux analyses sans avoir à dupliquer les données, car il suffit d'assigner tous les questionnaires à une référence symbolique, et utiliser une autre référence symbolique pour les questionnaires filtrés. En revanche, si d'autres chercheurs veulent contrôler ou répéter votre analyse avec des outils différents de R, il peut-être utile de leur mettre à disposition deux fichiers différents :

  1. Un avec toutes les réponses au questionnaire
  2. L'autre avec seulement les questionnaires filtrés par rapport au résultat de la tâche

Nommer les fichiers qui contiennent les données

Un fichier dispose d'un nom et d'une extension, dans le format nom-du-fichier.extension. Cette partie s'intéresse au nom du fichier, tandis que l'extension est déterminée par le type de format du fichier (voir section suivant).

Jenny Bryan propose trois critères pour trouver des bons noms de fichiers qui contiennent des données :

  1. Nom qui soit lisible par des machines (machine-readable)
  2. Nom qui soit lisible par des êtres humains (human-readable)
  3. Nom qui s'intègre bien avec les mécanismes de triage des différents systèmes d'exploitations

Nom du fichier lisible par des machines

Les ordinateurs sont des machines qui excellent dans ce qu'on appelle la reconnaissance des patterns, c'est-à-dire l'extraction de régularités depuis une information donnée. Dans l'importation des données avec du code, le nom du fichier, ainsi que le chemin dans lequel se trouve le fichier, sont des informations importantes qui sont utilisées directement dans le code source. Par conséquent, on peut adopter des conventions qui facilitent la reconnaissance des patterns des machines. Ces conventions permettent :

  • De minimiser les erreurs dues au pointage incorrecte à des fichiers
    Ce type d'erreur peut-être réduit en premier lieu avec l'utilisation d'un projet en RStudio pour consolider les chemins indépendamment de la position des fichiers dans l'ordinateur ou du système d'exploitation. Deuxièmement, pour les machines tout est codé dans une série de chiffre. Donc pour un ordinateur les lettres a minuscule et A majuscule n'ont pas de relation particulière, il s'agit au final de deux chiffres différentes. Pour éviter des erreurs, il est donc conseillé de :
    • Utiliser seulement des lettres minuscules, à moins de conventions établies dans le domaine (e.g. abréviation du nom d'un pays tout en majuscules) ;
    • Évitez les espaces dans les noms des fichiers
    • Évitez les accents ou tout caractère spéciaal à l'exception de - et _
  • De passer dans le nom du fichier des informations exploitables dans la programmation
    Imaginez par exemple d'extraire depuis un outil de mesure plusieurs données pour un même participant, mais sans pouvoir insérer dans l'outil à chaque fois l'identifiant du participant concerné. Vous vous retrouvez donc avec plusieurs fichiers qui ont la même structure, mais qui ne peuvent pas être associés à un participant ou à un autre. À ce moment, si vous utilisez un système de nommage bien articulé, vous pouvez laisser la structure originale de chaque fichier, et insérer le nom du participant dans le nom du fichier. Par exemple :
    • p01_physiological-data_2020-11-21.csv
    • p02_physiological-data_2020-11-22.csv
    Grâce à la segmentation régulière du fichier, on peut créer un script qui :
    • Importe chaque fichier individuellement
    • Extrait depuis chaque fichier le nom du participant et l'ajoute aux données du fichier en question
    • Combine toutes les données dans une seule jeu de données pour le traitement successif.

Nom du fichier lisible par des être humains

Les noms de fichier ne servent cependant pas seulement pour pointer le langage de programmation vers les données d'intérêt : ils sont utilisés également par les êtres humains afin de s'orienter et attribuer du sens aux contenus des projets. Par conséquent, il est important que le nom d'un fichier propose les caractéristiques suivantes :

  • Facile à lire
    Même si les êtres humains ne sont pas aussi performant que les ordinateurs dans la reconnaissance de pattern, le système visuel peut bénéficier d'indices pour guider l'attention et segmenter l'information. Les deux noms de fichiers suivants ne sont pas lus avec la même facilité :
    • ceciestunnomdefichiertreslongquinefacilitepaslesystemevisuel.csv
    • un-nom-de-fichier-aussi-long-mais-avec-une-segmentation-utile.csv
  • En rapport sémantique avec le contenu
    Le nom d'un fichier peut être un indice utile pour informer l'utilisateur (soi-même ou une autre personne) du contenu du fichier, c'est-à-dire ce qu'on peut s'attendre en ouvrant/utilisant le fichier. Pour créer des noms de fichiers sémantiques il est bien de se positionner à travers un troisième personne, ce qui évite notamment d'utiliser toutes des variantes possessives du type my-data.csv ou impersonnelles data1.csv

Prédisposition pour un ordre de triage

Enfin, il est utile de prédisposer les noms des fichiers pour qu'ils s'affichent dans un ordre spécifique dans le gestionnaire des fichiers, indépendamment du système d'exploitation utilisé. En effet, les systèmes d'exploitation peuvent avoir différentes manières de déterminer la précédence entre deux noms de fichiers.

Une stratégie utile à cet effet est celle de prévoir un système codifié au début du nom de fichier qui adopte un empan toujours de la même longueur. Cela peut être par exemple :

  • Une série progressive de chiffres
    À cet effet, il est bien d'utiliser des zéros au début pour créer un empan d'un nombre de chiffres proportionnels au nombre de fichiers qu'on peut s'attendre. Par exemple, si vous pensez avoir moins de 100 fichiers, alors la codification 01_..., 02_..., etc. est suffisante. Si non, il faut prévoir trois ou plus chiffres. Même si pensez avoir moins de 10 fichiers, il est plus sûr d'utiliser quand même un empan d'au moins deux chiffres.
  • Une date en format ISO 8601
    Si la date peut jouer un rôle important dans l'organisation de vos fichiers (e.g. données cumulatives, suivi longitudinal, ...), alors il est utile d'entamer les noms de vos fichiers avec une date au format ISO 8601, donc selon le pattern yyyy-mm-dd pour la date simple, par exemple 2021-01-17_....

Exemples de noms des fichiers qui respectent les trois critères

Pour combiner les trois critères, Jenny Bryan propose d'adopter un critère d'articulation de noms de fichiers composés par les règles suivantes :

  1. Commencer le nom du fichier avec un codage qui prédispose pour l'ordre de triage, comme par exemple une séquence de chiffres de type 01, 02, une date, ou un code alphanumérique (par exemple l'identifiant d'un cluster de données).
  2. Séparer le nom du fichier en unités informationnelles et diviser chaque unité de l'autre avec le symbole _. À l'intérieur de chaque unité informationnelle, on peut diviser les éléments, par exemple des mots composites, avec le symbole -

Voici quelques exemples qui applique cette manière de nommer les fichiers :

  • 03_survey-data_all-questions.csv
    Ce nom de fichier se compose de trois unités informationnelles séparées par _ :
    1. La série progressive, ici au stade 03
    2. Le type de données, avec l'unité survey-data qui suggère que les données sont issues d'un questionnaire
    3. Une qualification ultérieur sur le type de données, avec all-questions qui suggère que le fichier contiennent les données relatives à tous les items du questionnaire
  • 2021-06-14_p09_full-transcription_mf.txt
    Ici les unités informationnelles sont quatre :
    1. La date au format ISO 8601 qui a une double fonction : information sur la date de l'entretien et mécanisme de prédisposition au triage
    2. L'identifiant du participant, avec un empan 09 pour maintenir l'unité de la même longueur pour tous les fichiers
    3. Le type de transcription de l'entretien avec l'unité full-transcription
    4. Les initiales de la personne qui a effectué l'entretien/la transcription avec mf final
  • uni02_cours052_satisfaction-questions-ouvertes.csv
    Ici les trois unités proposent :
    1. Le code de l'université avec le préfixe uni02
    2. Le code du cours avec un empan à trois chiffres cours052
    3. Le type de données récoltées avec satisfaction-questions-ouvertes. Cette troisième partie pourrait à la limite être raccourcies avec des abréviations.

Utiliser des formats de fichier ouverts

Un format de fichier correspond à une modalité spécifique d'enregistrer de l'information : c'est l'équivalent de la langue parlée par le fichier. Le format du fichier, reconnaissable à travers l'extension, détermine notamment avec quel(s) logiciel(s) il est possible d'encoder et décoder l'information stockée dans le fichier.

Les bonnes pratiques en termes de formats de fichiers suggèrent d'utiliser des formats :

  • Non-propriétaires, c'est-à-dire que le format ne doit pas appartir à une société ou institution spécifique qui en détient les droits intellectuelles
  • Non encryptés, c'est-à-dire qui ne nécessite pas d'un clé stockée en dehors du fichier pour décoder l'information
  • Non comprimés (à moins de nécessités particulières)
  • Adoptant des standards ouverts et documentés
  • Compatibles avec plusieurs systèmes d'exploitation
  • Compatibles avec différents logiciels sans perte d'information ou fonctionnalités
  • Fréquemment utilisés par la communauté scientifique de référence
Pour la plupart des utilisations fréquentes en sciences sociales, le format .csv est adéquat pour les données tabulaire ou rectangulaire (i.e., en colonnes et lignes). En alternative les formats .txt et .html peuvent aussi être utilisés. Pour des structures emboîtés, les formats .json et .xml sont stables, ouverts et bien documentés.

Ces suggestions s'appliquent surtout pour des données de types quantitatives, pour des analyses compréhensives se référer plutôt à la page Introduction à l'analyse de texte avec R.

Ajouter un fichier README pour expliquer les données

Une bonne pratique au niveau des données consiste à créer un fichier README qui contient des informations utiles pour comprendre l'arborescence et la structuration des données disponibles.

Ce fichier, dont le nom est exceptionnellement accepté en lettre majuscules pour le faire ressortir dans une recherche visuelle, est souvent disponible dans les formats suivants :

  • README.txt : il s'agit du format le plus sûr, car il n'a pas de formatage et peut être lu facilement par différents logiciels ;
  • README.md : format appelé Markdown est utilisé souvent en data science pour appliquer des formatages simples à un texte. Utile si vous avez besoin d'un peu de mise en page (e.g. titres, listes, ...). À noter que ce format n'est cependant pas encore adopté de manière universelle en sciences sociales et certains chercheurs peuvent ne pas le connaître et ne disposer donc pas d'un logiciel pour afficher correctement le texte formaté. Le fichier .md peut néanmoins s'ouvrir avec n'importe quel éditeur de texte, mais il s'affichera avec les notations de formatage.
  • README.pdf : à utiliser uniquement si votre document nécessite vraiment d'une structuration particulière

Il est enfin conseillé de produire un fichier README pour chaque ensemble de jeux de données qui sont liés sémantiquement.

Au niveau du contenu, il existe plusieurs lignes guides qui sont plus ou moins détaillées. Par exemple, le site sur les données de recherche de l'Université de Genève suggère qu'un fichier README devrait contenir au moins les informations suivantes :

  • Les noms de l'investigateur/trice principal-e et des co-investigateurs/trices de l’étude
  • Une description de la méthodologie et des outils utilisés pour la collecte des données
  • Les dates de collecte des données
  • Une description de la hiérarchie du répertoire, du type de données qu'il contient et de la convention de dénomination des fichiers
  • Une liste complète de tous les titres/codes/abréviations et conventions utilisées dans les fichiers.
  • Les conditions de partage et d'accès (licence) pendant et après la fin du projet.

Importer des données

Cette section propose des exemples d'importation de données depuis différentes sources à travers des paquets qui font partie de l'écosystème Tidyverse. La plupart de ces paquets sont déjà installés si vous avez installé Tidyverse de manière globale. La section donc propose des instructions sur l'installation seulement si le paquet n'est pas directement inclut avec le paquet tidyverse global.

Aide à l'importation avec RStudio

Cet article se focalise sur le code nécessaire à importer des données pour montrer les différentes possibilités mises à disposition. Si vous utilisez RStudio, vous pouvez faciliter la création du code pour importer des données à travers une interface graphique. À travers cette interface, il est possibile de déterminer quelques options de base et, surtout, avoir un aperçu de l'importation pour vérifier que les données sont importées dans un format propice à la suite de l'analyse. Le flux de travail conseillé dans l'utilisation de l'aide à l'importation des données est donc le suivant :

  1. Utiliser l'interface d'importation de RStudio pour préparer l'importation
  2. Adaptez au besoin les options d'importation (e.g. type de données, séparateur, lignes/observations à exclure, ...)
  3. Au lieu d'entamer l'importation à travers le bouton Import de l'interface, copiez le code proposé sans la dernière ligne avec la fonction View(...)
  4. Collez le code dans un fichier Rscript et adaptez-le en fonction des informations disponibles dans cette section

L'image suivante propose un aperçu de l'interface d'importation qui décrit une partie du processus.

Exemple d'aide à l'importation avec une interface graphique dans RStudio

Pour plus d'informations sur l'aide à l'importation, consultez directement l'article sur le logiciel :

Utiliser un projet de RStudio et le paquet here

Un système utile pour importer des données depuis un fichier consiste à utiliser une combinaison entre :

  • Les projets RStudio, qui permettent d'organiser les fichiers qui composent un projet dans un dossier de travail (working directory) et bénéficier des fonctionnalités du logiciel pour les projets (voir la page RStudio pour plus d'infos)
  • Le paquet here, qui permet de créer des chemins relatifs à la working directory qui sont compatibles dans les différents systèmes d'exploitation (Mac, Linux et Windows). En effet, les systèmes d'exploitation traitent souvent les chemins de manière différente

La combinaison entre projet RStudio et paquet here permet de rendre votre projet flexible au niveau de l'emplacement dans votre système d'exploitation, ainsi que plus simple à partager : avec les autres, ou avec vous-même si vous utilisez souvent plusieurs ordinateurs/postes de travail.

Pour utiliser le paquet here à l'intérieur d'un projet RStudio, il faut d'abord installer le paquet :

install.packages("here")

Ensuite, il faut le charger dans tous les scripts qui peuvent nécessiter de chemins relatifs à d'autres fichiers. Le paquet here marche en effet avec les fichiers avec données, mais également avec tout autre type de fichier (scripts, images, ...).

Voici un exemple de code qui importe les fichiers depuis une arborescence des dossiers comme celle décrite dans les bonnes pratiques plus haut :

# Exemple d'importation de données. Ce type d'importation est valable n'importe la position du fichier dans un projet RStudio
library(here)

# Créer une référence au fichier avec les données
fichier_avec_donnees <- here::here("data", "raw", "nom-du-fichier.csv")

# Importer les données (fonction à adapter selon les besoins, voir plus bas)
donnes_importees <- read_csv(fichier_avec_donnes)

La partie la plus intéressante du code concerne la ligne 5 qui utilise la fonction here::here(...) pour accéder au fichier avec les données. Cette instruction s'explique de la manière suivante :

  • here::here() fait référence à la fonction here() qui se trouve dans le paquet here. On utilise le namespace here:: devant la fonction pour éviter des éventuels conflits avec d'autres paquets qui peuvent utiliser une fonction here(), mais différente de celle qui nous sert pour les chemins relatifs.
  • À l'intérieur de la fonction here::here(arguments) on passe les éléments qui composent le chemin du fichier par rapport à la working directory de R. En utilisant un projet RStudio, la working directory est facile à repérer car elle contient le fichier avec extension .Rproj. Si vous utilisez l'arborescence working-directory/data/raw/nom-du-fichier.csv, alors les arguments à passer à la fonction sont trois :
    1. data pour le dossier au niveau de la working directory
    2. raw pour le sous-dossier qui contient les données brutes (voir les bonnes pratiques plus haut)
    3. nom-du-fichier.csv le nom spécifique du fichier, avec l'extension adéquate (ici .csv par exemple), qui contient les données à importer

Dans le code d'exemple nous avons utilisé deux références symboliques : une pour le chemin et ensuite une pour les données. Il est tout à fait possible de condenser les deux dans une seule instruction :

# Version du code abrégée
donnees_importees <- read_csv(here::here("data", "raw", "nom-du-fichier.csv"))

Selon la complexité du chemin et les éventuelles options de la fonction d'importation, cependant, le code peut résulter moins lisible. À noter, d'ailluers, que dans une utilisation réel il faudrait utiliser une référence symbolique plus saillante de donnees_importees.

Exporter des données

Ressources