데이터 분석/데이터 사이언스

데이터 사이언스 - 4. 탐색적 데이터 분석 (EDA) (4.4 데이터 그룹화 및 피벗 테이블)

개발_노트 2025. 3. 20. 15:47

4.4 데이터 그룹화 및 피벗 테이블

데이터를 분석할 때 특정 기준으로 데이터를 그룹화하여 요약 정보를 확인하는 것이 중요하다.
Pandas에서는 groupby()와 pivot_table()을 활용하여 데이터를 효율적으로 그룹화하고 요약할 수 있다.

이 장에서는 groupby()와 pivot_table()을 활용한 데이터 그룹화 및 분석 방법을 설명한다.


4.4.1 데이터 그룹화 (groupby() 활용)

① groupby()란?

groupby()는 특정 기준(열)으로 데이터를 그룹화하여, 그룹별 통계값을 계산하는 데 사용된다.
이를 통해 데이터를 요약하고 분석하는 것이 가능하다.

② 기본적인 groupby() 사용 예제

import pandas as pd
import seaborn as sns

# 샘플 데이터 생성 (Seaborn 'tips' 데이터셋 사용)
df = sns.load_dataset("tips")

# 성별(sex)별 평균 결제 금액(total_bill) 계산
grouped_data = df.groupby("sex")["total_bill"].mean()
print(grouped_data)

출력 결과 예시

sex
Female    18.06
Male      20.74
Name: total_bill, dtype: float64
  • 여성(Female) 고객의 평균 결제 금액: 18.06
  • 남성(Male) 고객의 평균 결제 금액: 20.74

③ 다중 그룹화 (여러 개의 그룹 기준 설정)

# 성별(sex)과 요일(day)별 평균 결제 금액 계산
grouped_data = df.groupby(["sex", "day"])["total_bill"].mean()
print(grouped_data)

출력 결과 예시

sex     day  
Female  Fri     14.10
        Sat     19.56
        Sun     19.66
        Thur    17.98
Male    Fri     19.74
        Sat     20.80
        Sun     21.88
        Thur    20.85
Name: total_bill, dtype: float64
  • 그룹화 기준을 ["sex", "day"]로 설정하여 성별과 요일별 평균 결제 금액을 계산

④ 여러 개의 집계 함수 적용 (agg() 활용)

# 성별(sex)별 결제 금액(total_bill)의 평균과 최대값 계산
grouped_data = df.groupby("sex")["total_bill"].agg(["mean", "max"])
print(grouped_data)

출력 결과 예시

         mean   max
sex               
Female  18.06  35.83
Male    20.74  50.81
  • mean: 평균 결제 금액
  • max: 최대 결제 금액

agg()는 여러 개의 통계값을 한 번에 계산할 때 유용


4.4.2 피벗 테이블 (pivot_table() 활용)

① pivot_table()이란?

pivot_table()은 엑셀의 피벗 테이블 기능과 유사하며, 데이터를 행과 열 기준으로 요약하여 분석할 수 있다.

  • groupby()보다 더 유연한 데이터 요약이 가능
  • 여러 개의 그룹 기준과 집계 함수 적용 가능

② 기본적인 pivot_table 사용 예제

# 성별(sex)과 요일(day)별 평균 결제 금액 계산
pivot = df.pivot_table(values="total_bill", index="sex", columns="day", aggfunc="mean")
print(pivot)

출력 결과 예시

day      Fri     Sat     Sun    Thur
sex                                   
Female  14.10  19.56  19.66  17.98
Male    19.74  20.80  21.88  20.85
  • 행(index) → sex (성별)
  • 열(columns) → day (요일)
  • 값(values) → total_bill (평균 결제 금액)

⚠ groupby()와 다르게 출력이 표 형태로 보기 좋게 정리됨


③ 여러 개의 집계 함수 적용

# 성별(sex)과 요일(day)별 결제 금액의 평균(mean)과 최대값(max) 계산
pivot = df.pivot_table(values="total_bill", index="sex", columns="day", aggfunc=["mean", "max"])
print(pivot)

출력 결과 예시

         mean                     max                    
day        Fri    Sat    Sun   Thur   Fri    Sat    Sun   Thur
sex                                                          
Female  14.10  19.56  19.66  17.98  16.27  35.83  43.11  27.91
Male    19.74  20.80  21.88  20.85  34.81  50.81  48.17  41.19
  • aggfunc=["mean", "max"]를 사용하여 평균(mean)과 최대값(max) 계산
  • groupby()보다 더 정리된 형태로 결과를 출력

④ 여러 개의 값 분석

# 성별(sex)과 요일(day)별 결제 금액(total_bill)과 팁(tip)의 평균 계산
pivot = df.pivot_table(values=["total_bill", "tip"], index="sex", columns="day", aggfunc="mean")
print(pivot)

출력 결과 예시

            total_bill                            tip                         
day          Fri     Sat     Sun    Thur   Fri    Sat    Sun    Thur
sex                                                                      
Female  14.10  19.56  19.66  17.98  2.50   3.10   3.22   2.78
Male    19.74  20.80  21.88  20.85  3.02   3.08   3.09   3.00
  • 두 개 이상의 값을 한 번에 분석 가능 (total_bill, tip)

4.4.3 groupby() vs pivot_table() 비교

기능 groupby() pivot_table()
출력 형태 Series 또는 DataFrame 보기 좋은 표 형태
다중 집계 함수 agg(["mean", "max"]) aggfunc=["mean", "max"]
여러 개의 값 분석 별도로 groupby() 실행 한 번에 여러 값 분석 가능
사용 예시 단순 그룹화 피벗 테이블 형태로 정리

언제 groupby()를 사용하고, 언제 pivot_table()을 사용할까?

  • groupby() → 단순한 그룹화 및 요약 분석이 필요할 때
  • pivot_table()엑셀 피벗 테이블처럼 데이터를 보기 좋게 정리할 때

결론

데이터를 그룹화하면 특정 기준으로 데이터를 요약하여 중요한 패턴을 발견할 수 있다.

  • groupby() → 단순 그룹화 및 요약 분석 (한 번에 여러 개의 통계값 적용 가능)
  • pivot_table()엑셀의 피벗 테이블처럼 행과 열을 기준으로 정리하여 보기 쉽게 분석

적절한 그룹화 기법을 활용하면 대량의 데이터를 효율적으로 분석하고, 의미 있는 인사이트를 얻을 수 있다.