Programmer en R/Importer un fichier CSV

Un livre de Wikilivres.

Wikipédia propose un article sur : « Comma-separated values ».

Un fichier CSV est un fichier texte qui contient des données. En général, les valeurs sont séparées par des virgules. Néanmoins, on trouve aussi souvent des valeurs séparées par des points virgules (;) et il arrive que l'on trouve de nombreux autres séparateurs comme des pipes (|) ou même des croisillons (#).

Dans la version basique de R, les fichiers CSV peuvent être importés avec les fonctions read.csv(), read.csv2() et read.table().

La librairie readr développée par Hadley Wickham définit les fonctions read_csv(), read_csv2() et read_delim() qui ont de meilleures performances et de meilleurs paramètres par défaut que les fonctions standards.

Il existe aussi d'autre possibilité avec la librairie rio et la fonction fread() de la librairie data.table.

Pré-requis[modifier | modifier le wikicode]

install.packages(c("readr", "dplyr"))
library(dplyr)
library(readr)

Importer un fichier CSV[modifier | modifier le wikicode]

Nous proposons de prendre comme exemple le fichier des députés postés par l'association Wikimédia France sur DataGouv[1].

  • La fonction read_csv() issue de la librairie readr permet de lire un fichier csv.
  • La fonction glimpse() de la librairie dplyr permet d'avoir un aperçu de la table obtenue.
> library(readr)
> library(dplyr)
> read_csv(file = "data/deputes.csv") %>% 
+   glimpse()
Observations: 575
Variables: 10
$ nom             (chr) "François Fillon", "François de Rugy", "Hervé Gaymard", "Aurélie Filippetti"...
$ genre           (chr) "masculin", "masculin", "masculin", "féminin", "féminin", "féminin", "mascul...
$ prenom          (chr) "François", "François", "Hervé", "Aurélie", "Delphine", "Marion", "Jacques",...
$ nom_famille     (chr) "Fillon", "de Rugy", "Gaymard", "Filippetti", "Batho", "Maréchal-Le Pen", "B...
$ date_naissance  (time) 1954-03-04, 1973-12-06, 1960-05-31, 1973-06-17, 1973-03-23, 1989-12-10, 194...
$ lieu_naissance  (chr) "Le Mans", "Nantes", "Bourg-Saint-Maurice", "Villerupt", "Paris", "Saint-Ger...
$ circonscription (chr) "deuxième circonscription de Paris", "première circonscription de la Loire-A...
$ sycomore_id     (int) 3009, 17282, 3322, 17302, 17264, 18477, 921, 17275, 476, 17280, 1300, 17274,...
$ wikidata        (chr) "http://www.wikidata.org/entity/Q101410", "http://www.wikidata.org/entity/Q1...
$ frwiki          (chr) "https://fr.wikipedia.org/wiki/Fran%C3%A7ois%20Fillon", "https://fr.wikipedi...

La fonction read_csv() essaie de deviner le type de chaque variable. On peut aussi indiquer à la fonction le type de chaque variable à l'aide de l'argument col_types. Les types doivent être spécifiés dans la fonction cols() :

  • col_character() pour les chaînes de caractères
  • col_integer() pour les entiers
  • col_double() pour les nombres doubles
  • col_number() pour les nombres
  • col_factor() pour les facteurs
  • col_date() pour les dates
  • col_datetime() pour les dates heures
  • col_logical() pour les booléens
> read_csv(file = "data/deputes.csv", 
+          col_types = cols(
+            nom = col_character(), 
+            genre = col_character(), 
+            prenom = col_character(), 
+            date_naissance = col_datetime(), 
+            lieu_naissance = col_character(), 
+            circonscription = col_character(),
+            sycomore_id = col_character(), 
+            wikidata = col_character(),
+            frwiki = col_character()
+           )
+          ) %>% 
+   glimpse()
Observations: 575
Variables: 10
$ nom             <chr> "François Fillon", "François de Rugy", "Hervé Gaymard", "Aurélie Filipp...
$ genre           <chr> "masculin", "masculin", "masculin", "féminin", "féminin", "féminin", "m...
$ prenom          <chr> "François", "François", "Hervé", "Aurélie", "Delphine", "Marion", "Jacq...
$ nom_famille     <chr> "Fillon", "de Rugy", "Gaymard", "Filippetti", "Batho", "Maréchal-Le Pen...
$ date_naissance  <dttm> 1954-03-04, 1973-12-06, 1960-05-31, 1973-06-17, 1973-03-23, 1989-12-10...
$ lieu_naissance  <chr> "Le Mans", "Nantes", "Bourg-Saint-Maurice", "Villerupt", "Paris", "Sain...
$ circonscription <chr> "deuxième circonscription de Paris", "première circonscription de la Lo...
$ sycomore_id     <chr> "3009", "17282", "3322", "17302", "17264", "18477", "921", "17275", "47...
$ wikidata        <chr> "http://www.wikidata.org/entity/Q101410", "http://www.wikidata.org/enti...
$ frwiki          <chr> "https://fr.wikipedia.org/wiki/Fran%C3%A7ois%20Fillon", "https://fr.wik...

Notes et références[modifier | modifier le wikicode]

Voir aussi[modifier | modifier le wikicode]

  • anglais : readr sur tidyverse.org
  • anglais : data-import dans le livre R for Data Science de Garrett Grolemund et Hadley Wickham
  • Importer un fichier texte dans Introduction à l’analyse d’enquêtes avec R et RStudio