R: come utilizzare il pacchetto microbenchmark per misurare il tempo di esecuzione


È possibile utilizzare il pacchetto microbenchmark in R per confrontare il tempo di esecuzione di diverse espressioni.

A tale scopo è possibile utilizzare la seguente sintassi:

 library (microbenchmark)

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

L’esempio seguente mostra come utilizzare questa sintassi nella pratica.

Esempio: utilizzo di microbenchmark() in R

Supponiamo di avere il seguente frame di dati in R che contiene informazioni sui punti segnati dai giocatori di varie squadre di basket:

 #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

Supponiamo ora di voler calcolare la media dei punti segnati dai giocatori di ciascuna squadra utilizzando due metodi diversi:

  • Metodo 1 : utilizzare Aggregate() da Base R
  • Metodo 2 : utilizzare group_by() e summarise_at() da dplyr

Possiamo usare la funzione microbenchmark() per misurare il tempo necessario per eseguire ciascuna di queste espressioni:

 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
                                                                    express
                         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 funzione microbenchmark() esegue ciascuna espressione 100 volte e misura le seguenti metriche:

  • min : tempo minimo richiesto per l’esecuzione
  • lq : quartile inferiore (25° percentile) del tempo richiesto per il completamento
  • Media : tempo medio richiesto per l’esecuzione
  • mediana : tempo di esecuzione medio
  • uq : quartile superiore (75° percentile) del tempo richiesto per l’esecuzione
  • max : tempo massimo richiesto per l’esecuzione
  • neval : numero di volte in cui ciascuna espressione è stata valutata

In genere, esaminiamo solo il tempo medio o mediano necessario per eseguire ciascuna espressione.

Dal risultato possiamo vedere:

  • È stato necessario un tempo medio di 1.852 millisecondi per calcolare la media dei punti della squadra utilizzando il metodo basato su R.
  • Per calcolare la media dei punti per squadra utilizzando il metodo dplyr è stato necessario un tempo medio di 9.946 millisecondi .

Sulla base di questi risultati, concludiamo che il metodo base R è significativamente più veloce.

Possiamo anche utilizzare la funzione boxplot() per visualizzare la distribuzione dei tempi necessari per eseguire ciascuna espressione:

 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 '))

Il boxplot del pacchetto microbenchmark fornisce R

Dai box plot possiamo vedere che il metodo dplyr impiega in media più tempo per calcolare il valore del punto medio per squadra.

Nota : in questo esempio, abbiamo utilizzato la funzione microbenchmark() per confrontare il tempo di esecuzione di due diverse espressioni, ma nella pratica puoi confrontare tutte le espressioni che desideri.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni in R:

Come cancellare l’ambiente in R
Come cancellare tutti i grafici in RStudio
Come caricare più pacchetti in R

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *