看板 Python 關於我們 聯絡資訊
想問要怎麼改進以下的 code , 讓速度變快 我以前是寫 R 的, 正將 code 轉換為 Python, 照理說 Python 應該要比較快 可是我不太熟悉 Python, 所以來請教版上的大大 我擷取一部分 data, 可以由這下載 : https://drive.google.com/open?id=1mneTEgrK22mKK7a4fquyMaW3pchIc-kh Python code #==================================================== import os,sys import pandas as pd import numpy as np import datetime os.chdir('/home/linsam/project/Kaggle/Grupo Bimbo Inventory Demand') data = pd.read_csv('train2.csv') #------------------------------------------ log_due = pd.DataFrame( np.log1p( data['Demanda_uni_equil'] ) ) log_due.columns = ['log_due'] data['log_due'] = log_due #----------------------------------------------- s = datetime.datetime.now() # 主要是這行 mean_due_age = data.groupby(['Agencia_ID'], as_index=False)['log_due'].agg({'mean_due_age':np.mean}) t = datetime.datetime.now() - s print( t ) # 0:00:00.719779 #========================================================= R code 如下 #========================================================= library(data.table) library(dplyr) setwd("/home/linsam/project/Kaggle/Grupo Bimbo Inventory Demand") data = fread("train2.csv") data$log.due = log1p( data$Demanda_uni_equil )#adj gc() #-------------------------------------------------------------------------------------------- s=Sys.time() mean.due.age = data[, .(mean.due.age = mean(log.due)), by = .(Agencia_ID)] t=Sys.time()-s t # Time difference of 0.1391425 secs #=================================================================== 雖然差距只有零點幾秒 但實際 data 大很多, 同樣的 code 我也會運行多次, 所以整體上差了大約 2 minute 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.204.62 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1521975733.A.129.html
celestialgod: https://goo.gl/1gYJgh 03/25 19:42
感謝 ----------------------------------------------------- 在 groupby 之前先加入以下 code data[colname] = data[colname].astype('category') 速度上沒有改善多少耶 並沒有向上面那篇 100 loops, best of 3: 6.7 ms per loop 1 loop, best of 3: 2.37 s per loop 有如此大的差距,是因為它使用 .sum(),而我使用 agg 嗎? --------------------------------------------------------- 我發現是哪裡拖累速度了, 因為我對多個 col 做 groupby ( 5個col ) 所以即使 type 改成 category, 速度也沒有改善多少 --------------------------------------------------------- 自問自答 主要是 agg 在拖累速度, 來看看有沒有比較好的方法 ※ 編輯: f496328mm (118.160.204.62), 03/25/2018 21:53:42
celestialgod: https://goo.gl/Mv5nTX groupby字串的看起來還可以 03/25 22:09
感謝大大提供該連結 data.table vs dplyr vs pandas
celestialgod: Test 4 03/25 22:10
celestialgod: by int或是numeric 就滿悲劇的XDD 03/25 22:10
celestialgod: 所以你說Python一定比較快 恩... 應該還是不一定 03/25 22:11
celestialgod: 而且data.table的測試指出pandas記憶體用太多 03/25 22:12
celestialgod: 在dplyr, data.table沒爆的情況下,pandas爆了 03/25 22:13
abc2090614: pandas記憶體效率比data.table差很多 03/25 22:14
abc2090614: Wes McKinney自己有說pandas是吃記憶體怪獸... 03/25 22:14
celestialgod: trace了一下issue,2E9列,pandas會爆掉那個已經fix 03/25 22:18
但是 Python 大多都用 pandas 吧? 記憶體效率差, 速度也並沒有比較快@@, 或許可以用 R train 完 model 後, save 給 Python 用 之前試過, R save model 之後, Python 可以直接用 ※ 編輯: f496328mm (118.160.204.62), 03/25/2018 22:31:23 ※ 編輯: f496328mm (118.160.204.62), 03/25/2018 22:32:49
Luluemiko: Pandas on Ray 不知道這個有沒有幫助 03/26 00:42
aaaba: pySpark 表示: 03/26 12:25