Jak znaleźć wąskie gardło?

Wydajny kod w R

Colin Gillespie

Jumping Rivers & Newcastle University

Wydajny kod w R

Profilowanie kodu

Ogólna idea polega na tym, aby:

  • Uruchomić kod
  • Co kilka milisekund rejestrować, co jest aktualnie wykonywane
  • Rprof() jest wbudowane w R i robi dokładnie to
    • Trudne w użyciu
  • Zamiast tego użyj profvis
Wydajny kod w R

Zbiór danych IMDB

  • Z pakietu ggplot2movies
data(movies, package = "ggplot2movies")
dim(movies)
58788    24
  • Ramka danych: ok. 60 000 wierszy i 24 kolumny
  • Każdy wiersz odpowiada jednemu filmowi
Wydajny kod w R

Braveheart

braveheart = movies[7288,]
Rok Długość Ocena
1995 177 8.3

Wydajny kod w R

Przykład: Braveheart

# Load data
data(movies,
     package = "ggplot2movies")
braveheart <- movies[7288,]
movies <- movies[movies$Action==1,]

plot(movies$year, movies$rating, xlab = "Year", ylab = "Rating")
# local regression line model <- loess(rating ~ year, data = movies) j <- order(movies$year) lines(movies$year[j], model$fitted[j], col = "forestgreen")
points(braveheart$year, braveheart$rating, pch = 21, bg = "steelblue")

Wydajny kod w R

Profvis

  • RStudio ma wbudowaną obsługę profilowania z profvis
    • Zaznacz kod, który chcesz profilować
    • Profile -> Profile Selected lines

Wydajny kod w R

Wiersz poleceń

library("profvis")

profvis({
data(movies, package = "ggplot2movies") # Load data braveheart <- movies[7288,] movies <- movies[movies$Action == 1,] plot(movies$year, movies$rating, xlab = "Year", ylab="Rating") model <- loess(rating ~ year, data = movies) # loess regression line j <- order(movies$year) lines(movies$year[j], model$fitted[j], col="forestgreen", lwd=2) points(braveheart$year, braveheart$rating, pch = 21, bg = "steelblue", cex = 3)
})

Która linia będzie najwolniejsza?

Wydajny kod w R

Wydajny kod w R

Wydajny kod w R

Czas na ćwiczenia!

Wydajny kod w R

Preparing Video For Download...