데이터 가져오기
Oracle`s Elixer 사이트에는 롤 리그경기 자료들이 모여 있다.
2024 Spring LCK에서 쓰인 챔프들을 분석해보자.
https://oracleselixir.com/stats/champions/byTournament/LCK%2F2024%20Season%2FSpring%20Season
Oracle's Elixir - LoL Esports Stats
Advanced esports stats and analytics from LCS, LEC, LCK, LPL, and the rest of global pro LoL.
oracleselixir.com
데이터 정리하기
from google.colab import files
import pandas as pd
uploaded_files = files.upload()
import io
file_name = list(uploaded_files.keys())[0]
df = pd.read_csv(io.BytesIO(uploaded_files[file_name]))
df
다운로드 받은 csv를 로컬로 업로드 한 후 출력을 해보면
경기 내에서 사용한 챔프들의 데이터들이 불러와진다.
챔프, 포지션 별로 나눠져 있고, 승률, 밴픽률, 총킬, 총데스 심지어는 퍼스트블러드 확률, 분당 와드 점수 같은 세세한 정보들도 다 모여있다.
우선 데이터를 쭉 보기 위해서 탑, 정글, 미드, 원딜, 서폿 순으로 정렬을 해보자.
df_sorted = df.sort_values(by='Pos', key=lambda x: pd.Categorical(x, categories=['Top', 'Jungle', 'Middle', 'ADC', 'Support'], ordered=True))
df_sorted
데이터가 너무 많아서 보기 불편하니 포지션 별로 DataFrame을 나눠서 따로 관리하자
# 'Pos' 항목을 기준으로 DataFrame을 나누기
top_df = df[df['Pos'] == 'Top']
jungle_df = df[df['Pos'] == 'Jungle']
middle_df = df[df['Pos'] == 'Middle']
adc_df = df[df['Pos'] == 'ADC']
support_df = df[df['Pos'] == 'Support']
분석
포지션 별로 가장 밴픽률이 높은 챔피언 10개씩 추려보자.
테이블에서 밴픽률은 P+B%이다.
def extract_and_convert(value):
if isinstance(value, str):
return float(value.rstrip('%'))
else:
return value
# 결과를 저장할 딕셔너리 생성
position_results = {}
# 각 포지션별 P+B% 항목이 가장 높은 10개 출력 및 저장
for position, position_df in {'Top': top_df, 'Jungle': jungle_df, 'Middle': middle_df, 'ADC': adc_df, 'Support': support_df}.items():
position_df_sorted = position_df.copy()
position_df_sorted['P+B%'] = position_df_sorted['P+B%'].apply(extract_and_convert)
position_df_sorted = position_df_sorted.nlargest(10, 'P+B%')
position_results[position] = position_df_sorted
position_results['Top']
position_results['Jungle']
position_results['Middle']
position_results['ADC']
position_results['Support']
각 데이터프레임을 출력 해보면
전체 적으로 크산테와 세나가 많은 관심을 받고 있는 것 같다.
문제점
결과를 보니 문제가 될 수 있는 부분이 하나 있다.
같은 챔프를 서로 다른 라인에서 사용해도 같은 밴률을 공유한다는 것이다.
그래서 미드의 결과를 보면 미드 크산테는 한 번 기용됐지만 밴픽률이 1위인 것을 알 수 잇다.
정글 노틸러스, 서폿 칼리스타도 딱 한 번 기용 됐지만 밴픽률이 높은 것을 알 수 있다.
그래서 GP(Game Played)가 2이하인 데이터들은 제외를 하고 정렬을 하면 해결이 될 것 같다.
position_df_sorted = position_df_sorted[position_df_sorted['GP'] > 2].nlargest(10, 'P+B%')
10개를 가져오는 줄에서 GP가 2보다 큰 값들만 가져오게 해줬다.
결론
크산테 세나가 협곡에 큰 영향을 미치고 있는 것으로 보인다.
'AI' 카테고리의 다른 글
볼넷을 많이 던지는 투수는 못 던지는 투수일까? (0) | 2024.06.26 |
---|---|
싸가지 없는 챗지피티 (0) | 2024.06.26 |
MLB 투수 데이터 분석 (0) | 2024.06.12 |
회귀분석 프로젝트 일지 (2) | 2024.04.30 |