레이블 인코딩

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으로 범주형 데이터 다루기

코드북 / 데이터 사전

미국 주택 조사(AHS)의 코드북 예시.

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...