library(tidyverse)

Le jeu de données utilisé pour ce TD est msleep, un ensemble de données sur le sommeil des mammifères.

Première partie : Visualisations graphiques avec ggplot2

Visualisation d’un variable continue

  1. Tracez l’histogramme de la variable awake (temps d’éveil par jour, en heures) avec geom_histogram()

  1. Ajoutez l’information du régime alimentaire avec l’argument fill = vore. Que constatez-vous ?

  1. Tracez la courbe de densité avec geom_density pour chaque catégorie de régime alimentaire avec facet_wrap

Note : il est possible de dissocier les valeurs de l’axe des y dans les différentes facets avec l’argument scales = "free_y"

Visualisation d’un variable catégorielle

  1. Tracez le nombre de mamifères appartenant à chaque régime alimentaire sous forme de barplot avec geom_bar()

  1. Ajoutez l’information concernant le statut de conservation de l’animal (risque d’extinction, https://en.wikipedia.org/wiki/Conservation_status) donné par la variable conservation

  1. Dans geom_bar, que change l’argument position = "dodge" ou bien position = "fill" ?

Visualisation de deux variables continues

  1. Tracez le temps d’eveil (awake) en fonction du temps de sommeil paradoxal (sleep_rem)

  1. Améliorez le graphique en ajoutant l’information sur le régime alimentaire et sur du poids corporel (bodywt : body weight) avec les arguments color et size

  1. Tracez le poids du cerveau (brainwt) en fonction du temps de sommeil total (sleep_total). Le graphique est plus clair avec une échelle log pour l’axe des ordonnées (scale_y_log10()). Ajoutez une courbe de lissage avec stat_smooth().

Visualisation de la relation entre une variable continue et une variable catégorielle

  1. Tracez les boxplots suivants avec geom_boxplot. Le titre du graphe se modifie avec labs(title = "Titre du graphe"), ceux des axes avec xlab("label pour x") et ylab("label pour y")

Sauvegarde des figures

La fonction ggsave envoie le dernier graphe dans un fichier, avec le format correct en fonction de l’extension de fichier donnée (par exemple gif, png, jpg, pdf, eps).

ggsave(filename = "Boxplot.jpg")

On peut modifier la taille et la résolution de l’image :

ggsave(filename = "Boxplot-large.jpg", width = 8, height = 4)
ggsave(filename = "Boxplot-large-HD.jpg", width = 8, height = 4, dpi = 300)

Deuxième partie : Manipulation des données avec dplyr

  1. Avec la fonction filter(), trouvez les 8 mamifères qui dorment plus de 16 heures par jour
## # A tibble: 8 x 11
##   name  genus vore  order conservation sleep_total sleep_rem sleep_cycle
##   <chr> <chr> <chr> <chr> <chr>              <dbl>     <dbl>       <dbl>
## 1 Owl … Aotus omni  Prim… <NA>                17         1.8      NA    
## 2 Long… Dasy… carni Cing… lc                  17.4       3.1       0.383
## 3 Nort… Dide… omni  Dide… lc                  18         4.9       0.333
## 4 Big … Epte… inse… Chir… lc                  19.7       3.9       0.117
## 5 Thic… Lutr… carni Dide… lc                  19.4       6.6      NA    
## 6 Litt… Myot… inse… Chir… <NA>                19.9       2         0.2  
## 7 Gian… Prio… inse… Cing… en                  18.1       6.1      NA    
## 8 Arct… Sper… herbi Rode… lc                  16.6      NA        NA    
## # … with 3 more variables: awake <dbl>, brainwt <dbl>, bodywt <dbl>
  1. Avec la fonction arrange(), triez les données par ordre taxonomique (order) puis par temps de sommeil croissant (sleep_total)
## # A tibble: 83 x 11
##    name  genus vore  order conservation sleep_total sleep_rem sleep_cycle
##    <chr> <chr> <chr> <chr> <chr>              <dbl>     <dbl>       <dbl>
##  1 Tenr… Tenr… omni  Afro… <NA>                15.6       2.3      NA    
##  2 Pig   Sus   omni  Arti… domesticated         9.1       2.4       0.5  
##  3 Goat  Capri herbi Arti… lc                   5.3       0.6      NA    
##  4 Cow   Bos   herbi Arti… domesticated         4         0.7       0.667
##  5 Sheep Ovis  herbi Arti… domesticated         3.8       0.6      NA    
##  6 Roe … Capr… herbi Arti… lc                   3        NA        NA    
##  7 Gira… Gira… herbi Arti… cd                   1.9       0.4      NA    
##  8 Tiger Pant… carni Carn… en                  15.8      NA        NA    
##  9 Lion  Pant… carni Carn… vu                  13.5      NA        NA    
## 10 Dome… Felis carni Carn… domesticated        12.5       3.2       0.417
## # … with 73 more rows, and 3 more variables: awake <dbl>, brainwt <dbl>,
## #   bodywt <dbl>
  1. Avec la fonction select(), sélectionnez les colonnes qui commencent par “sleep”
## # A tibble: 83 x 3
##    sleep_total sleep_rem sleep_cycle
##          <dbl>     <dbl>       <dbl>
##  1        12.1      NA        NA    
##  2        17         1.8      NA    
##  3        14.4       2.4      NA    
##  4        14.9       2.3       0.133
##  5         4         0.7       0.667
##  6        14.4       2.2       0.767
##  7         8.7       1.4       0.383
##  8         7        NA        NA    
##  9        10.1       2.9       0.333
## 10         3        NA        NA    
## # … with 73 more rows
  1. Avec l’opérateur %>%, enchainez les opérations suivantes : Sélectionnez les colonnes name, order et sleep_total, triez en fonction de orderpuis de sleep_total et enfin filtrer pour les mamifères dormant 16h ou plus.
## # A tibble: 8 x 3
##   name                   order           sleep_total
##   <chr>                  <chr>                 <dbl>
## 1 Big brown bat          Chiroptera             19.7
## 2 Little brown bat       Chiroptera             19.9
## 3 Long-nosed armadillo   Cingulata              17.4
## 4 Giant armadillo        Cingulata              18.1
## 5 North American Opossum Didelphimorphia        18  
## 6 Thick-tailed opposum   Didelphimorphia        19.4
## 7 Owl monkey             Primates               17  
## 8 Arctic ground squirrel Rodentia               16.6
  1. Avec la fonction mutate(), créez une nouvelle variable rem_proportion qui calcule la proportion de sommeil paradoxal (sleep_rem) par rapport au sommeil total (sleep_total)
## # A tibble: 83 x 4
##    name                       order        sleep_total rem_proportion
##    <chr>                      <chr>              <dbl>          <dbl>
##  1 Cheetah                    Carnivora           12.1         NA    
##  2 Owl monkey                 Primates            17            0.106
##  3 Mountain beaver            Rodentia            14.4          0.167
##  4 Greater short-tailed shrew Soricomorpha        14.9          0.154
##  5 Cow                        Artiodactyla         4            0.175
##  6 Three-toed sloth           Pilosa              14.4          0.153
##  7 Northern fur seal          Carnivora            8.7          0.161
##  8 Vesper mouse               Rodentia             7           NA    
##  9 Dog                        Carnivora           10.1          0.287
## 10 Roe deer                   Artiodactyla         3           NA    
## # … with 73 more rows

La fonction summarise() permet de calculer des statistiques récapitulatives sur le jeu de données. Ici par exemple, nous calculons le temps de sommeil moyen, le temps de sommeil minimal et le temps de sommeil maximal pour tous les animaux.

msleep %>% 
    summarise(avg_sleep = mean(sleep_total), 
              min_sleep = min(sleep_total),
              max_sleep = max(sleep_total),
              total = n())
## # A tibble: 1 x 4
##   avg_sleep min_sleep max_sleep total
##       <dbl>     <dbl>     <dbl> <int>
## 1      10.4       1.9      19.9    83
  1. Avec les fonctions group_by() et summarise() calculez, pour chaque ordre taxonomique : le nombre d’animaux, le temps de sommeil moyen, le temps de sommeil minimal et le temps de sommeil maximal.
## # A tibble: 19 x 5
##    order           total avg_sleep min_sleep max_sleep
##    <chr>           <int>     <dbl>     <dbl>     <dbl>
##  1 Afrosoricida        1     15.6       15.6      15.6
##  2 Artiodactyla        6      4.52       1.9       9.1
##  3 Carnivora          12     10.1        3.5      15.8
##  4 Cetacea             3      4.5        2.7       5.6
##  5 Chiroptera          2     19.8       19.7      19.9
##  6 Cingulata           2     17.8       17.4      18.1
##  7 Didelphimorphia     2     18.7       18        19.4
##  8 Diprotodontia       2     12.4       11.1      13.7
##  9 Erinaceomorpha      2     10.2       10.1      10.3
## 10 Hyracoidea          3      5.67       5.3       6.3
## 11 Lagomorpha          1      8.4        8.4       8.4
## 12 Monotremata         1      8.6        8.6       8.6
## 13 Perissodactyla      3      3.47       2.9       4.4
## 14 Pilosa              1     14.4       14.4      14.4
## 15 Primates           12     10.5        8        17  
## 16 Proboscidea         2      3.6        3.3       3.9
## 17 Rodentia           22     12.5        7        16.6
## 18 Scandentia          1      8.9        8.9       8.9
## 19 Soricomorpha        5     11.1        8.4      14.9

Troisième partie : Ranger des données avec tidyr

À paritr du jeu de données ìris

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

on veut obtenir le graphique suivant :

  1. En utilisant la fonction pivot_longer(), créez un jeu de données où les étiquettes Sepal.Length Sepal.Width Petal.Length Petal.Width sont bien rangées dans une colonne appelée Variables. Les mesures correspondantes sont rangées dans une colonne appelée Mesures.
## # A tibble: 6 x 3
##   Species Variables    Mesures
##   <fct>   <chr>          <dbl>
## 1 setosa  Sepal.Length     5.1
## 2 setosa  Sepal.Width      3.5
## 3 setosa  Petal.Length     1.4
## 4 setosa  Petal.Width      0.2
## 5 setosa  Sepal.Length     4.9
## 6 setosa  Sepal.Width      3
  1. À partir du jeu de données précédent, créez le boxplot attendu.

  2. Avec la fonction separate() séparez le data frame suivant en trois colonnes : Year, Month et Day

data.frame(Date = as.Date('2017-01-01') + 0:12)
##   Year Month Day
## 1 2017    01  01
## 2 2017    01  02
## 3 2017    01  03
## 4 2017    01  04
## 5 2017    01  05
## 6 2017    01  06