5.1 Importation des données

Il est possible d’encoder des très petits jeux de données dans R. La fonction dtx_rows() permet de le faire facilement. Notez que les noms des colonnes du tableau sont à rentrer sous forme de formules (~var), que chaque entrée est séparée par une virgule, et que les chaînes de caractères sont entourées de guillemets. Les espaces sont optionnels et peuvent être utilisés pour aligner les données afin que le tout soit plus lisible. Des commentaires peuvent être utilisés éventuellement en fin de ligne (un dièse # suivi du commentaire).

small_dataset <- dtx_rows(
  ~treatment, ~dose, ~response,
   "control",   0.5,     18.35,
   "control",   1.0,     26.43, # This value needs to be double-checked
   "control",   2.0,     51.08,
    "test"  ,   0.5,     10.29,
    "test"  ,   1.0,     19.92,
    "test"  ,   2.0,     41.06)
# Print the table
small_dataset
#    treatment dose response
# 1:   control  0.5    18.35
# 2:   control  1.0    26.43
# 3:   control  2.0    51.08
# 4:      test  0.5    10.29
# 5:      test  1.0    19.92
# 6:      test  2.0    41.06

Dans la plupart des cas, vous utiliserez ou collecterez des données stockées dans des formats divers : feuilles Excel, fichiers CSV (“comma-separated-values”, un format standard d’encodage d’un tableau de données sous forme textuelle), formats spécifiques à divers logiciels statistiques comme SAS, Stata, Systat… Ces données peuvent être sur un disque local ou disponibles depuis un lien URL sur le net18. De nombreuses fonctions existent dans R pour importer toutes ces données. La fonction read() du package {data.io} est l’une des plus simples et conviviales d’entre-elles. Vous l’avez déjà utilisée, mais reprenons un exemple pour en discuter les détails.

biometry <- read("biometry", package = "BioDataScience", lang = "fr")
tabularise$headtail(biometry)

Genre

Date de naissance

Masse [kg]

Taille [cm]

Tour de poignet [mm]

Année de la mesure

Age [année]

M

1995-03-11

69.0

182

15.0

2 013

18

M

1998-04-03

74.0

190

16.0

2 013

15

M

1967-04-04

83.0

185

17.5

2 013

46

M

1994-02-10

60.0

175

15.0

2 013

19

W

1990-12-02

48.0

167

14.0

2 013

23

...

...

...

...

...

...

M

1998-08-12

80.0

177

18.0

2 017

19

W

1999-08-12

67.3

173

15.0

2 017

18

M

1968-08-18

84.0

187

18.0

2 017

49

W

1971-08-18

64.9

166

15.0

2 017

46

M

1999-08-12

68.7

182

15.0

2 017

18

First and last 5 rows of a total of 395

Le jeu de données biometry est disponible dans le package R {BioDataScience} indiqué dans l’argument package =. Dans ce cas, il ne faut pas spécifier de chemin d’accès au fichier : R sait où le trouver tout seul. Il est également spécifié ici que la langue souhaitée est le français avec l’argument lang = "fr". Le résultat de l’importation est assigné à la variable biometry(mais elle pourrait tout aussi bien porter un autre nom). Pour finir, visualisez le résultat de l’importation, ici en faisant un tableau des premières et dernières lignes avec tabularise$headtail().

Visualisez toujours votre tableau de données juste après l’importation pour vérifier que l’opération s’est bien déroulée. Vérifiez que les différentes colonnes ont été importées au bon format. Vous pouvez ouvrir l’onglet Environnement de RStudio et cliquer sur la petite icône bleue devant le nom de l’objet pour voir de quoi il est composé. En particulier,

  • Les données numériques sont-elle bien comprises par R comme des nombres (<num>, <dbl> ou <int>) ?

  • Les variables qualitatives ou semi-quantitatives sont parfois importées comme chaînes de caractères (<chr>) et doivent éventuellement être converties en variables de type facteur à l’aide de as.factor() ou facteur ordonné avec as.ordered(), voir plus loin.

L’impression du tableau de données est une façon de voir cela, mais il y en a bien d’autres : essayez View(biometry), glimpse(biometry), str(biometry), skimr::skim(biometry).

Avant d’importer vos données dans R, vous devez vous poser les deux questions suivantes :

  • Où ces données sont-elles stockées ?

Vous venez d’importer des données depuis un package R. Vous pouvez également les lire depuis un fichier sur le disque ou en utilisant une URL pour les récupérer depuis le Web. Tous ces cas sont gérés par read() qui unifie donc de manière simple vos accès aux données.

  • Quel est le format de vos données ?

Souvent ce format est renseigné par l’extension du fichier. Par exemple .xlsx pour un Microsoft Excel ou .csv pour du “comma-separated-value”. Attention ! L’extension du fichier est cachée sous Windows, et parfois sous macOS. Visualisez vos fichiers dans l’onglet Files dans RStudio pour voir leurs noms complets avec les extensions. Pour l’instant, read() supporte 32 formats de fichiers différents, mais cette liste est amenée à s’agrandir à l’avenir. Pour découvrir les formats supportés, et les fonctions d’importation spécifiques appelées à chaque fois, utilisez :

getOption("read_write")
# # A tibble: 32 × 5
#    type  read_fun             read_header         write_fun              comment
#    <chr> <chr>                <chr>               <chr>                  <chr>  
#  1 csv   readr::read_csv      data.io::hread_text readr::write_csv       comma …
#  2 csv2  readr::read_csv2     data.io::hread_text <NA>                   semico…
#  3 xlcsv readr::read_csv      data.io::hread_text readr::write_excel_csv write …
#  4 tsv   readr::read_tsv      data.io::hread_text readr::write_tsv       tab se…
#  5 fwf   readr::read_fwf      data.io::hread_text <NA>                   fixed …
#  6 log   readr::read_log      <NA>                <NA>                   standa…
#  7 rds   readr::read_rds      <NA>                readr::write_rds       R data…
#  8 txt   readr::read_file     <NA>                readr::write_file      text f…
#  9 raw   readr::read_file_raw <NA>                <NA>                   binary…
# 10 ssv   readr::read_table    data.io::hread_text <NA>                   space …
# # ℹ 22 more rows

Par la suite, vous allez apprendre à importer vos données depuis différentes sources.

5.1.1 Données sur le disque

Lorsque l’extension du fichier reflète le format des données, il vous suffit juste d’indiquer le chemin d’accès au fichier dans read(), en utilisant préférentiellement un chemin relatif. La plupart du temps, cela suffira pour importer correctement les données.

Très important : le chemin d’accès à votre fichier peut s’écrire de manière absolue (chemin partant de la racine d’un disque sous Windows ou de la hiérarchie de dossiers sous macOS ou Linux) ou bien de manière relative (par rapport au dossier courant, la plupart du temps, le dossier du projet dans RStudio). Vous devez autant que possible employer des chemins relatifs pour que votre projet soit portable. Si vous avez du mal à déterminer le chemin relatif par rapport à vos données, le snippet filerelchoose vous sera très utile :

  1. Assurez-vous que le chemin actif dans l’onglet Console est (A) le dossier racine de votre projet RStudio, ou si vous travaillez dans un fichier Quarto ou R Markdown, (B) le même que le répertoire contenant le fichier édité. Pour cela, utilisez l’entrée de menu RStudio Session -> Définir le répertoire de travail -> Vers le répertoire du projet (situation A) ou Session -> Définir le répertoire de travail -> Vers l’emplacement du fichier source (situation B).

  2. Utilisez le snippet filerelchoose que vous activez dans une zone de code R (dans un script R, ou à l’intérieur d’un chunk dans un document Quarto/R Markdown). Entrez file, attendez que le menu contextuel de complétion apparaisse, sélectionnez filerelchoose dans la liste et tapez Entrée. Une boite de dialogue de sélection de fichier apparaît. Sélectionnez le fichier qui vous intéresse et … file est remplacé par le chemin relatif vers votre fichier dans l’éditeur.

Les explications détaillées concernant l’organisation de vos projets dans RStudio pour qu’ils soient portables, la gestion des chemins d’accès aux fichiers et les chemins relatifs sont détaillés dans l’annexe B, à la section B.1.1. C’est le moment de vérifier que vous avez bien compris et assimilé son contenu.

À vous de jouer !
h5p
Pièges et astuces
  • Si l’extension est incorrecte, vous pouvez forcer un format de fichier particulier à l’importation en l’indiquant dans l’appel à read() comme read$<ext>(). Par exemple, pour forcer l’importation d’un fichier de type “comma-separated-values” pour un fichier qui se nommerait my_data.txt et qui se situe dans le répertoire courant, vous écrirez read$csv("my_data.txt").

  • Si les données ne sont pas importées correctement, cela signifie que les arguments d’importation par défaut ne sont pas adaptés. Les arguments à spécifier sont différents d’un format à l’autre. Voyez d’abord la fonction appelée en interne par read()dans le tableau obtenu via getOption("read_write"). Par exemple, pour un fichier xlsx, il s’agit de la fonction readxl::read_excel() qui est utilisée. Ensuite, voyez l’aide de cette dernière fonction pour en découvrir les différents arguments (?readxl::read_excel). Là, vous pourrez découvrir l’argument sheet = qui indique la feuille à importer depuis le fichier (première feuille par défaut), ou range = qui indique la plage de données dans la feuille à utiliser (par défaut, depuis la cellule A1 en haut à gauche jusqu’à la fin du tableau). Donc, si votre fichier my_data.xlsx contient les feuilles sheet1, sheet2 et sheet3, et que les données qui vous intéressent sont dans la plage C5:E34 de sheet2, vous pourrez écrire : read("my_data.xlsx", sheet = "sheet2", range = "C5:E34").

5.1.2 Données depuis Internet

Il existe différents logiciels qui permettent d’éditer des jeux de données en ligne et de les partager sur le Net. Google Sheets est l’un d’entre eux, tout comme Excel Online. Des stockages spécifiques pour les données scientifiques existent aussi comme Figshare ou Zenodo. Ces sites permettent de partager facilement des jeux de données sur Internet.

La science est de plus en plus ouverte, et les pratiques de données ouvertes (Open Data) de plus en plus fréquentes et même imposées par des programmes de recherche comme les programmes européens ou le FNRS en Belgique. Vous serez donc certainement amenés à accéder à des données depuis des dépôts spécialisés sur Internet.

Concentrez-vous sur les outils spécifiques à la gestion de ce type de données. il s’agit, en effet, d’une compétence clé qu’un bon scientifique des données se doit de maîtriser parfaitement. En recherchant à chaque fois la meilleure façon d’accéder à des données sur Internet, vous développerez cette compétence progressivement par la pratique… et vous pourrez faire valoir un atout encore rare mais apprécié lors d’un entretien d’embauche plus tard.

Voici un exemple de feuille de données Google Sheets : https://docs.google.com/spreadsheets/d/1iEuGrMk4IcCkq7gMNzy04DkSaPeWH35Psb0E56KEQMw. Il est possible d’importer ce genre de données directement depuis R, mais il faut d’abord déterminer l’URL à utiliser pour obtenir les données dans un format reconnu. Dans le cas de Google Sheets, il suffit d’indiquer que l’on souhaite exporter les données au format CSV en rajoutant /export?format=csv à la fin de l’URL.

Cette URL est très longue. Elle est peu pratique et par ailleurs, elle a toujours la même structure : "https://docs.google.com/spreadsheets/d/{id}/export?format=csv" avec {id} qui est l’identifiant unique de la feuille Google Sheets (ici 1iEuGrMk4IcCkq7gMNzy04DkSaPeWH35Psb0E56KEQMw). Vous pouvez indiquer explicitement ceci dans votre code et profiter des capacités de remplacement de texte dans des chaînes de caractères de la fonction glue::glue() pour effectuer un travail impeccable.

googlesheets_as_csv <- "https://docs.google.com/spreadsheets/d/{id}/export?format=csv"
coral_data_id <- "1iEuGrMk4IcCkq7gMNzy04DkSaPeWH35Psb0E56KEQMw"
(coral_url <- glue::glue(googlesheets_as_csv, id = coral_data_id))
# https://docs.google.com/spreadsheets/d/1iEuGrMk4IcCkq7gMNzy04DkSaPeWH35Psb0E56KEQMw/export?format=csv

Vous n’aurez alors plus qu’à lire les données depuis cette URL. N’oubliez pas non plus de spécifier à read() que les données sont à lire au format CSV en utilisant read$csv() :

coral <- read$csv(coral_url)
# Rows: 98 Columns: 9
# ── Column specification ────────────────────────────────────────────────────────
# Delimiter: ","
# chr  (2): localisation, species
# dbl  (6): id, salinity, temperature, time, gain, gain_std
# dttm (1): date
# 
# ℹ Use `spec()` to retrieve the full column specification for this data.
# ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
tabularise$headtail(coral)

localisation

species

id

salinity

temperature

date

time

gain

gain_std

A0

s.hystrix

1

34.7

24.5

2018-04-24 09:10:00

7

0.08

0.05897017

A0

s.hystrix

2

34.7

24.5

2018-04-24 09:10:00

7

0.06

0.03669477

A0

s.hystrix

3

34.7

24.5

2018-04-24 09:10:00

7

0.03

0.01904207

A0

s.hystrix

4

34.7

24.5

2018-04-24 09:10:00

7

0.11

0.04722930

A0

s.hystrix

5

34.7

24.5

2018-04-24 09:10:00

7

0.12

0.06810833

...

...

...

...

...

...

...

...

B0

s.hystrix

96

35.0

25.2

2018-03-19 13:03:00

7

0.07

0.05942559

B0

s.hystrix

97

35.0

25.2

2018-03-19 13:03:00

7

0.05

0.04447699

B0

s.hystrix

98

35.0

25.2

2018-03-19 13:03:00

7

0.09

0.05969835

B0

s.hystrix

99

35.0

25.2

2018-03-19 13:03:00

7

0.06

0.05176493

B0

s.hystrix

100

35.0

25.2

2018-03-19 13:03:00

7

0.10

0.07131212

First and last 5 rows of a total of 98

Lorsque vous travaillez sur des données issues d’une source externe, et donc susceptibles d’être modifiées ou même pire, de disparaître. Il est préférable d’enregistrer une copie locale de ces données dans votre projet (dans le sous-dossier data de préférence). Si vous voulez enregistrer une copie locale du fichier non modifié téléchargé depuis Internet, vous l’indiquez dans l’argument cache_file = de read() (pensez à utiliser autant que possible un chemin relatif). Ainsi, le code suivant ne téléchargera le fichier depuis Internet qu’une seule fois et en sauvera automatiquement une copie dans data/coral.csv. Ensuite, les exécutions suivantes du même code liront les données depuis la version du jeu de données sauvée en local dans data/coral.csv.

(coral <- read$csv(coral_url, cache_file = "data/coral.csv"))

Faites bien attention que le dossier dans lequel vous souhaitez stocker une copie de vos données doit être présent sur votre disque. Dans le cas contraire, un message d’erreur sera généré et vous ne pourrez pas importer les données.

Vous pouvez aussi vous passer de cette fonctionnalité, mais importer vos données dans un script à part qui remanie aussi ces données à la suite. Vous pouvez alors terminer ce script en écrivant les données remaniées dans un dossier local. Si vous travaillez exclusivement avec R, l’un des meilleurs formats est RDS, un format natif qui conservera toutes les caractéristiques de votre objet, y compris sa classe, et d’éventuels attributs19. Par défaut, les données seront stockées non compressées, mais vous pourrez aussi décider de compresser avec les algorithmes "gz" (plus rapide et répandu), "bz2" (intermédiaire), ou "xz" (le plus efficace en taux de compression, mais aussi le plus lent et gourmand en ressources CPU). Par exemple, pour enregistrer les données avec compression "gz", dans le sous-dossier data de votre projet, vous écrirez (le dossier data doit être préexistant) :

write$rds(coral, file = "data/coral.rds", compress = "gz")

Cette instruction est valable si elle est exécutée depuis un script R dans la fenêtre Console où le répertoire actif est le dossier racine du projet. Pour une instruction dans un document Quarto ou R Markdown présent dans un sous-dossier du projet, vous écrirez file = "../data/coral.rds". Dans les deux cas, vous pouvez aussi utiliser file = here:here("data", "coral.rds") qui fonctionnera dans tous les cas de figure (conseillé, donc). Cette forme est également utilisable pour cache_file = dans read(). Ensuite, vous pourrez simplement charger ces données plus loin depuis la version locale dans votre Quarto ou R Markdown comme ceci (cas d’un document Quarto dans un sous-dossier du projet, par exemple docs) :

coral <- read("../data/coral.rds")

Attention, ne supprimez jamais l’instruction permettant de retrouver vos données sur Internet sous prétexte que vous avez maintenant une copie locale à disposition. C’est le lien, le fil conducteur vers les données originales. Vous pouvez soit mettre l’instruction en commentaire en ajoutant un dièse devant, soit soustraire le chunk de l’évaluation en indiquant eval=FALSE dans son entête. Faites-en de même avec l’instruction write(). Ainsi, le traitement de vos données commencera à l’instruction read() et vous partirez de la copie locale. Si jamais vous voulez effectuer une mise à jour depuis la source initiale, il sera toujours possible de dé-commenter les instructions, ou de passer le chunk à eval=TRUE temporairement (ou encore plus simplement, forcez l’exécution du chunk dans l’éditeur en cliquant sur la petite flèche verte en haut à gauche de ce chunk).

Pièges et astuces
  • Comme il s’agit seulement d’une copie des données originelles, vous pouvez choisir de ne pas inclure le fichier .rds dans le système de gestion de version de Git. Il suffit d’ajouter une entrée .rds dans le fichier .gitignore à la racine de votre dépôt, et tous les fichiers avec cette extension seront ignorés. Notez toutefois que, si vous partagez votre projet sur GitHub, les données locales n’y apparaîtront pas non plus. D’une part, cela décharge le système de gestion de version, et d’autre part, les gros fichiers de données n’ont pas vraiment leur place dans GitHub. Cependant, soyez conscient que quelqu’un qui réalise un clone ou un fork de votre dépôt devra d’abord réimporter lui aussi localement les données avant de pouvoir travailler, ce qui implique de bien comprendre le mécanisme que vous avez mis en place. Documentez-le correctement, avec une note explicite dans le fichier README.md, par exemple.

  • Les données originales ne sont peut-être pas présentées de la façon qui vous convient. Cela peut nécessiter un travail important de préparation du tableau de données. Au fur et à mesure que le ou les chunks d’importation/préparation des données augmentent en taille, ils deviennent de plus en plus gênants dans un document consacré à l’analyse de ces données. Si c’est le cas, vous avez deux options possibles :

    1. Séparer votre Quarto/R Markdown en deux. Un premier document dédié à l’importation/préparation des données et un second qui se concentre sur l’analyse. Une bonne pratique consiste à numéroter les fichiers en tête pour qu’ils apparaissent par ordre logique lorsqu’ils sont listés par ordre alphabétique (01import.qmd, 02analysis.qmd).
    2. Effectuer le travail d’importation/préparation du tableau de données dans un script R. Dans le R Markdown, vous pouvez ajouter l’instruction (commentée ou placée dans un chunk eval=FALSE) pour “sourcer” ce script R afin de réimporter/retraiter vos données (ici, cas d’un fichier Quarto qui se situerait dans un sous-dossier docs) :
    #source("../R/data-import.R")

    Si le travail de préparation des données est lourd (et donc, prends beaucoup de temps) il peut être avantageux d’enregistrer localement la version nettoyée de vos données plutôt que la version originale. Mais alors, indiquez-le explicitement.

Faites toujours la distinction entre données brutes et données nettoyées. Ne les mélangez jamais et documentez toujours de manière reproductible le processus qui mène des unes aux autres ! C’est tout aussi important que de garder un lien vers la source originale des données dans votre code et d’utiliser toujours des chemins relatifs vers vos fichiers pour une analyse portable et reproductible.

Nous vous conseillons de placer la version brute des données dans le sous-dossier data/raw et la version nettoyée dans le sous-dossier data de votre projet RStudio. Ainsi, la structure des dossiers est elle-même très suggestive.

À vous de jouer !
h5p

5.1.3 Données depuis un package

Les packages R comme {data.io}, {chart} ou encore {svFlow}, fournissent une série de fonctions supplémentaires. Certains d’entre eux proposent également des jeux de données. Ici aussi, read() permet de les récupérer, même si c’est la fonction data() qui est souvent utilisée à cet effet dans R. Comparons read() et data() dans le cas des données issues de packages R. Avec data(), vous n’assignez pas le jeu de données à un nom. Ce nom vous est imposé comme le nom initial du jeu de données :

data("urchin_bio", package = "data.io")

Le jeu de données urchin_bio n’est pas véritablement chargé dans l’environnement utilisateur avec data(). Seulement une “promesse” de chargement (Promise) est enregistrée. Voyez dans l’onglet Environnement ce qui apparaît. Ce n’est qu’à la première utilisation du jeu de données que le tableau est véritablement chargé. Par exemple :

head(urchin_bio)
#    origin diameter1 diameter2 height buoyant_weight weight solid_parts
# 1 Fishery       9.9      10.2    5.0             NA 0.5215      0.4777
# 2 Fishery      10.5      10.6    5.7             NA 0.6418      0.5891
# 3 Fishery      10.8      10.8    5.2             NA 0.7336      0.6770
# 4 Fishery       9.6       9.3    4.6             NA 0.3697      0.3438
# 5 Fishery      10.4      10.7    4.8             NA 0.6097      0.5587
# 6 Fishery      10.5      11.1    5.0             NA 0.6096      0.5509
#   integuments dry_integuments digestive_tract dry_digestive_tract gonads
# 1      0.3658              NA          0.0525              0.0079      0
# 2      0.4447              NA          0.0482              0.0090      0
# 3      0.5326              NA          0.0758              0.0134      0
# 4      0.2661              NA          0.0442              0.0064      0
# 5      0.4058              NA          0.0743              0.0117      0
# 6      0.4269              NA          0.0492              0.0097      0
#   dry_gonads skeleton lantern   test spines maturity  sex
# 1          0   0.1793  0.0211 0.0587 0.0995        0 <NA>
# 2          0   0.1880  0.0205 0.0622 0.1053        0 <NA>
# 3          0   0.2354  0.0254 0.0836 0.1263        0 <NA>
# 4          0   0.0630  0.0167 0.0180 0.0283        0 <NA>
# 5          0       NA      NA     NA     NA        0 <NA>
# 6          0       NA      NA     NA     NA        0 <NA>

Regardez à nouveau dans l’onglet Environnement. Ce coup-ci urchin_bio apparaît bien dans la section Data et l’icône en forme de petit tableau à la droite qui permet de le visualiser est enfin accessible.

La fonction read() permet de choisir librement le nom que nous souhaitons donner à notre jeu de données. Si nous voulons l’appeler urchin au lieu de urchin_bio, pas de problèmes. De plus, il est directement chargé et accessible dans l’onglet Environnement (en effet, si on utilise une instruction qui charge un jeu de données, c’est très vraisemblablement parce que l’on souhaite ensuite le manipuler depuis R, non ?)

urchin <- read("urchin_bio", package = "data.io")

Nous avons déjà vu que read() donne accès également dans certains cas à des métadonnées (par exemple le label et les unités des jeux de données) dans différentes langues, ce que ne permet pas data(). Enfin, la syntaxe et la fonction utilisée sont pratiquement identiques pour charger des données depuis un fichier, depuis Internet ou depuis un package avec read(). C’est logique et facile à retenir. data() ne permet que de récupérer des données liées à un package R, et c’est tout ! Pour toutes ces raisons, nous préférons utiliser ici read() à data().

5.1.3.1 Langue du jeu de données

La fonction read() est également capable de lire un fichier annexe permettant de rajouter des métadonnées (données complémentaires) à notre tableau, comme les labels et les unités des variables en différentes langues. Lorsque le jeu de données est importé avec la fonction data(), ces métadonnées ne sont pas employées.

data("urchin_bio", package = "data.io")
# Visualisation des données
chart(urchin_bio, height ~ weight %col=% origin) +
  geom_point()

Comparez ceci avec le même graphique, mais obtenu à partir de différentes versions du jeu de données urchin_bio importé à l’aide de read() avec des valeurs différentes pour l’argument lang =.

urchin    <- read("urchin_bio", package = "data.io") # langage par défaut défini dans SciViews::R()
urchin_en <- read("urchin_bio", package = "data.io", lang = "en")
urchin_fr <- read("urchin_bio", package = "data.io", lang = "fr")
urchin_FR <- read("urchin_bio", package = "data.io", lang = "FR")

Les différences dans les labels sont observables sur le graphique ci-dessous.

a <- chart(urchin,    height ~ weight %col=% origin) +
  geom_point()
b <- chart(urchin_en, height ~ weight %col=% origin) +
  geom_point()
c <- chart(urchin_fr, height ~ weight %col=% origin) +
  geom_point()
d <- chart(urchin_FR, height ~ weight %col=% origin) +
  geom_point()

combine_charts(list(a, b, c, d))

  • a & b : l’argument lang = par défaut est lang = "en". Il utilise les labels et unités en anglais avec les unités dans le système international.
  • c : l’argument lang = "fr" utilise les labels et unités en français. Il laisse cependant les niveaux des variables facteurs en anglais (Farm et Fishery) afin d’éviter de devoir changer les instructions de manipulation des données qui feraient référence à ces niveaux.
  • d : l’argument lang = "FR" ajoute les labels et unités en français. De plus, il traduit également les niveaux des variables facteurs (Culture et Pêcherie).

Il vous est conseillé d’employer l’argument lang = "fr" lors de vos différents travaux. La langue internationale en science est l’anglais et vous serez très certainement amené dans votre carrière scientifique à produire des documents en français et en anglais. L’utilisation de lang = "fr"rend le même code réutilisable sur la version française ou anglaise, contrairement à lang = "FR". Observez les exemples ci-dessous.

urchin_en %>.%
  sfilter(., origin == "Farm") %>.%
  head(.)
#    origin diameter1 diameter2 height buoyant_weight weight solid_parts
# 1:   Farm      53.1      54.5   26.3         9.5707  60.21       41.72
# 2:   Farm      52.7      52.7   25.9        10.8380  63.23       46.58
# 3:   Farm      54.0      54.2   24.5        10.6961  64.35       44.26
# 4:   Farm      51.1      51.3   28.8        11.2132  62.45       44.99
# 5:   Farm      52.1      53.6   31.2        11.0814  63.67       44.01
# 6:   Farm      52.3      51.4   28.6        12.3791  68.62       53.88
#    integuments dry_integuments digestive_tract dry_digestive_tract gonads
# 1:       31.13           16.59            4.32                0.50   5.75
# 2:       29.91           17.83            5.83                0.59   9.97
# 3:       30.16           17.50            4.05                0.53   8.80
# 4:       30.91           18.23            5.63                0.74   7.60
# 5:       32.53           18.52            6.53                0.69   4.36
# 6:       33.72           20.05            8.42                0.87   9.92
#    dry_gonads skeleton lantern test spines maturity sex
# 1:       1.85    14.65    0.93 6.87   6.85        1   M
# 2:       3.03    16.09    1.02 7.48   7.59        2   F
# 3:       2.87    15.67    0.91 6.94   7.82        0   M
# 4:       2.55    16.63    1.08 6.62   8.93        0   M
# 5:       1.46       NA      NA   NA     NA        0   M
# 6:       3.35       NA      NA   NA     NA        0   F
urchin_fr %>.%
  sfilter(., origin == "Farm") %>.%
  head(.)
#    origin diameter1 diameter2 height buoyant_weight weight solid_parts
# 1:   Farm      53.1      54.5   26.3         9.5707  60.21       41.72
# 2:   Farm      52.7      52.7   25.9        10.8380  63.23       46.58
# 3:   Farm      54.0      54.2   24.5        10.6961  64.35       44.26
# 4:   Farm      51.1      51.3   28.8        11.2132  62.45       44.99
# 5:   Farm      52.1      53.6   31.2        11.0814  63.67       44.01
# 6:   Farm      52.3      51.4   28.6        12.3791  68.62       53.88
#    integuments dry_integuments digestive_tract dry_digestive_tract gonads
# 1:       31.13           16.59            4.32                0.50   5.75
# 2:       29.91           17.83            5.83                0.59   9.97
# 3:       30.16           17.50            4.05                0.53   8.80
# 4:       30.91           18.23            5.63                0.74   7.60
# 5:       32.53           18.52            6.53                0.69   4.36
# 6:       33.72           20.05            8.42                0.87   9.92
#    dry_gonads skeleton lantern test spines maturity sex
# 1:       1.85    14.65    0.93 6.87   6.85        1   M
# 2:       3.03    16.09    1.02 7.48   7.59        2   F
# 3:       2.87    15.67    0.91 6.94   7.82        0   M
# 4:       2.55    16.63    1.08 6.62   8.93        0   M
# 5:       1.46       NA      NA   NA     NA        0   M
# 6:       3.35       NA      NA   NA     NA        0   F

Pas d’adaptation nécessaire du code pour passer de urchin_en à urchin_fr.

urchin_FR %>.%
  sfilter(., origin == "Pêcherie") %>.%
  head(.)
#      origin diameter1 diameter2 height buoyant_weight weight solid_parts
# 1: Pêcherie       9.9      10.2    5.0             NA 0.5215      0.4777
# 2: Pêcherie      10.5      10.6    5.7             NA 0.6418      0.5891
# 3: Pêcherie      10.8      10.8    5.2             NA 0.7336      0.6770
# 4: Pêcherie       9.6       9.3    4.6             NA 0.3697      0.3438
# 5: Pêcherie      10.4      10.7    4.8             NA 0.6097      0.5587
# 6: Pêcherie      10.5      11.1    5.0             NA 0.6096      0.5509
#    integuments dry_integuments digestive_tract dry_digestive_tract gonads
# 1:      0.3658              NA          0.0525              0.0079      0
# 2:      0.4447              NA          0.0482              0.0090      0
# 3:      0.5326              NA          0.0758              0.0134      0
# 4:      0.2661              NA          0.0442              0.0064      0
# 5:      0.4058              NA          0.0743              0.0117      0
# 6:      0.4269              NA          0.0492              0.0097      0
#    dry_gonads skeleton lantern   test spines maturity  sex
# 1:          0   0.1793  0.0211 0.0587 0.0995        0 <NA>
# 2:          0   0.1880  0.0205 0.0622 0.1053        0 <NA>
# 3:          0   0.2354  0.0254 0.0836 0.1263        0 <NA>
# 4:          0   0.0630  0.0167 0.0180 0.0283        0 <NA>
# 5:          0       NA      NA     NA     NA        0 <NA>
# 6:          0       NA      NA     NA     NA        0 <NA>

Le code a dû être modifié dans l’instruction sfilter() lors du passage à urchin_FR (Farm -> Pêcherie). Bien évidemment, pour un rapport plus formel en français, tout doit être traduit en français et l’option lang = "FR" accompagnée d’une vérification et une adaptation éventuelle du code est à préférer dans ce cas précis.

À vous de jouer !
h5p

  1. R permet également d’interroger des bases de données spécialisées, mais nous n’aborderons ce sujet spécifique qu’au cours de Science des Données Biologiques II en dernière année de Bachelier.↩︎

  2. Si vous devez aussi accéder à vos données à partir d’autres langages comme Python, Java ou C++, utilisez un format commun reconnu par les différents logiciels. Le CSV fonctionne généralement bien, mais des formats binaires plus performants sont également disponibles. Parmi ces formats “inter-langages”, gardez un œil sur Apache Arrow qui offre des possibilités très intéressantes d’intercompatibilité de performance.↩︎