7  Saisir des données

Jusqu’à maintenant, chaque fois que nous avons travaillé avec des données, nous avons utilisé des tableaux de données déjà prêts dans R. Nous avons ainsi évité un problème critique : la saisie de nouvelles données! Nous verrons dans ce chapitre trois façons de faire notre propre entrée de données dans R, soit la saisie directe, l’importation de données à partir d’un fichier texte (CSV) et enfin l’importation à partir d’un fichier Excel.

7.1 Labo : La saisie directe

Si vous avez peu de données à entrer, la façon la plus simple de les saisir est probablement d’écrire à la main le code qui créera le tableau de données dans R. La fonction pour créer un nouveau tableau de données dans R se nomme data.frame et s’utilise comme ceci :

tableau <- data.frame(
  code_espece  = c("GEBL", "METN", "COAM","CARO"),
  poids_g = c(100, 11, 400,NA),
  decompte = c(12,8,3,1)
)

tableau

Et R vous montrera ainsi le tableau nouvellement créé :

  code_espece poids_g decompte
1        GEBL     100       12
2        METN      11        8
3        COAM     400        3
4        CARO      NA        1

Notez plusieurs choses importantes à propos du code précédent. Pour chacune des variables de notre tableau, la série de valeurs doit être emballée par la fonction c() qui sert à coller ensemble des valeurs pour créer ce que R nomme un vecteur (vector). Dans la fonction c, chacun des éléments doit être séparé par une virgule. Remarquez aussi que les valeurs qualitatives doivent être emballées chacune par une paire de guillemets. Observez aussi que pour la valeur manquante, il faut saisir le NA directement, sans guillemets. Il ne s’agit pas d’une valeur qualitative, mais bien d’un mot-clé réservé de R. Enfin, remarquez que chacune des variables ne doit contenir qu’un seul type de données (soit qualitative ou quantitative), jamais un mélange des deux.

Cette façon de faire par la saisie directe est très pratique pour écrire de petits exemples pour tester un bout de code, ou lorsque vos tableaux de données sont de très petite taille.

7.2 Labo : Les fichiers CSV

La façon classique d’entrer des données dans le logiciel R est d’utiliser des fichiers CSV. Un fichier CSV est un fichier de texte, qui peut être ouvert avec n’importe quelle application, par exemple avec le Bloc Notes de Windows. La particularité d’un fichier CSV est que dans chacune des lignes qui le compose, les valeurs sont séparées par des virgules, d’où son acronyme de CSV : Comma Separated Values. Il est possible (mais pas obligatoire), de mentionner le nom dans variables, séparées aussi par des virgules, dans la première ligne du fichier.

Les données de l’exemple sur la saisie directe seraient organisées dans un fichier CSV comme ceci :

"GEBL",100,12
"METN",11,8
"COAM",400,3
"CARO",NA,1

Vous pouvez télécharger ce fichier d’exemple1 ou le créer vous-même en copiant-collant le contenu.

Mise en garde

Votre ordinateur vous montrera probablement l’icône de Excel pour ce fichier, mais si vous regardez bien son nom, il se termine par .csv et non .xlsx

Si vous avez vérifié votre fichier à l’aide du Bloc Note et qu’il contient effectivement ce format, il peut être importé à l’aide de la fonction read.csv, comme ceci :

read.csv("oiseaux.csv")
Warning in file(file, "rt"): cannot open file
'oiseaux.csv': No such file or directory
Error in file(file, "rt"): cannot open the connection

Et c’est là que les problèmes commencent…

À moins d’un sacré coup de chance, votre ligne read.csv n’aura pas fonctionné du premier coup et la prochaine section explorera pourquoi…

7.3 Labo : Le concept de dossier de travail dans R

Le principe d’un dossier de travail est pratiquement aussi vieux que l’informatique. Par contre, la plupart des logiciels modernes font fit de ce concept, ce qui fait que probablement peu d’entre-vous on eu à la comprendre jusqu’ici.

