목차
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
재미있는 데이터이니 다운받아보자
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
'Python > Python 기초 연습' 카테고리의 다른 글
[Python] 데이터 추가 하기 - append, extend, insert 3분 마스터 (0) | 2022.09.28 |
---|---|
[python] for문 예상 시간 측정하기 - ipypb 및 tqdm 소개 (0) | 2022.06.23 |
[Python] Pandas Query 정복 - 실전 데이터 활용(EPL 리그) (0) | 2022.05.29 |
[Python] argmax, argmin, max, min - 마스터 1분컷 (0) | 2022.05.27 |