PandasのデータフレームをScikit-learnの入力データに変換する方法(2.コーディング)

概要 前回記事で検討した以下の要件定義を元にコーディングを進めていきます。 説明変数のデータ列と目的変数のデータ列に分ける 説明変数のデータを下記の通り変換する 数値データはそのまま カテゴリデータはバイナリ化 それ以外のデータ(時系列等)は除外 説明変数のデータとカラム名を分けてオブジェクトのメンバに割り付ける 目的変数のデータをシリアル化する 目的変数の値と名称を分けてオブジェクトのメンバに割り付ける データセットの名称をオブジェクトのメンバに割り付ける コーディング 説明も兼ねて部分部分に分けて解説していきます。全体のソースコードは末尾を参照ください。 必要モジュールのインポート 本機能を実装するにあたり必要なモジュールをインポートします。 datasetsはscikit-learnのデータセットの構造を使うためにインポート、preprocessingは同前処理機能を使うためにインポートしています。preprocessingについては下記記事に詳しく書きましたので参考にしてください。pandas、numpyはお馴染みのモジュールのため、説明は省略します。 http://own-search-and-study.xyz/2016/11/23/sklearn%e3%81%aepreprocessing%e3%81%ae%e5%85%a8%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89%e3%82%92%e8%a7%a3%e8%aa%ac/ 関数名と引数 関数名はpan2sk(パン○好き)としました。引数はデータフレームと目的変数、そしてデータ名です。データ名に関してはデフォルトでDataという名称を与えています。"""で挟まれた部分はhelp扱いとなり、help(pan2sk)と打つと表示される内容になります。 説明変数のデータ列と目的変数のデータ列の分離 dfからtargetに一致しないデータを説明変数(expdata)、一致するデータを目的変数(objdata)としています。 説明変数のデータ変換 数値データはそのまま、カテゴリデータはバイナリ化、それ以外のデータは除外します。カテゴリデータの処理は①tempにバイナリ後のデータを格納、②expdataに結合、③もともとの列を削除という手順で実施しています。面倒そうな処理ですが、実はunique()とlabel_binarize()を使うことで簡単に実現します。 目的変数のデータ変換 数値データはそのまま、カテゴリデータはシリアル化します。これも同様に、unique()とLabelEncoder()を使うことで簡単に実現します。 オブジェクト作成 最後にオブジェクトに割り当てれば完成です。 使い方 pan2skにpandasのデータフレームと目的変数のカラム名、データフレーム名(なくても可)を渡すだけで、汎用的に変換されます。 skDataを確認すると以下のようになっており、目論見通り動作していることが確認できました。 まとめ 「pandasで読み込んだデータをそのままscikit-learnの分析ライブラリに投入」するためのライブラリ[pan2sk]を作ってみました。 今後は細かいエラー処理や並列計算、正規化や教師なし学習への対応等を進めていきたいです。 全ソースコード GitHubにて、ソースコードを公開しています。 ...
2016年11月30日0 DownloadsDownload