develope_kkyu

[Python] MLB Stats API를 이용해 내셔널리그 골든글러브 후보 3인 수비 지표 비교(김하성 포함) 본문

Python

[Python] MLB Stats API를 이용해 내셔널리그 골든글러브 후보 3인 수비 지표 비교(김하성 포함)

developekkyu37 2023. 1. 19. 16:57
728x90

패키지 임포트

import statsapi
import pandas as pd

내셔널리그 골든글러브 최종 후보 3인 검색

김하성, 댄스비 스완슨, 미겔 로하스의 선수 id 찾기

print(statsapi.lookup_player('ha-seong'))
print(statsapi.lookup_player('dansby swanson'))
print(statsapi.lookup_player('miguel rojas'))

[{'id': 673490, 'fullName': 'Ha-Seong Kim', 'firstName': 'Ha-Seong', 'lastName': 'Kim', 'primaryNumber': '7', 'currentTeam': {'id': 135}, 'primaryPosition': {'code': '6', 'abbreviation': 'SS'}, 'useName': 'Ha-Seong', 'boxscoreName': 'Kim', 'mlbDebutDate': '2021-04-01', 'nameFirstLast': 'Ha-Seong Kim', 'firstLastName': 'Ha-Seong Kim', 'lastFirstName': 'Kim, Ha-Seong', 'lastInitName': 'Kim, H', 'initLastName': 'H Kim', 'fullFMLName': 'Ha-Seong Kim', 'fullLFMName': 'Kim, Ha-Seong'}]
[{'id': 621020, 'fullName': 'Dansby Swanson', 'firstName': 'James', 'lastName': 'Swanson', 'primaryNumber': '7', 'currentTeam': {'id': 112}, 'primaryPosition': {'code': '6', 'abbreviation': 'SS'}, 'useName': 'Dansby', 'boxscoreName': 'Swanson', 'nickName': 'Dans', 'mlbDebutDate': '2016-08-17', 'nameFirstLast': 'Dansby Swanson', 'firstLastName': 'Dansby Swanson', 'lastFirstName': 'Swanson, Dansby', 'lastInitName': 'Swanson, D', 'initLastName': 'D Swanson', 'fullFMLName': 'James Dansby Swanson', 'fullLFMName': 'Swanson, James Dansby'}]
[{'id': 500743, 'fullName': 'Miguel Rojas', 'firstName': 'Miguel', 'lastName': 'Rojas', 'primaryNumber': '11', 'currentTeam': {'id': 119}, 'primaryPosition': {'code': '6', 'abbreviation': 'SS'}, 'useName': 'Miguel', 'boxscoreName': 'Rojas, M', 'nickName': 'Miggy Ro', 'mlbDebutDate': '2014-06-06', 'nameFirstLast': 'Miguel Rojas', 'firstLastName': 'Miguel Rojas', 'lastFirstName': 'Rojas, Miguel', 'lastInitName': 'Rojas, M', 'initLastName': 'M Rojas', 'fullFMLName': 'Miguel Elias Rojas', 'fullLFMName': 'Rojas, Miguel Elias'}]

김하성 수비 지표

kim = statsapi.player_stat_data(673490, group="[fielding]", type="season")
kim

{'id': 673490,
 'first_name': 'Ha-Seong',
 'last_name': 'Kim',
 'active': True,
 'current_team': 'San Diego Padres',
 'position': 'SS',
 'nickname': None,
 'last_played': None,
 'mlb_debut': '2021-04-01',
 'bat_side': 'Right',
 'pitch_hand': 'Right',
 'stats': [{'type': 'season',
   'group': 'fielding',
   'season': '2022',
   'stats': {'gamesPlayed': 24,
    'gamesStarted': 17,
    'assists': 32,
    'putOuts': 16,
    'errors': 0,
    'chances': 48,
    'fielding': '1.000',
    'position': {'code': '5',
     'name': 'Third Base',
     'type': 'Infielder',
     'abbreviation': '3B'},
    'rangeFactorPerGame': '2.00',
    'rangeFactorPer9Inn': '2.53',
    'innings': '171.1',
    'games': 24,
    'doublePlays': 4,
    'triplePlays': 0,
    'throwingErrors': 0}},
  {'type': 'season',
   'group': 'fielding',
   'season': '2022',
   'stats': {'gamesPlayed': 131,
    'gamesStarted': 125,
    'assists': 327,
    'putOuts': 120,
    'errors': 8,
    'chances': 455,
    'fielding': '.982',
    'position': {'code': '6',
     'name': 'Shortstop',
     'type': 'Infielder',
     'abbreviation': 'SS'},
    'rangeFactorPerGame': '3.41',
    'rangeFactorPer9Inn': '3.68',
    'innings': '1092.0',
    'games': 131,
    'doublePlays': 59,
    'triplePlays': 0,
    'throwingErrors': 3}}]}

이 중 유격수 지표 추출

kim = statsapi.player_stat_data(673490, group="[fielding]", type="season")['stats'][1]['stats']
kim

{'gamesPlayed': 131,
 'gamesStarted': 125,
 'assists': 327,
 'putOuts': 120,
 'errors': 8,
 'chances': 455,
 'fielding': '.982',
 'position': {'code': '6',
  'name': 'Shortstop',
  'type': 'Infielder',
  'abbreviation': 'SS'},
 'rangeFactorPerGame': '3.41',
 'rangeFactorPer9Inn': '3.68',
 'innings': '1092.0',
 'games': 131,
 'doublePlays': 59,
 'triplePlays': 0,
 'throwingErrors': 3}

똑같이 스완슨과 로하스의 유격수 수비 지표 추출

swanson = statsapi.player_stat_data(621020, group="[fielding]", type="season")['stats'][0]['stats']
swanson 
rojas = statsapi.player_stat_data(500743, group="[fielding]", type="season")['stats'][1]['stats']
rojas

데이터 프레임 만들기

sr_k = pd.Series(kim, name = 'Kim')
sr_s = pd.Series(swanson, name = 'Swanson')
sr_r = pd.Series(rojas, name = 'Rojas')

df = pd.concat([sr_k,sr_s,sr_r], axis = 1)
df = df.drop('position')
df

728x90