끄적거림

[R쓸신잡] benchmark 수행하기 본문

R쓸신잡

[R쓸신잡] benchmark 수행하기

Signing 2020. 6. 22. 15:06
728x90
반응형

내가 만든 프로그램이 잘 작동하는지, 또한 성능과 퍼포먼스가 어느정도 나오는지 혹은 여러 비슷한 함수나 프로세스가 성능 측면에서 어떤 차이를 보이는지 확인해야할 경우가 종종 생긴다.

 

이럴 때 성능 측정하여 비교하고 더 나은 방법을 추구하는 것을 흔히 벤치마크(benchmark)라한다. 그래서 R이나 기타 다른 언어에서도 내가 어떤 함수 혹은 어떤 기능에 대해 퍼포먼스적으로 수행하고 싶다면 구글링할 때 how to ~~ benchmark 이런식으로 검색해주면 전세계 많은 R user들이 발견해 놓은 좋은 방법들을 많이 찾을 수 있다.

 

 


간단한 실험으로 벤치마크를 어떻게 사용하는지 확인해보고자 한다.

 

install.packages("microbenchmark")
library(microbenchmark)

먼저, microbenchmark 패키지를 설치해서 동일한 이름의 함수를 사용한다.

 

 

예제로써는 data.frame과 data.table의 성능 차이를 비교하고자 한다. 다음과 같은 매우 큰 데이터를 생성하고, 원하는 조건을 걸어 조건에 해당하는 데이터만 추출하고자 한다.

DF <- data.frame(x = runif(2.6e+07), y = rep(LETTERS, each = 10000))
df <- data.frame(x = runif(2.6e+07), y = rep(letters, each = 10000))

 

 

첫번째로 data.frame의 인덱싱을 이용하여 조건 추출을 해보자.

첫번째 인자로는 내가 검증하고 싶은 코드를 넣어주면 된다.

두번째 인자는 몇번 반복 실행할 것인지 정해주는 것이다.

microbenchmark(
  x <- DF[DF$y == "B", ]
  , times = 100
)

 

그 결과로는 

data.frame 성능 측정

위와 같이 출력이 되는데, 보이는 것처럼, 100번 수행 시간에 대한 요약통계량이 나온다.

단위는 밀리세컨 단위이다.

 

 

 

 

DT <- as.data.table(DF)
setkey(DT, y)

microbenchmark(
  x <- DT[J("b"), ]
  , times = 100
)

 

 

 

data.table 성능 측정

data.frame에 비해 숫자가 크게 나왔지만, 단위가 마이크로세컨 단위임을 주목하자.

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments