2020年12月30日水曜日

DataFrames.jl vs. pandas

 Python は私のようなノンプロが手を出しやすい簡素な言語です。

一方、ライブラリへの依存が高いため、それらの互換性や version に応じて複数の仮想環境の構築を迫られることがあります。将来的には、作成していたコードがライブラリのVer.UP や開発中止で修正を余儀なくされることもあるでしょう(前者は既に経験済みです)。
個人的には 精度や速度が必須となる科学技術計算 を Fortran 、データ整理や可視化を Python、といったような使い分けをしています。現状維持で良いともいえるのですが、そろそろ代替え言語を試しておくべきと思い始めました(リスク管理です)。

先日、ある方から Julia を勧められました。Python と同じくらい容易な書き方で、計算が速く、コンパイルができるとのこと。
それは良い。

ということで、試してみました。
少し古いのですが、LTS の v1.0.5 + win10 (i5のラップトップ)です。インストールはプレコンパイル版を入れるだけ。そのままでは Jupyter での利用は不可でしたが、何度か試行し、動くようになりました。
今回の比較は csv 読み込みからの DataFrame 操作。頻繁に使う機能です(Juria と Python の比較ではなく、DataFrames.jl と pandas の比較になりました)。
結果は以下の通り。

csv読み込み df=DataFrame(CSV.File(open(read, 1170万行 84.8s
df6=DataFrame(CSV.File(open(read, 6万行 0.50s
df=pd.read_csv 1170万行 51.4s
df6=pd.read_csv 6万行 0.14s
カラム名変更 rename!(df,   0.21s
df.rename(columns= ,inplace=True)   0.02s
inner_join dfj=innerjoin(df, df6 290万行 15.5s
dfj=pd.merge(df, df6 290万行 5.8s
型変換 dfj._=Date.(dfj._,"yyyy/mm/dd")   86.7s
dfj['__']=pd.to_datetime(dfj['__'])   1.4s
期間抽出 df0=dfj[dfj[:,"__"] .< _, :] 190万行 4.6s
df0=dfj[dfj['_’] < _] 190万行 3.6s
集約 df0_st=stack(df0, 380万行 5.6s
df0_pv=pd.pivot_table(df0,values= 190万行 1.4s

pandas の圧勝でしたね。強い。

Julia でもパッケージを使うので Python と同じような問題は潜在的に有しているのでしょう。
イタレーションでは Julia の方が速くなるそうですので、扱う作業内容により言語を選択する形になるでしょうか?(今回の結果を見る限り、当面の出番はないかもしれませんが)
https://julialang.org/benchmarks/ 

引き続きその動向に注目しましょう。

0 件のコメント:

コメントを投稿