본문 바로가기
Python for Beginners

범주형 데이터 관리 Categorical

by Records that rule memory 2024. 7. 23.
728x90

Categorical

 

판다스(Pandas)의 Categorical 데이터 유형은 범주형 데이터를 효율적으로 다루기 위해 설계된 특수한 데이터 유형입니다. 이 데이터 유형은 특히 범주의 수가 제한적이고 반복적일 때 메모리 사용을 최적화하고 데이터 분석을 개선할 수 있도록 도와줍니다. 여기에 Categorical 데이터 유형에 대한 자세한 설명을 드리겠습니다.

Categorical 데이터 유형의 기본

판다스에서 Categorical 데이터 유형은 데이터를 범주(Category)로 구분할 때 사용됩니다. 예를 들어, "남성"과 "여성", "소형", "중형", "대형" 등과 같이 명확히 구분되는 값들을 범주형 데이터라고 할 수 있습니다. 이 데이터 유형은 내부적으로 정수를 사용하여 범주를 인코딩하며, 각 범주는 사전에 정의된 범주형 배열에 따라 관리됩니다.

Categorical 데이터의 장점

  1. 메모리 효율성: Categorical 데이터 유형은 반복되는 문자열 데이터를 정수로 변환하여 저장함으로써 메모리 사용을 줄입니다. 특히 데이터 세트가 크고 범주의 수가 제한적인 경우 메모리 절감 효과가 큽니다.
  2. 성능 향상: 데이터를 범주형으로 처리함으로써 일부 연산에서 성능을 향상시킬 수 있습니다. 예를 들어, 범주형 데이터는 정렬이나 그룹화 시 더 빠르게 처리될 수 있습니다.
  3. 의미적 명확성: 데이터를 범주형으로 지정함으로써 데이터에 대한 해석을 더 명확하게 할 수 있으며, 데이터의 유효성 검사가 간편해집니다.

Categorical 데이터 사용 예

다음은 판다스에서 Categorical 데이터 유형을 생성하고 사용하는 간단한 예제입니다.

import pandas as pd

# 범주형 데이터 생성
s = pd.Series(["a", "b", "c", "a"], dtype="category")

print(s)
print(s.cat.categories)  # 범주 출력
print(s.cat.codes)       # 내부적으로 저장된 정수 코드 출력

Categorical 데이터의 메소드

Categorical 데이터 유형에는 범주를 조작하기 위한 여러 메소드가 있습니다:

  • add_categories: 새로운 범주 추가
  • remove_categories: 범주 제거
  • rename_categories: 범주 이름 변경
  • reorder_categories: 범주의 순서 재정의
  • as_ordered: 범주를 순서가 있는(ordered) 데이터로 변환
  • as_unordered: 범주를 순서가 없는(unordered) 데이터로 변환

이러한 메소드들을 사용하여 데이터의 범주를 동적으로 조정하고 분석의 유연성을 높일 수 있습니다.

 

Categorical 데이터 유형은 데이터의 크기가 크고 범주의 반복이 많은 데이터 세트에서 특히 유용합니다. 판다스를 사용하는 데이터 과학자나 분석가는 이 데이터 유형을 통해 데이터의 처리 속도를 높이고, 메모리 사용을 줄일 수 있습니다.

 

예제에서는 범주형 데이터를 만들고, 수정하며, 연산을 수행하는 방법을 알아보겠습니다.

1. Categorical 데이터 생성 및 기본 사용

import pandas as pd

# 일반적인 문자열 데이터를 사용하여 Series 생성
data = ["apple", "orange", "banana", "apple", "orange"]
s = pd.Series(data)

# Categorical 데이터로 변환
categories = pd.Categorical(s)
print("Categorical 데이터:")
print(categories)

# Categorical 속성 접근
print("\n범주 확인:")
print(categories.categories)

print("\n정수 코드:")
print(categories.codes)

2. Categorical 데이터 조작

# 범주 추가, 제거, 변경
categories = categories.add_categories(["mango"])
print("\n범주 추가 후:")
print(categories.categories)

categories = categories.remove_categories(["banana"])
print("\n범주 제거 후:")
print(categories.categories)

categories = categories.rename_categories({"apple": "사과", "orange": "오렌지", "mango": "망고"})
print("\n범주 이름 변경 후:")
print(categories.categories)

3. Categorical 데이터의 정렬과 순서

