library(tidyverse)
library(palmerpenguins)
penguins <- na.omit(penguins)Solution pour TP 01
Créez un “chunk R” en dessous de ce texte en plaçant le curseur en dessous du texte et en cliquant sur “Insérer un nouveau chunk de code” (une icône blanche C avec un fond vert):
Ensuite, calculez 3 + 4. Pour « évaluer » (c.-à-d. exécuter le code), utilisez Ctrl + Entrée ou cliquez sur le triangle.
3 + 4[1] 7
Maintenant, nous pouvons avoir un premier aperçu des données. Je l’ai déjà chargé dans R, vous apprendrez comment le faire vous-même plus tard.
Les données s’appellent penguins. Il contient des données pour l’espèce, le sexe, la longueur du bec et la profondeur, le poids, etc. pour différents manchots. Nous utiliserons cela comme exemple. Vous pouvez en savoir plus sur les données ici.
Maintenant, pour voir les données, vous pouvez cliquer sur “manchots” dans l’onglet “Environnement”. Une vue de tableau s’ouvrira montrant toutes les données. Vous connaissez cela d’Excel. Mais c’est « en lecture seule », donc vous ne pouvez pas modifier les valeurs d’ici.
Maintenant, vous pouvez également utiliser le code R pour avoir une idée des données. Avec la fonction head(), les 6 premières lignes des données sont affichées.
Tâche 1
Utilisez le chunk de code R ci-dessous et remplacez ____ par le nom du cadre de données (penguins). Lorsque vous exécutez le chunk, vous verrez les premières lignes :
head(penguins)# A tibble: 6 × 8
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
<fct> <fct> <dbl> <dbl> <int> <int>
1 Adelie Torgersen 39.1 18.7 181 3750
2 Adelie Torgersen 39.5 17.4 186 3800
3 Adelie Torgersen 40.3 18 195 3250
4 Adelie Torgersen 36.7 19.3 193 3450
5 Adelie Torgersen 39.3 20.6 190 3650
6 Adelie Torgersen 38.9 17.8 181 3625
# ℹ 2 more variables: sex <fct>, year <int>
Vérification d’apprentissage 1 :
Que contient chaque ligne dans penguins ?
❌ A. Données pour tous les manchots sur une île spécifique, par exemple Biscoe
❌ B. Données pour tous les manchots d’une espèce, par exemple Adélie
✅ C. Données pour un seul manchot
Si vous voulez jeter un coup d’œil à une colonne, vous pouvez la sélectionner avec le symbole dollar $ : données$nom_colonne.
Tâche 2
Maintenant, essayez vous-même. Sélectionnez la colonne bill_length_mm du cadre de données penguins :
penguins$bill_length_mm [1] 39.1 39.5 40.3 36.7 39.3 38.9 39.2 41.1 38.6 34.6 36.6 38.7 42.5 34.4 46.0
[16] 37.8 37.7 35.9 38.2 38.8 35.3 40.6 40.5 37.9 40.5 39.5 37.2 39.5 40.9 36.4
[31] 39.2 38.8 42.2 37.6 39.8 36.5 40.8 36.0 44.1 37.0 39.6 41.1 36.0 42.3 39.6
[46] 40.1 35.0 42.0 34.5 41.4 39.0 40.6 36.5 37.6 35.7 41.3 37.6 41.1 36.4 41.6
[61] 35.5 41.1 35.9 41.8 33.5 39.7 39.6 45.8 35.5 42.8 40.9 37.2 36.2 42.1 34.6
[76] 42.9 36.7 35.1 37.3 41.3 36.3 36.9 38.3 38.9 35.7 41.1 34.0 39.6 36.2 40.8
[91] 38.1 40.3 33.1 43.2 35.0 41.0 37.7 37.8 37.9 39.7 38.6 38.2 38.1 43.2 38.1
[106] 45.6 39.7 42.2 39.6 42.7 38.6 37.3 35.7 41.1 36.2 37.7 40.2 41.4 35.2 40.6
[121] 38.8 41.5 39.0 44.1 38.5 43.1 36.8 37.5 38.1 41.1 35.6 40.2 37.0 39.7 40.2
[136] 40.6 32.1 40.7 37.3 39.0 39.2 36.6 36.0 37.8 36.0 41.5 46.1 50.0 48.7 50.0
[151] 47.6 46.5 45.4 46.7 43.3 46.8 40.9 49.0 45.5 48.4 45.8 49.3 42.0 49.2 46.2
[166] 48.7 50.2 45.1 46.5 46.3 42.9 46.1 47.8 48.2 50.0 47.3 42.8 45.1 59.6 49.1
[181] 48.4 42.6 44.4 44.0 48.7 42.7 49.6 45.3 49.6 50.5 43.6 45.5 50.5 44.9 45.2
[196] 46.6 48.5 45.1 50.1 46.5 45.0 43.8 45.5 43.2 50.4 45.3 46.2 45.7 54.3 45.8
[211] 49.8 49.5 43.5 50.7 47.7 46.4 48.2 46.5 46.4 48.6 47.5 51.1 45.2 45.2 49.1
[226] 52.5 47.4 50.0 44.9 50.8 43.4 51.3 47.5 52.1 47.5 52.2 45.5 49.5 44.5 50.8
[241] 49.4 46.9 48.4 51.1 48.5 55.9 47.2 49.1 46.8 41.7 53.4 43.3 48.1 50.5 49.8
[256] 43.5 51.5 46.2 55.1 48.8 47.2 46.8 50.4 45.2 49.9 46.5 50.0 51.3 45.4 52.7
[271] 45.2 46.1 51.3 46.0 51.3 46.6 51.7 47.0 52.0 45.9 50.5 50.3 58.0 46.4 49.2
[286] 42.4 48.5 43.2 50.6 46.7 52.0 50.5 49.5 46.4 52.8 40.9 54.2 42.5 51.0 49.7
[301] 47.5 47.6 52.0 46.9 53.5 49.0 46.2 50.9 45.5 50.9 50.8 50.1 49.0 51.5 49.8
[316] 48.1 51.4 45.7 50.7 42.5 52.2 45.2 49.3 50.2 45.6 51.9 46.8 45.7 55.8 43.5
[331] 49.6 50.8 50.2
Vous pourriez faire la même chose avec chacune des colonnes.
Pour en savoir plus sur les valeurs de cette colonne, vous pouvez combiner le $ avec les fonctions min(), max(), et mean() pour calculer les valeurs minimale, maximale et moyenne.
Tâche 3
Faites-le dans le chunk ci-dessous pour bill_length_mm :
min(penguins$bill_length_mm)[1] 32.1
max(penguins$bill_length_mm)[1] 59.6
mean(penguins$bill_length_mm)[1] 43.99279
Mais ce n’est pas très utile, car cela calcule les résumés sur toutes les données. Mais nous savons déjà qu’il y a différentes espèces de manchots dans l’ensemble de données. Il serait donc plus utile de connaître ces valeurs pour chaque espèce. Cela peut être fait en combinant des fonctions, ce que vous faites en R avec l’opérateur « pipe » %>%. Cela crée un flux d’opérations : d’abord faire cela, puis prendre le résultat et appliquer la fonction suivante à celui-ci.
Cela nous permet de calculer facilement les valeurs de résumé (min, max, moyenne) pour chaque espèce. Pour ce faire, nous devons d’abord regrouper les données par espèce, puis les résumer. Voir l’exemple ci-dessous.
Rappelez-vous que # commence un commentaire ! Tout ce qui suit # ne sera pas exécuté en tant que fonction en R. Je l’utilise ici pour décrire ce que chaque ligne de code (avant la #) le fait.
Notez que lorsque vous fournissez le cadre de données de cette façon (penguins %>%), les fonctions suivantes essaient de trouver les noms de colonnes que vous fournissez directement dans les données, vous n’avez pas besoin d’utiliser penguins$.
# A tibble: 3 × 2
species mean_bill_length_mm
<fct> <dbl>
1 Adelie 38.8
2 Chinstrap 48.8
3 Gentoo 47.6
Cette combinaison de fonctions est très flexible. Vous pouvez regrouper les données par plus de colonnes en ajoutant le nom de la colonne à group_by() (séparé par une virgule).
Tâche 4
Faites-le ci-dessous, et regroupez les données en outre par sex avant de calculer la moyenne :
`summarise()` has grouped output by 'species'. You can override using the
`.groups` argument.
# A tibble: 6 × 3
# Groups: species [3]
species sex mean_bill_length_mm
<fct> <fct> <dbl>
1 Adelie female 37.3
2 Adelie male 40.4
3 Chinstrap female 46.6
4 Chinstrap male 51.1
5 Gentoo female 45.6
6 Gentoo male 49.5
Vous pouvez également calculer d’autres résumés, en les ajoutant à la fonction summarize() (séparé par une virgule) :
penguins %>% # 1. Prendre l'ensemble de données des manchots
group_by(species) %>% # 2. Le regrouper par espèce
summarize(
mean_bill_length_mm = mean(bill_length_mm), # 3.1. créer une nouvelle colonne appelée "mean_bill_length_mm" et attribuer les valeurs moyennes de chaque groupe
min_bill_length_mm = min(bill_length_mm) # 3.2. créer une nouvelle colonne appelée "min_bill_length_mm" et attribuer les valeurs minimales de chaque groupe
)# A tibble: 3 × 3
species mean_bill_length_mm min_bill_length_mm
<fct> <dbl> <dbl>
1 Adelie 38.8 32.1
2 Chinstrap 48.8 40.9
3 Gentoo 47.6 40.9
Tâche 5
Maintenant, c’est à votre tour. Regroupez les données par species et sex et en plus de la valeur moyenne et minimale de bill_length_mm, calculez la valeur maximale. Indice : Si vous créez des colonnes en R, elles ne peuvent pas contenir d’espaces ni de traits d’union -.
penguins %>% # 1. Prendre l'ensemble de données des manchots
group_by(species, sex) %>% # 2. Le regrouper par espèce et sexe
summarize(
mean_bill_length_mm = mean(bill_length_mm), # 3.1. créer une nouvelle colonne appelée "mean_bill_length_mm" et attribuer les valeurs moyennes de chaque groupe
min_bill_length_mm = min(bill_length_mm), # 3.2. créer une nouvelle colonne appelée "min_bill_length_mm" et attribuer les valeurs minimales de chaque groupe
max_bill_length_mm = max(bill_length_mm) # 3.3. créer une nouvelle colonne appelée "max_bill_length_mm" et attribuer les valeurs maximales de chaque groupe
)`summarise()` has grouped output by 'species'. You can override using the
`.groups` argument.
# A tibble: 6 × 5
# Groups: species [3]
species sex mean_bill_length_mm min_bill_length_mm max_bill_length_mm
<fct> <fct> <dbl> <dbl> <dbl>
1 Adelie female 37.3 32.1 42.2
2 Adelie male 40.4 34.6 46
3 Chinstrap female 46.6 40.9 58
4 Chinstrap male 51.1 48.5 55.8
5 Gentoo female 45.6 40.9 50.5
6 Gentoo male 49.5 44.4 59.6
Une autre fonction très utile en R est filter(). Comme son nom le suggère, il vous permet de filtrer les données.
Par exemple, je filtre le cadre de données des manchots pour l’espèce « Adélie ».
# A tibble: 146 × 8
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
<fct> <fct> <dbl> <dbl> <int> <int>
1 Adelie Torgersen 39.1 18.7 181 3750
2 Adelie Torgersen 39.5 17.4 186 3800
3 Adelie Torgersen 40.3 18 195 3250
4 Adelie Torgersen 36.7 19.3 193 3450
5 Adelie Torgersen 39.3 20.6 190 3650
6 Adelie Torgersen 38.9 17.8 181 3625
7 Adelie Torgersen 39.2 19.6 195 4675
8 Adelie Torgersen 41.1 17.6 182 3200
9 Adelie Torgersen 38.6 21.2 191 3800
10 Adelie Torgersen 34.6 21.1 198 4400
# ℹ 136 more rows
# ℹ 2 more variables: sex <fct>, year <int>
Avez-vous remarqué que j’ai utilisé ==? Cela indique à R de faire une comparaison ; après la fonction de filtre, seules les lignes pour lesquelles l’entrée dans la colonne species est égale à « Adélie » seront conservées. L’opposé, si vous voulez filtrer certaines espèces, se fait avec != (« n’est pas égal à »). Vous remarquez également que j’utilise les guillemets ". Cela indique à R qu’il s’agit du texte que vous recherchez, et non du nom d’une fonction ou d’un objet.
Il est important que de cette façon, vous ne montriez que le cadre de données filtré ; les données originales (celles que vous voyez dans l’onglet environnement) restent inchangées. Si vous voulez enregistrer un sous-ensemble d’un cadre de données sous un nouveau nom, vous pouvez utiliser <- :
Si vous exécutez ce code, vous verrez un nouveau cadre de données appelé adelie_penguins dans l’onglet environnement. Vous pouvez cliquer dessus pour confirmer que toutes les espèces sont bien Adélie. Comme décrit ci-dessus pour les noms de colonnes, les noms de cadres de données ne peuvent pas contenir d’espaces ni de traits d’union -.
Vérification d’apprentissage 2 :
Pourquoi pensez-vous qu’il est dangereux de faire ce qui suit :
J’ai utilisé des commentaires ici pour éviter que vous exécutiez le chunk par erreur
# penguins <- penguins %>%
# filter(species == "Adelie")Pour les nombres (comme bill_length_mm), vous pourriez être moins intéressé par le filtrage des valeurs exactes et plus intéressé par les valeurs au-dessus ou en dessous d’une certaine valeur. Pour cela, vous pouvez utiliser > (plus grand), < (plus petit), >= (plus grand ou égal), et <= (plus petit ou égal). Voir l’exemple ci-dessous, où je ne montre que bill_length_mm au-dessus de 45 :
# A tibble: 163 × 8
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
<fct> <fct> <dbl> <dbl> <int> <int>
1 Adelie Torgersen 46 21.5 194 4200
2 Adelie Torgersen 45.8 18.9 197 4150
3 Adelie Biscoe 45.6 20.3 191 4600
4 Gentoo Biscoe 46.1 13.2 211 4500
5 Gentoo Biscoe 50 16.3 230 5700
6 Gentoo Biscoe 48.7 14.1 210 4450
7 Gentoo Biscoe 50 15.2 218 5700
8 Gentoo Biscoe 47.6 14.5 215 5400
9 Gentoo Biscoe 46.5 13.5 210 4550
10 Gentoo Biscoe 45.4 14.6 211 4800
# ℹ 153 more rows
# ℹ 2 more variables: sex <fct>, year <int>
Vous pouvez également combiner plusieurs étapes de filtrage :
# A tibble: 3 × 8
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
<fct> <fct> <dbl> <dbl> <int> <int>
1 Adelie Torgersen 46 21.5 194 4200
2 Adelie Torgersen 45.8 18.9 197 4150
3 Adelie Biscoe 45.6 20.3 191 4600
# ℹ 2 more variables: sex <fct>, year <int>
Tâche 6
Créez un nouveau sous-ensemble des données. Utilisez un nom raisonnable pour le nouvel ensemble de données. Filtrez pour exclure les manchots Adelie (avec !=, voir ci-dessus), et un body_mass_g inférieur ou égal à 4000 g :
Vous avez maintenant appris certains aspects de l’exploration des données, qui est généralement la première étape d’une analyse. Vous essayez de comprendre comment les données sont construites, quelles colonnes existent, les résumés de base des données, etc. Une fonction pratique pour voir la structure de vos données est str().
Tâche 7
Utilisez str() pour l’ensemble de données penguins :
str(penguins)tibble [333 × 8] (S3: tbl_df/tbl/data.frame)
$ species : Factor w/ 3 levels "Adelie","Chinstrap",..: 1 1 1 1 1 1 1 1 1 1 ...
$ island : Factor w/ 3 levels "Biscoe","Dream",..: 3 3 3 3 3 3 3 3 3 3 ...
$ bill_length_mm : num [1:333] 39.1 39.5 40.3 36.7 39.3 38.9 39.2 41.1 38.6 34.6 ...
$ bill_depth_mm : num [1:333] 18.7 17.4 18 19.3 20.6 17.8 19.6 17.6 21.2 21.1 ...
$ flipper_length_mm: int [1:333] 181 186 195 193 190 181 195 182 191 198 ...
$ body_mass_g : int [1:333] 3750 3800 3250 3450 3650 3625 4675 3200 3800 4400 ...
$ sex : Factor w/ 2 levels "female","male": 2 1 1 1 2 1 2 1 2 2 ...
$ year : int [1:333] 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 ...
- attr(*, "na.action")= 'omit' Named int [1:11] 4 9 10 11 12 48 179 219 257 269 ...
..- attr(*, "names")= chr [1:11] "4" "9" "10" "11" ...
Il vous montre les noms de chaque colonne dans les données et le type de données. En général, les données peuvent être des nombres ou du texte. Les nombres peuvent être des nombres entiers (« integers » = int) ou des nombres à virgule (num). Le texte peut également être stocké de différentes manières. Il peut y avoir du « texte libre » (« character » = chr) que vous utiliseriez par ex. dans un tableau avec les prénoms et noms de personnes. Dans ces cas, vous devez pouvoir stocker n’importe quel nom. Souvent, cependant, le même texte s’applique plusieurs fois dans un cadre de données ; cela pourrait être par ex. noms d’espèces, sites d’échantillonnage, classes de taille (« adulte » contre « juvénile »), etc. Pour ces cas, R utilise une astuce pour stocker le texte aussi efficacement que possible. Vous voyez que par ex. la colonne species est un factor. Au lieu de sauvegarder le texte entier pour chaque ligne de cette colonne, R enregistre d’abord toutes les entrées uniques de la ligne. Ces entrées uniques (c.-à-d. les possibilités d’entrées dans cette colonne) sont appelées levels. R en garde la trace et attribue un numéro à chacun. Dans la colonne elle-même, seuls ces nombres sont stockés. Pour voir les niveaux d’une colonne de facteur, vous pouvez utiliser la fonction levels().
Tâche 8
Utilisez levels() ci-dessous, pour voir les niveaux de penguins$island :
levels(penguins$island)[1] "Biscoe" "Dream" "Torgersen"
Vous pouvez voir comment R stocke les différentes îles (ou espèces, sites, classes de taille, etc.) en transformant les facteurs en nombres :
as.numeric(penguins$island) [1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2
[38] 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3
[75] 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3
[112] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1
[149] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[186] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[223] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[260] 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[297] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Le stockage des données de cette manière est très pratique car il évite également l’introduction de fautes de frappe, qui créeraient un désordre, si vous voulez compter les occurrences de chaque île dans l’ensemble de données ou regrouper les données.
C’est tout pour cette semaine.
La semaine prochaine, nous apprendrons à visualiser les différents types de données. Ceci est très utile pour l’exploration des données car les données sont beaucoup plus faciles à comprendre pour les humains si elles sont représentées visuellement que par des tableaux ou de longues listes de valeurs.
