#20 / 21 EPL EZ_Point - Kor
import pandas as pd
df = pd.DataFrame({'Team_Name':["맨시티", "맨유","리버풀","첼시","레스터","웨스트햄",
"토트넘","아스널","리즈","에버튼","아스톤빌라","뉴캐슬"
,"울버햄튼","크팰","소튼","브라이튼","번리","풀럼",
"웨스트브롬","셰필드"],
'EZ_Point':[150.32,160.11,200.78,186.36,228,133.44,136.12,167.56
,164.32,249.84,217.01,163.59,195.97,128.75,111.34,
207.32,158.23,140.34,135.21,105.55],
'EZ_Times':[11,17,17,19,22,18,17,18,18,25,23,19,24,16,15,26,
18,21,15,7],
'Rank':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
})
df["EZ_rate"] = df['EZ_Point'] / df['EZ_Times']
df
Team_Name | EZ_Point | EZ_Times | Rank | EZ_rate | |
---|---|---|---|---|---|
0 | 맨시티 | 150.32 | 11 | 1 | 13.665455 |
1 | 맨유 | 160.11 | 17 | 2 | 9.418235 |
2 | 리버풀 | 200.78 | 17 | 3 | 11.810588 |
3 | 첼시 | 186.36 | 19 | 4 | 9.808421 |
4 | 레스터 | 228.00 | 22 | 5 | 10.363636 |
5 | 웨스트햄 | 133.44 | 18 | 6 | 7.413333 |
6 | 토트넘 | 136.12 | 17 | 7 | 8.007059 |
7 | 아스널 | 167.56 | 18 | 8 | 9.308889 |
8 | 리즈 | 164.32 | 18 | 9 | 9.128889 |
9 | 에버튼 | 249.84 | 25 | 10 | 9.993600 |
10 | 아스톤빌라 | 217.01 | 23 | 11 | 9.435217 |
11 | 뉴캐슬 | 163.59 | 19 | 12 | 8.610000 |
12 | 울버햄튼 | 195.97 | 24 | 13 | 8.165417 |
13 | 크팰 | 128.75 | 16 | 14 | 8.046875 |
14 | 소튼 | 111.34 | 15 | 15 | 7.422667 |
15 | 브라이튼 | 207.32 | 26 | 16 | 7.973846 |
16 | 번리 | 158.23 | 18 | 17 | 8.790556 |
17 | 풀럼 | 140.34 | 21 | 18 | 6.682857 |
18 | 웨스트브롬 | 135.21 | 15 | 19 | 9.014000 |
19 | 셰필드 | 105.55 | 7 | 20 | 15.078571 |
df_sort_by_point = df.sort_values(by=['EZ_Point'], axis=0, ascending=False)
df_sort_by_point
Team_Name | EZ_Point | EZ_Times | Rank | EZ_rate | |
---|---|---|---|---|---|
9 | 에버튼 | 249.84 | 25 | 10 | 9.993600 |
4 | 레스터 | 228.00 | 22 | 5 | 10.363636 |
10 | 아스톤빌라 | 217.01 | 23 | 11 | 9.435217 |
15 | 브라이튼 | 207.32 | 26 | 16 | 7.973846 |
2 | 리버풀 | 200.78 | 17 | 3 | 11.810588 |
12 | 울버햄튼 | 195.97 | 24 | 13 | 8.165417 |
3 | 첼시 | 186.36 | 19 | 4 | 9.808421 |
7 | 아스널 | 167.56 | 18 | 8 | 9.308889 |
8 | 리즈 | 164.32 | 18 | 9 | 9.128889 |
11 | 뉴캐슬 | 163.59 | 19 | 12 | 8.610000 |
1 | 맨유 | 160.11 | 17 | 2 | 9.418235 |
16 | 번리 | 158.23 | 18 | 17 | 8.790556 |
0 | 맨시티 | 150.32 | 11 | 1 | 13.665455 |
17 | 풀럼 | 140.34 | 21 | 18 | 6.682857 |
6 | 토트넘 | 136.12 | 17 | 7 | 8.007059 |
18 | 웨스트브롬 | 135.21 | 15 | 19 | 9.014000 |
5 | 웨스트햄 | 133.44 | 18 | 6 | 7.413333 |
13 | 크팰 | 128.75 | 16 | 14 | 8.046875 |
14 | 소튼 | 111.34 | 15 | 15 | 7.422667 |
19 | 셰필드 | 105.55 | 7 | 20 | 15.078571 |
df_sort_by_times = df.sort_values(by=['EZ_Times'], axis=0, ascending=False)
df_sort_by_times
Team_Name | EZ_Point | EZ_Times | Rank | EZ_rate | |
---|---|---|---|---|---|
15 | 브라이튼 | 207.32 | 26 | 16 | 7.973846 |
9 | 에버튼 | 249.84 | 25 | 10 | 9.993600 |
12 | 울버햄튼 | 195.97 | 24 | 13 | 8.165417 |
10 | 아스톤빌라 | 217.01 | 23 | 11 | 9.435217 |
4 | 레스터 | 228.00 | 22 | 5 | 10.363636 |
17 | 풀럼 | 140.34 | 21 | 18 | 6.682857 |
11 | 뉴캐슬 | 163.59 | 19 | 12 | 8.610000 |
3 | 첼시 | 186.36 | 19 | 4 | 9.808421 |
5 | 웨스트햄 | 133.44 | 18 | 6 | 7.413333 |
7 | 아스널 | 167.56 | 18 | 8 | 9.308889 |
8 | 리즈 | 164.32 | 18 | 9 | 9.128889 |
16 | 번리 | 158.23 | 18 | 17 | 8.790556 |
6 | 토트넘 | 136.12 | 17 | 7 | 8.007059 |
1 | 맨유 | 160.11 | 17 | 2 | 9.418235 |
2 | 리버풀 | 200.78 | 17 | 3 | 11.810588 |
13 | 크팰 | 128.75 | 16 | 14 | 8.046875 |
18 | 웨스트브롬 | 135.21 | 15 | 19 | 9.014000 |
14 | 소튼 | 111.34 | 15 | 15 | 7.422667 |
0 | 맨시티 | 150.32 | 11 | 1 | 13.665455 |
19 | 셰필드 | 105.55 | 7 | 20 | 15.078571 |
df_sort_by_rate = df.sort_values(by=["EZ_rate"], axis=0, ascending=False)
df_sort_by_rate
Team_Name | EZ_Point | EZ_Times | Rank | EZ_rate | |
---|---|---|---|---|---|
19 | 셰필드 | 105.55 | 7 | 20 | 15.078571 |
0 | 맨시티 | 150.32 | 11 | 1 | 13.665455 |
2 | 리버풀 | 200.78 | 17 | 3 | 11.810588 |
4 | 레스터 | 228.00 | 22 | 5 | 10.363636 |
9 | 에버튼 | 249.84 | 25 | 10 | 9.993600 |
3 | 첼시 | 186.36 | 19 | 4 | 9.808421 |
10 | 아스톤빌라 | 217.01 | 23 | 11 | 9.435217 |
1 | 맨유 | 160.11 | 17 | 2 | 9.418235 |
7 | 아스널 | 167.56 | 18 | 8 | 9.308889 |
8 | 리즈 | 164.32 | 18 | 9 | 9.128889 |
18 | 웨스트브롬 | 135.21 | 15 | 19 | 9.014000 |
16 | 번리 | 158.23 | 18 | 17 | 8.790556 |
11 | 뉴캐슬 | 163.59 | 19 | 12 | 8.610000 |
12 | 울버햄튼 | 195.97 | 24 | 13 | 8.165417 |
13 | 크팰 | 128.75 | 16 | 14 | 8.046875 |
6 | 토트넘 | 136.12 | 17 | 7 | 8.007059 |
15 | 브라이튼 | 207.32 | 26 | 16 | 7.973846 |
14 | 소튼 | 111.34 | 15 | 15 | 7.422667 |
5 | 웨스트햄 | 133.44 | 18 | 6 | 7.413333 |
17 | 풀럼 | 140.34 | 21 | 18 | 6.682857 |
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.rc('font', size=20)
plt.rcParams['figure.figsize'] = [15, 10]
plt.xticks(rotation = -45)
sns.barplot(data=df_sort_by_point, x="Team_Name", y="EZ_Point")
plt.show()
plt.xticks(rotation = -45)
sns.barplot(data=df_sort_by_times, x="Team_Name", y="EZ_Times")
plt.show()
plt.xticks(rotation = -45)
sns.barplot(data=df_sort_by_rate, x="Team_Name", y="EZ_rate")
plt.show()
df.mean()
EZ_Point 167.008000 EZ_Times 18.300000 Rank 10.500000 EZ_rate 9.406906 dtype: float64
from sklearn.linear_model import LinearRegression
import numpy as np
X = df["EZ_Point"]
y = df["EZ_Times"]
line_fitter = LinearRegression()
line_fitter.fit(X.values.reshape(-1,1), y)
plt.plot(X, y, 'o')
plt.plot(X,line_fitter.predict(X.values.reshape(-1,1)))
plt.plot([167, 167], [6, 30],color="green") # x1 x2 , y1 y2 선긋기
plt.plot([100, 250], [18.3, 18.3],color="green")
for i in df["Team_Name"]:
plt.text(df.EZ_Point[df.Team_Name==i],df.EZ_Times[df.Team_Name==i],i,color='black')
plt.show()