pandasよりも処理が速い(らしい)daskを使ってみた
仕事で重いcsvデータを扱う機会がありましたので、pandasよりも速い(らしい)daskを使ってみました。
ライブラリのインストールは以下のコマンドを入力。
dask のインストール後、ライブラリを回すとエラーが出て python -m pip install dask[dataframe] --upgrade を実行せよと出ましたので、これも実行。
python pip install dask python -m pip install dask[dataframe] --upgrade
dask のライブラリのインポート。
pandas に比べ、心持ち長いですね。
import dask.dataframe as dd import dask.multiprocessing
csv の読込は pandas と全く一緒ですね。 データに合わせてパラメーター sep(区切り文字の指定)や encoding(文字コード)を指定しましょう。
データの表示は、ddf.compute() という pandas では見慣れないものがあります。
こちらは処理を行うためのメソッドのようです。
なお、ddf = ddf.conpute() を入れてやらないと、DataFrame型として出力されませんでした。
この点は、read_csv()だけでDataFrame型が作成可能な pandas と違いますね。
参考 qiita.com
# csv の読込 ddf = dd.read_csv( "任意のデータのpath") # 読み込んだデータの表示(すべての行を表示) ddf = ddf.compute()
すべて実装されているわけではないようですが、一通りの pandas の機能は使えるようです。
参考 qiita.com
データの数字は適当なので、グラフもぐちゃぐちゃです、ご容赦ください。
# 折れ線グラフ ddf.plot("def", "stq")
# グラフの細かい設定 ddf.plot( "def", "stq", title='Iris Data Set', # タイトル grid=True, # グリッド線の有無 colormap='Accent', # 色 legend=True, # 凡例の有無 alpha=0.8) # 透過率
折れ線グラフ以外も出力可能です。
# 散布図 ddf.plot("def", "stq",kind="scatter")
要素の数値計算もできます。
# 合計、平均、最大値、最小値 print(ddf.sum(),ddf.mean(),ddf.max(),ddf.min())
カラムの要素同士を計算して、新しいカラムを作成することも可能です。
# 要素同士の計算 ddf["abcdef"] = ddf["abc"] * ddf["def"] ddf
欠損値(NaN)の処理もできます。
# 欠損値のカウント
ddf.isnull().sum()
# データ型が数字の列のNaNを平均値で埋める ddf = ddf.fillna(ddf.mean()) # 残ったデータ型が文字の列のNaNの行を削除する ddf = ddf.dropna() # 再び欠損値をカウント ddf.isnull().sum()
軽く機械学習も回してみました。
データが適当に作ったものなので、スコアは全く振るいませんが…。
# サポートベクターマシン(回帰) from sklearn.svm import SVR # データ分割ライブラリ from sklearn.model_selection import train_test_split # 目的変数と説明変数の設定(仮 適当に決めてます X = ddf[["def", "jkl", "mno", "pqr", "stq", "yz"]] y = ddf["abc"] # データの分割 X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42) # SVR モデルの作成 model = SVR() # モデルの学習 model.fit(X_train, y_train) # モデルのスコア model.score(X_test, y_test)
結果はひどいものですが、機械学習のモデルを回せることはわかりましたw
以上になります、最後までお読みいただきありがとうございました。
参考サイト