[Pandas] Categorical 메서드

J Lee·2025년 1월 15일
0

7.5.4 Categorical 메서드

범주형 데이터를 담고 있는 Series는
앞에서 살펴본 Series.str과 유사한 몇 가지 특수 메서드를 제공한다.
이를 통해 categories와 codes에도 쉽게 접근할 수 있다.
예를 들면,

이렇게 생긴 Series가 있다고 했을 때,

이렇게 cat_s로 바꿀 수 있음은 앞선 포스팅에서 살펴본 바 있다.
이 때, 여기서 특별한 접근자 속성인 cat을 통해
Categorical 메서드에 접근할 수 있다. 즉,

이렇게 쓸 수 있는데, 여기서 cat은
범주형 자료형과 관련된 속성과 메서드를 제공하는 접근자(accessor)다.
cat을 쓰면 범주형 데이터가 어떤 범주를 갖고 있는지를 확인하거나,
혹은 범주형 데이터에 대한 다양한 변환 및 조작이 가능하다.

  • cat.codes를 쓰면 범주형 데이터에서
    각 범주를 정수 코드(integer code)로 변환한 결과를 반환한다.
    이 때, 범주의 갯수가 4개이기 때문에 결과가 int8로 자동 저장된다!
    (이것도 메모리 효율성을 고려한 기능)

    범주의 갯수가 늘어남에 따라
    int16, int32, int64 등으로 점점 더 큰 정수 타입이 자동 선택된다.
  • cat.categories는 범주형 데이터에서 고유한 범주의 값을 확인할 수 있게 해 주는 속성이다. 이를 통해 cat_s에 어떤 범주가 존재하는지를 확인할 수 있고, 기존 범주를 새로운 범주로 바꾸거나 순서를 재정렬할 수도 있다. add_categories를 쓰면 새로운 범주를 추가하는 것도 가능하다.

    결과는 index 객체로 반환된다.

이 데이터의 실제 범주가
데이터에서 확인된 네 종류를 넘는다는 것을 이미 알고 있다고 가정하고,
set_categories를 써서 categories를 변경해 보자.

이렇게 변경하면
데이터는 변함이 없지만 밑의 categories에
새로운 범주 e가 추가된 것을 확인할 수 있다.
이걸 좀 더 정확하게 확인하려면 value_counts를 해 보면 되는데,

보는 것처럼 그냥 cat_s에는 a에서 d까지밖에 없는데
cat_s2에 value_counts를 해 보면 변경된 범주가 반영되어 있다.
(범주만 있고 그에 해당하는 데이터는 없으니 당연히 count는 0)


큰 데이터셋을 다룰 경우 Categorical을 적절히 사용하면
메모리도 아끼고 성능도 개선할 수 있다.
다만 분석 과정에서 DataFrame이나 Series로 한 번 걸러내고 나면
실제로 데이터에는 존재하지 않는 범주가 남아있을 수 있는데,
이 경우 remove_unused_categories 메서드로 관측되지 않은 범주를 제거한다.

예를 들어,

cat_s3라는 Series를 새로 정의해 보자.
cat_s3는 원본인 cat_s에서 isin을 활용해 a와 b만 필터링한 결과다.

여기서 c와 d는 분석에 사용할 데이터가 아님에도
하단 categories에는 남아있음을 볼 수 있는데,

이렇게 remove_unused_categories 메서드를 써 주면
c와 d는 제거되고 categories에도 a와 b만 남게 된다.

사실 c와 d를 남겨놓으면 절대 안 되는 것까지는 아니지만,
사용하지 않는 범주가 남아있으면 다른 사람에게 혼란을 줄 수 있고
("이 범주는 왜 목록에 있는데 한 번도 안 나타난거지?"라고 생각한다는 뜻)
groupby 등을 사용했을 때 데이터가 없는 변수도 집계 결과에 나타날 수 있어
가급적 깔끔하게 정리해 두는 것을 추천한다고 한다.


모델링을 위한 더미 변수 생성하기

통계나 머신러닝 도구를 활용하기 위해
범주형 데이터를 원-핫 인코딩이라고 부르는
더미 변수로 변환해야 하는 경우가 있다.
이 내용에 대해서는 별도 포스팅에서 다룬 적이 있는데,
앞서 살펴본 예제를 다시 보자.

여기서 get_dummies 함수를 활용하면
1차원 범주형 데이터를 더미 변수를 가진 DataFrame으로 변환할 수 있다.
즉,

이런 형태가 된다.
원-핫 인코딩에 관한 내용은 위에 링크된 이전 포스팅에 더 잘 정리되어 있으므로
필요할 때 해당 포스팅을 참고하면 되겠다.

profile
기본기를 소홀히 하지 말자

0개의 댓글

관련 채용 정보