[問題] groupby 效能改進
想問要怎麼改進以下的 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
→
03/25 19:42,
7年前
, 1F
03/25 19:42, 1F
感謝
-----------------------------------------------------
在 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
→
03/25 22:09,
7年前
, 2F
03/25 22:09, 2F
感謝大大提供該連結 data.table vs dplyr vs pandas
→
03/25 22:10,
7年前
, 3F
03/25 22:10, 3F
→
03/25 22:10,
7年前
, 4F
03/25 22:10, 4F
→
03/25 22:11,
7年前
, 5F
03/25 22:11, 5F
→
03/25 22:12,
7年前
, 6F
03/25 22:12, 6F
→
03/25 22:13,
7年前
, 7F
03/25 22:13, 7F
→
03/25 22:14,
7年前
, 8F
03/25 22:14, 8F
→
03/25 22:14,
7年前
, 9F
03/25 22:14, 9F
→
03/25 22:18,
7年前
, 10F
03/25 22:18, 10F
但是 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
推
03/26 00:42,
7年前
, 11F
03/26 00:42, 11F
推
03/26 12:25,
7年前
, 12F
03/26 12:25, 12F