4 Importation et exportation de donnée
Ce chapitre s’appuie sur la Section 2.3 Importation, exportation et création de données des notes de cours.
4.1 Chargement de données : chemins
Lorsque l’on souhaite accéder à des données avec Excel, il suffit de double cliquer sur le fichier dans l’explorateur de fichiers pour que le logiciel se lance et que le tableur nous révèle son contenu. Avec R, il est nécessaire de payer un petit coût d’entrée pour pouvoir charger les données. Mais une fois ce coût payé, il nous est possible de réaliser des opérations avancées en fournissant des efforts moindres. Par ailleurs, le traitement des gros volumes de données est facilité avec R, comparativement à Excel.
Dans cet exercice, vous allez apprendre à importer des données dans R. Cela nécessite au préalable d’avoir connaissance de l’environnement de travail (en anglais, working directory). Lorsqu’on lance RStudio en double cliquant sur un fichier de projet (dont l’extension est .Rproj
), comme ce que l’on a fait jusqu’à présent, l’environnement de travail de R est le répertoire dans lequel se situe le fichier .Rproj
. Aussi, lorsque nous donnons comme instruction à R d’importer ou d’exporter des informations, R se réfère à ce répertoire comme point d’ancrage, comme répertoire courant.
- En choisissant l’option “Enregistrer le fichier” (**et non pas en choisissant “Ouvrir avec”), téléchargez l’archive
exercice_importation.zip
à l’adresse suivante : https://egallic.fr/Enseignement/R/Exercices/exercice_importation.zip.
Par défaut, sur les ordinateurs de l’Université, les fichiers téléchargés sont enregistrés dans le dossier Téléchargement
. Pour être plus précis, les fichiers téléchargés sont enregistrés sur le disque dur nommé C:
, dans un répertoire nommé Downloads
qui se situe lui-même dans un répertoire nommé selon votre numéro d’étudiant, situé lui-même dans un répertoire nommé Users
. Pour accéder à une ressource, le système d’exploitation utilise des chemins d’accès, qui sont constitués à l’aide des noms de répertoires séparés par des barres obliques inverse sous Windows (\
) (et des barres obliques /
sous Unix) et qui se terminent soit par un nom de répertoire, soit par un nom de fichier. Le chemin qui permet de localiser le répertoire de téléchargement sur la machine de l’Université s’écrit ainsi : C:\Users\votre_numero_etudiant\Downloads
, tandis que le chemin qui permet de localiser le fichier que vous venez de télécharger s’écrit C:\Users\votre_numero_etudiant\Downloads\exercice_importation.zip
.
- Ouvrez l’explorateur de fichiers et déplacez vous dans le dossier de téléchargement.
- Faites un clic droit sur le fichier
exercice_importation.zip
, et dans le menu contextuel qui s’affiche, choisissez l’option7-Zip
, puisExtraire vers exercice_importation
. Un répertoire nomméexercice_importation
a alors été extrait.
Note
Dans votre répetoire Téléchargement
vous pouvez à présent voir deux ressources portant le nom exercice_importation
. Si vous faites bien attention, l’icône de ces ressources diffère : l’une représente un porte document jaune ouvert (et désigne le répertoire que vous venez d’extraire de l’archive), tandis que l’autre présente un porte document jaune fermé et muni d’une fermeture éclair (un zip).
Afin d’éviter de confondre les deux, un moyen simple consiste à afficher l’extension des fichiers. Il sera alors aisé de reconnaître les fichiers des répertoires : les dossiers n’auront pas d’extention. Pour afficher les extensions :
- Dans l’explorateur de fichiers, atteignez l’onglet
Affichage
; - Cliquez sur le bouton
Afficher/Masquer
; - Cochez la case
Extensions de noms de fichiers
.
À présent, vous pourrez bien voir la différence entre le répertoire exercice_importation
et le fichier ZIP exercice_importation.zip
(l’archive).
La hiérarchie du répertoire exercice_importation
que vous venez d’extraire peut être représentée à l’aide d’un arbre (on parle d’arborescence).
exercice_importation
├── Dossier_C
│ └── fichier_donnees_C.csv
├── Dossier_D
│ └── Dossier_D_1
| | └── fichier_donnees_D_1.csv
├── Exercice
| └── Dossier_A
| | └── Dossier_A_1
| | | └── fichier_donnees_A_1.csv
| | └── Dossier_A_2
| | | └── fichier_donnees_A_2.csv
| | └── fichier_donnees_A.csv
| └── Dossier_B
| | └── fichier_donnees_B.csv
| └── fichier_donnees.csv
| └── L3_info.Rproj
Mise en garde
Faites attention lorsque vous ouvrez des fichiers CSV avec Excel. Dès lors que vous enregistrerez des modifications, Excel ajoutera des informations dans le fichier. Ces ajouts peuvent rendre vos fichiers illisibles par d’autres logiciels ensuite.
- Depuis l’explorateur de fichiers, descendez dans le répertoire
exercice_importation
, puis dansExercice
et ouvrez le fichierL3_info.Rproj
en double cliquant dessus.
En ayant ouvert le fichier L3_info.Rproj
, RStudio s’est lancé, en définissant le répertoire Exercice
comme répertoire de travail.
- Dans la console R de RStudio, évaluez l’instruction suivante :
getwd()
et observez le chemin retourné. - Créez un nouveau script R.
Le répertoire courant est donc Exercice
. Lorsque nous allons charger ou exporter dans ou depuis R des données, nous pourrons créer des chemins relatifs à ce répertoire courant. Il convient ainsi de noter la distinction entre chemin absolu et chemin relatif:
- Chemin absolu : le chemin absolu décrit l’accès à une ressource sans se référer au chemin courant, mais en se rapportant à la place à la racine du disque ou du serveur.
- exemple : le chemin absolu vers le fichier
fichier_donnees.csv
sur windows sera :C:\Users\votre_numero_etudiant\Downloads\exercice_importation\Exercice\fichier_donnees.csv
- Note : sous Unix, la racine du système de fichiers se note simplement
/
. Le lien absolu vers le fichier ressemblera à celui-ci :/home/votre_nom_user/Downloads/fichier_donnees.csv
.
- Chemin relatif : le chemin relatif décrit quant à lui l’accès à une ressource en se rapportant au répertoire courant.
- le répertoire courant étant
Exercice
, pour accéder au fichier csv, le chemin est le suivant, sous windows :fichier_donnees.csv
(on peut aussi écrire.\fichier_donnees.csv
, où.
se réfère au répertoire courant) - sous Unix :
fichier_donnees.csv
ou./fichier_donnees.csv
.
Note
La barre oblique /
(inversée \
sous Windows) est le séparateur de chemin.
Nous allons à présent importer dans R le contenu du fichier fichier_donnees.csv
. Ce fichier contient une première ligne définissant les en-têtes, et une seconde ligne contenant une observation. Dans le fichier, les différents champs sont séparés par un point-virgule (;
).
Pour importer le contenu de ce fichier CSV dans R, nous allons nous appuyer sur la fonction read_csv2()
du package {readr}. Nous allons indiquer le chemin vers le fichier à l’argument file
de cette fonction. Le tableau de données sera stocké dans un objet que nous allons appeler df_exercice
:
<- read_csv2(file = "fichier_donnees.csv")
df_exercice df_exercice
## # A tibble: 1 × 2
## Dossier Valeur
## <chr> <chr>
## 1 Dossier_Exercice Bravo
L’importation a bien fonctionné, R nous prévient avoir deviné que les valeurs dans les colonnes Dossier
et Valeur
sont des chaînes de caractères (la fonction col_character()
a été utilisée pour ces deux colonnes).
Nous pouvons obtenir le même résultat en écrivant le chemin absolu vers le fichier :
<- paste0("C:/Users/votre_numero_etudiant/Downloads/",
path "exercice_importation/Exercice/fichier_donnees.csv")
read_csv2(file = path)
Note : le chemin étant trop long pour tenir sur une page PDF, la fonction paste0
a été utilisée ici pour concaténer deux chaînes de caractères en une seule. Sur votre machine, vous pouvez écrire le chemin complet sans passer par l’utilisation de la fonction paste0
.
Nous verrons plus loin que l’utilisation des chemins absolus dans les scripts posent des soucis lorsque l’on change d’ordinateur ou que l’on partage son code avec d’autres personnes.
Le fichier fichier_donnees_A.csv
n’est pas situé dans le répertoire courant : il se situe dans le répertoire Dossier_A
, contenu dans le répertoire courant (Exercice
). Pour pouvoir charger le contenu de ce fichier dans R avec un lien relatif, il faut constuire le chemin en indiquant que l’on souhaite descendre dans le répertoire Dossier_A
dans un premier temps :
<- read_csv2(file = "Dossier_A/fichier_donnees_A.csv")
df_exercice_A df_exercice_A
## # A tibble: 1 × 2
## Dossier Valeur
## <chr> <chr>
## 1 Dossier_A Bravo
- Dans un objet que vous nommerez
df_exercice_A_1
, chargez dans R le contenu du fichierfichier_donnees_A_1.csv
. - Dans un objet que vous nommerez
df_exercice_A_2
, chargez dans R le contenu du fichierfichier_donnees_A_2.csv
. - Dans un objet que vous nommerez
df_exercice_B
, chargez dans R le contenu du fichierfichier_donnees_B.csv
.
Si la ressource que l’on souhaite atteindre nécessite de remonter dans un répertoire parent (un répertoire qui contient un autre est appelé “répertoire parent”), il suffit d’utiliser sa désignation : ..
. Par exemple, pour accéder au fichier fichier_donnees_C.csv
, qui se trouve dans le répertoire Dossier_C
contenu dans le répertoire exercice_importation
(qui contient le répertoire Exercice
et est donc le répertoire parent de Exercice
), on peut écrire :
<- read_csv2(file = "../Dossier_C/fichier_donnees_C.csv")
df_exercice_C df_exercice_C
## # A tibble: 1 × 2
## Dossier Valeur
## <chr> <chr>
## 1 Dossier_C Bravo
- Dans un objet que vous nommerez
df_exercice_D
, chargez dans R le contenu du fichierfichier_donnees_D_1.csv
. - Enregistrez votre script dans le répertoire
Exercice
(en le nommant par exempleimporter_donnees.R
) et fermez RStudio.
4.1.1 Avantages de l’utilisation de chemins relatifs
Pour finir cette section, nous allons illustrer le grand avantage que confère l’emploi de chemins relatifs.
Mise en situation : admettons que vous souhaitez partager votre projet R avec une autre personne. Une manière simple de le faire consiste à créer une archive de l’ensemble de votre projet, pour fournir à la fois les scripts et les données.
Le répertoire exercice_importation
se situe depuis le début de ce chapitre dans votre dossier de téléchargement. Dans l’explorateur de fichiers, allez dans le répertoire de téléchargements et créez une archive du répertoire exercice_importation
:
- clic droit sur le répertoire
exercice_importation
; - dans le menu contextuel qui s’affiche, cliquez sur
7-Zip
, puis surAjouter à "exercice_importation.zip"
; - dans votre répetoire du cours d’informatique (dans vos documents), créez un répertoire intitulé
TD_4
; - dans le répetoire
TD_4
, collez l’archiveexercice_importation.zip
que vous venez de créer ; - dans le répertoire de téléchargement, supprimez le répertoire
exercice_importation
. - dans le répetoire
TD_4
, extrayez le contenu de l’archive (clic droit,7-Zip > Extraire vers "exercice_importation\"
). - descendez dans le répertoire
exercice_importation
qui vient d’être extrait, puis dansExercice
; - Lancez le fichier
L3_info.Rproj
; - Dans la session RStudio qui vient de se lancer, ouvrez le script
importer_donnees.R
que vous avez créé précédemment.
Si vous avez écrit les chemins vers les fichiers en utilisant des chemins absolus, vous serez obligé de les modifier un à un…
<- paste0("C:/Users/votre_numero_etudiant/Downloads/",
path "exercice_importation/Exercice/fichier_donnees.csv")
read_csv2(file = path)
Cette instruction qui permettait de charger le fichier fichier_donnees.csv
ne fonctionne plus. R retourne un message d’erreur indiquant “No such file or directory” (un tel fichier ou répertoire n’existe pas).
Si vous avez employé des chemins relatifs, vous n’aurez rien à modifier.
read_csv2(file = "./fichier_donnees.csv")
4.2 Chargement de formats différents
Cet exercice s’appuie sur la section 2.3 Importation, exportation et création de données des notes de cours.
Dans cet exercice, vous allez apprendre à importer des données dans R lorsqu’elles proviennent de différents types de fichiers. Au programme :
- des fichiers texte (plus particulièrement, CSV :comma separated values, et TSV, tab-separated values) ;
- des fichiers Excel ;
- des fichiers de données R.
4.2.1 Fichiers texte
Dans un premier temps, concentrons-nous sur les fichiers texte contenant des données tabulaires. Chaque ligne de ces fichiers correspond à une ligne d’un tableau, et un caractère spécifique appelé le séparateur de champ permet de séparer les colonnes. À la fin de chaque ligne, un caractère (non visible) permet de passer à la ligne suivante (fin de ligne ou line break). Parfois, les champs sont également placés entre double quotes ("valeur"
).
Un format très répandu de ce type de fichiers s’appelle CSV, ou comma separated values : la virgule sépare les champs. Souvent, la première ligne sert à nommer les colonnes. Voici un exemple :
"nom","prenom","id","profile","matiere","note"
"Amsberry","Evan",1,1,"Microéconomie 1",11.5
"Basurto","Anthony",2,2,"Microéconomie 1",9
"Begaye","Kai",3,3,"Microéconomie 1",16.5
Dans certaines administrations françaises, les données au format CSV sont fournies avec une variante dans laquelle le séparateur de champ est le point-virgule plutôt que la virgule, cette dernière étant utilisée comme séparateur décimal.
"nom";"prenom";"id";"profile";"matiere";"note"
"Amsberry";"Evan";1;1;"Mathématiques 1";5
"Basurto";"Anthony";2;2;"Mathématiques 1";6
"Begaye";"Kai";3;3;"Mathématiques 1";18
Face à la possibilité d’utiliser différents caractères pour séparer les champs ainsi que pour séparer la partie entière de la partie décimale des nombres, R propose tout un attirail de fonctions. Nous allons en utiliser une qui permet d’être polyvalent : read_delim()
. Cette fonction est proposée dans le package {readr}.
library(readr)
- Affichez la page d’aide de la fonction
read_delim
. - Lisez les descriptions des arguments suivants :
file
,delim
,col_names
,skip
,n_max
.
Vous allez devoir charger dans R 4 fichiers texte contenant des notes d’étudiants, selon les matières qu’ils et elles ont suivies. Pour les besoins de l’exercice, les séparateurs de champs et les séparateurs décimaux varient d’un fichier à l’autre. Le tableau 4.1 reporte les valeurs utilisées.
Nom de fichier | Séparateur de champs | Séparateur décimal | En-têtes |
---|---|---|---|
Microeconomie_1.csv |
Virgule (, ) |
Point (. ) |
Oui |
Macroeconomie_1.csv |
Virgule (, ) |
Point (. ) |
Non |
Mathematiques_1.csv |
Point-virgule (; ) |
Virgule (, ) |
Oui |
Informatique_1.tsv |
Taquet de tabulation (\t ) |
Point (. ) |
Oui |
Ces fichiers sont disponibles dans une archive disponible à l’adresse suivante : https://egallic.fr/Enseignement/R/Exercices/importation_formats.zip.
- Téléchargez l’archive, extrayez son contenu, puis déplacez le répertoire
importation_formats
qui vient d’être extrait dans votre répertoireTD_4
créé lors du précédent exercice. - En utilisant la fonction
read_delim()
, chargez le contenu du fichierMicroeconomie_1.csv
dans R. Ce fichier est situé dans le répertoireL1
. Vous prendrez soin de stocker le tableau qui sera importé dans un objet que vous nommerezmicroeconomie_1
. - En utilisant la fonction
read_delim()
, chargez le contenu du fichierMacroeconomie_1.csv
dans R. Vous prendrez soin de stocker le tableau qui sera importé dans un objet que vous nommerezmacroeconomie_1
.
Lorsque le séparateur décimal n’est pas le point, il est nécessaire de renseigner à l’argument locale
la valeur locale(decimal_mark = ",")
.
- En utilisant la fonction
read_delim()
, chargez le contenu du fichierMathematiques_1.csv
dans R. Vous prendrez soin de stocker le tableau qui sera importé dans un objet que vous nommerezmathematiques_1
. Attention, vérifiez bien les valeurs des notes. - En utilisant la fonction
read_delim()
, chargez le contenu du fichierInformatique_1.tsv
dans R. Vous prendrez soin de stocker le tableau qui sera importé dans un objet que vous nommerezinformatique_1
.
Le package {readr} propose également les fonctions read_csv()
et read_csv2()
qui sont spécifiquement créées pour des fichiers texte/csv
répondant exactement au standard anglo-saxon (virgule en séparateur de champs, point en séparateur décimal) et français (point-virgule en séparateur de champs, virgule en séparateur décimal).
4.2.2 Fichier Excel
L’archive importation_formats.zip
contient dans le répertoire L1
, un fichier Excel intitulé notes_L1.xlsx
.
- Ouvrez ce fichier avec Excel, pour observer sa structure : le classeur est composé de 8 feuilles, une feuille par matière. Dans chaque feuille, les notes obtenues par les étudiants dans la matière correspondante sont reportées. La première ligne indique systématiquement les noms de clonnes.
Pour importer le contenu de fichiers Excel dans R, il existe plusieurs packages. Nous allons utiliser {readxl}.
- Après avoir chargé le package {readxl}, affichez la page d’aide de la fonction
read_excel
. Lisez les descriptions des arguments suivants :path
,sheet
,col_names
,na
,skip
,n_max
. - En utilisant le numéro d’index de la feuille
info
(il s’agit de la 4e feuille), chargez son contenu, à l’aide de la fonctionread_excel
dans un objet que vous nommerezinfo
. - En utilisant le nom de la feuille
stats
, chargez son contenu, à l’aide de la fonctionread_excel
dans un objet que vous nommerezstats
.
4.2.3 Fichiers R
Il existe deux formats de fichier de données R : les fichiers .RDS
et .RData
. Les premiers contiennent un seul objet, tandis que les seconds peuvent en contenir plusieurs.
Dans le dossier L1
de l’archive importation_formats.zip
que dont vous avez extrait le contenu se trouve deux fichiers de données R :
anglais.RDS
: tableau de données contenant les notes d’anglais` ;notes.RData
: 8 tableaux de données (micro
,macro
,maths
,info
,stats
,anglais
,eco_envir
, etfinance
).
Pour importer un fichier .RDS
, on utilise la fonction readRDS()
. De la même manière que pour read_delim()
, il est nécessaire de stocker le résultat dans un objet.
<- readRDS(file = "importation_formats/L1/anglais.RDS")
notes_anglais notes_anglais
## # A tibble: 32 × 5
## nom prenom id matiere note
## <chr> <chr> <dbl> <chr> <dbl>
## 1 Amsberry Evan 1 Anglais 1 4
## 2 Basurto Anthony 2 Anglais 1 5.5
## 3 Begaye Kai 3 Anglais 1 11
## 4 Brack Michael 4 Anglais 1 1.5
## 5 Burgess Jamie 5 Anglais 1 7
## 6 Christian Colton 6 Anglais 1 4
## 7 Cly Jesse 7 Anglais 1 5
## 8 Coberley Rebecca 8 Anglais 1 6
## 9 De Venecia Madison 9 Anglais 1 6
## 10 Gurule Elliott 12 Anglais 1 6
## # … with 22 more rows
Pour charger les objets d’un fichier .RData
dans votre session R, il faut utiliser la fonction load()
. Attention, si un objet est nommé x
dans votre fichier .RData
et qu’un objet existant dans votre session R s’appelle également x
, ce dernier sera remplacé par l’objet qui vient d’être chargé avec la fonction load()
.
load(file = "importation_formats/L1/notes.RData")
4.3 Exportation
4.3.1 Format texte
Pour enregistrer des données depuis un tableau de données, un vecteur ou une matrice, la fonction write_delim()
peut être utilisée.
- Affichez la page d’aide de la fonction
write_delim()
, et lisez les descriptions des argumentsx
,file
,delim
etappend
. - Dans un fichier que vous nommerez
notes_finance.csv
, exportez le tableau de donnéesfinance
(qui a été chargé avec la fonctionload()
) dans le dossierL1
.
4.3.2 Format R
Pour sauvegarder un seul objet, on peut utiliser la fonction saveRDS()
et exporter les données au format .RDS
:
saveRDS(maths, file = "importation_formats/L1/maths.RDS")
Pour sauvegarder plusieurs objets, on peut utiliser la fonction save()
, en indiquant les noms des objets à sauvegarder en argument de la fonction.
save(micro, macro, maths, info, stats, anglais, eco_envir, finance,
file = "importation_formats/L1/notes_L1.RData")