본문 바로가기

공부/판다스(Pandas)

Pandas로 배우는 피벗 테이블과 교차 테이블/ 데이터 요약 및 관계 분석

데이터 분석을 할 때, 데이터를 한눈에 보기 쉽게 정리하고 다양한 시각에서 분석하는 것은 매우 중요합니다. 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() 함수를 사용해 데이터를 요약하고 분석하는 방법을 살펴보았습니다.

  • 피벗 테이블은 다양한 집계 함수와 함께 데이터를 효율적으로 요약하고, 여러 기준에 따라 데이터를 재구성할 수 있는 도구입니다.
  • 교차 테이블은 범주형 데이터 간의 관계를 분석하는 데 유용하며, 빈도 분석과 더불어 합계 등 다양한 통계값을 계산할 수 있습니다.