SQL & Python Study

[D+27][ํ”„๋กœ์ ํŠธ #2-1] ๋กค(LoL) ์˜ค๋ธŒ์ ํŠธ, ํ‚ฌ/๋ฐ์Šค์™€ ์ŠนํŒจ์˜ ์ƒ๊ด€ ๊ด€๊ณ„ ๋ณธ๋ฌธ

๐Ÿšต‍โ™€๏ธTeam Project/๊ฒŒ์ž„ ๋ฐ์ดํ„ฐ ๋ถ„์„ ํ”„๋กœ์ ํŠธ

[D+27][ํ”„๋กœ์ ํŠธ #2-1] ๋กค(LoL) ์˜ค๋ธŒ์ ํŠธ, ํ‚ฌ/๋ฐ์Šค์™€ ์ŠนํŒจ์˜ ์ƒ๊ด€ ๊ด€๊ณ„

๊น€์ˆฎ์—‰ 2024. 6. 21. 13:24

*์ถœ์ฒ˜. League of Legends

๐Ÿ“Š INDEX 

01. ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ํ™•์ธ 
02. ํ•„์š”ํ•œ ์ปฌ๋Ÿผ ์ƒ์„ฑ 
03. ๋‹ด๋‹น ๋ถ„์„ ์ฃผ์ œ ์„ ์ • ๋ฐ 1์ฐจ EDA
- ์˜ค๋ธŒ์ ํŠธ์™€ ์ŠนํŒจ์˜ ์ƒ๊ด€๊ด€๊ณ„ ๋ถ„์„

- ํ‚ฌ, ๋ฐ์Šค์™€ ์ŠนํŒจ์˜ ๊ด€๊ณ„ ๋ถ„์„

 

 

 

๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ๊ฐœ์š” 

 

 

 

 

01. ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ํ™•์ธ 


  • info(), describe() ๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ™•์ธ.
  • ์ด 180928๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋กœ 49๊ฐœ ์ปฌ๋Ÿผ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ. 
  • ๊ฒฐ์ธก์น˜๋Š” ์—†์—ˆ์œผ๋‚˜, 900์ดˆ ์ด์ „์— ๊ฒŒ์ž„์ด ๋๋‚œ ๊ฒฝ๊ธฐ๋“ค์ด ์กด์žฌ(9496๊ฑด)
    • ๊ฒŒ์ž„ ๊ทœ์น™์ƒ 15๋ถ„(900์ดˆ) ์ด์ „์— ๊ธฐ๊ถŒ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ด ํ”Œ๋ ˆ์ด๋กœ ๊ฐ„์ฃผ
    • ์ถ”ํ›„ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ์‹œ๊ฐ„๋ณ„๋กœ ์ง‘๋‹จ์„ ๋‚˜๋ˆ„์–ด ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋…ผ์˜. 
  • ๊ฐ ํ”Œ๋ ˆ์ด์–ด์˜ ํ‚ฌ ์ˆ˜, ๋ฐ์Šค ์ˆ˜, ๋ฐ๋ฏธ์ง€ ํ”ผํ•ด๋Ÿ‰, ๊ณจ๋“œ ์ด๋Ÿ‰, ์‹œ์•ผ ์ ์ˆ˜, ๊ตฐ์ค‘ ์ œ์–ด ์‹œ๊ฐ„(์ดˆ)์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์œผ๋‚˜, ์ฑ”ํ”ผ์–ธ์€ ํŒŒ์•…ํ•  ์ˆ˜ ์—†์—ˆ์Œ. ํ”Œ๋ ˆ์ด์–ด ๋˜ํ•œ 1~5๋กœ ๋žœ๋ค ํ•˜๊ฒŒ ๋“ค์–ด๊ฐ€ ์žˆ์–ด์„œ ์ฑ”ํ”ผ์–ธ์„ ์œ ์ถ”ํ•˜๊ธฐ ์–ด๋ ค์› ๋˜ ๋ฐ์ดํ„ฐ. 

 

 

 

02. ํ•„์š”ํ•œ ์ปฌ๋Ÿผ ์ƒ์„ฑ


  •  ๋ฐ์ดํ„ฐ ๋ถ„์„์— ํ•„์š”ํ•œ ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์ƒ์„ฑ
    *ํŒ€์›๋“ค๋ผ๋ฆฌ ๋™์ผํ•œ ๋ณ€์ˆ˜์™€ ์ปฌ๋Ÿผ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ ์‹œํŠธ๋ฅผ ํ™œ์šฉํ•ด ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ–ˆ์–ด์š”. 

 

 

 

03.  ๋‹ด๋‹น ๋ถ„์„ ์ฃผ์ œ ์„ ์ • ๋ฐ EDA 


โœ… ์˜ค๋ธŒ์ ํŠธ์™€ ์ŠนํŒจ์˜ ์ƒ๊ด€๊ด€๊ณ„ ๋ถ„์„ - ํžˆํŠธ๋งต(Heatmap)

  • ๊ฐ ์š”์ธ ๊ฐ„์˜ ์ƒ๊ด€๊ณ„์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ  ํžˆํŠธ๋งต์œผ๋กœ ์‹œ๊ฐํ™” ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. 
    ํžˆํŠธ๋งต์„ ํ†ตํ•ด์„œ ์•Œ๊ฒŒ ๋œ ๋‚ด์šฉ์€ ๋…ธ์…˜์— ์ •๋ฆฌํ•ด์„œ ํŒ€์›๋“ค์—๊ฒŒ ๊ณต์œ ํ–ˆ์–ด์š”! 
  • sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
    • annot=True ํžˆํŠธ๋งต ์…€์— ๊ฐ’ ํ‘œ์‹œ ์—ฌ๋ถ€ 
    • cmap='coolwarm' ํžˆํŠธ๋งต ์ƒ‰์ƒ ํŒ”๋ ˆํŠธ ์ง€์ • 
# ์ฒซ ๋ฒˆ์งธ ์˜ค๋ธŒ์ ํŠธ ํš๋“ ์—ฌ๋ถ€์™€ ์ŠนํŒจ ์ƒ๊ด€๊ด€๊ณ„ - ํžˆํŠธ๋งต 

first_object_win_df = df[['win','firstTower', 'firstInhibitor', 'firstBaron', 'firstDragon', 'firstRiftHerald']]
correlation_matrix = first_object_win_df.corr()

plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('First object and Win correlation Matrix Heatmap')
plt.show()

# ์˜ค๋ธŒ์ ํŠธ์™€ ์ŠนํŒจ์˜ ์ƒ๊ด€๊ด€๊ณ„ ํžˆํŠธ๋งต 

object_win_df = df[['win','firstTower', 'firstInhibitor', 'firstBaron', 'firstDragon', 'firstRiftHerald', 'towerKills', 'inhibitorKills', 'baronKills', 'dragonKills', 'riftHeraldKills']]
object_correlation_matrix = item_win_df.corr()

plt.figure(figsize=(10, 8))
sns.heatmap(object_correlation_matrix, annot=True, cmap='coolwarm')
plt.title('Object and Win correlation Matrix Heatmap')
plt.show()

 

โœ… ํ‚ฌ, ๋ฐ์Šค์™€ ์ŠนํŒจ์˜ ๊ด€๊ณ„ ๋ถ„์„ - ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”

  • ํ‚ฌ, ๋ฐ์Šค์™€ ์ŠนํŒจ ๊ด€๊ณ„๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‹œ๊ฐํ™”ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์•…ํ–ˆ์–ด์š”. 
  • ๋ฐ•์Šค ํ”Œ๋กฏ - ํ‚ฌ, ๋ฐ์Šค์˜ ์ด์ƒ์น˜๊ฐ€ ํ™• ํŠ€๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ค„ ์ง€์–ด์ ธ ์žˆ์–ด ๋ณ„๋„ ์‚ญ์ œ X 
  • ํžˆ์Šคํ† ๊ทธ๋žจ - ํ‚ฌ ์ˆ˜์™€ ๋ฐ์Šค ์ˆ˜ ๋ชจ๋‘ 10~30 ๊ตฌ๊ฐ„์— ๊ฐ€์žฅ ๋งŽ์ด ๋ถ„ํฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์•ฝ๊ฐ„ ์น˜์šฐ์นœ ์ •๊ทœ ๋ถ„ํฌ ๋ชจ์–‘์„ ๋”ฐ๋ฆ„.
  • ํžˆํŠธ๋งต & ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ - ํ‚ฌ ์ˆ˜๋Š” 0.51 ์–‘์˜ ์ƒ๊ด€๊ด€๊ณ„, ๋ฐ์Šค ์ˆ˜๋Š” - 0.5 ์Œ์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๊ฐ–์Œ์„ ํ™•์ธ 
  • ํ”ผ๋ฒ— ํ…Œ์ด๋ธ” 
    • ์ „์ฒด ํ‚ฌ ์ˆ˜(`total_kills`)๊ฐ€ 20 ์ดํ•˜์ธ ๊ตฌ๊ฐ„์—์„œ๋Š” ์Šน๋ฆฌํ•  ํ™•๋ฅ ์ด 32%๋กœ ๋‚ฎ์Œ.
      ํŠนํžˆ, ํ‚ฌ ์ˆ˜๊ฐ€ 10 ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ์—” ์Šน๋ฆฌํ•  ํ™•๋ฅ ์ด 0.09%๋กœ ๊ต‰์žฅํžˆ ๋‚ฎ์•„์ง.
    • ๋ฐ˜๋ฉด, ํŠน์ดํ–ˆ๋˜ ์ ์€ ์ „์ฒด ํ‚ฌ์ˆ˜(`total_kills`) 31 ์ด์ƒ ๊ตฌ๊ฐ„๋ถ€ํ„ฐ๋Š” ์ด๊ธธ ํ™•๋ฅ ์ด 80% ๋Œ€๋กœ ํฌ๊ฒŒ ์ฐจ์ด ๋‚˜์ง€ ์•Š์Œ. 
# ๋ฐ•์Šคํ”Œ๋กฏ - ์ด์ƒ์น˜ ํ™•์ธ

sns.boxplot(y='total_kills', data=df)
plt.title('Total kills box plot')

sns.boxplot(y='total_deaths', data=df, color='green')
plt.title('Total deaths box plot')

# ํžˆ์Šคํ† ๊ทธ๋žจ - ๋ถ„ํฌ ํ™•์ธ 

sns.histplot(x='total_kills', data=df)
plt.title('Total kills histogram')

sns.histplot(x='total_deaths', data=df, color='green')
plt.title('Total deaths histogram')

# ํ‚ฌ์ˆ˜์™€ ์ŠนํŒจ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ (ํŒŒ๋ž€์ƒ‰ ๊ทธ๋ž˜ํ”„)
sns.barplot(x='total_kills', y='win', data=df)
plt.title('Total kills and win barplot')
plt.xticks(rotation=45)  # x์ถ• ๋ผ๋ฒจ์„ 45๋„ ํšŒ์ „
plt.show()

sns.barplot(x='win', y='total_kills', data=df)
plt.title('Total kills and win barplot')
plt.show()

# ๋ฐ์Šค ์ˆ˜์™€ ์ŠนํŒจ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ (์ดˆ๋ก์ƒ‰) 
sns.barplot(x='total_deaths', y='win', data=df, color='green')
plt.title('total_deaths and win barplot')
plt.show()

sns.barplot(x='win', y='total_deaths', data=df, color='green')
plt.title('total_deaths and win barplot')
plt.show()
# ์ „์ฒด ํ‚ฌ์ˆ˜์™€ ๋ฐ์Šค ์ˆ˜, ์ŠนํŒจ ๊ฐ„์˜ ์ƒ๊ด€๊ด€๊ณ„ ๋ถ„์„ 
kill_death_win_df = df[['win','total_kills', 'total_deaths']]
correlation_matrix = kill_death_win_df.corr()

plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('Kill, Death and Win correlation Matrix Heatmap')
plt.show()

# total_kills ์ˆ˜์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ๋ถ„๋ฅ˜ ํ•จ์ˆ˜ ์ƒ์„ฑ 
def assign_class(kills):
    if kills <= 10:
        return '00-10 ๊ตฌ๊ฐ„'
    elif kills <= 20:
        return '11-20 ๊ตฌ๊ฐ„'
    elif kills <= 30:
        return '21-30 ๊ตฌ๊ฐ„'
    elif kills <= 40:
        return '31-40 ๊ตฌ๊ฐ„'
    elif kills <= 50:
        return '41-50 ๊ตฌ๊ฐ„'
    elif kills <= 60:
        return '51-60 ๊ตฌ๊ฐ„'
    else:
        return '70 ์ด์ƒ ๊ตฌ๊ฐ„'

# ํ‚ฌ ์ˆ˜์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ํ• ๋‹น ์นผ๋Ÿผ ์ƒ์„ฑ ๋ฐ ํ”ผ๋ฒ— ํ…Œ์ด๋ธ” ์ œ์ž‘ 
df['kills_class'] = df['total_kills'].apply(assign_class)
df.pivot_table(index='kills_class', values=['win','total_deaths'], aggfunc={'count', 'mean'}).sort_index().round(2)


 

[ Today I Learned ] 

 

ํŒ€์›๋“ค๊ณผ ์„ ํƒํ•œ ๋‘๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ ์ฃผ์ œ๋Š” <๋ฆฌ๊ทธ ์˜ค๋ธŒ ๋ ˆ์ „๋“œ(LOL) ๋ฐธ๋Ÿฐ์Šค ๋ถ„์„>์ž…๋‹ˆ๋‹ค! 

๋ฐ์ดํ„ฐ ๋ถ„์„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ŠนํŒจ ์˜ˆ์ธก ๋ถ„๋ฅ˜ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ ์ž…๋‹ˆ๋‹ค. 

์‚ฌ์‹ค ์ „ <๊ฟˆ์˜ ์ •์›>๊ณผ ๊ฐ™์€ ๋ชจ๋ฐ”์ผ ํผ์ฆ ๊ฒŒ์ž„๋งŒ ์ฆ๊ธฐ๋Š” ๋ผ์ดํŠธ ์œ ์ €์ด๊ธฐ ๋•Œ๋ฌธ์— ๋กค์€ ์ „ํ˜€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ๋กค์€ ๋ชฐ๋ผ๋„ ํŽ˜์ด์ปค ์„ ์ˆ˜๋ฅผ ๋งค์šฐ ์ข‹์•„ํ•˜๊ณ , ์ง€๊ธˆ ๊ธฐํšŒ๊ฐ€ ์•„๋‹ˆ๋ฉด ๊ฒŒ์ž„ ์ฃผ์ œ์˜ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์—†์„ ๊ฒƒ ๊ฐ™์•„ ์„ค๋ ˆ๋Š” ๋งˆ์Œ์œผ๋กœ ํ•ด๋‹น ์ฃผ์ œ๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋ฏผ์ฃผ์ฃผ์˜ ๊ตญ๊ฐ€ ๋‹ค์ˆ˜๊ฒฐ ์›์น™์— ์˜ํ•ด ํ•ด๋‹น ์ฃผ์ œ๋ฅผ  ์ฒซ์งธ ๋‚ ์€ ํ”„๋กœ์ ํŠธ ์ฃผ์ œ๋ฅผ ์„ ์ •ํ•˜๊ณ  ๋ถ„์„ ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ๋‚˜๋ˆ„๊ณ , ๊ฐ์ž ์„ธ๋ถ€ ์ฃผ์ œ๋ฅผ ๋งก์•„ EDA๋ฅผ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ์š”! ํ™•์‹คํžˆ ๊ฒŒ์ž„ ๋ฐ์ดํ„ฐ๋ผ์„œ ๊ทธ๋Ÿฐ์ง€ ๊ทธ ๊ณผ์ •์ด ๋˜๊ฒŒ ์žฌ๋ฐŒ๊ธด ํ–ˆ์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž ํŒ€์› ๋ถ„๋“ค์ด ์นœ์ ˆํ•˜์…”์„œ ์จ๋ Œ์ด๋‚˜ ๋„ฅ์„œ์Šค ๊ฐ™์€ ๊ฒŒ์ž„ ์šฉ์–ด์™€ ๊ทœ์น™๋„ ์„ค๋ช…ํ•ด ์ฃผ์…”์„œ ์ •๋ง ์žฌ๋ฏธ์žˆ์—ˆ์–ด์š”! '์ฃผ๋ง์— ์‹œ๊ฐ„๋˜๋ฉด PC๋ฐฉ ๊ฐ€์„œ ํ•œ๋ฒˆ ํ•ด๋ณผ๊นŒ? '๋„ ์ƒ๊ฐํ–ˆ์ง€๋งŒ ํ•˜์ง€๋งŒ ์ €๋Š” ํŠธ๋กค์ด ๋  ๊ฒŒ ๋ถ„๋ช…ํ•˜๊ธฐ์— ๋‹ค๋ฅธ ์œ ์ € ๋ถ„๋“ค์„ ์œ„ํ•ด ์ฐธ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ •์‹ ์—†์–ด์„œ TIL ์ž‘์„ฑ์ด ์กฐ๊ธˆ ๋Šฆ์–ด์กŒ์ง€๋งŒ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋„ ๊ผผ๊ผผํžˆ ๊ธฐ๋กํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

(tmi) ์ƒˆ๋กœ ๋ฐ”๊พผ ZEP ์•„๋ฐ”ํƒ€๊ฐ€ ๋„ˆ๋ฌด ๊ท€์—ฌ์›Œyo!

 

*<์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ> ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ถ€ํŠธ์บ ํ”„ 2๊ธฐ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ๊ด€๋ จ ์ž๋ฐœ์  ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค.