どうもニコイチです。前回までで、データの読み込みや簡単な集計、グラフ化を学びました。今回は、ダミー変数化という少し特殊なデータ加工テクニックを学びます。これは、質的なデータを数値データに変換する上で非常に重要なステップです。
「質的データ?」「量的データ?」という方もいると思うので、まずはそこから説明しますね。
全編はこちらから

質的データと量的データ
- 質的データ: 文字や記号で表されるデータのことです。「カテゴリデータ」とも呼ばれます。例:
- 血液型(A型、B型、O型、AB型)
- 好きな色(赤、青、黄)
- 今回使うデータでは、部屋のタイプ(room_type)やベッドのタイプ(bed_type)などがあります。
- 量的データ: 数値で表されるデータのことです。例:
- 身長(170cm)
- 体重(60kg)
- 今回使うデータでは、宿泊人数(accommodates)やバスルームの数(bathrooms)、掃除料金(cleaning_fee)などがあります。
ダミー変数化とは?
ダミー変数化とは、質的データを量的データに変換する魔法のようなテクニックです。なぜこんなことをする必要があるのでしょうか?それは、重回帰モデルなど多くの機械学習モデルが、数値データしか扱えないからです。
例えば、「部屋のタイプ」という質的データは、「個室」「ホテルの一室」「シェアハウス」などのカテゴリーに分かれます。これをそのままモデルに投入しても、モデルは理解できません。そこで、ダミー変数化によって、それぞれのカテゴリーを数値データに変換します。
ダミー変数化の例:部屋タイプ
「部屋のタイプ」をダミー変数化する例を見てみましょう。もし、データの中に「個室」「ホテルの一室」「シェアハウス」という3種類の部屋タイプがあったとします。この時、それぞれの部屋タイプに対応する列を作成し、該当する部屋タイプには「1」、それ以外には「0」を入れることで、数値データに変換します。
部屋タイプ | 個室 | ホテルの一室 | シェアハウス |
個室 | 1 | 0 | 0 |
ホテルの一室 | 0 | 1 | 0 |
シェアハウス | 0 | 0 | 1 |
個室 | 1 | 0 | 0 |
このように、それぞれのカテゴリーを0と1で表現することをOne-Hot表現と呼びます。
なぜOne-Hot表現を使うのか?
One-Hot表現を使う理由は、数値に意味を持たせないためです。もし、部屋タイプを「個室=1」「ホテルの一室=2」「シェアハウス=3」のように数値で表現してしまうと、モデルは「ホテルの一室(2)は、個室(1)より価値が高い」「シェアハウス(3)は個室(1)の3倍の価値がある」と誤解してしまう可能性があります。
One-Hot表現を使えば、それぞれのカテゴリーは独立した存在として扱われ、このような誤解を防ぐことができます。
ダミー変数化の実践
それでは、実際に宿泊価格について_demo.csv のデータを使って、ダミー変数化をやってみましょう。
1. 準備
まずは、必要なライブラリをインポートし、データを読み込みます。
import pandas as pd
# CSVファイルの読み込み
data = pd.read_csv('宿泊価格について_demo.csv')
print(data.head())
2. 必要なカラムを選択
今回ダミー変数化を行うカラムと、後で予測モデルを作る際に使用するカラムを選択します。
select_columns = ['room_type','accommodates','bed_type','bathrooms','cleaning_fee']
3. ダミー変数化
Pandasのget_dummies()関数を使って、ダミー変数化を行います。drop_first=True を指定することで、ダミー変数の数がカテゴリー数-1になります。今回はroom_typeとbed_typeをダミー変数化します。
dummy_data = pd.get_dummies(data[select_columns],drop_first=True)
ここで、drop_first=Trueを指定する理由を説明します。例えば、room_typeが「個室」「ホテルの一室」「シェアハウス」の3種類だった場合、One-Hot表現では3つの列が必要になります。しかし、3つ全てを使わなくても、2つの列があれば、残りの1つの情報は0と1だけで表現できます。つまり、情報の重複を防ぎ、モデルの計算効率を高めるためにdrop_first=Trueを設定します。
4. ダミー変数化の結果を確認
ダミー変数化したデータを確認してみましょう。
print(dummy_data.head())
room_typeとbed_typeが、それぞれ数値データに変換されていることがわかりますね!
つまずきやすいポイント
- 質的変数と量的変数の見分け方:
- 質的変数は、カテゴリーやグループを表現するものです。
- 量的変数は、数を表現するものです。
- 分からない場合は、その変数が「数えられるものなのか、カテゴリーなのか」を考えると良いでしょう。
- get_dummies()関数の使い方:
- 引数には、ダミー変数化したいデータフレームを指定します。
- drop_first=True を指定すると、1つ少ないダミー変数が作成されます。
- ダミー変数化後の列の確認:
- ダミー変数化後、どのような列が作成されたかを確認することが大切です。
ダミー変数化の注意点
ダミー変数化は非常に便利なテクニックですが、注意点もあります。それは、カラム数が膨大になる可能性があるということです。特に、カテゴリー数が非常に多い質的変数をダミー変数化すると、データがスパース(ほとんどが0)になり、モデルの学習に悪影響を与える可能性があります。そのような場合は、ダミー変数化以外の方法を検討する必要もあります。
まとめ
今回は、ダミー変数化について学びました。
- 質的データは、そのままでは機械学習モデルで扱えない。
- ダミー変数化は、質的データを数値データに変換するテクニック。
- One-Hot表現を使うことで、数値に意味を持たせずにカテゴリーを表現できる。
- Pandasのget_dummies()関数を使うことで、簡単にダミー変数化できる。
- ダミー変数化によってカラム数が膨大になる可能性があるため、注意が必要。
ダミー変数化は、データ分析の基礎となる重要なステップです。今回の内容をしっかりと理解し、次回の予測モデル作成に備えましょう!
コメント