데이터 분석/데이터 사이언스
데이터 사이언스 - 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() → 엑셀의 피벗 테이블처럼 행과 열을 기준으로 정리하여 보기 쉽게 분석
적절한 그룹화 기법을 활용하면 대량의 데이터를 효율적으로 분석하고, 의미 있는 인사이트를 얻을 수 있다.