get_dummies関数の概要
Pandasのget_dummies
関数は、カテゴリ変数をダミー変数に変換するための便利なツールです。カテゴリ変数とは、固定された数の異なるグループまたはカテゴリに分けられる変数のことを指します。例えば、性別(男性、女性)、血液型(A、B、O、AB)などがあります。
get_dummies
関数は、カテゴリ変数の各カテゴリを新しいダミー変数(0または1の値を持つ)として表現します。これにより、カテゴリ変数を含むデータセットを機械学習アルゴリズムで扱いやすくなります。
以下に、get_dummies
関数の基本的な使用方法を示します。
import pandas as pd
# カテゴリ変数を含むデータフレームを作成
df = pd.DataFrame({
'A': ['a', 'b', 'a'],
'B': ['b', 'a', 'c']
})
# get_dummies関数を使用してダミー変数を作成
print(pd.get_dummies(df, prefix=['col_A', 'col_B']))
このコードは、以下のような出力を生成します。
col_A_a col_A_b col_B_a col_B_b col_B_c
0 1 0 0 1 0
1 0 1 1 0 0
2 1 0 0 0 1
ここで、col_A_a
は元のカテゴリ変数A
がa
である場合に1
となり、それ以外の場合は0
となります。同様に、他のダミー変数も定義されます。このように、get_dummies
関数を使用すると、カテゴリ変数を効率的に数値データに変換できます。これは、多くの機械学習アルゴリズムが数値データを必要とするため、非常に便利です。また、この関数は欠損値の扱いや多重共線性の防止など、さまざまなオプションを提供しています。これらの詳細については、次のセクションで説明します。
get_dummies関数のパラメータ
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
: ダミー変数の列名に追加するプレフィックス。リストまたは辞書を指定できます。デフォルトでは、元の列名がプレフィックスとして使用されます。 -
prefix_sep
: プレフィックスとダミー変数の値を区切る文字列。デフォルトは'_'
です。 -
dummy_na
:True
に設定すると、欠損値もダミー変数として扱われます。デフォルトはFalse
です。 -
columns
: ダミー変数を作成する列を指定します。デフォルトでは、データフレーム内のすべてのカテゴリ変数(文字列またはオブジェクトデータ型)が対象となります。 -
sparse
:True
に設定すると、ダミー変数のデータフレームはSparseDataFrameとして出力されます。これは、ダミー変数が非常に多い場合にメモリを節約するために使用されます。デフォルトはFalse
です。 -
drop_first
:True
に設定すると、各カテゴリ変数から最初のカテゴリを削除します。これは、ダミー変数の多重共線性を防ぐために使用されます。デフォルトはFalse
です。 -
dtype
: ダミー変数のデータ型を指定します。デフォルトはuint8
です。
これらのパラメータを適切に設定することで、get_dummies
関数は非常に柔軟にカテゴリ変数のダミー化を行うことができます。次のセクションでは、これらのパラメータを活用した実践的な例を見ていきましょう。
実践例: カテゴリ変数のダミー化
ここでは、Pandasのget_dummies
関数を使用してカテゴリ変数をダミー変数に変換する具体的な例を見ていきましょう。
まず、以下のようなカテゴリ変数を含むデータフレームを考えます。
import pandas as pd
df = pd.DataFrame({
'性別': ['男性', '女性', '男性', '女性', '男性'],
'血液型': ['A', 'B', 'O', 'AB', 'A'],
'年齢': [20, 25, 30, 35, 40]
})
print(df)
このデータフレームでは、’性別’と’血液型’がカテゴリ変数となっています。これらのカテゴリ変数をダミー変数に変換するには、get_dummies
関数を使用します。
df_dummies = pd.get_dummies(df, columns=['性別', '血液型'], prefix=['性別', '血液型'])
print(df_dummies)
このコードを実行すると、以下のような出力が得られます。
年齢 性別_女性 性別_男性 血液型_A 血液型_AB 血液型_B 血液型_O
0 20 0 1 1 0 0 0
1 25 1 0 0 0 1 0
2 30 0 1 0 0 0 1
3 35 1 0 0 1 0 0
4 40 0 1 1 0 0 0
ここで、元のカテゴリ変数の各カテゴリが新しいダミー変数として表現されています。たとえば、’性別_女性’は元の’性別’が’女性’である場合に1となり、それ以外の場合は0となります。同様に、他のダミー変数も定義されています。
このように、get_dummies
関数を使用すると、カテゴリ変数を効率的にダミー変数に変換することができます。これは、多くの機械学習アルゴリズムが数値データを必要とするため、非常に便利です。
欠損値の扱い
Pandasのget_dummies
関数は、欠損値の扱いにも対応しています。具体的には、dummy_na
パラメータをTrue
に設定することで、欠損値を別のダミー変数として扱うことができます。
以下に、欠損値を含むデータフレームに対してget_dummies
関数を適用する例を示します。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'性別': ['男性', '女性', np.nan, '女性', '男性'],
'血液型': ['A', 'B', 'O', np.nan, 'A'],
'年齢': [20, 25, 30, 35, 40]
})
df_dummies = pd.get_dummies(df, columns=['性別', '血液型'], prefix=['性別', '血液型'], dummy_na=True)
print(df_dummies)
このコードを実行すると、以下のような出力が得られます。
年齢 性別_女性 性別_男性 性別_nan 血液型_A 血液型_B 血液型_O 血液型_nan
0 20 0 1 0 1 0 0 0
1 25 1 0 0 0 1 0 0
2 30 0 0 1 0 0 1 0
3 35 1 0 0 0 0 0 1
4 40 0 1 0 1 0 0 0
ここで、’性別_nan’と’血液型_nan’が新たに追加されており、これらは元の’性別’と’血液型’が欠損値である場合に1となり、それ以外の場合は0となります。
このように、get_dummies
関数を使用すると、欠損値を含むカテゴリ変数も効率的にダミー変数に変換することができます。ただし、欠損値をどのように扱うかは、分析の目的やデータの性質によりますので、適切な方法を選択することが重要です。
多重共線性の防止
ダミー変数を作成する際には、多重共線性(Multicollinearity)という問題に注意する必要があります。多重共線性とは、予測変数間に高い相関が存在する状態を指します。これは、機械学習モデルのパフォーマンスを低下させる可能性があります。
例えば、性別を表すカテゴリ変数(’男性’、’女性’)をダミー変数に変換すると、’性別_男性’と’性別_女性’の2つのダミー変数が作成されます。しかし、これらのダミー変数は完全に反対の値を持つため、高い相関が存在します。つまり、一方の値がわかれば、もう一方の値も自動的にわかるという状態です。
この問題を解決するために、Pandasのget_dummies
関数ではdrop_first
パラメータを提供しています。このパラメータをTrue
に設定すると、各カテゴリ変数から最初のカテゴリが削除されます。これにより、ダミー変数間の完全な相関関係が解消され、多重共線性が防止されます。
以下に、drop_first
パラメータを使用した例を示します。
import pandas as pd
df = pd.DataFrame({
'性別': ['男性', '女性', '男性', '女性', '男性'],
'血液型': ['A', 'B', 'O', 'AB', 'A'],
'年齢': [20, 25, 30, 35, 40]
})
df_dummies = pd.get_dummies(df, columns=['性別', '血液型'], prefix=['性別', '血液型'], drop_first=True)
print(df_dummies)
このコードを実行すると、以下のような出力が得られます。
年齢 性別_男性 血液型_B 血液型_O 血液型_AB
0 20 1 0 0 0
1 25 0 1 0 0
2 30 1 0 1 0
3 35 0 0 0 1
4 40 1 0 0 0
ここで、’性別_女性’と’血液型_A’のダミー変数が削除されています。これにより、ダミー変数間の完全な相関関係が解消され、多重共線性が防止されています。