데이터 분석을 할 때, 데이터를 한눈에 보기 쉽게 정리하고 다양한 시각에서 분석하는 것은 매우 중요합니다. Pandas의 피벗 테이블과 교차 테이블 기능은 데이터를 효율적으로 요약하고 분석할 수 있는 강력한 도구입니다. 이 포스팅에서는 pivot_table() 함수를 사용해 데이터를 요약하는 방법과 crosstab()을 사용해 범주형 데이터 간의 관계를 분석하는 방법을 설명하겠습니다 .
1. 피벗 테이블 (Pivot Table)
피벗 테이블은 데이터를 특정 기준으로 묶어서 요약할 수 있는 기능입니다. 주로 엑셀에서 많이 사용되며, Pandas에서도 pivot_table() 함수를 사용해 더욱 유연하게 활용할 수 있습니다.
1.1 pivot_table() 함수 소개
피벗 테이블을 사용하면 데이터를 정리된 형태로 한눈에 볼 수 있습니다. 예를 들어, 날짜별, 도시별 매출을 한 번에 비교하거나, 여러 통계값을 동시에 확인하는 것이 가능합니다.
먼저, 샘플 데이터를 만들어보겠습니다..
import pandas as pd
# 샘플 데이터 생성
data = {
'Date': ['2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02', '2024-01-03', '2024-01-03'],
'City': ['Seoul', 'Busan', 'Seoul', 'Busan', 'Seoul', 'Busan'],
'Sales': [200, 150, 300, 120, 250, 130],
'Profit': [20, 15, 30, 12, 25, 13]
}
df = pd.DataFrame(data)
이 데이터는 날짜(Date), 도시(City), 매출(Sales), 이익(Profit) 정보를 포함하고 있습니다. 이 데이터를 pivot_table() 함수를 사용해 요약해 보겠습니다.
1.2 피벗 테이블로 데이터 요약하
피벗 테이블을 사용하면 데이터를 다양한 기준으로 요약할 수 있습니다. 예를 들어, 날짜와 도시별로 매출과 이익의 평균을 구하고 싶다면 다음과 같은 코드를 사용할 수 있습니다.
# 'Date'와 'City'를 기준으로 'Sales'와 'Profit'의 평균 구하기
pivot_df = df.pivot_table(index='Date', columns='City', values=['Sales', 'Profit'], aggfunc='mean')
print(pivot_df)
결과:
Sales Profit
City Busan Seoul Busan Seoul
Date
2024-01-01 150 200 15 20
2024-01-02 120 300 12 30
2024-01-03 130 250 13 25
이 코드는 'Date'를 행으로, 'City'를 열로 설정하고, 'Sales'와 'Profit' 열의 평균값을 구했습니다. 이렇게 하면 각 날짜별로 서울과 부산에서의 매출과 이익을 한눈에 비교할 수 있습니다.
1.3 여러 집계 함수 적용하기
피벗 테이블은 평균뿐만 아니라 합계, 최대값, 최소값 등 여러 통계값도 동시에 계산할 수 있습니다. aggfunc 인자에 리스트를 전달하여 다양한 집계 함수를 한 번에 적용할 수 있습니다.
# 여러 집계 함수 적용
pivot_df = df.pivot_table(index='Date', columns='City', values=['Sales', 'Profit'], aggfunc=['mean', 'sum'])
print(pivot_df)
결과:
mean sum
Sales Profit Sales Profit
City Busan Seoul Busan Seoul Busan Seoul
Date
2024-01-01 150 200 15 20 150 200
2024-01-02 120 300 12 30 120 300
2024-01-03 130 250 13 25 130 250
여기서는 'Sales'와 'Profit'의 평균과 합계를 동시에 계산했습니다. 이렇게 하면 각 날짜별로 도시별 평균 매출과 총 매출을 한 번에 확인할 수 있습니다.
2. 교차 테이블 (Crosstab)
교차 테이블은 범주형 데이터 간의 관계를 분석할 때 유용한 도구입니다. crosstab() 함수는 특정 기준을 사용해 범주형 데이터의 빈도나 합계를 확인하는 데 사용됩니다.
2.1 crosstab() 함수 소개
crosstab() 함수는 엑셀의 피벗 테이블과 비슷한 기능을 수행하지만, 주로 범주형 데이터 간의 관계를 분석하는 데 사용됩니다. 범주형 데이터는 이름이나 분류와 같이 구분할 수 있는 값들을 의미합니다. 예를 들어, 각 도시별로 날짜에 따라 매출 빈도를 확인하고 싶다면 crosstab()을 사용할 수 있습니다.
2.2 교차 테이블로 범주형 데이터 관계 분석
아래 예제에서는 'Date'와 'City'를 기준으로 매출 빈도를 분석해보겠습니다.
# 'Date'와 'City'를 기준으로 매출 빈도 분석
crosstab_df = pd.crosstab(df['Date'], df['City'])
print(crosstab_df)
결과:
City Busan Seoul
Date
2024-01-01 1 1
2024-01-02 1 1
2024-01-03 1 1
이 결과는 각 날짜별로 'Busan'과 'Seoul'에서 매출이 몇 번 발생했는지를 보여줍니다. 각 날짜마다 서울과 부산에서 한 번씩 매출이 발생한 것을 알 수 있습니다.
2.3 교차 테이블에 집계 함수 적용하기
crosstab() 함수에도 집계 함수를 적용할 수 있습니다. 예를 들어, 각 도시별로 발생한 매출의 합계를 계산하려면 다음과 같이 할 수 있습니다.
# 'Date'와 'City'를 기준으로 매출 합계 분석
crosstab_sum = pd.crosstab(df['Date'], df['City'], values=df['Sales'], aggfunc='sum')
print(crosstab_sum)
결과:
City Busan Seoul
Date
2024-01-01 150 200
2024-01-02 120 300
2024-01-03 130 250
여기서는 crosstab()에 aggfunc='sum'을 사용하여 각 날짜별로 도시에서 발생한 매출의 합계를 계산했습니다. 이를 통해 날짜별로 어느 도시에서 더 많은 매출이 발생했는지 쉽게 비교할 수 있습니다.
마무리
이번 포스팅에서는 Pandas의 pivot_table()과 crosstab() 함수를 사용해 데이터를 요약하고 분석하는 방법을 살펴보았습니다.
- 피벗 테이블은 다양한 집계 함수와 함께 데이터를 효율적으로 요약하고, 여러 기준에 따라 데이터를 재구성할 수 있는 도구입니다.
- 교차 테이블은 범주형 데이터 간의 관계를 분석하는 데 유용하며, 빈도 분석과 더불어 합계 등 다양한 통계값을 계산할 수 있습니다.
'공부 > 판다스(Pandas)' 카테고리의 다른 글
Pandas로 배우는 시계열 데이터 분석/날짜 및 시간 핸들링과 리샘플링 기법 (1) | 2024.10.19 |
---|---|
Pandas로 배우는 기본 통계 함수와 심화 분석 함수 활용법 (0) | 2024.10.18 |
Pandas로 배우는 데이터 그룹화와 집계/효율적인 데이터 분석 방법 (0) | 2024.10.16 |
Pandas로 배우는 데이터 전처리(정렬, 필터링, 중복 처리, 변환과 치환) (1) | 2024.10.12 |
Pandas를 활용한 데이터 탐색 방법(데이터 조회, 인덱싱, 슬라이싱, 결측값 처리) (0) | 2024.10.11 |