데이터시각화 특강 (7주차) 10월25일 _3
fifa22자료 시각화
- kaggle 에서 fifa22 검색, fifa official data set 들어가서 fifa22 다운
-
FIFA22라는 축구게임이 있음 (굉장히 인기있음)
-
게임에 실제 선수들이 나오면서 선수들의 능력치가 세밀하게 구현되어 있음
-
이 능력치에 대한 데이터셋은 캐글에 공개되어 있음
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
fifa22=pd.read_csv('https://raw.githubusercontent.com/guebin/2021DV/master/_notebooks/2021-10-25-FIFA22_official_data.csv')
-
Overall을 기준으로 정렬하여 보자.
fifa22=fifa22.sort_values(by='Overall',ascending=False).reset_index().rename(columns={'index':'index_old'})
fifa22.head()
from plotnine import *
ggplot(data=fifa22)+geom_point(aes(x='Overall', y='Potential'))
-
뭔가 Potential > Overall 인 관계가 성립하는것 같다. $\to$ Potetial2= Potential - Overall 인 변수를 새로 만들고 시각화해보자.
- 판다스: 새로운열 추가
fifa22['Potential2'] = fifa22['Potential'] - fifa22['Overall']
ggplot(data=fifa22)+geom_point(aes(x='Overall', y='Potential2'),alpha=0.1)
ggplot(data=fifa22)+geom_point(aes(x='Overall', y='Potential2'),alpha=0.1,position='jitter')
-
포텐셜2가 너무 0근처인 선수들이 있다. (아마 은퇴한 선수가 아닐까?) $\to$ 제외하고 그리자.
ggplot(data=fifa22.query('Potential2>0.1'))+geom_point(aes(x='Overall', y='Potential2'),alpha=0.1,position='jitter')
-
해석
- 음의 상관관계가 있다.
- 오버올이 클수록 포텐셜2의 분산이 작아진다. (오버올이 클수록 더 성장할 부분이 없으니까)
-
Overall을 구간별로 나누자: 어느정도가 적당한 구간일까?
fifa22.Overall.describe()
import matplotlib.pyplot as plt
plt.hist(fifa22.Overall)
fifa22.Overall.hist()
def f(x):
if x>72: y='Q1'
elif x>68: y='Q2'
elif x>63: y='Q3'
else: y='Q4'
return y
fifa22['Q']=list(map(f,fifa22.Overall))
fifa22[['Q','Overall']]
ggplot(data=fifa22.query('Potential2>0.1'))\
+geom_boxplot(aes(x='Q',y='Potential2'))
-
Q1으로 갈수록 분산이 작아짐! $\to$ 헷갈린다...
-
산점도와 박스플랏을 겹쳐서 그린다면 좀더 이해가 쉬울것 같다.
-
x축의 위치를 조정하면 될것 같다 $\to$ Q1, Q2, Q3, Q4 각 그룹별로 x축의 위치를 구하자.
fifa22.query('Q=="Q1"').Overall.mean()
np.mean(fifa22.query('Q=="Q1"').Overall)
- 이런식으로 해도 되지만
fifa22.groupby(by='Q').mean().Overall
l=fifa22.groupby(by='Q').mean().Overall.to_list()
l
-
이제 박스플랏이 들어갈 x축의 위치를 저장할 컬럼을 추가하고 그 이름을 Qx 라고 하자.
def g(x):
if x=='Q1': y=l[0]
elif x=='Q2': y=l[1]
elif x=='Q3': y=l[2]
else: y=l[3]
return y
fifa22['Qx']=list(map(g,fifa22.Q))
fifa22
ggplot(data=fifa22.query('Potential2>0.1'))\
+geom_point(aes(x='Overall', y='Potential2',color='Q'),alpha=0.1,size=0.1,position='jitter')\
+geom_boxplot(aes(x='Qx', y='Potential2',color='Q'))
fifa22 데이터셋에서 Q==Q4
이고, Potentail2>20
인 선수들의 이름을 출력하라.
fifa22.query(('Q=="Q4" and Potential2>20'))['Name']