Science des données biologiques

Réalisé par le service d'Écologie numérique des Milieux aquatiques, Université de Mons (Belgique)

Préambule

Si vous n’avez jamais utilisé de tutoriel “learnr”, familiarisez-vous d’abord avec son interface ici.

Conformément au RGPD (Règlement Général sur la Protection des Données), nous sommes tenus de vous informer de ce que vos résultats seront collecté afin de suivre votre progression. Les données seront enregistrées au nom de l’utilisateur apparaissant en haut de cette page. Corrigez si nécessaire ! En utilisant ce tutoriel, vous marquez expressément votre accord pour que ces données puissent être collectées par vos enseignants et utilisées pour vous aider et vous évaluer. Après avoir été anonymisées, ces données pourront également servir à des études globales dans un cadre scientifique et/ou éducatif uniquement.

Objectifs

  • Recombiner des tableaux de données

De large vers long

Sur base du tableau ci-dessous :

tree 1990 1991 1992 1993 1994 1995
arbre_1 24.0 26 28.0 30 32.0 34
arbre_2 37.5 40 42.5 45 47.5 50

Modifiez le tableau width afin d’obtenir le tableau suivant que vous nommerez long:

tree year circumf
arbre_1 1990 24.0
arbre_2 1990 37.5
arbre_1 1991 26.0
arbre_2 1991 40.0
arbre_1 1992 28.0
arbre_2 1992 42.5
arbre_1 1993 30.0
arbre_2 1993 45.0
arbre_1 1994 32.0
arbre_2 1994 47.5
arbre_1 1995 34.0
arbre_2 1995 50.0
time <- 1990:1995
tree <- rep(c("arbre_1", "arbre_2"), each = length(time))
size <- c((time - 1990 + 12)*2, (time - 1990 + 15)*2.5)

long <- tibble(
  year = c(time, time),
  tree = tree,
  circumf = size
)

width <- spread(long, key = year, value =  circumf)
head(width)
summary(width)
# snippet correspondant
DF %>.%
  gather(., key = KEY, value = VALUE, 1:3, na.rm = TRUE) -> DF2
# snippet correspondant
width %>.%
  gather(., key = KEY, value = VALUE, 1:3, na.rm = TRUE) -> long
# snippet correspondant
width %>.%
  gather(., key = "year", value = "circumf", "1990":"1995", na.rm = TRUE) -> long
# TODO 

De long vers large

Sur base du tableau ci-dessous :

groupe_age year population
Jeune 1992 2185103
Adulte 1992 6311109
Senior 1992 1525785
Jeune 1995 2196799
Adulte 1995 6337067
Senior 1995 1596532
Jeune 1998 2180816
Adulte 1998 6332857
Senior 1998 1678591

Modifiez le tableau demography afin d’obtenir le tableau suivant que vous nommerez demo:

groupe_age 1992 1995 1998
Adulte 6311109 6337067 6332857
Jeune 2185103 2196799 2180816
Senior 1525785 1596532 1678591
gr_age <- c("Jeune", "Adulte","Senior")
period <- c(1992, 1995, 1998)
popu <- c(2185103, 6311109, 1525785, 
          2196799, 6337067, 1596532,
          2180816, 6332857, 1678591)

demography <- tibble(
  groupe_age = rep(gr_age, times= 3),
  year = rep(period, each= 3),
  population = popu
)
head(demography)
summary(demography)
# snippet correspondant
DF %>.%
  spread(., key = KEY, value = VALUE, drop = TRUE) -> DF2
demography %>.%
  spread(., key = KEY, value = VALUE, drop = TRUE) -> demo
# snippet correspondant
demo <- spread(demography, key = year, value = population)
# TODO 

Diviser des colonnes dans un tableau

Sur base du tableau ci-dessous :

measure value
ind1_2019-04-25 1331
ind1_2019-04-26 1728
ind1_2019-04-27 2197
ind2_2019-04-25 14641
ind2_2019-04-26 20736
ind2_2019-04-27 28561
ind3_2019-04-25 161051
ind3_2019-04-26 248832
ind3_2019-04-27 371293

Modifiez le tableau bacteria afin d’obtenir le tableau suivant que vous nommerez bact:

