본문 바로가기

Python/Python 기초 연습

[Python] Pandas의 Pivot Table 활용 마스터하기

반응형
 

 

 

목차

1. 활용 데이터셋 소개 - EPL 리그 데이터

2. Pivot Table 기초 소개

3. 실제 데이터 활용 - Query 활용, Aggfunc의 활용을 통한 실제 인사이트 도출

 

Q. 플레이스타일이 가장 호전적인 팀은 어디?

 


 

 

1. 활용 데이터셋 - EPL 리그의 경기 데이터

https://www.kaggle.com/datasets/azminetoushikwasi/epl-21-22-matches-players

 

EPL 2021-22 | English Premier League

Detailed Match & Player Stats of English Premier League Season 2021-22

www.kaggle.com

 

data_epl.zip
0.01MB

 

재미있는 데이터이니 다운받아보자


2. Pivot Table의 기초 활용법

- Pivot Table은 데이터를 원하는 형태로 집계할 때 아주 유용하게 사용할 수 있는 방법.

- 데이터 분석을 할 때 반드시 알아야 할 필수적인 데이터 전처리 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
pandas.pivot_table(data
                   ## 반드시 알고 있어야 하는 정보
                   , index=None  ## 각 행(row)는 무엇으로 정의할지
                   , columns=None ## 각 열(column)은 무엇으로 정의할지
                   , values=None ## 각 Cell을 어떤 숫자로 계산할지
                   , aggfunc='mean', 'sum', 'nunique' 등 ## 계산을 어떻게 할지
                   
                   ## 더 알고 있으면 좋은 정보
                   , fill_value=None
                   , margins=False
                   , dropna=True
                   , margins_name='All'
                   , observed=False
                   , sort=True
                  )
cs

 

 

 

※ 집계함수 추가 설명 - Numpy 집계함수 소개 및 기타 함수 소개

 

aggfunc에는 다양한 집계함수들이 올 수 있는데, 그 중 대표적인 것들을 소개하고 넘어가고자한다. 글로 하면 어려우니 표를 봐라

집계 함수 코드 비고
합계 aggfunc = np.sum() numpy 활용
평균 aggfunc = np.mean() numpy 활용
표준편차 aggfunc = 'std' string으로 선언
count aggfunc = 'count' string으로 선언
distinct count aggfunc = 'nunique' string으로 선언
최대값 aggfunc = np.max | 'max' numpy & string 둘다 가능
최소값 aggfunc = np.min | 'min' numpy & string 둘다 가능

 

3. 실전 데이터를 활용한 Pivot Table 활용

 

(1) 원래 데이터는 어떻게 생겼나요?


 

(2) 팀과 포지션 별로 평균적으로 Yellow 카드를 받은 횟수는?

1
2
3
4
5
r1.pivot_table(index = ['team']
               , columns = ['position']
               , values = ['yellowcards']
               , aggfunc = np.mean
              ).head(10)
cs

 

이렇게 하면 Yellow 카드를 어느 팀 그리고 어떤 포지션에서 평균적으로 많이 받았는지 쉽게 볼 수 있다. 

 

하지만 아직은 보기가 불편하고 필요 없는 정보가 많은 것 같다. 

 

 


(3)  Query문을 활용한 Pivot Table - 원하는 정보만 조회하고 싶을 때

- 불필요한 포지션 정보까지 담고 있어서 데이터가 어지럽다. 공격수와 수비수만 보고자 한다.

- 이럴 때 Pivot Table과 같이 활용하면 좋은 것이 Query문이다. 

- Query문이란 "원하는 조건의 데이터만 가져오는 명령어"라고 이해하면 된다.

- 문법: query(' columnName == 원하는 조건') 

(SQL을 활용하는 사람이라면 너무나 당연한 개념이나, 처음보면 어려울 수 있다.)

 

1
2
3
4
5
r1.query('position == ["Defender", "Forward"]').pivot_table(index = ['team']
               , columns = ['position']
               , values = ['yellowcards']
               , aggfunc = [np.mean]
              )
cs

 

 

 

 

 

 

 

(4) 여러개의 집계함수를 보고 싶다면? - 평균과 합계를 동시에 조회

- 보통 숫자를 볼 때, 단일 기술통계 값보다는 다양한 지표를 살펴보는게 보통의 경우이다. 

- aggfunc을 보다 실용적으로 활용하는 방법을 알아보고자 한다.

 

1
2
3
4
5
r1.query('position == ["Defender", "Forward"]').pivot_table(index = ['team']
               , columns = ['position']
               , values = ['yellowcards']
               , aggfunc = [np.mean, np.sum]
              ).head(10)
cs

 

 

 

 

※ 기초 데이터 분석으로 얻을 수 있는 인사이트

Q1. 어느 팀이 가장 거칠게 수비를 하는가? 

 A1. 리즈 유나이티드

수비수의 Yellow Card 평균 및 합계를 봤을 때 리즈 유나이티드가 각 4.28회와 30회로 가장 거칠게 수비하는 것

 

Q2. 어느 팀이 가장 거칠게 수비를 하는가?

 A2. 리즈 유나이티드

공격수의 Yellow Card의 평균은 4.2회이고 총합은 21회로 1위 기록

 

따라서 이번 시즌 리즈 유나이티드의 플레이스타일은 굉장히 공격적 혹은 호전적이었던 것으로 보인다. 

 

 

Reference

https://pandas.pydata.org/docs/reference/api/pandas.pivot_table.html

 

 

반응형