2014年7月30日 星期三

[R] SQLDF VS LAPPY效率測試


        剛開始學R的時候對於R的指令很不熟,所以大部分都習慣用sqldf來寫查詢指令。隨著對R的熟悉,最近也在嘗試用R內建的fnction來查詢資料,所以才想說來比較一下兩者的效能差異。俗話說時間就是金錢,在處理大量數據的時候,對於處理速度更是要斤斤計較。



實驗的DATA很簡單(大至長這樣,實驗方法就是增加row的數量)

Category FREQ

T        0.2
T        0.3
T        0.4
F        0.5
F        0.6
F        0.7

目的是依照category來sum FREQ
原始碼
#產生DATASET
x <- data.frame(Freq=runif(1000000,0,1),Category=c("T","F"))

##測試SQL
ptm_sql <- proc.time()
result<-sqldf("SELECT Category, sum(Freq)
       FROM x
       GROUP BY Category
      ")
ptm_sql <- proc.time() - ptm_sql
ptm_sql

##測試tapply
ptm_tapply <- proc.time()
result<-tapply(x$Freq, x$Category, FUN=sum)
ptm_tapply <- proc.time() - ptm_tapply
ptm_tapply

測試結果:

當rows = 10,000時
          user  system elapsed
SQLDF     0.05    0.00    0.94

TAPPLY    0.00    0.00    0.34
--------------------------------

rows = 1,000,000:
          user  system elapsed
SQLDF     2.30    0.03    4.34

TAPPLY    0.32    0.00    0.40
--------------------------------

row = 100,000,000:
          user  system elapsed
SQLDF     288.77   31.00  505.11

TAPPLY    31.65    1.84   39.66

沒做實驗前還不知道,SQLDF的效能和TAPPLY有那麼大的差異
不過這個實驗沒有考量到多個表格join的狀況就是了

實驗環境:
CPU intel i5 4200
RAM 8G


圖片來源:http://www.webdesignerdepot.com/2013/02/how-to-speed-up-your-website-load-times/