From b5d10f006060488034df1bf9a1e76b2acf3681df Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Fri, 27 Oct 2023 14:21:44 -0500 Subject: [PATCH] Added Arm rating --- app/routers_v2/battingcardratings.py | 63 ++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 8 deletions(-) diff --git a/app/routers_v2/battingcardratings.py b/app/routers_v2/battingcardratings.py index 2a7aa0d..224c999 100644 --- a/app/routers_v2/battingcardratings.py +++ b/app/routers_v2/battingcardratings.py @@ -339,19 +339,66 @@ async def get_basic_scouting(cardset_id: list = Query(default=None)): def get_raw_arm(df_data): of_arm = None - # get top of pos - # Neg arm * -5 / (6 - Pos arm) * 3 - # apply pos multiplier (rf: 1.5, cf: 1, lf: 0.5) - # add value by pos (rf: (6-rf_range) * 4, cf: (6-cf_range) * 3,lf: (6-lf_range) * 2) + of_pos = None + if pd.notna(df_data['Range RF']): + of_pos = 'RF' + elif pd.notna(df_data['Range CF']): + of_pos = 'CF' + elif pd.notna(df_data['Range LF']): + of_pos = 'LF' + + if of_pos is not None: + if df_data['Arm OF'] < 0: + of_raw = df_data['Arm OF'] * -5 + else: + of_raw = (5 - df_data['Arm OF']) + + if of_pos == 'RF': + of_raw = of_raw * 1.5 + of_raw += ((6 - df_data['Range RF']) * 4) + elif of_pos == 'CF': + of_raw += ((6 - df_data['Range CF']) * 3) + elif of_pos == 'LF': + of_raw = of_raw / 2 + of_raw += ((6 - df_data['Range LF']) * 2) + + of_arm = of_raw if_arm = None - # 100 - (50 - ((6-3b_range) * 5) + (6-ss_range) * 4 + (6-2b_range) * 3 + (6-1b_range) ) + if pd.notna(df_data['Range 3B']) or pd.notna(df_data['Range 2B']) or pd.notna(df_data['Range 1B']) or \ + pd.notna(df_data['Range SS']): + range_totals = 0 + if pd.notna(df_data['Range 3B']): + range_totals += ((6 - df_data['Range 3B']) * 5) + if pd.notna(df_data['Range SS']): + range_totals += ((6 - df_data['Range SS']) * 4) + if pd.notna(df_data['Range 2B']): + range_totals += ((6 - df_data['Range 2B']) * 3) + if pd.notna(df_data['Range 1B']): + range_totals += (6 - df_data['Range 1B']) + if_arm = 100 - (50 - range_totals) c_arm = None - # -5: 100 - # (10 - c_arm) * 3 + (20 - c_pb) + (20 - c_overthrow) - c_error + 20 + if pd.notna(df_data['Arm C']): + if df_data['Arm C'] == -5: + c_arm = 100 + else: + temp_arm = 20 + ((10 - df_data['Arm C']) * 3) + (20 - df_data['PB C']) + (20 - df_data['Throw C']) - \ + df_data['Error C'] + c_arm = min(100, temp_arm) - output = raw_data[['player_id', 'player_name', 'cardset_name', 'Speed', 'Steal', 'Reaction']] + if c_arm is not None: + return c_arm + elif of_arm is not None: + return of_arm + elif if_arm is not None: + return if_arm + + 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) + + output = raw_data[['player_name', 'cardset_name', 'Speed', 'Steal', 'Reaction', 'Arm']] # raw_data.sort_values(by=['player_id'], inplace=True) return Response(content=output.to_csv(index=True), media_type='text/csv')