Add MLB Player support

This commit is contained in:
Cal Corum 2024-05-26 10:53:15 -05:00
parent a6f5443be7
commit 72968f5e5d
5 changed files with 51 additions and 5 deletions

View File

@ -81,7 +81,7 @@ def get_batting_stats(
def match_player_lines(all_batting: pd.DataFrame, all_players: pd.DataFrame, is_custom: bool = False):
def get_pids(df_data):
return get_all_pybaseball_ids([df_data["playerId"]], 'fangraphs', is_custom)
return get_all_pybaseball_ids([df_data["playerId"]], 'fangraphs', is_custom, df_data['Name_vL'])
print(f'Now pulling mlbam player IDs...')
ids_and_names = all_batting.apply(get_pids, axis=1)
@ -100,6 +100,7 @@ def match_player_lines(all_batting: pd.DataFrame, all_players: pd.DataFrame, is_
async def create_new_players(
final_batting: pd.DataFrame, cardset: dict, card_base_url: str, release_dir: str, player_desc: str):
new_players = []
new_mlbplayers = {}
def create_batters(df_data):
f_name = sanitize_name(df_data["name_first"]).title()
@ -120,10 +121,25 @@ async def create_new_players(
'fangr_id': int(float(df_data['key_fangraphs'])),
'strat_code': int(float(df_data['key_mlbam']))
})
new_mlbplayers[df_data.name] = {
'first_name': sanitize_name(df_data["name_first"]).title(),
'last_name': sanitize_name(df_data["name_last"]).title(),
'key_mlbam': int(float(df_data['key_mlbam'])),
'key_fangraphs': int(float(df_data['key_fangraphs'])),
'key_bbref': df_data['key_bbref'],
'key_retro': df_data['key_retro']
}
final_batting[final_batting['player_id'].isnull()].apply(create_batters, axis=1)
print(f'Creating {len(new_players)} new players...')
for x in new_players:
mlb_query = await db_get('mlbplayers', params=[('key_bbref', x['bbref_id'])])
if mlb_query['count'] > 0:
x['mlbplayer_id'] = mlb_query['players'][0]['id']
else:
new_mlb = await db_post('mlbplayers/one', payload=new_mlbplayers[x['bbref_id']])
x['mlbplayer_id'] = new_mlb['id']
this_player = await db_post('players', payload=x)
final_batting.at[x['bbref_id'], 'player_id'] = this_player['player_id']
final_batting.at[x['bbref_id'], 'p_name'] = this_player['p_name']

View File

@ -943,7 +943,7 @@ def mlbteam_and_franchise(mlbam_playerid):
return p_data
def get_all_pybaseball_ids(player_id: list, key_type: str, is_custom: bool = False):
def get_all_pybaseball_ids(player_id: list, key_type: str, is_custom: bool = False, full_name: str = None):
if is_custom:
try:
long_player_id = int(player_id[0])
@ -995,6 +995,17 @@ def get_all_pybaseball_ids(player_id: list, key_type: str, is_custom: bool = Fal
q = pb.playerid_reverse_lookup(player_id, key_type=key_type)
if len(q.values) > 0:
return_val = q.loc[0]
# Check manual players
elif full_name is not None:
names = full_name.split(' ')
q = pb.playerid_lookup(last=names[-1], first=' '.join(names[:-1]), fuzzy=True)
if len(q.values) > 0:
return_val = q.loc[0]
return_val['key_fangraphs'] = player_id[0]
else:
logging.error(f'get_all_pybaseball_ids - Could not find id {player_id} / {key_type} or '
f'{full_name} / full name in pybaseball')
return_val = None
else:
logging.error(f'get_all_pybaseball_ids - Could not find id {player_id} / {key_type} in pybaseball')
return_val = None

View File

@ -10,7 +10,9 @@ master_debug = True
alt_database = False
if alt_database == 'dev':
DB_URL = 'https://pd.manticorum.com/api'
DB_URL = 'https://pddev.manticorum.com/api'
elif alt_database == 'sba':
DB_URL = 'https://sba.manticorum.com/api'
def param_char(other_params):

View File

@ -546,7 +546,8 @@ def balks(total_balks: int, innings: float, season_pct):
def wild_pitches(total_wps: int, innings: float, season_pct):
if innings == 0:
return 0
return min(round((int(total_wps) * 200 * season_pct) / float(innings)), 20)
# return min(round((int(total_wps) * 200 * season_pct) / float(innings)), 20)
return min(round((int(total_wps) * 200) / float(innings)), 20)
def closer_rating(gf: int, saves: int, games: int):

View File

@ -90,7 +90,7 @@ async def pd_pitchingcardratings_df(cardset_id: int):
def match_player_lines(
all_pitching: pd.DataFrame, all_players: pd.DataFrame, df_p: pd.DataFrame, is_custom: bool = False):
def get_pids(df_data):
return get_all_pybaseball_ids([df_data["playerId"]], 'fangraphs', is_custom)
return get_all_pybaseball_ids([df_data["playerId"]], 'fangraphs', is_custom, df_data['Name_vL'])
print(f'Now pulling mlbam player IDs...')
ids_and_names = all_pitching.apply(get_pids, axis=1)
@ -111,6 +111,7 @@ def match_player_lines(
async def create_new_players(
final_pitching: pd.DataFrame, cardset: dict, card_base_url: str, release_dir: str, player_desc: str):
new_players = []
new_mlbplayers = {}
def create_pitchers(df_data):
f_name = sanitize_name(df_data["name_first"]).title()
@ -131,10 +132,25 @@ async def create_new_players(
'fangr_id': int(float(df_data['key_fangraphs'])),
'strat_code': int(float(df_data['key_mlbam']))
})
new_mlbplayers[df_data.name] = {
'first_name': sanitize_name(df_data["name_first"]).title(),
'last_name': sanitize_name(df_data["name_last"]).title(),
'key_mlbam': int(float(df_data['key_mlbam'])),
'key_fangraphs': int(float(df_data['key_fangraphs'])),
'key_bbref': df_data['key_bbref'],
'key_retro': df_data['key_retro']
}
final_pitching[final_pitching['player_id'].isnull()].apply(create_pitchers, axis=1)
print(f'Creating {len(new_players)} new players...')
for x in new_players:
mlb_query = await db_get('mlbplayers', params=[('key_bbref', x['bbref_id'])])
if mlb_query['count'] > 0:
x['mlbplayer_id'] = mlb_query['players'][0]['id']
else:
new_mlb = await db_post('mlbplayers/one', payload=new_mlbplayers[x['bbref_id']])
x['mlbplayer_id'] = new_mlb['id']
this_player = await db_post('players', payload=x)
final_pitching.at[x['bbref_id'], 'player_id'] = this_player['player_id']
final_pitching.at[x['bbref_id'], 'p_name'] = this_player['p_name']