본문 바로가기
AI, 빅데이터/AI

[AI] Kaggle 데이터로 데이터 분석하기 _ League of Legends Diamond Ranked Games

by Foxy현 2023. 6. 17.
728x90
반응형

안녕하세요!

23년 6월 24일에 있을 빅데이터 분석기사 실기를 준비하면서 준비를 해도 불안함 마음으로 더 많은 자료를 찾는 분들이 있으실 텐데요

 

조금이라도 도움이 되고자 Kaggle 데이터를 활용해서 작업형 2 유형을 다뤄보겠습니다!

 

Kaggle 입문자들에게도 좋을 것 같네요

 

https://www.kaggle.com/datasets/bobbyscience/league-of-legends-diamond-ranked-games-10-min

 

League of Legends Diamond Ranked Games (10 min)

Classify LoL ranked games outcome by looking at the first 10min worth of data

www.kaggle.com

 

데이터는 오른쪽 상단에서 Copy API command를 통해 가져오실 수 있습니다

 

이후 다음처럼 발급받은 username과 key를 입력하도록 하겠습니다

os.environ['KAGGLE_USERNAME'] = 'sihyunlee9604'
os.environ['KAGGLE_KEY'] = 'kaggle_key'

 

또 아래 명령어를 통해 데이터를 받아오겠습니다

참고로 캐글을 통해 진행하였습니다

 

!kaggle datasets download -d bobbyscience/league-of-legends-diamond-ranked-games-10-min
!unzip '*.zip'

df = pd.read_csv('high_diamond_ranked_10min.csv')
df.head()

 

* 데이터 전처리

먼저 EDA를 통해 필요없는 변수를 제거해주겠습니다

 

df.drop(['gameId', 
       'redFirstBlood', 'redKills', 'redDeaths', 'redAssists',
       'redTotalGold', 'redTotalExperience',
       'redGoldDiff',
       'redExperienceDiff'],axis=1,inplace=True)

이후 데이터를 X_num, X_cat로 나눠주는데, 수치형, 범주형으로 나누는 것입니다.

수치형 데이터는 정규화를 통해 값을 바꿔주고, 범주형 데이터는 0혹은 1로 되있는 상황이니 그대로 두겠습니다

 

from sklearn.preprocessing import StandardScaler


X_num = df[['blueWardsPlaced', 'blueWardsDestroyed', 
       'blueKills', 'blueDeaths', 'blueAssists', 'blueEliteMonsters',
       'blueTowersDestroyed', 'blueTotalGold',
       'blueAvgLevel', 'blueTotalExperience', 'blueTotalMinionsKilled',
       'blueTotalJungleMinionsKilled', 'blueGoldDiff', 'blueExperienceDiff',
       'blueCSPerMin', 'blueGoldPerMin', 'redWardsPlaced', 'redWardsDestroyed',
       'redEliteMonsters', 'redTowersDestroyed',
       'redAvgLevel', 'redTotalMinionsKilled', 'redTotalJungleMinionsKilled',
       'redCSPerMin', 'redGoldPerMin']]

X_cat = df[['blueDragons','blueHeralds','redDragons','redHeralds','blueFirstBlood']]

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_num)
X_scaled = pd.DataFrame(X_scaled, index=X_num.index, columns=X_num.columns)

X = pd.concat([X_scaled, X_cat], axis=1)
y = df['blueWins']

 

 이후 두 데이터를 합쳐서 X로 지정하며 타깃은 y로 지정하겠습니다

 

학습데이터와 테스트 데이터로 나눠주겠습니다

 

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.3, random_state=4234)

 

* 모델 학습 및 성능 평가

 

먼저 LogisticRegression 모델을 만들겠습니다

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
model_lr = LogisticRegression(max_iter = 10000)
model_lr.fit(X_train, y_train)
pred = model_lr.predict(X_test)
print(classification_report(y_test, pred))

또한 변수가 결과에 미치는 영향을 알아보겠습니다

 

model_coef = pd.DataFrame(data=model_lr.coef_[0,:], index = X.columns, columns=['Model Coefficient'])
model_coef.sort_values(by='Model Coefficient', inplace=True, ascending=False)
plt.bar(model_coef.index, model_coef['Model Coefficient'])
plt.xticks(rotation=90)
plt.grid()
plt.show()

 

다음으로 XGBClassifier를 사용하여 성능을 평가해보겠습니다

 

from xgboost import XGBClassifier
model_xgb = XGBClassifier()
model_xgb.fit(X_train, y_train)
pred = model_xgb.predict(X_test)
print(classification_report(y_test, pred))

결과에 미치는 변수의 영향은 아래와 같습니다

fig = plt.figure(figsize=(10,6))
plt.barh(X.columns, model_xgb.feature_importances_)

 

감사합니다!

 

 

 

728x90
반응형