rep date value
ind1 2019-04-25 1331
ind1 2019-04-26 1728
ind1 2019-04-27 2197
ind2 2019-04-25 14641
ind2 2019-04-26 20736
ind2 2019-04-27 28561
ind3 2019-04-25 161051
ind3 2019-04-26 248832
ind3 2019-04-27 371293
bacteria <- tibble(
  measure = paste(rep(c("ind1", "ind2", "ind3"), each = 3), 
                 rep(c("2019-04-25", "2019-04-26", "2019-04-27"), times = 3), 
                 sep = "_"),
  value = c((10:12)^3, (10:12)^4, (10:12)^5)
)
head(bacteria)
summary(bacteria)
# snippet correspondant
DF %>.%
  separate(., col = VARNAME, into = c("VAR1", "VAR2"), sep = "[^[:alnum:]]+") -> DF2
# snippet correspondant
bact <- separate(bacteria, col = "measure", into = c("rep", "date"), sep = "_" )
# TODO 

Combinaison de deux tableaux

Les scientifiques réalisent une expérience avec plusieurs aquariums expérimentals. Ils ont encodé les données dans deux tableux distincs.

Le premier tableau physico mis à votre disposition est le suivant :

aqua temp salinity
a 27.74192 34.78775
b 23.87060 38.02304
c 25.72626 34.81068
d 26.26573 39.03685
e 25.80854 34.87457

Le second tableau weight mis à votre disposition est le suivant :

aqua weight
b 2.1524348
c 2.6433227
d 0.8055696
e 1.3606056
f 1.4333393
  • Reproduisez le tableau ci-dessous :
aqua temp salinity weight
a 27.74192 34.78775 NA
b 23.87060 38.02304 2.1524348
c 25.72626 34.81068 2.6433227
d 26.26573 39.03685 0.8055696
e 25.80854 34.87457 1.3606056
set.seed(42)

physico <- tibble(
  aqua = letters[1:5],
  temp = rnorm(n = 5,mean = 25, sd = 2),
  salinity = rnorm(n = 5, mean = 35,  sd = 2)
)

weight <- tibble(
  aqua = letters[2:6],
  weight = rnorm(n = 5, mean = 1.5, sd = 0.5)
)
head(physico)
summary(physico)

head(weight)
summary(weight)
# snippet correspondant
DF <- left_join(DATAFRAME1, DATAFRAME2, by = VAR)
knitr::kable(DF)
ph_weight <- left_join(physico, weight, by = "aqua")
knitr::kable(ph_weight)
# TODO
  • Reproduisez le tableau ci-dessous :
aqua temp salinity weight
a 27.74192 34.78775 NA
b 23.87060 38.02304 2.1524348
c 25.72626 34.81068 2.6433227
d 26.26573 39.03685 0.8055696
e 25.80854 34.87457 1.3606056
f NA NA 1.4333393
head(physico)
summary(physico)

head(weight)
summary(weight)
# snippet correspondant
DF <- full_join(DATAFRAME1, DATAFRAME2, by = VAR)
knitr::kable(DF)
ph_weight <- full_join(physico, weight, by = "aqua")
knitr::kable(ph_weight)
# TODO
  • Reproduisez le tableau ci-dessous :
aqua temp salinity weight
b 23.87060 38.02304 2.1524348
c 25.72626 34.81068 2.6433227
d 26.26573 39.03685 0.8055696
e 25.80854 34.87457 1.3606056
head(physico)
summary(physico)

head(weight)
summary(weight)
# snippet correspondant
DF <- inner_join(DATAFRAME1, DATAFRAME2, by = VAR)
knitr::kable(DF)
ph_weight <- inner_join(physico, weight, by = "aqua")
knitr::kable(ph_weight)
# TODO

Conclusion

Bravo! Vous venez de terminer votre séance d’exercices dans un tutoriel “learnr”.

Laissez nous vos impressions sur cet outil pédagogique ou expérimentez encore dans la zone ci-dessous. Rappelez-vous que pour placer un commentaire dans une zone de code R, vous devez utilisez un dièse (#) devant vos phrases.

# Ajout de commentaires 
# ...
# Not yet...

Traitement des données I

Guyliann Engels & Philippe Grosjean