C: yürütme süresini ölçmek için mikro kıyaslama paketi nasıl kullanılır?


Farklı ifadelerin yürütme sürelerini karşılaştırmak için R’deki microbenchmark paketini kullanabilirsiniz.

Bunu yapmak için aşağıdaki sözdizimini kullanabilirsiniz:

 library (microbenchmark)

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

Aşağıdaki örnek, bu sözdiziminin pratikte nasıl kullanılacağını gösterir.

Örnek: R’de microbenchmark() işlevini kullanma

R’de çeşitli basketbol takımlarındaki oyuncuların attığı puanlar hakkında bilgi içeren aşağıdaki veri çerçevesine sahip olduğumuzu varsayalım:

 #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

Şimdi her takımdaki oyuncuların attığı ortalama puanları iki farklı yöntem kullanarak hesaplamak istediğimizi varsayalım:

  • Yöntem 1 : R Tabanından Aggregate() işlevini kullanın
  • Yöntem 2 : dplyr’den group_by() ve summarise_at() işlevini kullanın

Bu ifadelerin her birinin yürütülmesi için gereken süreyi ölçmek için microbenchmark() işlevini kullanabiliriz:

 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

microbenchmark() işlevi her ifadeyi 100 kez çalıştırır ve aşağıdaki ölçümleri ölçer:

  • min : Yürütme için gereken minimum süre
  • lq : tamamlamak için gereken sürenin alt çeyreği (25. yüzdelik dilim)
  • Ortalama : Yürütme için gereken ortalama süre
  • medyan : Medyan yürütme süresi
  • uq : yürütmek için gereken sürenin üst çeyreği (75. yüzdelik dilim)
  • max : Yürütme için gereken maksimum süre
  • neval : Her ifadenin değerlendirilme sayısı

Genellikle her ifadeyi yürütmek için yalnızca ortalama veya medyan süreye bakarız.

Sonuçtan şunu görebiliriz:

  • R tabanlı yöntemi kullanarak takım puan ortalamasını hesaplamak ortalama 1.852 milisaniye sürdü.
  • Dplyr yöntemini kullanarak takım başına ortalama puanın hesaplanması ortalama 9.946 milisaniye sürdü.

Bu sonuçlara dayanarak temel R yönteminin önemli ölçüde daha hızlı olduğu sonucuna vardık.

Her ifadeyi yürütmek için gereken sürelerin dağılımını görselleştirmek için boxplot() işlevini de kullanabiliriz:

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

Mikro kıyaslama paketi kutu grafiği R'yi verir

Kutu grafiklerinden dplyr yönteminin takım başına ortalama puan değerini hesaplamasının ortalama olarak daha uzun sürdüğünü görebiliriz.

Not : Bu örnekte iki farklı ifadenin yürütme sürelerini karşılaştırmak için microbenchmark() fonksiyonunu kullandık ancak pratikte istediğiniz kadar ifadeyi karşılaştırabilirsiniz.

Ek kaynaklar

Aşağıdaki eğitimlerde R’de diğer ortak görevlerin nasıl gerçekleştirileceği açıklanmaktadır:

R’de ortam nasıl temizlenir
RStudio’daki tüm grafikler nasıl temizlenir?
R’ye birden fazla paket nasıl yüklenir

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir