DS(データサイエンス) python データサイエンス 非エンジニア向け

【Python Coding】One-hot Encoding

こんにちは、TAKです。

前回記事「カテゴリ変数を数値化する必要性」の中でOne-hotエンコーディング処理を紹介したので、今回は実際にpythonを用いて「One-hotエンコーディング」を実装する方法を紹介していきたいと思います。

python codingなので、いつものようにJupyter Notebookベースでコードを紹介していきます。
必要に応じて、みなさんもローカル環境で実装トライしてみてくださいね。

One-hot エンコーディング処理

必要ライブラリのインポート

今回はpandasだけあればOKなので、上記のようにpandasをインポートしておいてください。
pandasの搭載機能でカテゴリ変数を数値化するOne-hotエンコーディング処理が実現出来ます。

データの準備

今回は「欠損値がない」場合と「欠損値がある」場合の2パターンを見ていきます。
具体的には、下記イメージのような簡単なデータを用意した上で、One-hotエンコーディングを施していきます。

■ 具体例①:欠損値がないデータ
■ 具体例②:欠損値があるデータ

※ID 004が追加され、Color変数が欠損(N/A)となっているケースを想定します。

データの作成

では実際にpandasを用いて先ほどのデータを作成しましょう。

■ 具体例①:欠損値がないデータ

● pandasのDataFrameで新しくデータを作成出来ます
■ 具体例②:欠損値があるデータ

● 欠損値を作る場合は「None」をデータにいれてあげればOKです

One-hotエンコーディング処理①(欠損なし)

欠損値がない具体例①のデータに対してOne-hotエンコーディング処理を施します。
今回のメイン処理となりますが、pandasのget_dummiesを使えば自動でカテゴリ変数の数値化が可能です。

● get_dummies:カテゴリ変数を数値化する処理
● get_dummiesの引数には、対象とするデータとカテゴリ変数の列を指定する必要あり

One-hotエンコーディング処理②(欠損あり)

次に、欠損値がある具体例②のデータに対してOne-hotエンコーディング処理を施します。
pandasのget_dummiesを用いる点は先ほどと同様ですが、引数にdummy_naを指定する点がポイントとなります。

指定したカテゴリ変数の列に欠損値(N/A)が含まれている場合、dummy_naをTrueとすることで、上図赤枠のように欠損を表す列が追加されることとなります。

● get_dummies:カテゴリ変数を数値化する処理
● get_dummiesの引数には、対象とするデータとカテゴリ変数の列を指定する必要あり
● カテゴリ変数に欠損値がある場合、引数「dummy_na」をTrueとすればOK

まとめ

いかがだったでしょうか?
以上がカテゴリ変数を数値化するOne-hotエンコーディングの処理となります。

欠損値がない場合と欠損値がある場合のように、データの内容に応じた処理を出来るようにすることが大切です。基本的な内容ではありますが、理解してしまえば応用がかなり効く手法なので、正確な「前処理」をすることでデータ分析力を向上させてみてください。

では今回はこのへんで。