(python==3.3.2, R==3.0.2)
R より Python の方が速いらしいので計測して見る。
下記サイトのコードを拝借してやってみた
下準備
data.csv
blood_type,sex O,F O,F O,M A,M A,M B,F A,F AB,M O,F blue,M B,M B,M O,M O,M AB,F
hoge.py
import pandas data = pandas.read_csv('data.csv') crosstab = data.pivot_table(rows='sex', cols="blood_type", aggfunc=[len]) print(crosstab)
hoge.r
data <- read.csv("data.csv") cross <- table(data[,2], data[,1]) print(cross)
速度計測
ipythonの%timeitで速度計ってみる
In [1]: import os In [2]: %timeit os.system('R --vanilla --slave < hoge.r') 1 loops, best of 3: 363 ms per loop In [3]: %timeit os.system('python hoge.py') 1 loops, best of 3: 426 ms per loop
あれ? Rの方が速い。データ量が少ないからかな?
データ量を増やしてやってみる
12 から 100,000コくらいで
generate_sample.py
from random import choice blood_type = ["A", "B", "O", "AB"] sex = ["M", "F"] max_num = 100000 print("blood_type,sex") print("\n".join([ "{blood_type},{sex}".format( blood_type=choice(blood_type), sex=choice(sex) ) for _ in range(max_num)] ))
data.csv
$ python generate_sample.py > data.csv
速度計測(100,000)
In [50]: %timeit os.system('R --vanilla --slave < hoge.r') 1 loops, best of 3: 509 ms per loop In [51]: %timeit os.system('python hoge.py') 1 loops, best of 3: 487 ms per loop
お、逆転した。Pythonが速くなった。
速度計測(1,000,000)
In [62]: %timeit os.system('R --vanilla --slave < hoge.r') 1 loops, best of 3: 1.36 s per loop In [63]: %timeit os.system('python hoge.py') 1 loops, best of 3: 1.03 s per loop