pandas.Series.str.get_dummies() 関数
pandas.Series.str.get_dummies() 関数
pandas.Series.str.get_dummies()
関数は、カテゴリカル変数をダミー変数に変換するために使用されます。ダミー変数とは、各カテゴリに 0/1 の値を割り当てるバイナリ変数のことです。
使い方
import pandas as pd
# データの作成
data = pd.Series(['A', 'B', 'C', 'A', 'B'])
# ダミー変数の作成
dummy_data = data.str.get_dummies()
print(dummy_data)
上記のコードを実行すると、以下の出力が得られます。
A B C
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
4 0 1 0
オプション
sep
: 文字列を分割する区切り文字を指定します。デフォルトは|
です。prefix
: ダミー変数の列名にプレフィックスを追加します。デフォルトはNone
です。drop_first
: 最初のダミー変数を削除します。デフォルトはFalse
です。
# 区切り文字を指定
dummy_data = data.str.get_dummies(sep=',')
print(dummy_data)
A,B,C
0 1,0,0
1 0,1,0
2 0,0,1
3 1,0,0
4 0,1,0
prefix
を指定
# 列名にプレフィックスを追加
dummy_data = data.str.get_dummies(prefix='category')
print(dummy_data)
category_A category_B category_C
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
4 0 1 0
drop_first
を指定
# 最初のダミー変数を削除
dummy_data = data.str.get_dummies(drop_first=True)
print(dummy_data)
B C
0 0 0
1 1 0
2 0 1
3 0 0
4 1 0
利点
- カテゴリカル変数を数値に変換することで、機械学習モデルで扱いやすくすることができます。
- データ可視化を容易にすることができます。
注意点
- ダミー変数の数が多すぎると、モデルが過学習する可能性があります。
- メモリ使用量が増加する可能性があります。
この例では、複数の区切り文字を持つ文字列を分割し、それぞれのカテゴリに対してダミー変数を作成します。
import pandas as pd
# データの作成
data = pd.Series(['A,B,C', 'A,B', 'C,A,B'])
# 複数の区切り文字を指定
dummy_data = data.str.get_dummies(sep=', |,')
print(dummy_data)
A B C
0 1 1 1
1 1 1 0
2 0 1 1
例 2:列名をカスタマイズ
この例では、ダミー変数の列名をカスタマイズします。
import pandas as pd
# データの作成
data = pd.Series(['US', 'UK', 'US', 'Canada'])
# 列名をカスタマイズ
dummy_data = data.str.get_dummies(prefix='country')
print(dummy_data)
country_US country_UK country_Canada
0 1 0 0
1 0 1 0
2 1 0 0
3 0 0 1
例 3:最初のダミー変数を削除
この例では、最初のダミー変数を削除します。
import pandas as pd
# データの作成
data = pd.Series(['Male', 'Female', 'Male', 'Female'])
# 最初のダミー変数を削除
dummy_data = data.str.get_dummies(drop_first=True)
print(dummy_data)
Female Male
0 0 1
1 1 0
2 0 1
3 1 0
pd.get_dummies
関数は、DataFrame の列をダミー変数に変換するために使用されます。Series
に対して使用する場合は、まず Series
を DataFrame に変換する必要があります。
import pandas as pd
# データの作成
data = pd.Series(['A', 'B', 'C', 'A', 'B'])
# DataFrameへの変換
df = pd.DataFrame({'col': data})
# ダミー変数の作成
dummy_data = pd.get_dummies(df)
print(dummy_data)
col_A col_B col_C
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
4 0 1 0
ループと条件分岐
ループと条件分岐を使用して、手動でダミー変数を作成することもできます。
import pandas as pd
# データの作成
data = pd.Series(['A', 'B', 'C', 'A', 'B'])
# ダミー変数の作成
dummy_data = pd.DataFrame()
for category in data.unique():
dummy_data[f'dummy_{category}'] = data == category
print(dummy_data)
dummy_A dummy_B dummy_C
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
4 0 1 0
正規表現
正規表現を使用して、文字列を分割し、ダミー変数を作成することもできます。
import pandas as pd
import re
# データの作成
data = pd.Series(['A,B,C', 'A,B', 'C,A,B'])
# 正規表現による分割
dummy_data = pd.DataFrame()
for value in data:
categories = re.findall(r'[A-Z]', value)
for category in categories:
dummy_data[f'dummy_{category}'] = value.count(category)
print(dummy_data)
dummy_A dummy_B dummy_C
0 1 1 1
1 1 1 0
2 0 0 2
3 1 1 0
4 0 1 1
外部ライブラリ
scikit-learn や category_encoders などの外部ライブラリを使用して、ダミー変数を作成することもできます。これらのライブラリは、pandas.Series.str.get_dummies
関数よりも多くの機能を提供する場合があります。