Pitching Basic Ratings Complete + Batting Refactor

This commit is contained in:
Cal Corum 2023-10-29 17:48:38 -05:00
parent fb151f6bae
commit 24cf331803
2 changed files with 143 additions and 31 deletions

View File

@ -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',

View File

@ -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):