8.2 Données

Nous avons à plusieurs reprises déjà abordé les points importants à prendre en compte pour représenter ses données sous un format informatique exploitable ensuite. Avant d’aller plus loin, relisez attentivement les sections suivantes :

Il est de plus intéressant de pouvoir rendre les données de sa recherche accessibles en respectant les normes et les règles de l’Open Data.

Comme vous le voyez, toutes les grandes règles ont déjà été abordées dans le cadre des cours de sciences de données. La documentation précise et riche des données est une étape longue et fastidieuse. En pratique, elle est très souvent bâclée… et c’est dommage, car c’est leur réutilisabilité qui est impactée au final.

En résumé, des données sans documentation sont des données inutilisables. Elles seront perdues avec le temps. Votre objectif sera de permettre à une personne externe de comprendre vos données, et si possible, de pouvoir les réutiliser dans son propre contexte (en respect des droits de la licence que vous leurs associerez, bien entendu).

Ne perdez jamais de vue l’importance des données. Cette importance est à placer au même niveau qu’une bonne publication scientifique. Malheureusement, l’évaluation du curriculum d’un scientifique ne mets pas encore assez l’accent sur les données, et c’est dommage, car cela n’insite pas à les rendre réutilisables. Mais la mouvance de science ouverte, et dans son sillage, de données ouvertes (Open Data) est en train de recentrer l’intérêt sur les jeux de données de qualité. A noter d’ailleurs que la même remarque peut être faite pour les logiciels et codes informatiques qui mériteraient aussi d’être mieux valorisés dans une carrière scientifique.

8.2.1 Données brutes et retravaillées

Lors d’une expérience ou d’une observation sur le terrain, les données collectées sont les données brutes. Nous conseillons de les placer dans le sous-dossier data/raw. Ces données vont devoir être retravaillées afin d’être exploitables dans les carnets de notes et les documents de synthèse par la suite. Voici une liste d’étapes à réaliser pour passer des données brutes aux données remaniées :

  • Importation des données brutes
  • Validation des données brutes
    • vérification des types de variables (caractère, facteur, numérique, date …)
    • vérification des valeurs obtenues
    • encodage des valeurs manquantes
  • Calcul de nouvelles variables dérivées
  • Élimination des variables et/ou individus inutiles pour le projet, le cas échéant
  • Changement du nom des variables (si cela est nécessaire)
  • Ajout des labels et unités à chaque variable du jeu de données
  • Sauvegarde des données remaniées (voir section suivante)

Ce travail doit être réalisé de manière reproductible et doit être correctement documenté de manière concise (explication de la raison d’être de chaque étape). Deux possibilités s’offrent à vous :

  1. Utiliser un script R. C’est l’approche conseillée, car ce type de document se concentre sur le code et les commentaires sont plus accessoires, ce qui est le cas ici. De plus, dans RStudio, l’éditeur offre plus d’outils pour exécuter et déboguer du code R dans un script que dans un document R Markdown ou Quarto.

  2. Utiliser un notebook. Cette option est surtout intéressante si le remaniement des données n’est pas évident et nécessite de longues explications textuelles ou la présentation de graphiques qui montrent pourquoi les données sont remaniées de cette façon. Dans ce cas, la partie Markdown du document, et sa compilation en page HTML, fourniront une présentation plus adéquate. Vous partirez systématiquement des données retravaillées pour tous vos carnets de notes et documents de synthèse à partir du sous-dossier data.

8.2.2 Format des données

Quel que soit le type de document utilisé, écrivez la version remaniée de vos données dans le sous-dossier data dans le format le plus pratique et compact possible. Si les analyses sont réalisées dans R uniquement, le format de données natif .rds est idéal, car il préserve tous les attributs des objets R et il permet aussi de stocker des objets spécifiques, comme des tables de contingence ou des séries spatio-temporelles par exemple. De plus, vous pouvez compresser les données afin qu’elles occupent le moins de place possible dans le fichier.

Si les données doivent être exploitées à l’aide d’autres logiciels que R, choisissez alors un format plus universel. Le format CSV que vous avez déjà beaucoup utilisé est l’un des plus standards et il est donc reconnu par tous les logiciels. Le format Excel est fréquemment utilisé aussi. C’est une option, mais préférez CSV. Des formats spécifiques, par exemple pour les données spatiales, existent et peuvent aussi être utilisés. Pour les données semi-structurées (donc, pas des tableaux rectangulaires), le XML et le format JSON sont aujourd’hui universellement employés. Enfin, des formats réutilisables ciblant les données scientifiques comme netCDF ou HDF5 plus anciens, ou encore le nouveau format arrow poussé par le projet Apache Arrow qui est très prometteur.

Si les données sont très volumineuses, pensez bien à les exclure (aussi bien les données brutes dans data/raw que les données remaniées dans data) de la gestion de version en indiquant leurs fichiers dans .gitignore. Votre script ou votre notebook doit comporter le code nécessaire pour réimporter les données lorsqu’elles sont absentes. À cet égard, l’argument cache_file= de la fonction read() pointant sur une URL qui charge les données depuis Internet est intéressant. Il fait en sorte qu’au premier téléchargement de l’URL, une copie soit enregistrée dans cache_file=. Les appels suivants liront directement les données depuis ce cache sans repasser par Internet.

Si vous devez travailler sur des sous-ensembles de vos données, ou si vos données sont trop volumineuses pour se charger intégralement en mémoire vive, vous les convertirez plutôt en une base de données ou un autre format qui vous permet de récupérer des sous-tableaux sans devoir passer par l’ouverture du jeu de données complet. Le plus simple (mais pas le plus performant) consiste à utiliser le moteur de base de données SQLite et d’accéder à vos données via des requêtes SQL, ou via le package {dbplyr}. SQLite ne nécessite pas d’installer un serveur de base de données, car son code est contenu directement dans le package {RSQLite} qui permet d’y accéder depuis R.

Lors du choix du format de stockage de vos données retravaillées, vous devez sélectionner le format qui convient le mieux à vos données (taille du fichier de stockage, vitesse d’importation, interopérabilité et requêtes sous-tableaux possibles ou non). Préférez les formats les plus universels aux formats spécifiques. Gardez toujours à l’esprit que des logiciels de niche avec des formats propriétaires peuvent être problématiques dans quelques années s’ils ne fonctionnement plus sur des systèmes informatiques plus récents. Par contre, R, Python, ou Java, par exemple, sont des langages qui ont toutes les chances de perdurer et sont donc sains comme choix.

Pour les données brutes, la question d’interopérabilité est encore plus cruciale si vous voulez ouvrir vos données au maximum. Actuellement, le CSV est le format le plus universel, et donc, le plus sûr pour assurer une réutilisabilité maximale de vos données brutes.