O: jak używać pakietu microbenchmark do pomiaru czasu wykonania


Możesz użyć pakietu microbenchmark w R, aby porównać czas wykonania różnych wyrażeń.

Aby to zrobić, możesz użyć następującej składni:

 library (microbenchmark)

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

Poniższy przykład pokazuje, jak zastosować tę składnię w praktyce.

Przykład: użycie microbenchmark() w R

Załóżmy, że mamy w R następującą ramkę danych zawierającą informacje o punktach zdobytych przez zawodników różnych drużyn koszykarskich:

 #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

Załóżmy teraz, że chcemy obliczyć średnią punktów zdobytych przez graczy w każdej drużynie przy użyciu dwóch różnych metod:

  • Metoda 1 : Użyj Aggregate() z Base R
  • Metoda 2 : Użyj group_by() i summarise_at() z dplyr

Możemy użyć funkcji microbenchmark() do pomiaru czasu potrzebnego na wykonanie każdego z tych wyrażeń:

 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

Funkcja microbenchmark() uruchamia każde wyrażenie 100 razy i mierzy następujące metryki:

  • min : Minimalny czas wymagany do wykonania
  • lq : dolny kwartyl (25. percentyl) czasu wymaganego do ukończenia
  • Średnia : Średni czas wymagany do wykonania
  • mediana : średni czas wykonania
  • uq : górny kwartyl (75. percentyl) czasu wymaganego do wykonania
  • max : Maksymalny czas wymagany do wykonania
  • neval : Liczba ocen każdego wyrażenia

Zwykle patrzymy tylko na średni lub średni czas potrzebny na wykonanie każdego wyrażenia.

Z wyniku możemy zobaczyć:

  • Obliczenie średniej punktów zespołu przy użyciu metody opartej na R zajęło średnio 1852 milisekund .
  • Obliczenie średniej liczby punktów na drużynę przy użyciu metody dplyr zajęło średnio 9,946 milisekundy .

Na podstawie tych wyników wnioskujemy, że podstawowa metoda R jest znacznie szybsza.

Możemy również użyć funkcji boxplot() do wizualizacji rozkładu czasu wymaganego do wykonania każdego wyrażenia:

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

Wykres pudełkowy pakietu mikrobenchmarku daje R

Z wykresów pudełkowych widać, że obliczenie średniej wartości punktów na drużynę zajmuje średnio więcej czasu metodą dplyr.

Uwaga : w tym przykładzie użyliśmy funkcji microbenchmark() do porównania czasu wykonania dwóch różnych wyrażeń, ale w praktyce możesz porównać dowolną liczbę wyrażeń.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w języku R:

Jak wyczyścić środowisko w R
Jak wyczyścić wszystkie działki w RStudio
Jak załadować wiele pakietów w R

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *