標籤編碼

在 Python 中處理類別資料

Kasey Jones

Research Data Scientist

什麼是標籤編碼?

重點:

  • 將每個類別編成整數 0 到 n - 1,其中 n 為類別數
  • -1 保留給遺漏值
  • 可節省記憶體
  • 調查常用

缺點:

  • 對機器學習不是最佳編碼法(見下一課)
在 Python 中處理類別資料

建立代碼

轉為分類並依製造商名稱排序

used_cars['manufacturer_name'] = used_cars['manufacturer_name'].astype("category")

使用 .cat.codes

used_cars['manufacturer_code'] = used_cars['manufacturer_name'].cat.codes
在 Python 中處理類別資料

檢查輸出

print(used_cars[['manufacturer_name', 'manufacturer_code']])
      manufacturer_name  manufacturer_code
0                Subaru                 45
1                Subaru                 45
2                Subaru                 45
...                 ...                ...
38526          Chrysler                  8
38527          Chrysler                  8
在 Python 中處理類別資料

代碼手冊/資料字典

美國住宅調查的範例代碼手冊。

1 https://www.census.gov/data-tools/demo/codebook/ahs/ahsdict.html
在 Python 中處理類別資料

建立代碼手冊

codes = used_cars['manufacturer_name'].cat.codes
categories = used_cars['manufacturer_name']
name_map = dict(zip(codes, categories))

print(name_map)
{45: 'Subaru',
 24: 'LADA',
 12: 'Dodge',
 ...
}
在 Python 中處理類別資料

使用代碼手冊

建立代碼:

used_cars['manufacturer_code'] = used_cars['manufacturer_name'].cat.codes

還原為原值:

used_cars['manufacturer_code'].map(name_map)
0        Acura
1        Acura
2        Acura
...
1 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.map.html
在 Python 中處理類別資料

布林編碼

找出所有包含「van」的車身型式:

# 前一課的程式碼:
used_cars["body_type"].str.contains("van", regex=False)

建立布林編碼:

used_cars["van_code"] = np.where(
  used_cars["body_type"].str.contains("van", regex=False), 1, 0)

used_cars["van_code"].value_counts()
0    34115
1     4416
Name: van_code, dtype: int64
在 Python 中處理類別資料

編碼練習

在 Python 中處理類別資料

Preparing Video For Download...