最終更新日:2021/9/5

ダミー変数を使って、データを数値に置き換える方法を説明します。
ダミー変数とは、 「Yesを1、Noを0」のように、情報を数値に置き換えた変数です。その数字自体に意味はありません。しかし、情報を数値にするこで、扱いやすさが飛躍的に向上します。

【説明すること】

1. ダミー変数に置き換える(値が2つの場合)

0か1、の2つに分けられる場合はdf.map()(map関数)とラムダ関数(lambda関数)の組み合わせで処理するのが簡単です。

以下のcsvファイルを読み込んで例を挙げます。
ここでは、’m’ならば0、’f’ならば1と置き換えます。

a008_001a.csv

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