つい一月半位前に
みんな大好き,R と Python の速度比較
というのを書いた。そのときには,Julia なんて眼中になかったのだ。
そこで,Julia で同じことをやるとどんだけ〜〜速いかやってみた。
結論
Julia 速い。ただし,初回は若干時間が掛かる。
Python は ピアソンの積率相関係数行列,分散・共分散行列,重回帰分析で健闘している。
using CSV, DataFrames
test.csv は 100000行, 1500列のデータ
データ読み込み
@time df = CSV.read("test.csv", DataFrame)
# 23.113033 seconds (24.45 M allocations: 2.275 GiB, 3.44% gc time)
# R では,変数型を指定して 33.607, Pythonでは 28.793 だったので,かなり速いといえよう
# 以下では 単位は秒
単変量分析
@time a = mapcols(sum, df) # 0.0777, R: 0.739, Pyhton: 5.416
using Statistics
@time a = mapcols(mean, df) # 0.0760, R: 0.662, Python: 5.352
@time a = mapcols(var, df) # 0.123, R: 0.552, Python: 8.466
@time a = mapcols(std, df) # 0.125, R: 0.561, Python: 11.574
2変量分析
ピアソンの積率相関係数
@time a = cor(df[:, 1], df[:, 2]) # 0.00106, R: 0.011, Python: 0.004
多変量回帰
ピアソンの積率相関係数行列
@time a = cor(Array{Float64,2}(df)) # 4.331, R: 100.509, Python: 360.236
スピアマンの順位相関係数行列
using StatsBase
function spearmancor(x::Array{Float64,2})
rank = similar(x, Float64)
for i = 1:size(x, 2)
rank[:, i] = tiedrank(x[:, i])
end
return cor(rank)
end
@time a = spearmancor(Array{Float64,2}(df)) # 23.354, R: 140.892, Python 4238.496
分散・共分散行列
@time a = cov(Array{Float64,2}(df)); # 4.469, R: 106.829, Python: 4.987
重回帰分析
using GLM
@time a = lm(@formula(X1 ~ X2+X3+X4+X5+X6+X7+X8+X9+X10), df) # 0.0255, R: 0.163, Python 0.031
※コメント投稿者のブログIDはブログ作成者のみに通知されます