カテゴリーデータは主に以下の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])
コメント