Chapitre 3 Importer des données externes

Certaines parties de ce chapitre sont extraites du cours de Julien Barnier “Introduction à R et au tidyverse” (https://juba.github.io/tidyverse)

3.1 Import de fichiers csv

R n’est pas prévu pour la saisie de données, mais il bénéficie de nombreuses fonctions et packages permettant l’import de données depuis un grand nombre de formats. Seuls les plus courants seront abordés ici.


Si votre fichier CSV suit un format CSV standard (c’est le cas s’il a été exporté depuis LibreOffice par exemple), avec des champs séparés par des virgules, vous pouvez utiliser la fonction read.csv en lui passant en argument le chemin et le nom du fichier. Cette fonction est issue du package utils chargé par défaut à chaque ouverture d’une session RStudio.

dataset <- read.csv(file = "./Programmation_Statistique_R/dataset/Titanic.csv")

Il existe plusieurs variantes à la fonction read.csv, la différence réside dans les arguments par défaut. Voir l’aide pour plus d’information :

help("read.csv")

Dans le package utils, chaque fonction dispose de plusieurs arguments, parmi lesquels :

  • file indique le chemin d’accès au fichier
  • header permet de spécifier si la première ligne correspond aux noms des colonnes
  • sep indique par quel caractère sont séparées les colonnes (“\t” pour les tabulations)
  • dec indique par quel caractère joue le rôle de la décimale (. ou ,)
  • row.names permet de spécifier quel numéro de colonne peut être considéré comme le numéro d’index des lignes
  • na.strings est un vecteur de chaînes de caractères indiquant les valeurs devant être considérées comme manquantes. Ce vecteur vaut c("", "NA") par défaut
  • `encoding’ permet de gérer l’encodage


Il peut arriver, notamment sous Windows, que l’encodage des caractères accentués ne soit pas correct au moment de l’importation. On peut alors spécifier manuellement l’encodage avec cet argument

dataset <- read.csv(file = "./Programmation_Statistique_R/dataset/Titanic.csv",
              header = TRUE, sep = ",", dec = ".",
              row.names = 1, na.strings = c(NA,"NULL","None"),
              encoding = "Latin-1")

3.2 Interface interactive d’import de fichiers

RStudio propose une interface permettant d’importer un fichier de données de manière interactive. Pour y accéder, dans l’onglet Environment, cliquez sur le bouton Import Dataset. On a ensuite le choix du format de fichier qu’on souhaite importer.


Attention, selon le format (Excel ou SAS notamment), l’installation de packages pourront être nécessaire. Dans notre exemple, nous importons un fichier CSV, nous avons donc le choix de l’importer avec les fonctions de base que propose le package utils où alors avec le package readr L’extension `readr fait partie du tidyverse et permet l’importation de fichiers txt, csv, excel mais le nom des fonctions et des arguments sont différents.

Menu Import Dataset

Sélectionnez From Text (readr)…. Une nouvelle fenêtre s’affiche :

Dialogue d’importation

Il vous suffit d’indiquer le fichier à importer dans le champ File/URL tout en haut (vous pouvez même indiquer un lien vers un fichier distant via HTTP). Un aperçu s’ouvre dans la partie Data Preview et vous permet de vérifier si l’import est correct :

Exemple de dialogue d’importation

Vous pouvez modifier les options d’importation, changer le type des colonnes, etc. et l’aperçu se met à jour. De même, le code correspondant à l’importation du fichier avec les options sélectionnées est affiché dans la partie Code Preview.

Important : une fois que l’import semble correct, ne cliquez pas sur le bouton Import. À la place, sélectionnez le code généré et copiez-le (ou cliquez sur l’icône en forme de presse papier) et choisissez Cancel. Ensuite, collez le code dans votre script et exécutez-le (vous pouvez supprimer la ligne commençant par View). Cette manière de faire permet “d’automatiser” l’importation des données, puisqu’à la prochaine ouverture du script vous aurez juste à exécuter le code en question, sans repasser par l’interface d’import.

3.3 Modifier le répertoire actif

La fonction getwd() permet d’afficher le répertoire actif. En général, le chemin proposé est similaire à celui ci :

getwd()
"./Documents"
## [1] "./Documents"

Il est possible de modifier ce chemin. Cela permet notamment d’éviter de saisir le chemin complet d’un fichier de données à l’importation :

dataset <- read.csv(file = "./Programmation_Statistique_R/dataset/Titanic.csv")

Pour modifier le répertoire courant, on utilise la fonction setwd()tel que :

setwd("./Programmation_Statistique_R/dataset")

On observe que le chemin a été modifié :

getwd()
## [1] "./Programmation_Statistique_R/dataset"

On peut également faire la même opération en cliquant sur Session, puis Set Working Directory et Choose Directory.

Une fois le répertoire actif modifié, on peut aperçevoir que l’onglet Files renseigne l’ensemble des fichiers présents dans le répertoire actif :

On peut donc importer les fichiers présents dans ce répertoire sans préciser leur chemin.

dataset <- read.csv(file = "Titanic.csv")

Dans la suite de ce livre, le répertoire actif sera :

getwd()
## [1] "C:/Users/Anthony/Documents/asardell/programmation-r"

Cela modifiera quelques peu la définition des chemins des fichiers que nous importerons tels que :

dataset <- read.csv(file = "./dataset/Titanic.csv")

3.4 Import depuis un fichier Excel

L’extension readxl, qui fait également partie du tidyverse, permet d’importer des données directement depuis un fichier au format xlsou xlsx.

Elle ne fait pas partie du “coeur” du tidyverse, il faut donc la charger explicitement avec :

library(readxl)

On peut alors utiliser la fonction read_excel en lui spécifiant le nom du fichier :

dataset <- read_excel(path  = "./dataset/Titanic.xlsx")

Il est possible de spécifier la feuille et la plage de cellules que l’on souhaite importer avec les arguments sheet et range :

d <- read_excel(path  = "./dataset/Titanic.xlsx", sheet = "Feuil1", range = "A1:G1314")

Comme pour l’import de fichiers texte, une interface interactive d’import de fichiers Excel est disponible dans RStudio dans l’onglet Environment. Pour y accéder, cliquez sur Import Dataset puis From Excel….

Dialogue d’importation d’un fichier Excel

Spécifiez le chemin ou l’URL du fichier dans le premier champ, vérifiez l’import dans la partie Data Preview, modifiez si besoin les options d’importation, copiez le code d’importation généré dans la partie Code Preview et collez le dans votre script.

Pour plus d’informations, voir le site de l’extension readxl.

3.5 Export de données

3.5.1 Export de tableaux de données

On peut avoir besoin d’exporter un tableau de données dans R vers un fichier dans différents formats. La plupart des fonctions d’import disposent d’un équivalent permettant l’export de données. On citera notamment :

  • write.csv, permet d’enregistrer un data frame dans un fichier au format texte délimité

Il n’existe par contre pas de fonctions permettant d’enregistrer directement au format xls ou xlsx. On peut dans ce cas passer par un fichier CSV.

Ces fonctions sont utiles si on souhaite diffuser des données à quelqu’un d’autre, ou entre deux logiciels.

Si vous travaillez sur des données de grandes dimensions, les formats texte peuvent être lents à exporter et importer. Dans ce cas, l’extension feather peut être utile : elle permet d’enregistrer un data frame au format feather, qui n’est pas le plus compact mais qui est extrêmement rapide à lire et écrire 7.

Les fonctions read_feather et write_feather permettent d’importer et exporter des tableaux de données dans ce format.

3.5.2 Sauvegarder des objets

Une autre manière de sauvegarder des données est de les enregistrer au format RData. Ce format propre à R est compact, rapide, et permet d’enregistrer plusieurs objets R, quel que soit leur type, dans un même fichier.

Pour enregistrer des objets, il suffit d’utiliser la fonction save et de lui fournir la liste des objets à sauvegarder et le nom du fichier :

save(... = d, file = "fichier.RData")

Pour charger des objets préalablement enregistrés, utiliser load :

load(file = "fichier.RData")

Les objets ddevrait alors apparaître dans votre environnement.

Attention, quand on utilise load, les objets chargés sont importés directement dans l’environnement en cours avec leur nom d’origine. Si d’autres objets du même nom existaient déjà, ils sont écrasés sans avertissement.

3.6 Exercices

3.6.1 Sujet

Dans ce qui suit on va utiliser des jeux de données correspondant aux données de tous les vols au départ d’un des trois aéroports de New-York en 2013. La base de données est répartie en plusieurs tables. Nous allons utiliser une d’entres elles pour le moment à savoir le fichier flights.csv qui présente 336 776 vols sur 19 variables Voici une description de cette table :

  • year, month, day : date du vol.
  • dep_time, arr_time : Heures de départ et d’arrivée réelles (format HHMM ou HMM).
  • sched_dep_time,sched_arr_time : Heures de départ et d’arrivée prévues (format HHMM ou HMM).
  • dep_delay, arr_delay : Retards de départ et d’arrivée, en minutes. Les temps négatifs représentent des départs / arrivées précoces.
  • carrier : Abréviation à deux lettres des compagnies aériennes.
  • flights : Numéro de vol
  • tailnum : Immatriculation de l’avion
  • origine, dest : Aéroport de départ et destination.
  • air_time : Durée du vol en minutes.
  • distance : Distance entre les aéroports, en miles.
  • hour , minute : Heure de départ prévue divisée en heures et minutes.
  • time_hour : Date et heure prévues du vol
year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin dest air_time distance hour minute time_hour
2013 1 1 517 515 2 830 819 11 UA 1545 N14228 EWR IAH 227 1400 5 15 2013-01-01 05:00:00
2013 1 1 533 529 4 850 830 20 UA 1714 N24211 LGA IAH 227 1416 5 29 2013-01-01 05:00:00
2013 1 1 542 540 2 923 850 33 AA 1141 N619AA JFK MIA 160 1089 5 40 2013-01-01 05:00:00
2013 1 1 544 545 -1 1004 1022 -18 B6 725 N804JB JFK BQN 183 1576 5 45 2013-01-01 05:00:00
2013 1 1 554 600 -6 812 837 -25 DL 461 N668DN LGA ATL 116 762 6 0 2013-01-01 06:00:00
2013 1 1 554 558 -4 740 728 12 UA 1696 N39463 EWR ORD 150 719 5 58 2013-01-01 05:00:00
2013 1 1 555 600 -5 913 854 19 B6 507 N516JB EWR FLL 158 1065 6 0 2013-01-01 06:00:00
2013 1 1 557 600 -3 709 723 -14 EV 5708 N829AS LGA IAD 53 229 6 0 2013-01-01 06:00:00
2013 1 1 557 600 -3 838 846 -8 B6 79 N593JB JFK MCO 140 944 6 0 2013-01-01 06:00:00
2013 1 1 558 600 -2 753 745 8 AA 301 N3ALAA LGA ORD 138 733 6 0 2013-01-01 06:00:00
2013 1 1 558 600 -2 849 851 -2 B6 49 N793JB JFK PBI 149 1028 6 0 2013-01-01 06:00:00
2013 1 1 558 600 -2 853 856 -3 B6 71 N657JB JFK TPA 158 1005 6 0 2013-01-01 06:00:00
2013 1 1 558 600 -2 924 917 7 UA 194 N29129 JFK LAX 345 2475 6 0 2013-01-01 06:00:00
2013 1 1 558 600 -2 923 937 -14 UA 1124 N53441 EWR SFO 361 2565 6 0 2013-01-01 06:00:00
2013 1 1 559 600 -1 941 910 31 AA 707 N3DUAA LGA DFW 257 1389 6 0 2013-01-01 06:00:00
2013 1 1 559 559 0 702 706 -4 B6 1806 N708JB JFK BOS 44 187 5 59 2013-01-01 05:00:00
2013 1 1 559 600 -1 854 902 -8 UA 1187 N76515 EWR LAS 337 2227 6 0 2013-01-01 06:00:00
2013 1 1 600 600 0 851 858 -7 B6 371 N595JB LGA FLL 152 1076 6 0 2013-01-01 06:00:00
2013 1 1 600 600 0 837 825 12 MQ 4650 N542MQ LGA ATL 134 762 6 0 2013-01-01 06:00:00
2013 1 1 601 600 1 844 850 -6 B6 343 N644JB EWR PBI 147 1023 6 0 2013-01-01 06:00:00

Exercice 1

  1. Importez le jeu de données fligths.csv

  2. Combien de lignes, colonnes sont présentes dans cette table ?

  3. Affichez le nom des colonnes

  4. Affichez les 10 premières lignes dans une vue

Exercice 2

  1. Affichez un résumé des données

  2. Affichez le type des colonnes

  3. Transformer la variable flighten caractère

  4. Affichez les quartiles de la distribution de la variable arr_delay

  5. Affichez les déciles de la distribution de la variable distance

Exercice 3

  1. Quel est l’aéroport avec le plus de départ en 2013 ?

  2. Avec la fonction unique, affichez le nombre de destinations différentes

  3. Proposez une représentation graphique adaptée pour la variable arr_delay

  4. Proposez une représentation graphique adaptée pour la variable origin

  5. Proposez une représentation graphique adaptée pour la variable dest

  6. Même question, mais en affichant uniquement un top 10

3.6.2 Correction

Exercice 1

  1. Importez le jeu de données fligths.csv. Attention, en réalité ce jeu de données est issu du package nycflights13
flights <- read.csv(file = "./dataset/flights.csv", sep = "\t")
  1. Combien de lignes, colonnes sont présentes dans cette table ?
dim(x = flights)
## [1] 336776     19
#ou

ncol(x = flights) ; nrow(x = flights)
## [1] 19
## [1] 336776
  1. Affichez le nom des colonnes
colnames(x = flights) #fonctionne aussi avec names(flights)
##  [1] "year"           "month"          "day"            "dep_time"      
##  [5] "sched_dep_time" "dep_delay"      "arr_time"       "sched_arr_time"
##  [9] "arr_delay"      "carrier"        "flight"         "tailnum"       
## [13] "origin"         "dest"           "air_time"       "distance"      
## [17] "hour"           "minute"         "time_hour"
  1. Affichez les 10 premières lignes dans une vue
View(head(x = flights, n = 10))

Exercice 2

  1. Affichez un résumé des données
summary(object = flights)
  1. Affichez le type des colonnes
str(flights)
  1. Transformer la variable flighten caractère
flights$flight <- as.character(x = flights$flight)
class(x = flights$flight )
## [1] "character"
  1. Affichez les quartiles de la distribution de la variable arr_delay
#Attention aux valeurs manquantes
quantile(x = flights$arr_delay, na.rm = TRUE)
##   0%  25%  50%  75% 100% 
##  -86  -17   -5   14 1272
  1. Affichez les déciles de la distribution de la variable distance
quantile(x = flights$distance, probs = seq(0,1,0.1))
##   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
##   17  214  427  544  733  872 1023 1096 1598 2446 4983

Exercice 3

  1. Quel est l’aéroport avec le plus de départ en 2013 ?
table(x = flights$origin)
## x
##    EWR    JFK    LGA 
## 120835 111279 104662
  1. Avec la fonction unique, affichez le nombre de destinations différentes
length(x = unique(x = flights$dest))
## [1] 105

Si la variable dest est de type factor, on peut simplement compter le nombre de levels

is.factor(flights$dest) 
## [1] FALSE
length(levels(flights$dest))
## [1] 0
  1. Proposez une représentation graphique adaptée pour la variable arr_delay
boxplot(x = flights$arr_delay, horizontal = TRUE, 
        main = "Répartition des retards (en minutes)")

  1. Proposez une représentation graphique adaptée pour la variable origin
count <- table(flights$origin)
pie(x = count, main = "Répartition des vols depuis l'aéroport de départ",
    labels = paste(row.names(count),"\n",count),col = colors())

  1. Proposez une représentation graphique adaptée pour la variable dest
count <- sort(x = table(flights$dest),decreasing = TRUE)
barplot(height = count, main = "Nombre de vols pour chaque destination",
        las = 2, cex.names = 0.4)

  1. Même question, mais en affichant uniquement un top 10
count <- sort(x = table(flights$dest),decreasing = TRUE)[1:10]
barplot(height = count, main = "Nombre de vols pour chaque destination \n TOP 10",
        ylim = c(0,20000), col = "blue")

3.7 Testez vos connaissances !

Quiz

Testez vos connaissances sur ce chapitre avec ce quiz (10 min) en cliquant ici.


  1. feather est un format compatible avec Python, R et Julia. Pour plus d’informations, voir https://github.com/wesm/feather↩︎