最終更新日:2021/9/5
ダミー変数を使って、データを数値に置き換える方法を説明します。
ダミー変数とは、 「Yesを1、Noを0」のように、情報を数値に置き換えた変数です。その数字自体に意味はありません。しかし、情報を数値にするこで、扱いやすさが飛躍的に向上します。
【説明すること】
- 1. ダミー変数に置き換える(値が2つの場合) :
df['clm'].map(lambda x: 0 if x=='m' else 1)
- 2. ダミー変数に置き換える(値が3つ以上の場合) :
df['clm'].map(lambda x: 1 if x=='one' else ( 2 if x== 'two' else 3))
またはdf['clm'].map(func)
- 3. ダミー変数で全体像を知る:
pd.get_dummies(df1[['clm0', 'clm1']])
1. ダミー変数に置き換える(値が2つの場合)
0か1、の2つに分けられる場合はdf.map()
(map関数)とラムダ関数(lambda関数)の組み合わせで処理するのが簡単です。
以下のcsvファイルを読み込んで例を挙げます。
ここでは、’m’ならば0、’f’ならば1と置き換えます。
2. ダミー変数に置き換える(値が3つ以上の場合)
【方法1】
以下のように、2つの場合と同様に、ラムダ関数に式を追加していけば可能です。
この例は、’one’ならば1、’two’ならば2、’three’ならば3の場合です。
df['clm'].map(lambda x: 1 if x=='one' else ( 2 if x== 'two' else 3))
【方法2】
しかし、わかりにくいので、3つ以上の場合は、関数を定義して、df.map()
と組み合わせて、以下のように書いた方がいいでしょう。
関数を定義すると、以下のように書き換えられます。
df['clm'].map(func)
ポイントは、.map()
の引数に書く関数名に()は不要、という点です。つまり、func()と書かないで、関数名だけfuncと書きます。
3. ダミー変数で全体像を知る
ダミー変数の0か1をdf全体に割り当て、データの全体像を知る方法です。pd.get_dummies()
を使って、
pd.get_dummies(df1[['clm0', 'clm1']])
と書きます。カラムはlistで指定します。
指定したカラムから、そこに含まれるデータ毎に新しいカラムを作り、その値ならば1のフラグを立ててくれます。
これで、1行ずつ、列ごとにデータを確認できます。全体像を知るのに便利で、この結果を元に、様々な角度からデータを見ることができます。
例えば、どのデータを計算の対象とするかを見極める為に使います。
以下のように、.sum()
で集計すると、どのデータが何個あるかが分かります。
これは、 df.groupby(['clm'])['clm'].count())
でも確認できます。
例えば、データを分ける事で、それがどの程度意味があるか、を確かめる事ができます。
【参考】
pandas.get_dummies() : pandas API reference
https://pandas.pydata.org/docs/reference/api/pandas.get_dummies.html