Lorsque vous travaillez dans R et essayez de lire (ou d’écrire) un fichier, R ne fouille pas partout sur votre ordinateur pour le trouver, il regarde à un seul endroit, son dossier de travail (working directory).

Vous pouvez demander à R où se trouve actuellement son dossier de travail, à l’aide de la fonction getwd (GET Working Directory). Sur mon portable personnel, il me répond pour le moment ceci :

getwd()
[1] "/Users/charlesmartin/Documents/GitHub/NotesDeCours"

Ce dossier sera différent sur chacun de vos ordinateurs, et c’est tout à fait normal.

Si votre fichier oiseaux.csv ne se trouve pas dans ce dossier, vous avez alors deux choix. Votre première option est de déplacer votre fichier oiseaux.csv dans le dossier de travail de R. Pour se faire, assurez-vous d’utiliser soit l’Explorateur sur Windows ou le Finder sur Mac.

Mise en garde

N’utilisez surtout PAS la commande “Enregistrer sous…” d’un logiciel (Bloc Note, Excel, etc.) pour déplacer votre fichier.

Le format CSV est relativement fragile à ce genre d’opération et toute re-sauvegarde risque de le rendre inutilisable.

Votre deuxième option est de modifier le dossier de travail de R. Dans RStudio, vous pouvez modifier votre dossier de travail à l’aide de l’item de menu “Session / Set Working Directory / Choose directory …” et choisir le dossier où se trouve votre fichier de données. Vous pouvez ensuite refaire la commande read.csv, qui devrait maintenant fonctionner, comme par magie!

Il est aussi possible de modifier le dossier de travail par programmation, avec la fonction nommée setwd (SET Working Directory), qui s’utilise comme ceci :

setwd("/Users/charlesmartin/Desktop/")
getwd()
[1] "/Users/charlesmartin/Desktop"

Savoir quel chemin entrer dans la commande setwd n’est pas sorcier, mais l’opération demande tout de même une certaine connaissance du système de dossiers de votre ordinateur.

Si la magie n’a pas opéré, n’ayez pas peur de me demander de l’aide pour que je regarde avec vous ce qui se passe. Si ce cours avait été un cours “normal” en présentiel, j’aurais passé une bonne partie du cours à aider les gens à ouvrir le fichier sur leur ordinateur parce que ça n’aurait pas fonctionné. C’est une étape vraiment pas simple.

7.4 L’enfer des fichiers CSV pour une francophone

Les fichiers CSV comportent plusieurs avantages qui en ont fait, au fil du temps, le format par excellence pour plusieurs applications. Ils peuvent être lus par n’importe quel logiciel qui traite du texte, et ce, depuis 50 ans. Ils sont légers, rapides à ouvrir, relativement robustes, etc.

Par contre, pour une francophone qui fait ses biostatistiques au Québec, le portrait est beaucoup moins rose. Faisons une petite liste rapide des problèmes possibles : notre séparateur de décimale (contrairement aux anglophones) est la virgule plutôt que le point. Ça part mal, parce que dans un fichier CSV, la virgule devrait servir à séparer les colonnes. Il existe par contre un second format de fichier, CSV2, qui sépare les valeurs par des points-virgules (et une fonction associée, read.csv2 dans R).

Pour ajouter à la confusion, si jamais vous essayez d’exporter au format CSV à partir de la version française d’Excel, sachez que même si vous choisissez dans le menu d’Excel le format CSV, il utilisera, sans vous le dire, le format CSV2. Ça peut être un sacré casse-tête quand on essaie d’ouvrir notre fichier par la suite dans R et qu’on croit avoir un vrai CSV entre les mains.

Ensuite, les fichiers textes (comme les CSV) ont été inventés à une époque où l’informatique se déroulait quasi-exclusivement en anglais. Ce qui fait que la façon pour sauvegarder des lettres accentuées a été ajoutée un peu tout croche par la suite, par plein d’organisations différentes. Ce qui fait qu’aujourd’hui, il existe des dizaines de façon différentes de le faire (par exemple UTF-8, latin1, etc). Des solutions modernes comme Excel gardent une trace du type d’encodage utilisé dans le fichier, alors que pour le CSV, cette information est absente. R prend un guess, et si il se trompe, c’est à nous manuellement d’essayer des encodages différents jusqu’à ce que l’on tombe sur le bon.

