[Data Mining] ๐น LCK
๐ ์ฃผ์ ์ ์
์ต๊ทผ ๋ฐ์ดํฐ๋ง์ด๋ ๊ด๋ จ ์์
์ ํ๋ค๊ฐ ์กฐ์ฌํ ๋ฐ์ดํฐ์
๊ณผ ์ฌ๋ฌ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ๊ณต๋ถํ๋ค๊ฐ Kaggle
์์ ์ด๋ค ์ฃผ์ ์ ๋ํด์ ์กฐ์ฌ๋ฅผ ํ ๊น ๊ณ ๋ฏผ์ ํ๋ค.
๊ทธ๋ ์ ์๊ณ ์๋ ์ฃผ์ ๋ก ํด์ผ์ง ํฅ๋ฏธ๋ ์๊ธฐ๊ณ , ์ด์ฌํ ํ ๊ฒ๋ง ๊ฐ์์ ์ฐพ์๋ณด๋ ๋์ค, LCK์ ์์ฆ๋ณ ์ ์๋ค์ ์ฑ์ ๊ณผ ๋ค๋ฅธ ์์๋ค์ ๋ํ ๋ฐ์ดํฐ์
์ ๋ฐ๊ฒฌํ์๋ค.
๊ทธ๋์ ๊ณผ์ฐ LCK ์ ์๋ค์ ์ฑ์ ๊ณผ ๋ค๋ฅธ ์์๋ค์ ์๊ด๊ด๊ณ๊ฐ ์ฐ๊ด์ด ์์์ง ๊ถ๊ธํด์ ธ์, ๊ทธ์ ๋ํด ์์๋ณด๊ธฐ๋ก ํ์๋ค.
๐ ์ฌ์ฉํ ๋ฐ์ดํฐ์
- ์ฃผ์ : LCK์์์ ์ ์ ์น๋ฅ ๊ณผ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ค๊ณผ์ ์๊ด๊ด๊ณ
- ๋ฐ์ดํฐ์ : https://www.kaggle.com/datasets/jackhan9811/lckdataset
- MetaData: ์ฝ 26๊ฐ์ ๋ฉํ๋ฐ์ดํฐ
๐ ์ ์ฒ๋ฆฌ
์ผ๋จ ์ฒ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ด์ฌ์ pandas
๋ฅผ ์ด์ฉํ์ฌ ์ด์ด๋ณด์๋ค.
๊ทธ๋ฌ์ ๋ค์๊ณผ ๊ฐ์ด ? ์ ๊ฐ์ ์ด์์น ๋ - ์ ๊ฐ์ ๊ฒฐ์ธก์น ๊ฐ ์กด์ฌํ๋ ๊ฒ์ ์ ์ ์์๋ค.
์ด๋ฅผ ๊ณ ์น๊ธฐ ์ํ์ฌ ๋ฐ๋ก pandas
๋ก ์ด์ด๋ณด๋ ๊ฒ์ด ์๋, csv
๋ฅผ ์ด์ฉํ์ฌ replace
๋ฅผ ์ด์ฉํ ์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์๋ค.
import csv
import pandas as pd
from sklearn.cluster import KMeans
import numpy as np
import seaborn as sb
import matplotlib.pyplot as plt
f = open("LCK/2016_LCK_SPRING.csv")
data = csv.reader(f)
header = []
data2 = []
for row in range(1):
header.append(next(data))
for row in data:
row[0] = row[0].replace("?","")
for i in range(2, 16):
row[i] = row[i].replace("-","0")
row[i] = float(row[i])
for i in range(16, 26):
row[i] = row[i].replace("?","")
row[i] = row[i].replace("-","0")
row[i] = float(row[i])
data2.append(row)
df = pd.DataFrame(data2)
df.columns = header
df_f = pd.DataFrame(df.iloc[:,5:8])
# df.iloc[:,5]
# df.iloc[:,6]
df_f
๐ ๋ฐ์ดํฐ ์ถ์ถํ๊ธฐ
๋ฐ์ดํฐ์
์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ์ฅ ์ฐ๊ด๋์ด ์์ด ๋ณด์ด๋ ๋ฐ์ดํฐ์ธ KDA, Avg Kills, Avg Death, Win Rate ๋ฅผ ์ฌ์ฉํ์ฌ ๋น๊ตํ๊ธฐ๋ก ํ์๋ค.
๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์๋ค.
import csv
import pandas as pd
from sklearn.cluster import KMeans
import numpy as np
import seaborn as sb
import matplotlib.pyplot as plt
f = open("LCK/2016_LCK_SPRING.csv")
data = csv.reader(f)
header = []
data2 = []
for row in range(1):
header.append(next(data))
for row in data:
row[0] = row[0].replace("?","")
for i in range(2, 16):
row[i] = row[i].replace("-","0")
row[i] = float(row[i])
for i in range(16, 26):
row[i] = row[i].replace("?","")
row[i] = row[i].replace("-","0")
row[i] = float(row[i])
data2.append(row)
df = pd.DataFrame(data2)
df.columns = header
df_f = pd.DataFrame(df.iloc[:,5:8])
# df.iloc[:,5]
# df.iloc[:,6]
df_f
๐ ๋ฐ์ดํฐ ์๊ฐํ
matplotlib
ํจํค์ง์ ์๋ pyplot
์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ์๊ฐํํ์๋ค.
plt.scatter(X[:,0],X[:,1],c='black',label='KDA/Win Rate')
plt.xlabel('KDA')
plt.ylabel('Win Rate')
plt.title('KDA/Win Rate')
plt.show()
์์ ๊ฐ์ ๋ฐ์ดํฐ ์๊ฐ๊ฒฐ๊ณผ๋ฌผ์ด ๋์๋ค.
KDA
๊ฐ์ ๊ฒฝ์ฐ์๋ KDA
์ Avg Kills
๊ฐ ๋์์๋ก Win Rate
๊ฐ ๋๊ฒ ๋์๊ณ , Avg Deaths
๊ฐ ๋ฎ์์๋ก Win Rate
๊ฐ ๋๊ฒ ๋์๋ค.
๊ทผ๋ฐ ์ฌ๊ธฐ์ ํ๊ฐ์ง ์๋ฌธ์ ์ด ์๊ฒผ๋๋ฐ, 1๋ฒ ๊ทธ๋ฆผ๊ฐ์ ๊ฒฝ์ฐ ์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ๊ฐ์ด ํ๋์์ผ๊น ๋ผ๋ ์๊ฐ์ด์๋ค.
K-means
๋ ์ค์ฌ์ ์ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ์ ๊ตฐ์ง์ ๋๋๋ ๋ฐฉ๋ฒ์ธ๋ฐ ๋ ๊ฐ๊น์ด ์ค์ฌ์ ์ด ์์์๋ ๋ถ๊ตฌํ๊ณ , ๋ค๋ฅธ ์์์ด ๋๋ ๊ฒ์ด์๋ค.
๊ฐ์ธ ๊ณต๋ถ ๊ธฐ๋ก์ฉ ๋ธ๋ก๊ทธ์
๋๋ค.
ํ๋ฆฌ๊ฑฐ๋ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ ์ ๋ณดํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.๐