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 件のコメント:
コメントを投稿