이전에 쓴 시각화 포스팅의 첫머리에서 데이터의 종류에 대해 설명하였다.
그 때 데이터는 사칙연산이 가능한 '수치형 데이터'(numerical data)와 '범주형 데이터'(categorical data)로 나눌 수 있으며,
범주형 데이터 중에서 순서(순위)가 있는 데이터를 순서형 데이터(ordinal data)라고 하였다.
이런 순서형 데이터가 있는 데이터를 받은 경우, 순위를 꼭 지켜줘야 한다.
그 이유는 순서형 데이터는 순위대로 중요도가 달라지기 때문이다. 대표적인 순서형 데이터인 '학점'의 경우 A+이라는 값과 F 라는 값은 큰 차이가 있듯이!
하지만 데이터셋에 순위가 지정되어 있지 않은 경우가 많다. 이럴 때 판다스의 CategoricalDtype 함수를 사용하면 내가 순위를 지정한 대로 순서가 부여된다.
CategoricalDtype(categories, ordered)
- categories: 순위(순서)를 지정한 리스트
- ordered: True로 설정 시 categories에 전달한 순서를 유지함
예제로 알아보자. 캐글 Categorical Feature Encoding Challenge 의 'train.csv' 데이터를 사용하였다.
import pandas as pd
df = pd.read_csv('train.csv', index_col = 'id')
df.head()
먼저 이 데이터의 경우 순서형 데이터가 ord_0 부터 ord_5 까지 되어 있다. 먼저 dtypes를 확인하자.
ord_col = df.columns[df.columns.str.contains('ord')]
df[ord_col].dtypes
그 중에서 ord_1, ord_2 변수의 순위를 지정해주자. CategoricalDtype을 통해 지정하면 데이터 타입이 category로 변할 것이다.
from pandas.api.types import CategoricalDtype
ord1 = ['Novice', 'Contributor', 'Expert', 'Master', 'Grandmaster']
ord2 = ['Freezing', 'Cold', 'Warm', 'Hot', 'Boiling Hot', 'Lava Hot']
ord_1은 캐글의 등급을 나타내는 변수로, Novice부터 Grandmaster까지의 순서가 있다.
ord_2는 날씨를 나타내는 변수로, 추운 것 → 더운 것 순서대로 순위를 부여하였다.
이 두개의 리스트를 CategoricalDtype에 전달한다.
ord1_d = CategoricalDtype(categories = ord1, ordered = True)
ord2_d = CategoricalDtype(categories = ord2, ordered = True)
ord_1, ord_2 변수에 astype을 활용해 실제 df의 타입을 변경한다.
# 실제로 변경: astype으로 타입 변경
df['ord_1'] = df['ord_1'].astype(ord1_d)
df['ord_2'] = df['ord_2'].astype(ord2_d)
print(df[ord_col].dtypes)
category형으로 잘 변한것을 확인하였다.
df['ord_1']
df의 'ord_1' 컬럼만 시리즈로 떼어내면 'Categories' 가 새로 생겼음을 확인할 수 있으며, 순위가 잘 부여되었다!
'Skillset > Python, Git' 카테고리의 다른 글
[시각화] 파이썬 이중 Y축 그래프 그리기 (ax.twinx) (0) | 2022.07.12 |
---|---|
[pandas] 범주형 데이터 2개를 비교하는 교차분석표(crosstab, 크로스탭) 알아보기 (0) | 2022.07.10 |
[시각화] 파이썬 그래프 위에 글자 쓰기 (ax.patches, ax.text) (0) | 2022.07.09 |
python sample 함수 사용법과 예제 (0) | 2022.07.04 |
[pandas] Series & DataFrame에서 자주 사용하는 유용한 메서드 (2) (0) | 2022.06.27 |