9  Importer ses données

9.1 Bonnes pratiques

Dans une vaste majorité des cas, vous remplissez et gérez vos données à partir d’un tableur. Que vous utilisiez MS Excel, Open Office, Libre Office, Google Sheets ou même un bloc notes, je ne saurai trop vous conseiller de respecter les quelques règles ci-dessous qui vous faciliteront la vie ensuite.

Soignez vos données sources

Je liste ci-dessous les grands principes, issus de l’excellent article par Karl Broman et Kara Woo1. Je les amende à la marge mais allez de ce pas lire cet article !

1. Bien nommer votre fichier

  • data_2024-04-23 est une excellente base. Un horodatage est utile si d’autres versions venaient à advenir, vous n’auriez que le nom du fichier source à changer côté R.
  • faites des sauvegardes, en plusieurs lieux, y compris de vos vieux fichiers.

2. Bien nommer vos colonnes

  • Je vous conseille l’anglais et les minuscules partout.
  • Utilisez des noms concis (vous allez les taper souvent) mais informatifs (on ne peut pas se permettre de malentendu).
  • Pas d’espaces pour les noms de colonnes, utilisez _ à la place. Par exemple : arm_length, arm_width, leg_length, etc.
  • Vous pouvez utiliser un patron pour les “familles” de variables par exemple = geo_city, geo_country, geo_lat, geo_lon. Cela vous permettra de les sélectionner facilement avec dplyr et tidyselect.

3. Soyez homogènes partout, tout le temps

  • Pour chaque colonne ayant un système de nommage, par exemple un facteur, soyez homogènes. Si vous sexez des mésanges, restez dans l’ensemble {F, M, NA}. Chaque mésange aura une (et une seule) valeur.
  • Idem pour les colonnes décrivant des variables continues, choisissez une unité (du système international) et tenez vous-y ! Par exemple : 182.1 (cm); 174.2 (cm); etc.
  • La validation des données de votre tableur est utile, à la saisie comme après.
  • Ces recommandations valent particulièrement pour les “ID” partagés entre fichiers. Si vous avez opté pour un système, tenez vous en à ce système (ou changez tout).
  • Utilisez le . comme séparateur décimal

4. Une seule valeur par cellule

  • Les commentaires doivent, éventuellement, être faits ailleurs que dans la cellule. Pas non plus de codage par le formatage (couleur de cellule ou de texte, graisse et italique, etc.)
  • Pas non plus de cellules vides. Si vous avez des données manquantes, il est préférable de l’expliciter, par exemple avec NA.

5. Exporter en fichier texte

  • Exportez votre tableur en .txt ou .csv (qui est fondamentalement du texte) ou n’importe quel autre fichier pouvant s’ouvrir avec un simple bloc-notes.
  • L’import direct de fichier xlsx (et variantes) est possible mais non souhaitable.

9.2 Import

Cette section utilise le petit jeu de données “data.csv” que vous pouvez télécharger ici.

N’hésitez pas à créer votre propre jeu de données ou bien à en utiliser un que vous auriez sous la main.

Je commence par les fonctions de base de R mais sachez que RStudio fait très bien le job, alors ne restez pas trop bloqués sur la section read.table, surtout là pour la démystifier.

9.2.1 read.table

La fonction “historique” pour l’import de données est read.table qui a provoqué des tonneaux de larmes et qui, pour une entrée en matière est, il est vrai, un peu aride. Et pourtant, il n’y a que quelques arguments à préciser si votre fichier tableur, devenu texte, suit les conseils de la section précédente.

Le principal point d’achoppement est peut-être le premier argument (file) qui définit le chemin vers votre fichier. Un chemin peut être spécifié de façon relative ou absolue :

  • un chemin absolu a comme référence la racine de votre système de fichiers (C:\ ou ~ selon que vous soyiez respectivement sur Windows ou sur un OS plus décent)
  • un chemin relatif a comme référence le dossier de travail actuel de R, accessible avec getwd() et modifiable par setwd().

Si par exemple, j’ai récupéré mon fichier data.csv (voir plus haut) et qu’il gît sur mon Bureau (j’ai un Mac) le chemin absolu serait : "~/Desktop/data0.csv" ; Alors que mon chemin relatif serait relatif à : /Users/vbonhomme/Research/R-pour-ma-grand-mere.

Mon conseil est le suivant : utilisez les “Projets” RStudio. L’icône bleue en haut à droite ou “File > New project”. Puis, dans ce dossier qui contiendra vos scripts, vos données, vos résultats, votre papier, etc. créez un dossier “data”. De cette façon, votre working directory sera votre dossier général et ils vous suffira d’utiliser ce type de chemin : data/data.csv.

read.table accepte ensuite d’autres arguments, les plus souvent utilisés étant :

  • sep pour définir le caractère qui définit le saut de champ (de colonne). Si vous utilisez des tabulations, ce que je ne conseille pas, vous pouvez le mentionner avec \t ;
  • dec : idem pour le marqueur de la décimale (idéalement ., la valeur par défaut, ou , que je vous déconseille)
  • header : TRUE/FALSE selon que vos colonnes aient des entêtes ou non ;
  • skip : pour sauter, éventuellement, des lignes en début de fichier.

Avec data.csv on peut donc importer son contenu via :

x <- read.table("data/data.csv", sep=";", header=TRUE)
x
        prénom  sexe stature     R
1   Hildegarde femme     168  TRUE
2 Jean-Jacques homme     170 FALSE
3       Victor autre     184 FALSE

9.2.2 RStudio

La commande “Environment > Import dataset” de RStudio vous simplifie grandement cette tâche avec un aperçu en temps réel de l’import via le package readr. Une fois que vous êtes satisfait·e, vous pouvez copier-coller le code qui vous sera retourné à l’issu de l’import. Royal !

9.2.3 readr

Le package readr du tidyverse fait la même chose mais vous donne plus de contrôle sur l’import. Le package est bien documenté ici.

9.3 Export

Vous pourriez aussi avoir besoin d’écrire des fichiers .csv, .txt, etc. Sachez qu’à côté de read.table, read_csv, etc. existent leur cousines destinées à l’écriture : write.table, write_csv qui fonctionnent de la même façon.

Pour avoir un fichier qui s’ouvre “facilement” dans un tableur je vous conseille :

write.table(votre_objet, row.names=FALSE, col.names=TRUE)

9.4 .rda

Si vous voulez sauver/lire des fichiers R, dans le format natif de R, les commandes save/load sont vos amies. Le format rda (ou .RData, c’est la même chose) est compressé et optimisé. Vous pouvez ainsi sauver un jeu de données comme cela :

save(iris, file="iris.rda")
load("iris.rda")

Cette approche est par exemple très utile dans le cas d’un calcul qui serait très long dans un script (qui se terminerait par un save) et serait rappelé à la vie par un autre script (qui commencerait par un load).

9.5 Autres I/Os

Pour vous ouvrir les shakras, sachez qu’il existe quantité d’autres approches pour importer/exporter des données.

  • readlines lit des fichiers textes bruts
  • le package feather utilise un format performant et interopérable de données avec Python
  • le package xlsx permet de lire/écrire des fichiers xlsx (berk)
  • le package httr permet de travailler avec l’http et notamment de faire des requêtes GET et POST
  • yaml permet de parser des fichiers .yaml

  1. https://doi.org/10.1080/00031305.2017.1375989↩︎

❤ Placé dans le domaine public par Vincent Bonhomme