Added left on base stats

This commit is contained in:
Cal Corum 2023-08-29 15:04:02 -05:00
parent f6e9e6c7fd
commit b3d2854210

View File

@ -279,7 +279,32 @@ async def get_batting_totals(
fn.SUM(StratPlay.sb).alias('sum_sb'), fn.SUM(StratPlay.cs).alias('sum_cs'),
fn.SUM(StratPlay.bphr).alias('sum_bphr'), fn.SUM(StratPlay.bpfo).alias('sum_bpfo'),
fn.SUM(StratPlay.bp1b).alias('sum_bp1b'), fn.SUM(StratPlay.bplo).alias('sum_bplo'),
fn.SUM(StratPlay.wpa).alias('sum_wpa'))
fn.SUM(StratPlay.wpa).alias('sum_wpa'),
fn.COUNT(StratPlay.on_first_final).filter(
StratPlay.on_first_final.is_null(False) & (StratPlay.on_first_final != 4)).alias('count_lo1'),
fn.COUNT(StratPlay.on_second_final).filter(
StratPlay.on_second_final.is_null(False) & (StratPlay.on_second_final != 4)).alias('count_lo2'),
fn.COUNT(StratPlay.on_third_final).filter(
StratPlay.on_third_final.is_null(False) & (StratPlay.on_third_final != 4)).alias('count_lo3'),
fn.COUNT(StratPlay.on_first).filter(StratPlay.on_first.is_null(False)).alias('count_runner1'),
fn.COUNT(StratPlay.on_second).filter(StratPlay.on_second.is_null(False)).alias('count_runner2'),
fn.COUNT(StratPlay.on_third).filter(StratPlay.on_third.is_null(False)).alias('count_runner3'),
fn.COUNT(StratPlay.on_first_final).filter(
StratPlay.on_first_final.is_null(False) & (StratPlay.on_first_final != 4) &
(StratPlay.starting_outs + StratPlay.outs == 3)).alias('count_lo1_3out'),
fn.COUNT(StratPlay.on_second_final).filter(
StratPlay.on_second_final.is_null(False) & (StratPlay.on_second_final != 4) &
(StratPlay.starting_outs + StratPlay.outs == 3)).alias('count_lo2_3out'),
fn.COUNT(StratPlay.on_third_final).filter(
StratPlay.on_third_final.is_null(False) & (StratPlay.on_third_final != 4) &
(StratPlay.starting_outs + StratPlay.outs == 3)).alias('count_lo3_3out')
# fn.COUNT(StratPlay.on_first).filter(StratPlay.on_first.is_null(False) &
# (StratPlay.starting_outs + StratPlay.outs == 3)).alias('count_runner1_3out'),
# fn.COUNT(StratPlay.on_second).filter(StratPlay.on_second.is_null(False) &
# (StratPlay.starting_outs + StratPlay.outs == 3)).alias('count_runner2_3out'),
# fn.COUNT(StratPlay.on_third).filter(StratPlay.on_third.is_null(False) &
# (StratPlay.starting_outs + StratPlay.outs == 3)).alias('count_runner3_3out')
)
.where((StratPlay.game << season_games) & (StratPlay.batter.is_null(False)))
.having(fn.SUM(StratPlay.pa) >= min_pa)
)
@ -372,6 +397,9 @@ async def get_batting_totals(
}
for x in bat_plays:
logging.info(
f'batter: {x.batter_id} / left on 1: {x.count_lo1} / left on 2: {x.count_lo2} / left on 3: {x.count_lo3}'
)
this_run = run_plays.where(StratPlay.runner == x.batter)
if this_run.count() > 0:
sum_sb = this_run[0].sum_sb
@ -398,6 +426,11 @@ async def get_batting_totals(
if group_by in ['playergame', 'teamgame']:
this_game = x.game_id if short_output else model_to_dict(x.game, recurse=False)
lob_all_rate, lob_2outs_rate = 0, 0
if x.count_runner1 + x.count_runner2 + x.count_runner3 > 0:
lob_all_rate = (x.count_lo1 + x.count_lo2 + x.count_lo3) / \
(x.count_runner1 + x.count_runner2 + x.count_runner3)
return_stats['stats'].append({
'player': x.batter_id if short_output else model_to_dict(x.batter, recurse=False),
'team': x.batter_team_id if short_output else model_to_dict(x.batter_team, recurse=False),
@ -428,7 +461,10 @@ async def get_batting_totals(
'ops': obp + slg,
'woba': (.69 * x.sum_bb + .72 * x.sum_hbp + .89 * (x.sum_hit - x.sum_double - x.sum_triple - x.sum_hr) +
1.27 * x.sum_double + 1.62 * x.sum_triple + 2.1 * x.sum_hr) / (x.sum_pa - x.sum_ibb),
'game': this_game
'game': this_game,
'lob_all': x.count_lo1 + x.count_lo2 + x.count_lo3,
'lob_all_rate': lob_all_rate,
'lob_2outs': x.count_lo1_3out + x.count_lo2_3out + x.count_lo3_3out
})
# Get Running Stats
@ -471,7 +507,25 @@ async def get_pitching_totals(
fn.SUM(StratPlay.bphr).alias('sum_bphr'), fn.SUM(StratPlay.bpfo).alias('sum_bpfo'),
fn.SUM(StratPlay.bp1b).alias('sum_bp1b'), fn.SUM(StratPlay.bplo).alias('sum_bplo'),
fn.SUM(StratPlay.wild_pitch).alias('sum_wp'), fn.SUM(StratPlay.balk).alias('sum_balk'),
fn.SUM(StratPlay.outs).alias('sum_outs'), fn.SUM(StratPlay.e_run).alias('sum_erun'))
fn.SUM(StratPlay.outs).alias('sum_outs'), fn.SUM(StratPlay.e_run).alias('sum_erun'),
fn.COUNT(StratPlay.on_first_final).filter(
StratPlay.on_first_final.is_null(False) & (StratPlay.on_first_final != 4)).alias('count_lo1'),
fn.COUNT(StratPlay.on_second_final).filter(
StratPlay.on_second_final.is_null(False) & (StratPlay.on_second_final != 4)).alias('count_lo2'),
fn.COUNT(StratPlay.on_third_final).filter(
StratPlay.on_third_final.is_null(False) & (StratPlay.on_third_final != 4)).alias('count_lo3'),
fn.COUNT(StratPlay.on_first).filter(StratPlay.on_first.is_null(False)).alias('count_runner1'),
fn.COUNT(StratPlay.on_second).filter(StratPlay.on_second.is_null(False)).alias('count_runner2'),
fn.COUNT(StratPlay.on_third).filter(StratPlay.on_third.is_null(False)).alias('count_runner3'),
fn.COUNT(StratPlay.on_first_final).filter(
StratPlay.on_first_final.is_null(False) & (StratPlay.on_first_final != 4) &
(StratPlay.starting_outs + StratPlay.outs == 3)).alias('count_lo1_3out'),
fn.COUNT(StratPlay.on_second_final).filter(
StratPlay.on_second_final.is_null(False) & (StratPlay.on_second_final != 4) &
(StratPlay.starting_outs + StratPlay.outs == 3)).alias('count_lo2_3out'),
fn.COUNT(StratPlay.on_third_final).filter(
StratPlay.on_third_final.is_null(False) & (StratPlay.on_third_final != 4) &
(StratPlay.starting_outs + StratPlay.outs == 3)).alias('count_lo3_3out'))
.where((StratPlay.game << season_games) & (StratPlay.pitcher.is_null(False)))
.having(fn.SUM(StratPlay.pa) >= min_pa)
)
@ -552,6 +606,11 @@ async def get_pitching_totals(
this_game = x.game_id if short_output else model_to_dict(x.game, recurse=False)
this_dec = all_dec.where((Decision.pitcher == x.pitcher) & (Decision.game == x.game))
lob_all_rate, lob_2outs_rate = 0, 0
if x.count_runner1 + x.count_runner2 + x.count_runner3 > 0:
lob_all_rate = (x.count_lo1 + x.count_lo2 + x.count_lo3) / \
(x.count_runner1 + x.count_runner2 + x.count_runner3)
return_stats['stats'].append({
'player': x.pitcher_id if short_output else model_to_dict(x.pitcher, recurse=False),
'team': x.pitcher_team_id if short_output else model_to_dict(x.pitcher_team, recurse=False),
@ -599,7 +658,8 @@ async def get_pitching_totals(
'k/9': x.sum_so * 9 / (tot_outs / 3),
'bb/9': x.sum_bb * 9 / (tot_outs / 3),
'k/bb': x.sum_so / tot_bb,
'game': this_game
'game': this_game,
'lob_2outs': x.count_lo1_3out + x.count_lo2_3out + x.count_lo3_3out
})
db.close()
return return_stats