前回記事で検討した以下の要件定義を元にスクリプトを作成しました。GitHubにて、ソースコードを公開しています。ページの末尾に全ソースコードを載せています。説明変数のデータとカラム名を分けてオブジェクトのメンバに割り付ける目的変数のデータをシリアル化する目的変数の値と名称を分けてオブジェクトのメンバに割り付けるデータセットの名称をオブジェクトのメンバに割り付ける使い方pan2skにpandasのデータフレームと目的変数のカラム名、データフレーム名(なくても可)を渡すと、sklearnのデータ形式を返してくれます。name='iris')skDataは以下のようになっており、目的の形式になっています。コーディング説明も兼ねて部分部分に分けて解説していきます。全体のソースコードは末尾を参照ください。必要モジュールのインポート本機能を実装するにあたり必要なモジュールをインポートします。spdatasetsはscikit-learnのデータセットの構造を使うためにインポート、preprocessingは同前処理機能を使うためにインポートしています。preprocessingについては下記記事に詳しく書きましたので参考にしてください。pandas、numpyはお馴染みのモジュールのため、説明は省略します。関数名はpan2sk(パン○好き)としました。引数はデータフレームと目的変数、そしてデータ名です。データ名に関してはデフォルトでDataという名称を与えています。”””で挟まれた部分はhelp扱いとなり、help(pan2sk)と打つと表示される内容になります。"""説明変数のデータ列と目的変数のデータ列の分離dfからtargetに一致しないデータを説明変数(expdata)、一致するデータを目的変数(objdata)としています。数値データはそのまま、カテゴリデータはバイナリ化、それ以外のデータは除外します。カテゴリデータの処理は1tempにバイナリ後のデータを格納、2expdataに結合、3もともとの列を削除という手順で実施しています。面倒そうな処理ですが、実はunique()とlabel_binarize()を使うことで簡単に実現します。数値データはそのまま、カテゴリデータはシリアル化します。これも同様に、unique()とLabelEncoder()を使うことで簡単に実現します。最後にオブジェクトに割り当てれば完成です。skDataまとめ「pandasで読み込んだデータをそのままscikit-learnの分析ライブラリに投入」するためのライブラリ[pan2sk]を作ってみました。今後は細かいエラー処理や並列計算、正規化や教師なし学習への対応等を進めていきたいです。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。プロフィール兵庫県在住の30代データサイエンティスト。Pythonを使った機械学習等によるデータ分析や、ウェブアプリ等のシステム開発に取り組んでいます。