Pour toutes ces raisons, je vous conseille (si vous créez vos propres fichiers de données) de les laisser au format Excel et de les lire directement dans ce format, comme expliqué dans la section suivante.

Remarquez que, si quelqu’un vous envoie un fichier CSV, ouvrez-le comme tel. Vous ne serez pas gagnantes à le transformer d’abord en Excel. Vous vous causerez juste encore plus de problèmes.

7.5 Labo : Les fichiers Excel

La lecture des fichiers Excel à partir de R ne fait pas partie des fonctionnalités de base. Une librairie de code doit donc être activée pour lire ces fichiers :

library(readxl)

Si jamais vous n’aviez pas installé la librairie tidyverse dans les chapitres précédents, vous pouvez installer directement la librairie readxl comme ceci :

install.packages("readxl")

Et ensuite l’activer avec library.

Et elle peut ensuite s’utiliser comme ceci :

read_excel("Oiseaux.xlsx")

En respectant les mêmes contraintes concernant le dossier de travail que pour les CSV. Vous pouvez télécharger mon fichier Excel2 pour essayer la fonction sur votre ordinateur.

7.6 Petits conseils sur la création de vos propres fichiers Excel

Les fichiers Excel, bien que beaucoup plus faciles à gérer que les fichiers CSV, ne sont pas pour autant parfaits. Ils ne vous épargneront pas la tâche de créer de bons fichiers, bien organisés.

Voici quelques règles en rafale pour vous éviter les ennuis :

  • Les méta-informations (qui a saisi les données, comment elles ont été mesurées, quand, etc.) ne devraient pas être saisies dans la même feuille que les données.
  • Assurez-vous que vos noms de colonnes ne contiennent pas d’espaces ou de lettres accentuées, ne commencent pas par des chiffres et ne sont pas dédoublés.
  • N’utilisez jamais la fusion de cellules dans un fichier servant à l’importation de données. R s’attend à recevoir un tableau rectangulaire. Pas une structure étrange ou parfois certaines lignes contiennent moins de colonnes que les autres.
  • Assurez-vous, pour chacune de vos colonnes, que Excel est capable d’effectuer correctement des calculs avec vos chiffres. Selon votre version d’Excel, il est possible que vous ayez à utiliser le point plutôt que la virgule comme séparateur de décimales. L’important est d’utiliser celui qui permet à votre version de Excel d’effectuer des calculs. Vos chiffres seront ainsi toujours corrects dans R par la suite.
  • Si jamais vous avez des données manquantes à saisir, laissez des blancs dans Excel. Ce sera beaucoup plus simple à gérer que d’insérer des “NA” qui pourraient être mal interprétés comme des valeurs textuelles. R remplacera lui-même vos blancs par des NA.

Enfin, si jamais vous avez à saisir de l’information incluant des noms de gènes, n’utilisez PAS Excel pour saisir vos informations. Plusieurs versions de Excel interprétaient mal certains noms de gènes, qu’elles modifiaient sans en avertir l’utilisateur, ce qui a causé la réévaluation de plusieurs centaines de découvertes scientifiques ayant analysé des données erronées3. Le problème était grave au point où les experts ont simplement décidé de renommer les gènes pour éviter les problèmes à l’avenir4.

Une autre preuve comme quoi il peut être très dangereux de travailler à l’aveugle sans bien explorer et valider nos données avant de commencer…

7.7 Labo : Toujours bien vérifier les données après la saisie

Mise en garde

Peu importe le format que vous choisirez pour saisir vos données dans R, il est très important de vérifier vos données après l’importation.

