본문 바로가기

Programming/Python

[Pandas] categorical data type(범주형 데이터 타입)이란? (category datatype 사용 예제, pandas.Series.cat 사용법)

728x90
반응형

pandas에서 사용하는 데이엍 타입은 아래와 같다.

 

https://pbpython.com/pandas_dtypes_cat.html

이 중에서 Pandas에만 있고, python, numpy에는 없는 category 타입에 대해서 간단하게 알아보자.

 

category 타입이란 text 값의 유한한 리스트를 표현할 때 사용하는 데이터 타입이다.

이렇게 말하면 잘 이해가 안갈 수 있는데 예를 살펴보면 간단하다.

  • 사이즈 (X-Small, Small, Medium, Large, X-Large)
  • 색깔 (빨강, 검정, 흰색)
  • 스타일 (반팔, 긴팔)

pandas에서는 category 데이터를 어떻게 표현할 수 있는걸까?

category data type은 hybrid data type이다. 

보기에는 string처럼 보이나 내부적으로는 integer의 배열로 표현이 되어있다.

이를 통해 사용자가 원하는대로 순서를 정해 저장할 수도 있고, 효율적으로 데이터 저장이 가능해진다.

 

그렇다면 왜 category 데이터를 써야 할까? 

 

1. 만약에 위에 사이즈 데이터를 str로 저장한다고 해보자.

우리가 생각하기에 사이즈간의 순서는 “X-Small” < “Small” < “Medium” < “Large” < “X-Large” 가 되어야 한다(custom order)

그러나 str로 저장 시 알파벳 순서대로 정렬하게 되면 위와 같은 순서대로 정렬을 할 수가 없다. 

 

2. categorical data type을 적절한 통계 모델 / plot types로 해석할 수 있는 파이썬 시각화 라이브러리들이 존재한다.

 

3. Categorical data는 더 적은 메모리를 사용하고 이는 성능 향상으로 이어진다.

 

 

* Categorical data 사용 예제 *

위에서 말한 사이즈 예제로 한 번 만들어보자. 

5가지의 카테고리 데이터가 생겼음을 확인할 수 있다. 

s = pd.Series(["Medium", "Large", "X-Small", "Large", "Small", "X-Large", "X-Small", "Medium", "X-Large"]).astype("category")
>>> s
0     Medium
1      Large
2    X-Small
3      Large
4      Small
5    X-Large
6    X-Small
7     Medium
8    X-Large
dtype: category
Categories (5, object): ['Large', 'Medium', 'Small', 'X-Large', 'X-Small']

 

 

pandas.Series.cat

series 데이터에서 categorical data에 접근하기 위해서는 .cat이라는 오브젝트를 사용하면 된다. 

아래 명령어를 통해 현재 카테고리 정보를 확인할 수 있다.

>>> s.cat.categories
Index(['Large', 'Medium', 'Small', 'X-Large', 'X-Small'], dtype='object')

 

그러나 아직 순서는 우리가 원하는 “X-Small” < “Small” < “Medium” < “Large” < “X-Large” 로 되어있지 않다.

초기에는 시리즈 내에 있는 데이터를 가지고 알파벳 순서로 정렬이 되어 있다. 

custom order를 사용하고자 할 때는 cat.reorder_categories로 원하는 순서를 지정해주면 된다.

그러면 아래와 같이 카테고리의 순서가 바뀐 것을 확인할 수 있다.

>>> s.cat.reorder_categories(["X-Small", "Small", "Medium", "Large", "X-Large"], inplace = True)
0     Medium
1      Large
2    X-Small
3      Large
4      Small
5    X-Large
6    X-Small
7     Medium
8    X-Large
dtype: category
Categories (5, object): ['X-Small', 'Small', 'Medium', 'Large', 'X-Large']

 

또한 카테고리를 추가하고자 할 때에는 .cat.add_categories

삭제할 때에는 .cat.remove_categories

사용되지 않는 카테고리만 삭제할 때에는 .cat.remove_unused_categories

또한 .cat.as_ordered()를 통해 카테고리 데이터 간 대소비교도 확인할 수 있다.

>>> s.cat.as_ordered()
0     Medium
1      Large
2    X-Small
3      Large
4      Small
5    X-Large
6    X-Small
7     Medium
8    X-Large
dtype: category
Categories (5, object): ['X-Small' < 'Small' < 'Medium' < 'Large' < 'X-Large']

 

 

참고자료)

 

Using The Pandas Category Data Type - Practical Business Python

Mon 07 January 2019 Posted by Chris Moffitt in articles    Introduction In my previous article, I wrote about pandas data types; what they are and how to convert data to the appropriate type. This article will focus on the pandas categorical data type an

pbpython.com

 

pandas.Series.cat — pandas 1.3.4 documentation

Accessor object for categorical properties of the Series values. Be aware that assigning to categories is a inplace operation, while all methods return new categorical data per default (but can be called with inplace=True). Parameters dataSeries or Categor

pandas.pydata.org

 

728x90
반응형