1.背景
vaexがpandasの1000倍速いというので、試してみました。
参考にしたのはここや公式のAPI。
!pip install vaex
import vaex as vx
df = vx.open(~~~.csv,low_memory=False)
1回hdf5ファイル形式で出力し、読み直す必要がある。
path='vaex.hdf5'
df.export_hdf5(path, column_names=None, byteorder='=', shuffle=False, selection=False, progress=None, virtual=False, sort=None, ascending=True)
df = vx.open(path)
修正:
openの際にconvertを使えばよかった。ここ参照
ds = vx.open('somedata*.csv', convert='bigdata.hdf5')
2.よかった点/困った点
良かった点
・確かに速い!:pandasだと30秒くらいかかる動作が3秒くらいで済む。
・RAMの心配をせずに済む。
RAMにすべてのデータを入れる必要がない?そうで5GBくらいのデータでも
処理がサクサク進みました。pandasだとsqlとの連携が必須でしたが、
悪かった点
pandsとの使い勝手の違い。
・pandasでのcolumnsのように列名が変更できない。
documentを参照すると、vaexはorderdicrなので列名変更は下記のような感じ。
rename_column(name, new_name, unique=False, store_in_state=True)
・日本語を列名にすると上手く動かない(日本語の処理が難しい?)
・pivot_tableとか使いたい
・applyなどpandasでよく使う関数の一部が使えない。
他に気付いたら、追記するかもですが、といりそぎ。
3.その他
現状、完全にpandasから移行とはならないとは思いますが、速度やRAMの利用効率から
見て使い場面を選んで使おうと思いました。
・機械学習や可視化も売りにしている様子。
2019/4/18追記:pandasの関数との比較
pandas 0.24.2 documentation
vaex 1.0.0-beta.6 documentation
を参照。
項目 | pandas | vaex |
---|---|---|
import | import pandas as pd | import vaex as vx |
入力 | pd.read_csv('~.csv') | vx.open('~.csv') |
出力 | pd.to_csv('##.csv') | vx.to_csv('##.csv') |
集計 | count/mean/std/… | 同左。同じことができる。 |
sort | 有 | 有 |
groupby | 有 | (APIdocumentにはないみたいだが)有 |
列名 | df.columns | vx.get_column_names |
rename | df.rename(index=str, columns={"":"",…}) | vx.rename_column(old_str,new_str) |
クロス集計 | pivpot_table | 無 |
日本語 | OK | OK。(列名ではNG) |
機械学習 | 無 | 有 |
DB連携 | with sqlite3.connect~ | 無? |
使えそうな関数
関数 | 説明 |
---|---|
vx.from_ascii(path, seperator=None, names=True, skip_lines=0, skip_after=0, **kwargs) | asciiファイルを読み込む。日本語がいける? |
vx.open_many(filenames) | 複数のファイルを一度に読み込んでmergeした結果を返す。 |
vx.from_arrays(text=text) | 配列(text)をdataframe化 |
df.text.str.contains(str) | 部分一致検索の結果を返す。df[df[].text.str.contains]で使えそう |
df.to_pandas_df | pandas.DataFrameとして返す。 |
20200925.追加
koalasというのも気になる。研究しよう。
20230116追加
polarsこれは良い。pandasから乗り換える要準備。