# 순서 있는 Categorical 데이터 생성
ordered_cat = pd.Categorical(["tall", "short", "medium"], 
	categories=["short", "medium", "tall"], ordered=True)
print("\n순서 있는 범주 생성:")
print(ordered_cat)

# 순서를 사용한 정렬
print("\n정렬된 데이터:")
print(sorted(ordered_cat))

4. 범주형 데이터를 사용한 그룹화 및 연산

# 데이터프레임에 Categorical 데이터 적용
df = pd.DataFrame({"fruits": ["apple", "orange", "banana", "apple", "orange"],
                   "count": [10, 20, 15, 10, 20]})
df["fruits"] = df["fruits"].astype("category")

print("\n데이터프레임:")
print(df)

# 범주형 데이터를 기준으로 그룹화 및 합계 연산
grouped = df.groupby("fruits", observed=True).sum()
print("\n그룹화 및 합계:")
print(grouped)

이러한 예제들은 판다스의 Categorical 데이터를 활용하여 데이터의 크기를 최적화하고, 데이터 처리 및 분석을 효과적으로 수행할 수 있게 해줍니다. 범주형 데이터는 메모리 사용을 줄이면서도 데이터의 의미를 명확히 하고 연산을 빠르게 수행할 수 있는 강력한 도구입니다.

 

범주형 데이터는 실제 애플리케이션에서 데이터 처리 및 분석의 효율성을 향상시키는 데 널리 사용됩니다. 특히, 데이터가 명확한 범주를 갖고 있을 때 메모리 사용을 최소화하고, 처리 속도를 높이며, 데이터 분석을 간편하게 할 수 있습니다. 여기서는 판다스의 Categorical 데이터 유형을 사용하여 고객 세그먼트 데이터를 처리하는 실제적인 예제 코드를 제공하겠습니다.

예제 시나리오

이 예제에서는 온라인 상점의 고객 데이터를 분석하여 다양한 고객 유형(세그먼트)에 따라 분류하고, 각 세그먼트별로 매출을 계산합니다. 고객 세그먼트는 'VIP', 'Loyal', 'New', 'Occasional' 등으로 구분됩니다.

데이터 준비

고객 데이터에는 고객 ID, 구매 금액 및 고객 세그먼트 정보가 포함되어 있습니다.

import pandas as pd

# 고객 데이터 생성
data = {
    'CustomerID': [1, 2, 3, 4, 5, 6],
    'PurchaseAmount': [100, 300, 200, 500, 300, 100],
    'Segment': ['New', 'Loyal', 'VIP', 'VIP', 'Occasional', 'New']
}

df = pd.DataFrame(data)

# Segment 열을 범주형 데이터로 변환
df['Segment'] = pd.Categorical(df['Segment'], 
	categories=['New', 'Loyal', 'Occasional', 'VIP'], ordered=True)

데이터 분석: 세그먼트별 매출 계산

# 세그먼트별로 그룹화하고 매출 합계를 계산
segment_sales = df.groupby('Segment', observed=True).sum()

print(segment_sales)

결과 출력 및 시각화

매출 데이터를 시각화하여 각 세그먼트의 매출 기여도를 보다 쉽게 이해할 수 있습니다.

import matplotlib.pyplot as plt

# 매출 시각화
segment_sales['PurchaseAmount'].plot(kind='bar', color='skyblue')
plt.xlabel('Customer Segment')
plt.ylabel('Total Purchase Amount')
plt.title('Sales by Customer Segment')
plt.xticks(rotation=45)
plt.show()

예제 코드 설명

  1. 데이터 생성 및 처리: 고객 데이터를 DataFrame으로 생성하고, Segment 열을 판다스의 Categorical 타입으로 변환합니다. 이는 데이터 처리 속도를 향상시키고, 메모리를 절약할 뿐만 아니라, 데이터 분석을 더욱 효율적으로 만듭니다.
  2. 그룹화 및 연산: groupby 함수를 사용하여 세그먼트별로 데이터를 그룹화하고, 각 그룹의 매출 합계를 계산합니다.
  3. 시각화: 막대 그래프를 사용하여 각 세그먼트별 매출을 시각화합니다. 이는 각 세그먼트의 성과를 직관적으로 평가하는 데 도움이 됩니다.

이 예제는 범주형 데이터를 효율적으로 관리하고 분석하는 방법을 보여줍니다. 데이터 세트의 크기가 크거나, 데이터가 명확한 범주를 갖는 경우에 특히 유용합니다.

 

시각화

728x90