順序特徴量のマッピング

カテゴリーデータは主に以下の2種類に区別されます。

順序特徴量
名義特徴量
順序特徴量はTシャツのサイズの「XL > L > M > S」のように数値ではないが順序付けできるうようなデータのことを指します。

一方でTシャツの色の「赤」「青」「緑」「黄色」のようなデータは、順序をつけられないため名義特徴量と呼ばれます。

ここではTシャツのサイズの順序特徴量を数値データにマッピングし解析しやすくしてみましょう。

数値データにマッピングするのは、多くの機械学習ライブラリーが文字列などのままでは利用できないからです。

まずはinput/data2.csvを読み込んでみましょう。

CSVには、Tシャツの商品情報が含まれています。

size … Tシャツのサイズ
color … Tシャツの色
price .. Tシャツの価格
この中のTシャツのサイズを順序特徴量として扱えるように数値データにマッピングします。

TシャツのサイズはXL, L, M, Sの4つとなります。
サイズは「XL > L > M > S」の順序関係を持ちます。
この順序関係を維持するように、以下のように数値データとしてマッピングします。

XL -> 4
L -> 3
M -> 2
S -> 1
自動で数値に変換することはできないので、あらかじめマッピング用の辞書を用意して変換処理をします。

pandas.DataFrameのmapメソッドを使って変換します。

import pandas as pd
df = pd.read_csv('./input/data2.csv')

# 全データの表示
df
# マッピング用の辞書データを用意
size_mapping = {'XL': 4,  'L': 3, 'M': 2, 'S': 1}

# size列に対してマッピング用辞書の適用
values = df['size'].map(size_mapping)

# size列に対して変換後のデータを代入
df['size'] = values
df

Tシャツのサイズを数値データとしてマッピングするこができました。数値の大小によって順序特徴量として扱えます。

df['size'].mapの説明

対象の列に対して、マッピング用の辞書を指定することで、データの変換処理をしています。

# マッピング用の辞書データを用意
size_mapping = {'XL': 4,  'L': 3, 'M': 2, 'S': 1}

# size列に対してマッピング用辞書の適用
values = df['size'].map(size_mapping)

mapメソッドは以下のようなPythonコードとほぼ同じ処理をしています。

size_mapping = {'XL': 4,  'L': 3, 'M': 2, 'S': 1}

# size列に対してマッピング用辞書の適用
values = []
for size in df['size']:
    if size in size_mapping:
        values.append(size_mapping[size])

コメント

タイトルとURLをコピーしました