R : Comment utiliser le package microbenchmark pour mesurer le temps d’exécution



Vous pouvez utiliser le package microbenchmark dans R pour comparer le temps d’exécution de différentes expressions.

Vous pouvez utiliser la syntaxe suivante pour ce faire :

library(microbenchmark)

#compare execution time of two different expressions
microbenchmark(
  expression1,
  expression2)
)

L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.

Exemple : utilisation de microbenchmark() dans R

Supposons que nous ayons le bloc de données suivant dans R qui contient des informations sur les points marqués par les joueurs de diverses équipes de basket-ball :

#make this example reproducible
set.seed(1)

#create data frame
df <- data.frame(team=rep(c('A', 'B'), each=500),
                 points=rnorm(1000, mean=20))

#view data frame
head(df)

  team   points
1    A 19.37355
2    A 20.18364
3    A 19.16437
4    A 21.59528
5    A 20.32951
6    A 19.17953

Supposons maintenant que nous souhaitions calculer la moyenne des points marqués par les joueurs de chaque équipe en utilisant deux méthodes différentes :

  • Méthode 1 : Utiliser Aggregate() depuis Base R
  • Méthode 2 : utilisez group_by() et summarise_at() depuis dplyr

Nous pouvons utiliser la fonction microbenchmark() pour mesurer le temps nécessaire à l’exécution de chacune de ces expressions :

library(microbenchmark)
library(dplyr)

#time how long it takes to calculate mean value of points by team
microbenchmark(
  aggregate(df$points, list(df$team), FUN=mean),
  df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean))
)

Unit: milliseconds
                                                                    expr
                         aggregate(df$points, list(df$team), FUN = mean)
 df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean))
      min       lq     mean   median        uq      max neval cld
 1.307908 1.524078 1.852167 1.743568  2.093813  4.67408   100  a 
 6.788584 7.810932 9.946286 8.914692 10.239904 56.20928   100   b

La fonction microbenchmark() exécute chaque expression 100 fois et mesure les métriques suivantes :

  • min : Temps minimum nécessaire à l’exécution
  • lq : quartile inférieur (25e centile) du temps nécessaire à l’exécution
  • Mean : Temps moyen nécessaire à l’exécution
  • médian : Temps médian d’exécution
  • uq : quartile supérieur (75e centile) du temps nécessaire à l’exécution
  • max : Temps maximum nécessaire à l’exécution
  • neval : Nombre de fois où chaque expression a été évaluée

En règle générale, nous examinons uniquement le temps moyen ou médian nécessaire pour exécuter chaque expression.

À partir du résultat, nous pouvons voir :

  • Il a fallu un temps moyen de 1,852 millisecondes pour calculer la moyenne des points par équipe en utilisant la méthode de base R.
  • Il a fallu un temps moyen de 9,946 millisecondes pour calculer les points moyens par équipe grâce à la méthode dplyr.

Sur la base de ces résultats, nous concluons que la méthode de base R est nettement plus rapide.

Nous pouvons également utiliser la fonction boxplot() pour visualiser la répartition des temps nécessaires à l’exécution de chaque expression :

library(microbenchmark)
library(dplyr)

#time how long it takes to calculate mean value of points by team
results <- microbenchmark(
  aggregate(df$points, list(df$team), FUN=mean),
  df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean))
)

#create boxplot to visualize results
boxplot(results, names=c('Base R', 'dplyr'))

Le boxplot du package de microbenchmark donne R

D’après les diagrammes en boîte, nous pouvons voir que la méthode dplyr prend en moyenne plus de temps pour calculer la valeur moyenne des points par équipe.

Remarque : Dans cet exemple, nous avons utilisé la fonction microbenchmark() pour comparer le temps d’exécution de deux expressions différentes, mais vous pouvez comparer autant d’expressions que vous le souhaitez en pratique.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans R :

Comment effacer l’environnement dans R
Comment effacer tous les tracés dans RStudio
Comment charger plusieurs packages dans R

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *