ダミー変数に変換 【One-Hotエンコーディング】

今回の記事はカテゴリ変数をダミー変数に変換を解説します。

ダミー変数とは、

カテゴリ変数を数字に変換する手法のことです。具体的には、数字ではないデータを「0」と「1」だけの数列に変換します。機械学習は数字などの量的データによって行うものですが、それ以外の事柄でも数字に変換し、分析に取り入れることができます。多クラスの特徴量をone-hot表現に変換したりすることです。

ダミー変数の作り方

二者択一のダミー変数を作成する場合は、どちらか一方を「0」、もう片方を「1」と変換してデータを作ります。

例えば 「はい→1、いいえ→0」、 「男→1、女→0」、 「あり→1、なし→0」

 

複数から選択するダミー変数を作成する場合は、含まれる要素の数に応じたダミー変数を作ることでデータに転換可能です。例えば、 国「日本、 中国、アメリカ」

日本ダミー : 日本を1、その他を0とした数列

中国ダミー : 中国を1、その他を0とした数列

アメリカダミー : アメリカを1、その他を0とした数列

 

だは、pandasのget_dummiesでダミー変数を変更しましょう。

pandas.get_dummies(data, prefix=None, prefix_sep=’_’, dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)

 

data – ダミー変数を作成したいデータ

prefix – DataFrameのカラムラベルに付け加える文字列

prefix_sep – prefixで指定された文字列を付け加える際に橋渡しとなる文字列

dummy_na – 欠損値もダミー変数の処理

columns – ダミー変数に変換したい列データ

sparse – SparseDataFrameとして返り値

drop_first – カテゴリー数がk個あった時、k-1個のダミー変数を作成するかどうか

dtype – 新たなカラムのデータ型

 

# サンプルデータ作成

import pandas as pd
import numpy as np
data = [
    (‘Japan’, ‘Female’, 400),
    (‘China’, ‘Male’, 200),
    (‘India’, ‘Female’, 300),
    (‘Japan’, ‘Male’, 400),
    (‘China’, ‘Male’, 500),
    (‘Korea’, np.nan, 300)]

columns = [‘country’, ‘gender’, ‘value’ ]
df = pd.DataFrame(data, columns=columns)
df

# サンプルデータ作成

import pandas as pd
import numpy as np
data = [
    (‘Japan’, ‘Female’, 400),
    (‘China’, ‘Male’, 200),
    (‘India’, ‘Female’, 300),
    (‘Japan’, ‘Male’, 400),
    (‘China’, ‘Male’, 500),
    (‘Korea’, np.nan, 300)]

columns = [‘country’, ‘gender’, ‘value’ ]
df = pd.DataFrame(data, columns=columns)
df

# 二者択一のダミー変数
pd.get_dummies(df[‘gender’])

                   Female      Male
0                1                0
1                0                1
2                1                0
3                0                1
4                0                1
5                0                0

# 複数から選択するダミー変数
pd.get_dummies(df[‘country’])

                   China        India          Japan         Korea
0                0                0                1                0
1                1                0                0                0
2                0                1                0                0
3                0                0                1                0
4                1                0                0                0
5                0                0                0                1

# 全てのデータダミー変数
pd.get_dummies(df)

                   value         country_China           country_India             country_Japan            country_Korea           gender_Female                   gender_Male
0                400            0                0                1                0                1                0
1                200            1                0                0                0                0                1
2                300            0                1                0                0                1                0
3                400            0                0                1                0                0                1
4                500            1                0                0                0                0                1
5                300            0                0                0                1                0                0

drop_first

最初のカテゴリーを除外

k個のカテゴリーをダミー化する場合、k-1個のダミー変数があればよいが、get_dummies()関数ではデフォルトでk個のダミー変数に変換されます。

# drop_first=True
pd.get_dummies(df[‘gender’], drop_first=True)

                   Male
0                0
1                1
2                0
3                1
4                1
5                0

dummy_na

NaNも一つのカテゴリーとしてダミー変数化したい場合は、引数dummy_na=Trueとします。

# dummy_na=True
pd.get_dummies(df[‘gender’], dummy_na=True)

                   Female      Male          nan
0                1                0                0
1                0                1                0
2                1                0                0
3                0                1                0
4                0                1                0
5                0                0                1

prefix, prefix_sep

デフォルトでは生成されるダミー変数の列名は元の列名_カテゴリー名となります。

Prefix と prefix_sepを指定すると、<prefix><prefix-sep>カテゴリー名のようになります。

# prefix, prefix_sep
pd.get_dummies(df[‘country’], prefix=’C’, prefix_sep=’_’)

                   C_China   C_India     C_Japan    C_Korea
0                0                0                1                0
1                1                0                0                0
2                0                1                0                0
3                0                0                1                0
4                1                0                0                0
5                0                0                0                1

Columns

columnsにダミー化したい列の列名をリストで指定すると、数値やブールの列もダミー化できます。

# Columns
pd.get_dummies(df, columns=[‘gender’,’value’])

                   country     gender_Female          gender_Male              value_200 value_300 value_400 value_500
0                Japan         1                0                0                0                1                0
1                China        0                1                1                0                0                0
2                India          1                0                0                1                0                0
3                Japan         0                1                0                0                1                0
4                China        0                1                0                0                0                1
5                Korea        0                0                0                1                0                0

1 thought on “ダミー変数に変換 【One-Hotエンコーディング】”

  1. Pingback: Statsmodelsでの回帰分析 | S-Analysis

Comments are closed.