범주형 변수 설정

Python으로 범주형 데이터 다루기

Kasey Jones

Research Data Scientist

새 데이터셋: 입양 가능 개

dogs.info()  
RangeIndex: 2937 entries, 0 to 2936, Data columns (total 19 columns):
 #   Column             Non-Null Count  Dtype  
 --  ------             --------------  -----  
 0   ID                 2937 non-null   int64  
 ...
 8   color              2937 non-null   object 
 9   coat               2937 non-null   object 
 ...
 17  get_along_cats     431 non-null    object 
 18  keep_in            1916 non-null   object 
dtypes: float64(1), int64(1), object(17)
memory usage: 436.1+ KB
...
1 https://www.kaggle.com/jmolitoris/adoptable-dogs
Python으로 범주형 데이터 다루기

개의 털길이(coat)

dogs["coat"] = dogs["coat"].astype("category")
dogs["coat"].value_counts(dropna=False)
short         1972
medium         565
wirehaired     220
long           180
Name: coat, dtype: int64
Python으로 범주형 데이터 다루기

.cat 접근자 객체

Series.cat.method_name

공통 매개변수:

  • new_categories: 범주 목록
  • inplace: Boolean - 업데이트가 Series를 덮어쓸지 여부
  • ordered: Boolean - 범주형을 순서형으로 취급할지 여부
Python으로 범주형 데이터 다루기

Series 범주 설정

범주 설정:

dogs["coat"] = dogs["coat"].cat.set_categories(
  new_categories=["short", "medium", "long"]
)

값 분포 확인:

dogs["coat"].value_counts(dropna=False)
short     1972
medium     565
NaN        220
long       180
Python으로 범주형 데이터 다루기

순서 설정

dogs["coat"] = dogs["coat"].cat.set_categories(
  new_categories=["short", "medium", "long"],
  ordered=True
)
dogs["coat"].head(3)
0     short
1     short
2     short
Name: coat, dtype: category
Categories (3, object): ['short' < 'medium' < 'long']
Python으로 범주형 데이터 다루기

누락된 범주

dogs["likes_people"].value_counts(dropna=False)
yes    1991
NaN     938
no        8

NaN은 다음을 의미할 수 있습니다:

  1. 실제로 미확인(확인하지 않음)
  2. 확실하지 않음(개가 일부 사람만 좋아함)
Python으로 범주형 데이터 다루기

범주 추가하기

범주 추가

dogs["likes_people"] = dogs["likes_people"].astype("category")
dogs["likes_people"] = dogs["likes_people"].cat.add_categories(
  new_categories=["did not check", "could not tell"]
)

범주 확인:

dogs["likes_people"].cat.categories
Index(['no', 'yes', 'did not check', 'could not tell'], dtype='object')
Python으로 범주형 데이터 다루기

새 범주

dogs["likes_people"].value_counts(dropna=False)
yes               1991
NaN                938
no                   8
could not tell       0
did not check        0
Python으로 범주형 데이터 다루기

범주 제거하기

dogs["coat"] = dogs["coat"].astype("category")
dogs["coat"] = dogs["coat"].cat.remove_categories(removals=["wirehaired"])

범주 확인:

dogs["coat"].cat.categories
Index(['long', 'medium', 'short'], dtype='object')
Python으로 범주형 데이터 다루기

메서드 요약

  • 설정: cat.set_categories()
    • 범주의 순서를 설정할 수 있습니다
    • 이 메서드에 미지정된 값은 모두 제거됩니다
  • 추가: cat.add_categories()
    • DataFrame의 값은 변경되지 않습니다
    • 이 메서드에 나열되지 않은 범주는 그대로 둡니다
  • 제거: cat.remove_categories()
    • 나열된 범주와 일치하는 값은 NaN으로 설정됩니다
Python으로 범주형 데이터 다루기

범주 업데이트 연습

Python으로 범주형 데이터 다루기

Preparing Video For Download...