剛開始學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/
沒有留言:
張貼留言