import pandas as pd
df = pd.DataFrame({'Team_Name':["맨시티", "맨유","리버풀","첼시","레스터","웨스트햄","토트넘","아스널",
"리즈","에버튼","아스톤빌라","뉴캐슬","울버햄튼","크팰","소튼",
"브라이튼","번리","풀럼","웨스트브롬","셰필드"],
'Normal':[24,16,17,16,19,21,20,20,19,14,18,17,16,19,16,12,17,20,20,27],
'Exp':[7,9,11,11,12,8,9,10,13,15,11,11,11,9,14,11,11,4,6,7],
'Draw':[5,11,9,10,6,8,8,7,5,8,7,9,9,8,7,14,9,13,11,2],
'Same_Level':[1,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,1]
})
df['Round'] = df['Normal'] + df['Exp'] + df['Draw'] + df['Same_Level']
df['Normal_Rate'] = df['Normal'] / df['Round']
df['Exp_and_Draw_Rate'] = ( df['Exp'] + df['Draw'] ) / df['Round']
df
Team_Name | Normal | Exp | Draw | Same_Level | Round | Normal_Rate | Exp_and_Draw_Rate | |
---|---|---|---|---|---|---|---|---|
0 | 맨시티 | 24 | 7 | 5 | 1 | 37 | 0.648649 | 0.324324 |
1 | 맨유 | 16 | 9 | 11 | 1 | 37 | 0.432432 | 0.540541 |
2 | 리버풀 | 17 | 11 | 9 | 0 | 37 | 0.459459 | 0.540541 |
3 | 첼시 | 16 | 11 | 10 | 0 | 37 | 0.432432 | 0.567568 |
4 | 레스터 | 19 | 12 | 6 | 0 | 37 | 0.513514 | 0.486486 |
5 | 웨스트햄 | 21 | 8 | 8 | 0 | 37 | 0.567568 | 0.432432 |
6 | 토트넘 | 20 | 9 | 8 | 0 | 37 | 0.540541 | 0.459459 |
7 | 아스널 | 20 | 10 | 7 | 0 | 37 | 0.540541 | 0.459459 |
8 | 리즈 | 19 | 13 | 5 | 0 | 37 | 0.513514 | 0.486486 |
9 | 에버튼 | 14 | 15 | 8 | 0 | 37 | 0.378378 | 0.621622 |
10 | 아스톤빌라 | 18 | 11 | 7 | 1 | 37 | 0.486486 | 0.486486 |
11 | 뉴캐슬 | 17 | 11 | 9 | 0 | 37 | 0.459459 | 0.540541 |
12 | 울버햄튼 | 16 | 11 | 9 | 1 | 37 | 0.432432 | 0.540541 |
13 | 크팰 | 19 | 9 | 8 | 1 | 37 | 0.513514 | 0.459459 |
14 | 소튼 | 16 | 14 | 7 | 0 | 37 | 0.432432 | 0.567568 |
15 | 브라이튼 | 12 | 11 | 14 | 0 | 37 | 0.324324 | 0.675676 |
16 | 번리 | 17 | 11 | 9 | 0 | 37 | 0.459459 | 0.540541 |
17 | 풀럼 | 20 | 4 | 13 | 0 | 37 | 0.540541 | 0.459459 |
18 | 웨스트브롬 | 20 | 6 | 11 | 0 | 37 | 0.540541 | 0.459459 |
19 | 셰필드 | 27 | 7 | 2 | 1 | 37 | 0.729730 | 0.243243 |
df_sort_by_rate = df.sort_values(by=['Normal_Rate'], axis=0, ascending=False)
df_sort_by_rate
Team_Name | Normal | Exp | Draw | Same_Level | Round | Normal_Rate | Exp_and_Draw_Rate | |
---|---|---|---|---|---|---|---|---|
19 | 셰필드 | 27 | 7 | 2 | 1 | 37 | 0.729730 | 0.243243 |
0 | 맨시티 | 24 | 7 | 5 | 1 | 37 | 0.648649 | 0.324324 |
5 | 웨스트햄 | 21 | 8 | 8 | 0 | 37 | 0.567568 | 0.432432 |
6 | 토트넘 | 20 | 9 | 8 | 0 | 37 | 0.540541 | 0.459459 |
7 | 아스널 | 20 | 10 | 7 | 0 | 37 | 0.540541 | 0.459459 |
18 | 웨스트브롬 | 20 | 6 | 11 | 0 | 37 | 0.540541 | 0.459459 |
17 | 풀럼 | 20 | 4 | 13 | 0 | 37 | 0.540541 | 0.459459 |
13 | 크팰 | 19 | 9 | 8 | 1 | 37 | 0.513514 | 0.459459 |
4 | 레스터 | 19 | 12 | 6 | 0 | 37 | 0.513514 | 0.486486 |
8 | 리즈 | 19 | 13 | 5 | 0 | 37 | 0.513514 | 0.486486 |
10 | 아스톤빌라 | 18 | 11 | 7 | 1 | 37 | 0.486486 | 0.486486 |
16 | 번리 | 17 | 11 | 9 | 0 | 37 | 0.459459 | 0.540541 |
2 | 리버풀 | 17 | 11 | 9 | 0 | 37 | 0.459459 | 0.540541 |
11 | 뉴캐슬 | 17 | 11 | 9 | 0 | 37 | 0.459459 | 0.540541 |
12 | 울버햄튼 | 16 | 11 | 9 | 1 | 37 | 0.432432 | 0.540541 |
14 | 소튼 | 16 | 14 | 7 | 0 | 37 | 0.432432 | 0.567568 |
3 | 첼시 | 16 | 11 | 10 | 0 | 37 | 0.432432 | 0.567568 |
1 | 맨유 | 16 | 9 | 11 | 1 | 37 | 0.432432 | 0.540541 |
9 | 에버튼 | 14 | 15 | 8 | 0 | 37 | 0.378378 | 0.621622 |
15 | 브라이튼 | 12 | 11 | 14 | 0 | 37 | 0.324324 | 0.675676 |
df_sort_by_rate 의 경우 , normal_rate 순으로 정렬한 데이터 프레임이다.
각 팀별로 각각 0.73 ~ 0.32 사이의 rate를 가지는 것을 볼 수 있다.
df_sort_by_rate2 = df.sort_values(by=['Exp_and_Draw_Rate'], axis=0, ascending=False)
df_sort_by_rate2
Team_Name | Normal | Exp | Draw | Same_Level | Round | Normal_Rate | Exp_and_Draw_Rate | |
---|---|---|---|---|---|---|---|---|
15 | 브라이튼 | 12 | 11 | 14 | 0 | 37 | 0.324324 | 0.675676 |
9 | 에버튼 | 14 | 15 | 8 | 0 | 37 | 0.378378 | 0.621622 |
3 | 첼시 | 16 | 11 | 10 | 0 | 37 | 0.432432 | 0.567568 |
14 | 소튼 | 16 | 14 | 7 | 0 | 37 | 0.432432 | 0.567568 |
1 | 맨유 | 16 | 9 | 11 | 1 | 37 | 0.432432 | 0.540541 |
2 | 리버풀 | 17 | 11 | 9 | 0 | 37 | 0.459459 | 0.540541 |
16 | 번리 | 17 | 11 | 9 | 0 | 37 | 0.459459 | 0.540541 |
12 | 울버햄튼 | 16 | 11 | 9 | 1 | 37 | 0.432432 | 0.540541 |
11 | 뉴캐슬 | 17 | 11 | 9 | 0 | 37 | 0.459459 | 0.540541 |
10 | 아스톤빌라 | 18 | 11 | 7 | 1 | 37 | 0.486486 | 0.486486 |
8 | 리즈 | 19 | 13 | 5 | 0 | 37 | 0.513514 | 0.486486 |
4 | 레스터 | 19 | 12 | 6 | 0 | 37 | 0.513514 | 0.486486 |
18 | 웨스트브롬 | 20 | 6 | 11 | 0 | 37 | 0.540541 | 0.459459 |
7 | 아스널 | 20 | 10 | 7 | 0 | 37 | 0.540541 | 0.459459 |
13 | 크팰 | 19 | 9 | 8 | 1 | 37 | 0.513514 | 0.459459 |
6 | 토트넘 | 20 | 9 | 8 | 0 | 37 | 0.540541 | 0.459459 |
17 | 풀럼 | 20 | 4 | 13 | 0 | 37 | 0.540541 | 0.459459 |
5 | 웨스트햄 | 21 | 8 | 8 | 0 | 37 | 0.567568 | 0.432432 |
0 | 맨시티 | 24 | 7 | 5 | 1 | 37 | 0.648649 | 0.324324 |
19 | 셰필드 | 27 | 7 | 2 | 1 | 37 | 0.729730 | 0.243243 |
df_sort_by_rate2 의 경우 , exp_and_draw_rate를 기준으로 정렬한 데이터 프레임이다.
이 역시 위와 같이 0.73 ~ 0.32 사이의 rate를 가지고 있는 것을 볼 수 있다.
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib notebook
plt.xticks(rotation = -45)
sns.barplot(data=df_sort_by_rate, x="Team_Name", y="Normal_Rate")
plt.show()
df["Normal_Rate"].mean()
0.49729729729729727
normal_rate의 평균은 약 0.497 로 절반에 못미치게 나왔다.
EPL 20/21 시즌의 경우 순위가 높은 팀이 순위가 낮은 팀을 이긴 경우는 전체에 비해 약 49.7% 이다.
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib notebook
plt.xticks(rotation = -45)
sns.barplot(data=df_sort_by_rate2, x="Team_Name", y="Exp_and_Draw_Rate")
plt.show()
df["Exp_and_Draw_Rate"].mean()
#0.49 -> 이역시 49퍼센트 정도의 확률
0.49459459459459476
exp_and_draw_rate의 평균은 약 0.494로 normal_rate와 비슷하게 나왔다.
EPL 20/21 시즌의 경우 순위가 높은팀이 순위가 낮은 팀을 이기지 못한 경우는 전체에 비해 약 49.4% 이다.