diff --git a/app/routers_v2/battingcardratings.py b/app/routers_v2/battingcardratings.py index cb8708d..408a503 100644 --- a/app/routers_v2/battingcardratings.py +++ b/app/routers_v2/battingcardratings.py @@ -270,18 +270,18 @@ async def get_basic_scouting(cardset_id: list = Query(default=None)): speed_raw += 0.5 return speed_raw - raw_data['speed_raw'] = raw_data.apply(get_raw_speed, axis=1) - raw_data['speed_rank'] = raw_data['speed_raw'].rank(pct=True) - raw_data['Speed'] = round(raw_data['speed_rank'] * 100) + raw_series = raw_data.apply(get_raw_speed, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Speed'] = round(rank_series * 100) def get_raw_steal(df_data): return ( ((df_data['steal_high'] / 20) + (df_data['steal_low'] / 20)) * df_data['steal_jump'] ) - raw_data['steal_raw'] = raw_data.apply(get_raw_steal, axis=1) - raw_data['steal_rank'] = raw_data['steal_raw'].rank(pct=True) - raw_data['Steal'] = round(raw_data['steal_rank'] * 100) + raw_series = raw_data.apply(get_raw_steal, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Steal'] = round(rank_series * 100) def get_raw_reaction(df_data): raw_total = 0 @@ -291,9 +291,9 @@ async def get_basic_scouting(cardset_id: list = Query(default=None)): raw_total += 10 ** (5 - pos_range) return raw_total - raw_data['reaction_raw'] = raw_data.apply(get_raw_reaction, axis=1) - raw_data['reaction_rank'] = raw_data['reaction_raw'].rank(pct=True) - raw_data['Reaction'] = round(raw_data['reaction_rank'] * 100) + raw_series = raw_data.apply(get_raw_reaction, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Reaction'] = round(rank_series * 100) def get_raw_arm(df_data): of_arm = None @@ -354,9 +354,9 @@ async def get_basic_scouting(cardset_id: list = Query(default=None)): else: return 1 - raw_data['arm_raw'] = raw_data.apply(get_raw_arm, axis=1) - raw_data['arm_rank'] = raw_data['arm_raw'].rank(pct=True) - raw_data['Arm'] = round(raw_data['arm_rank'] * 100) + raw_series = raw_data.apply(get_raw_arm, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Arm'] = round(rank_series * 100) def get_raw_fielding(df_data): if_error, of_error, c_error = 0, 0, 0 @@ -394,21 +394,21 @@ async def get_basic_scouting(cardset_id: list = Query(default=None)): return sum([if_error, of_error, c_error]) / max(denom, 1) - raw_data['fld_raw'] = raw_data.apply(get_raw_fielding, axis=1) - raw_data['fld_rank'] = raw_data['fld_raw'].rank(pct=True) - raw_data['Fielding'] = round(raw_data['fld_rank'] * 100) + raw_series = raw_data.apply(get_raw_fielding, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Fielding'] = round(rank_series * 100) - raw_data['convl_rank'] = raw_data['avg_vl'].rank(pct=True) - raw_data['Contact L'] = round(raw_data['convl_rank'] * 100) + rank_series = raw_data['avg_vl'].rank(pct=True) + raw_data['Contact L'] = round(rank_series * 100) - raw_data['convr_rank'] = raw_data['avg_vr'].rank(pct=True) - raw_data['Contact R'] = round(raw_data['convr_rank'] * 100) + rank_series = raw_data['avg_vr'].rank(pct=True) + raw_data['Contact R'] = round(rank_series * 100) - raw_data['powvl_rank'] = raw_data['slg_vl'].rank(pct=True) - raw_data['Power L'] = round(raw_data['powvl_rank'] * 100) + rank_series = raw_data['slg_vl'].rank(pct=True) + raw_data['Power L'] = round(rank_series * 100) - raw_data['powvr_rank'] = raw_data['slg_vr'].rank(pct=True) - raw_data['Power R'] = round(raw_data['powvr_rank'] * 100) + rank_series = raw_data['slg_vr'].rank(pct=True) + raw_data['Power R'] = round(rank_series * 100) def get_raw_vision(df_data): return ( @@ -417,9 +417,9 @@ async def get_basic_scouting(cardset_id: list = Query(default=None)): (((df_data['strikeout_vl'] * 0.33) + (df_data['strikeout_vr'] * 0.67)) / 208) ) - raw_data['vis_raw'] = raw_data.apply(get_raw_vision, axis=1) - raw_data['vis_rank'] = raw_data['vis_raw'].rank(pct=True) - raw_data['Vision'] = round(raw_data['vis_rank'] * 100) + raw_series = raw_data.apply(get_raw_vision, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Vision'] = round(rank_series * 100) def get_raw_rating(df_data): return ( @@ -430,9 +430,9 @@ async def get_basic_scouting(cardset_id: list = Query(default=None)): ) ) - raw_data['rat_raw'] = raw_data.apply(get_raw_rating, axis=1) - raw_data['rat_rank'] = raw_data['rat_raw'].rank(pct=True) - raw_data['Rating'] = round(raw_data['rat_rank'] * 100) + raw_series = raw_data.apply(get_raw_rating, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Rating'] = round(rank_series * 100) output = raw_data[[ 'player_name', 'Rating', 'Contact R', 'Contact L', 'Power R', 'Power L', 'Vision', 'Speed', diff --git a/app/routers_v2/pitchingcardratings.py b/app/routers_v2/pitchingcardratings.py index 93191b0..538f0d1 100644 --- a/app/routers_v2/pitchingcardratings.py +++ b/app/routers_v2/pitchingcardratings.py @@ -160,7 +160,7 @@ def get_scouting_dfs(cardset_id: list = None): vr = pd.DataFrame(vr_vals) pit_df = pd.merge(vl, vr, on='player_id', suffixes=('_vl', '_vr')).set_index('player_id', drop=False) - logging.info(f'pit_df: {pit_df}') + logging.debug(f'pit_df: {pit_df}') positions = CardPosition.select().where(CardPosition.position == 'P') if cardset_id is not None: @@ -175,7 +175,7 @@ def get_scouting_dfs(cardset_id: list = None): name=f'Error P' )] db.close() - logging.info(f'series_list: {series_list}') + logging.debug(f'series_list: {series_list}') return pit_df.join(series_list) @@ -198,6 +198,118 @@ async def get_card_scouting(team_id: int, ts: str, cardset_id: list = Query(defa return Response(content=pd.DataFrame(output).to_csv(index=False), media_type='text/csv') +@router.get('/basic') +async def get_basic_scouting(cardset_id: list = Query(default=None)): + raw_data = get_scouting_dfs(cardset_id) + logging.info(f'output: {raw_data}') + + def get_raw_leftcontrol(df_data): + return ((1 - (df_data['obp_vl'] - df_data['avg_vl'])) * 100) + (1 - (df_data['wild_pitch'] / 20)) + + raw_series = raw_data.apply(get_raw_leftcontrol, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Control L'] = round(rank_series * 100) + + def get_raw_rightcontrol(df_data): + return ((1 - (df_data['obp_vr'] - df_data['avg_vr'])) * 100) + (1 - (df_data['wild_pitch'] / 20)) + + raw_series = raw_data.apply(get_raw_rightcontrol, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Control R'] = round(rank_series * 100) + + def get_raw_leftstuff(df_data): + return 10 - (df_data['slg_vl'] + df_data['slg_vl'] + ((df_data['homerun_vl'] + df_data['bp_homerun_vl']) / 108)) + + raw_series = raw_data.apply(get_raw_leftstuff, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Stuff L'] = round(rank_series * 100) + + def get_raw_rightstuff(df_data): + return 10 - (df_data['slg_vr'] + df_data['slg_vr'] + ((df_data['homerun_vr'] + df_data['bp_homerun_vr']) / 108)) + + raw_series = raw_data.apply(get_raw_rightstuff, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Stuff R'] = round(rank_series * 100) + + def get_raw_fielding(df_data): + return ((6 - df_data['Range P']) * 10) + (50 - df_data['Error P']) + + raw_series = raw_data.apply(get_raw_fielding, axis=1) + rank_series = raw_series.rank(pct=True) + logging.info(f'max fld: {raw_series.max()} / min fld: {raw_series.min()}') + raw_data['Fielding'] = round(rank_series * 100) + + def get_raw_stamina(df_data): + spow = df_data['starter_rating'] if pd.isna(df_data['starter_rating']) else -1 + rpow = df_data['relief_rating'] if pd.isna(df_data['relief_rating']) else -1 + this_pow = spow if spow > rpow else rpow + + return (((this_pow * (df_data['obp_vr'] * (2/3))) + (this_pow * (df_data['obp_vl'] / 3))) * 4.5) + this_pow + + raw_series = raw_data.apply(get_raw_stamina, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Stamina'] = round(rank_series * 100) + + def get_raw_hit(df_data): + return 1 - (df_data['avg_vr'] * (2/3)) + (df_data['avg_vl'] / 3) + + raw_series = raw_data.apply(get_raw_hit, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['H/9'] = round(rank_series * 100) + + def get_raw_k(df_data): + return ((df_data['strikeout_vr'] / 108) * (2/3)) + ((df_data['strikeout_vl'] / 108) / 3) + + raw_series = raw_data.apply(get_raw_k, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['K/9'] = round(rank_series * 100) + + def get_raw_bb(df_data): + return ((df_data['walk_vr'] / 108) * (2/3)) + ((df_data['walk_vl'] / 108) / 3) + + raw_series = raw_data.apply(get_raw_bb, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['BB/9'] = round(rank_series * 100) + + def get_raw_hr(df_data): + return 1 - ( + (((df_data['homerun_vr'] + df_data['bp_homerun_vr']) / 108) * (2/3)) + + (((df_data['homerun_vl'] + df_data['bp_homerun_vl']) / 108) / 3)) + + raw_series = raw_data.apply(get_raw_hr, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['HR/9'] = round(rank_series * 100) + + def get_raw_rating(df_data): + spow = df_data['starter_rating'] if pd.isna(df_data['starter_rating']) else -1 + rpow = df_data['relief_rating'] if pd.isna(df_data['relief_rating']) else -1 + + if spow > rpow and spow >= 4: + return ( + ((df_data['H/9'] + df_data['K/9'] + df_data['BB/9'] + df_data['HR/9']) * 5) + + (df_data['Fielding']) + (df_data['Stamina'] * 5) + + (((df_data['Stuff L'] / 3) + (df_data['Stuff R'] * (2/3))) * 4) + + (((df_data['Control L'] / 3) + (df_data['Control R'] * (2/3))) * 2) + ) + else: + return ( + ((df_data['H/9'] + df_data['K/9'] + df_data['BB/9'] + df_data['HR/9']) * 5) + + (df_data['Fielding']) + (df_data['Stamina'] * 5) + + (((df_data['Stuff L'] / 3) + (df_data['Stuff R'] * (2 / 3))) * 4) + + (((df_data['Control L'] / 3) + (df_data['Control R'] * (2 / 3))) * 2) + ) + + raw_series = raw_data.apply(get_raw_rating, axis=1) + rank_series = raw_series.rank(pct=True) + raw_data['Rating'] = round(rank_series * 100) + + output = raw_data[[ + 'player_name', 'Rating', 'Control R', 'Control L', 'Stuff R', 'Stuff L', 'Stamina', 'Fielding', 'H/9', 'K/9', + 'BB/9', 'HR/9', 'hand', 'cardset_name' + ]] + return Response(content=output.to_csv(index=True), media_type='text/csv') + + @router.get('/{ratings_id}') async def get_one_rating(ratings_id: int, token: str = Depends(oauth2_scheme)): if not valid_token(token):