From b3cce685765599afef7c1792056d48cd1ecd4a46 Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Fri, 25 Oct 2024 07:48:56 -0500 Subject: [PATCH] Added ratings post and positions post - to be tested --- retrosheet_data.py | 65 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 5 deletions(-) diff --git a/retrosheet_data.py b/retrosheet_data.py index dfd88f8..15758d3 100644 --- a/retrosheet_data.py +++ b/retrosheet_data.py @@ -581,9 +581,7 @@ def calc_positions(bs: pd.DataFrame) -> pd.DataFrame: async def get_or_post_players(stat_df: pd.DataFrame, bat_card_df: pd.DataFrame, bat_rat_df: pd.DataFrame, def_rat_df: pd.DataFrame) -> pd.DataFrame: - # Columns: bbref_id, player_id - # all_bbref_ids = [] - # all_player_ids = [] + # Refactor this to support batters or pitchers, make stat dfs optional and send to getorpostbatters/getorpostpitchers all_players = [] dev_count = 0 @@ -662,7 +660,6 @@ async def get_or_post_players(stat_df: pd.DataFrame, bat_card_df: pd.DataFrame, dev_count += 1 - # new_data = {'key_bbref': all_bbref_ids, 'player_id': all_player_ids} players_df = pd.DataFrame(all_players).set_index('bbref_id') return players_df @@ -690,6 +687,47 @@ async def post_batting_cards(cards_df: pd.DataFrame): raise ValueError(e_msg) +async def post_batting_ratings(ratings_df: pd.DataFrame): + all_ratings = [] + + def append_ratings(row): + vl = row['ratings_vL'] + vl['player_id'] = row['player_id'] + + vr = row['ratings_vR'] + vr['player_id'] = row['player_id'] + + all_ratings.append(vl) + all_ratings.append(vr) + + ratings_df.apply(append_ratings, axis=1) + resp = await db_put('battingcardratings', payload={'ratings': all_ratings}, timeout=6) + if resp is not None: + return True + else: + e_msg = 'Unable to post batting ratings' + logging.debug(e_msg, stack_info=True) + raise ValueError(e_msg) + + +async def post_positions(pos_df: pd.DataFrame): + all_pos = [] + + def append_positions(row): + new_val = row.to_dict() + new_val['player_id'] = int(row['player_id']) + all_pos.append(new_val) + pos_df.apply(append_positions, axis=1) + + resp = await db_put('cardpositions', payload={'positions': all_pos}, timeout=6) + if resp is not None: + return True + else: + e_msg = 'Unable to post positions' + logging.debug(e_msg, stack_info=True) + raise ValueError(e_msg) + + async def post_batter_data(bs: pd.DataFrame, bc: pd.DataFrame, br: pd.DataFrame, dr: pd.date_range) -> int: all_players = await get_or_post_players(bs, bc, br, dr) @@ -704,9 +742,26 @@ async def post_batter_data(bs: pd.DataFrame, bc: pd.DataFrame, br: pd.DataFrame, await post_batting_cards(bc) # Post Batting Ratings + br = pd.merge( + left=br, + right=all_players, + how='right', #'left', + left_on='key_bbref', + right_on='bbref_id' + ) + await post_batting_ratings(br) # Post Positions - pass + dr = pd.merge( + left=dr, + right=all_players, + how='right', # 'left', + left_on='key_bbref', + right_on='bbref_id' + ) + await post_positions(dr) + + return len(all_players) async def run_batters(data_input_path: str, start_date: int, end_date: int, post_data: bool = False, season_pct: float = 1.0):