Pour se faire, vous avez deux outils principaux. Le premier est la fonction str (STRucture), qui vous renseigne sur le type de chacune des variables dans votre tableau de données, par exemple comme ceci :

library(palmerpenguins)
str(penguins)
tibble [344 × 8] (S3: tbl_df/tbl/data.frame)
 $ species          : Factor w/ 3 levels "Adelie","Chinstrap",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ island           : Factor w/ 3 levels "Biscoe","Dream",..: 3 3 3 3 3 3 3 3 3 3 ...
 $ bill_length_mm   : num [1:344] 39.1 39.5 40.3 NA 36.7 39.3 38.9 39.2 34.1 42 ...
 $ bill_depth_mm    : num [1:344] 18.7 17.4 18 NA 19.3 20.6 17.8 19.6 18.1 20.2 ...
 $ flipper_length_mm: int [1:344] 181 186 195 NA 193 190 181 195 193 190 ...
 $ body_mass_g      : int [1:344] 3750 3800 3250 NA 3450 3650 3625 4675 3475 4250 ...
 $ sex              : Factor w/ 2 levels "female","male": 2 1 1 NA 1 2 1 2 NA NA ...
 $ year             : int [1:344] 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 ...

L’important dans la sortie de cette fonction est de regarder pour chacune des variables le type que R a choisi de lui attribuer. Ici, nous avons 3 variables qualitatives (fct pour factor) , 3 variables quantitatives discrètes (int pour integer) et 2 variables quantitatives continues (num pour numeric). Si vos données qui devaient être des chiffres ont été chargées en texte (chr ou fct), vous devrez vérifier votre code ou votre fichier.

L’autre fonction importante à lancer après une importation est la fonction summary. Cette dernière vous fournit un résumé de vos données :

summary(penguins)
      species          island    bill_length_mm 
 Adelie   :152   Biscoe   :168   Min.   :32.10  
 Chinstrap: 68   Dream    :124   1st Qu.:39.23  
 Gentoo   :124   Torgersen: 52   Median :44.45  
                                 Mean   :43.92  
                                 3rd Qu.:48.50  
                                 Max.   :59.60  
                                 NA's   :2      
 bill_depth_mm   flipper_length_mm  body_mass_g  
 Min.   :13.10   Min.   :172.0     Min.   :2700  
 1st Qu.:15.60   1st Qu.:190.0     1st Qu.:3550  
 Median :17.30   Median :197.0     Median :4050  
 Mean   :17.15   Mean   :200.9     Mean   :4202  
 3rd Qu.:18.70   3rd Qu.:213.0     3rd Qu.:4750  
 Max.   :21.50   Max.   :231.0     Max.   :6300  
 NA's   :2       NA's   :2         NA's   :2     
     sex           year     
 female:165   Min.   :2007  
 male  :168   1st Qu.:2007  
 NA's  : 11   Median :2008  
              Mean   :2008  
              3rd Qu.:2009  
              Max.   :2009  
                            

Les sorties sont peu utiles pour les variables textuelles, mais très importantes pour les variables numériques. Vous voyez pour chacune, entre autres, la valeur minimum et maximum de votre variable, ainsi que sa moyenne et, le cas échéant, le nombre de valeurs manquantes.

Pour chacune de vos variables, prenez toujours quelques secondes pour vous demander si ces chiffres ont du sens. Il peut arriver que R rate le séparateur de décimales ou de milliers, et que vos données soient complètement erronées…


  1. https://drive.google.com/file/d/13xxYYbtmFVYiXf0sqBFoCg-B7HLecAo1/view?usp=sharing↩︎

  2. https://drive.google.com/file/d/1T7aATqpy1WKlLNuZP2uxRRtxi2ZGunbm/view?usp=sharing↩︎

  3. https://www.bbc.com/news/technology-37176926#:~:text=Microsoft's%20Excel%20has%20been%20blamed,altered%20to%20%22September%202%22.↩︎

  4. https://www.theverge.com/2020/8/6/21355674/human-genes-rename-microsoft-excel-misreading-dates↩︎