codestates / codestates/ds-blog

[최근후] Section01 Solo Project

Open
#152 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
2
Forks
4
PR merge metrics
No merged PRs in 30d

Description

콜랩 링크 :
https://colab.research.google.com/drive/17_1BY8Wz0PvehkJxRTh98zj_Pjl8NhD5?usp=sharing

![image](https://user-images.githubusercontent.com/61172021/96361072-a69efc80-115d-11eb-9deb-490fe9e3e9c4.png)

# Abstract

저는 박지성이 맨체스터 유나이티드에 뛸때부터 축구를 좋아하기 시작해서 EPL(영국 프리미어 리그) 를 즐겨보는데요, 지금은 손흥민이 활약하고있는 토트넘이 속한 리그죠! 제가 분석한 데이터는 지난 시즌의 각 경기에서 선수 개개인이 기록한 데이터입니다!

### 1. 데이터를 보고 우리는 베스트 11을 적절히 뽑을수 있을까요? 베스트 11을 뽑는 기준은 주관적으로 세우되, 선수를 선발하는 과정은 최대한 객관적으로 하기위해 선수의 팀과 이름을 모른채 뽑아보겠습니다.
### 2. 지난시즌 챔피언스리그 결승전까지 활약했던 손흥민선수가 포함이 될까요? 그렇지 않다면, 얼마나 더 잘했어야 뽑힐 수 있었을까?

---

### 우선 데이터를 살펴보겠습니다!

제가 한 전처리작업들은 이렇습니다!
1. 1000분 이하로 뛴 선수들은 제외
2. 우선 숫자형만 남기고 컬럼들 드랍하기
3. KMeans 사용해서 클러스터링
4. 덜 중요한 컬럼들을 드랍하기

### 사용할 데이터 :
스크린샷 2020-10-18 오후 6 18 56

**피쳐들 :**
assists | 어시스트
bps | bps 지수 (아래 설명 확인)
goals_scored | 골
ict_index | ict 지수 (influence, creativity, threat 의 종합)
minutes | 소화한 경기(분)
penalties_saved | 패널티킥 세이브
saves | 세이브
value | 선수의 가치
clusters | 클러스터 (0~3)
player_id | 선수 id

* bps 계산 방법
스크린샷 2020-10-18 오후 5 20 53
bps 는 공격수, 수비수, 골키퍼 모두에게 유리한 가점 요인이 있고, 또, 불리한 감점 요인이 있습니다. 즉, 최고의 공격수, 최고의 미드필더, 최고의 수비수, 최고의 골키퍼는 비슷하게 높은 bps를 보여줌. 가지고있는 데이터에는 수비수를 특정할 수 있는 뚜렷한 피쳐가 없습니다. 그래서 최고의 수비수를 이름을 모른채 알아낼 수 있는 방법이 막연한데 이 bps지수를 쓰면 가능할 수 있습니다. 제가 자체적으로 bps계산법을 만들어 새로운 피쳐를 만들어보려고 했으나 수비수에게 유리하게 작용할 수 있는 데이터가 없으므로 현재 bps를 활용해야 할 것 같습니다!

### 클러스터는 어떻게 활용할 것인가?

```py
# 클러스터를 어떻게 활용할 것인가?!
players1[players1.player_id == 191].head(5)
```
스크린샷 2020-10-18 오후 6 10 46

위 테이블은 191번선수 (참고로 공격수) 의 5경기 퍼포먼스와 클러스터를 보기위한 것인데요, 이 선수는 한경기를 제외하고 모두 2번 클러스터에 포함되어있는데요, 그 경기들에선 이 선수가 꽤 성공적으로 공격적인 경기를 했다고 판단됩니다. 하지만 3번클러스터에 포함된 경기에선 눈에띄는 공격성이나 활약없이 78분에 교체아웃 된것을 볼 수 있습니다. 이를통해 저는 클러스터를 선수의 플레이 성향을 파악하는데에 사용할 수 있겠다라고 판단했습니다! 하지만 클러스터가 절대적인 포지션을 의미한다고 보기는 어려울 것 같습니다!

## 선수 이름, 포지션, 팀 이름 보지않고 베스트 11 뽑기!

선수들을 조합하고 그것에맞게 포메이션을 짜는것은 모두 주관적일 수 있습니다. 리그 베스트 11을 뽑는다면 그것은 엄청 강한팀일 것 입니다. 그래서 저는 꽤 공격적이면서 높은 전술적 이해도를 필요로하는 3-4-3 포메이션을 계획하고, 각 포지션에서 적절히 활약할 수 있는선수들을 뽑아보겠습니다.
이것은 제가 계획하는 3-4-3 포메이션의 형태입니다.

![image](https://user-images.githubusercontent.com/61172021/96361224-eb776300-115e-11eb-86e8-9110e8cf7dda.png)

### 내가 뽑을 베스트11 기준

1. 공격수 3 -> 1명의 득점왕, 2명은 어시스트와 골이 동시에 많은선수 (셋 다 같은 클러스터에 있는지 확인)

2. 미드필더 4 -> 미드필더는 전체적으로 공을 다루는 솜씨가 좋고 동시에 어시스트 능력도 좋아야하니까 bps지수(전반적인 축구 능력)와 어시스트능력을 바탕으로 뽑을것. 어시스트와 bps(전반적인 축구 능력)는 다른 스케일을 보여주는 숫자들이니까 standardize하고 그 둘을 더한다음 랭킹을 볼것임! (넷 다 같은 클러스터에 있는지 확인)

3. 수비수 3 -> 요즘은 수비수도 패스, 공을 다루는 능력이 많이 요구된다. 우선 bps(전반적인 축구 능력)가 높은 선수를 뽑고 그중에 save기록이 있는선수 제외, 그리고 ict(공격성향 지수)와 goal + assists 같이 공격수와 미드필더들에게 유리한 스탯이 높은 선수들 제외. (셋 다 같은 클러스터에 있는지 확인)

4. 골키퍼 1 -> bps(전반적인 축구 능력)는 골키퍼의 퍼포먼스도 반영된 지수이다. 그러니 bps(전반적인 축구 능력)가 높은 선수들을 나열하고 그들중 saves 에 해당하는 기록이 있는 선수가 있다면 훌륭한 골키퍼일 것!

## 1. 공격수들 정하기 -> 1명의 득점왕, 2명은 어시스트와 골이 동시에 많은선수 (셋 다 같은 클러스터에 있는지 확인)

**가운데 공격수 : 득점왕**

스크린샷 2020-10-09 오후 3 04 29

첫번째로 뽑을 가운데 공격수는 득점왕을 뽑을겁니다. 166번 선수가 23골을 넣어 지난시즌 득점왕이었네요. 이제 양쪽 공격수를 뽑을차례입니다.

**양쪽 공격수 : Goal + Assists 높은 선수들**

스크린샷 2020-10-09 오후 3 06 15

이 선수들이 같은 공격수로 뛰는것이 적절한지 알아보기위해 클러스터를 확인해봤습니다.

### 215 의 클러스터 : 0
### 166 의 클러스터 : 2
### 191 의 클러스터 : 2
### 192 의 클러스터 : 2

215번 선수만 0번이고, 먼저 득점왕으로뽑힌 166번선수와 191, 192번 선수는 2번클러스터를 보여주네요. 2번클러스터를 보여주는 선수들이 공격수로 적합하다는 판단을 했습니다. 이제 미드필더4명을 뽑을 차례인데, 여기서 또 215번 선수가 다시 1등으로 나오니, 눈여겨 봐주세요!

공격수로 뽑힌 선수들
스크린샷 2020-10-18 오후 10 50 36

## 2. 미드필더들 정하기 : bps(전반적인 축구 능력) + 어시스트능력 (스케일 달라서 정규화 하고 더함)

어시스트와 bps는 다른 스케일을 보여주는 숫자들입니다. 한 경기에 어시스트는 0~5 정도의 스케일을 보여주고 bps는 음수일수도있고 100을 넘을수도있는 숫자여서, 두 피쳐를 스케일링을 해주고 더했습니다. 두 피쳐를 더한값이 가장 큰 선수들을 4명 나열했습니다.

스크린샷 2020-10-09 오후 3 08 34

### 215 의 클러스터 : 0
### 618 의 클러스터 : 0
### 182 의 클러스터 : 0
### 181 의 클러스터 : 0

이 선수들이 같은 미드필더로 뛰는게 적절한지 알아보기위해 클러스터를 확인해봤습니다. 모두 0번 클러스터를 보여줘서 깔끔하게 4명 다 미드필더로 뽑았습니다.

### 지금까지 뽑힌 선수들 :

스크린샷 2020-10-18 오후 11 11 02

## 3. 골키퍼 정하기 -> bps(전반적인 축구 능력) 랭커중 saves 에 해당하는 선수 -->> 훌륭한 골키퍼!

좋은 골키퍼를 정할때 세이브율만 고려해야할지 고민을 했습니다. 하지만, 잘하는 팀의 골키퍼는 그 팀의 수비수들이 너무 잘해서 상대팀이 슛팅조차 못하는 경기들도 있고, 못하는팀의 골키퍼는 상대의 슈팅을 더 많이 받아내기때문에 세이브율만 고려하는건 적절치 못하다고 생각했습니다. 그리고, 요즘은 골키퍼도 후방 빌드업(공격을 풀어나가기위해 수비진영에서 볼을 돌리는 약속된 과정)에 많이 관여하기때문에 패스의 질도 좋아야합니다. 그래서 bps와 세이브를 동시에 고려하기위해 bps 랭커들중 save기록이 있는 선수중 최고를 뽑겠습니다.

스크린샷 2020-10-09 오후 3 15 01

총 4명의 선수가 상위에 랭크되어있는데요, 저는 가장 위에있는 93번 선수를 데려오겠습니다!

### 지금까지 뽑힌 선수들

스크린샷 2020-10-18 오후 11 11 02

## 4. 수비수 정하기-> bps(전반적인 축구 능력)랭커중, save기록이 있는선수 제외, 그리고 ict(공격성향)와 goal + assists 스탯이 높은 선수들 제외

이 데이터에는 수비수들을 특정할수있는 피쳐가 없습니다. 예를들면, 90% 이상의 패스성공률, clearance(걷어내기), intercept(가로채기), 태클같은 수비수들을 가려낼 수 있는 피쳐들이 없기때문에 다른 방법으로 좋은 수비수를 가려내야합니다. 저는 좋은 선수들중 골키퍼, 미드필더, 공격수 들을 제외하는 방식으로 수비수들을 뽑겠습니다. 골키퍼를 특정할 수 있는 save기록, 미드필더와 공격수들을 특정할 수 있는 ict, goal, assists 기록들을 참고했습니다.

- saves기록이 있는 선수들 제외
- goal+assist기록이 15 이상인 선수들 제외
- ict index가 250 이상인 선수들 제외

위의 과정을 거친 상위 4명의 선수들입니다.
스크린샷 2020-10-09 오후 3 56 21

이 선수들이 같은 수비수로 뛰는게 적절한지 알아보기위해 클러스터를 확인해 보겠습니다. 모두 3번 클러스터를 보여줘서 깔끔하게 상위 3명 다 수비수로 뽑았습니다.

### 183 의 클러스터 : 3
### 162 의 클러스터 : 3
### 105 의 클러스터 : 3
### 84 의 클러스터 : 3

### 드디어 완성된 베스트11 선수들

스크린샷 2020-10-19 오전 12 03 05

### 선수들 이름과 팀 찾기

```py
# 선수들의 번호를 리스트에 넣기
best11 = pd.DataFrame({"ID": [192, 166, 191, 181, 618, 215, 182, 105, 183, 162, 93]})

# 선수들의 팀과 이름 찾기 (함수만들기)
def find_team_name(top_players):

team_list = []
name_list = []

for i in range(len(top_players)):

player_name = players[players['element']==top_players.ID[i]]['full'].iloc[0]
name_list.append(player_name)
team_name = players[players['element']==top_players.ID[i]]['team'].iloc[0]
team_list.append(team_name)

top_players['Name'] = name_list
top_players['Team'] = team_list

return top_players

find_team_name(best11)
```

스크린샷 2020-10-09 오후 3 20 48

### 드디어 완성된 베스트11 선수들 이름

스크린샷 2020-10-18 오후 11 48 27

리그 베스트11이라고 해도 손색이 없을정도로 최고의 선수들만 뽑힌 것 같습니다! 물론 사람마다 최고의 선수를 뽑는 기준이 다르니, 얼마든지 바뀔 수도 있구요!

전 이것을 통해 선수 이름과 포지션, 그리고 팀을 모른채 베스트 11을 뽑았을때, 최고의 선수들이 좋은 활약을 할 수 있는 제 포지션에 적절히 뽑힐 수 있다는것을 알게되었습니다!

# 지금까지 해본것들로 시각화 해보기

베스트 11로 뽑힌 선수들 모두 훌륭하지만, 사람들은 항상 순위매기기를 좋아하죠?! 저도 마찬가지인데요 ㅎㅎ 위에서 뽑힌 11명의 선수들중 누가 리그에서 가장 잘한다고 할 수 있을까요?? 저는 bps를 참고해보려합니다! 왜냐하면 bps의 목적이 최고의 공격수, 미드필더, 수비수, 골키퍼들을 비슷한 수치로 비교하기위한 것이니까요!

스크린샷 2020-10-19 오전 1 19 38

브루노 페르난데스 선수와 케빈 데브라이너 선수가 거의 비슷하게 가장 높은 bps 수치를 보여주네요! 저 두 선수가 리그에서 가장 실수도 적고 제 역할을 잘하는 선수라고 생각하면 되겠습니다! 그리고 골키퍼 포페선수와 수비수 반다이크 선수가 5, 6번째에 랭크되어있네요. 우리가 보통 축구를 볼때 공격수, 미드필더 위주로 봐서 수비수나 골키퍼가 좋은 활약을 하는걸 잘 느끼지 못하는데요, 저 선수들은 실제로 공격수인 마네, 살라 선수같은 공격수들보다 더 잘하고 있었네요!

---

득점순위 시각화

![image](https://user-images.githubusercontent.com/61172021/95431046-92057c00-0987-11eb-967d-d71a0b845c37.png)

제가 스트라이커롤 뽑은 선수 제이미 바디선수가 23골을 넣어 지난시즌 득점왕을 차지했습니다!

# Where is 손 흥 민 ?!!

저는 한국인인지라 손흥민선수가 리그 베스트11에 들지않아서 조금 아쉬웠습니다 ㅜㅜ

그래서 손흥민 선수가 전 시즌에 비해 이번시즌에 얼마나 더 좋은 활약을해야 리그 베스트11에 들 수 있는지를 보고싶었습니다!

같은 미드필더로 활약하는 선수중 최고와 비교를하면 되겠다는 생각이들어서, 손흥민 리그 최고라고 불리는 Kevin De Bruyne 선수와 퍼포먼스를 비교해 보는것도 재밌겠다는 생각을 했습니다!

## 손흥민 vs De Bruyne 시각화

![image](https://user-images.githubusercontent.com/61172021/95431120-acd7f080-0987-11eb-8f4e-7da1371e6f05.png)

손흥민 선수는 Kevin De Bruyne 선수와 비슷하게 골을 넣었지만 assist, ict, bps 능력측면에서 Kevin De Bruyne 선수에 미치지않는 기록을 갖고있다.

손흥민 선수는 EPL선수중 최고의 기량을 보여주는 선수중 한명이지만 Kevin De Bruyne 선수는 정말 잘하네요..!

손흥민 선수의 스탯이 결코 낮은게 아니지만! 이 비교를 통해 '한 리그에서 최고의 기량을 보여주는 선수는 저정도구나'를 느꼈습니다! 그냥 선수들이 뛰어다니며 패스하는걸 보면 다 비슷해 보이잖아요? 이렇게보니 좀 더 객관적으로 볼 수 있네요!

---

# 결론

1. 데이터를 보고 우리는 베스트 11을 적절히 뽑을수 있을까요?
-->> 선수들의 주요 퍼포먼스를 기록한 데이터를 가지고, 선수의 이름을 보지않고 베스트11을 뽑을수 있다! (포지션에 맞게)

2. 지난시즌 챔피언스리그 결승전까지 활약했던 손흥민선수가 포함이 될까요? 그렇지 않다면, 얼마나 더 잘했어야 뽑힐 수 있었을까?
-->> 손흥민 선순는 리그 베스트11에 아쉽게도 들지 못했다. 골수는 충분했지만, ict, bps, assists 측면에서 더 좋은 기록을 했더라면 가능했을지도!

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.