Baseball-Sabermetrics
view release on metacpan or search on metacpan
examples/ws.pl view on Meta::CPAN
team_c_claim_point => 'team_pos_claim_point("c")',
team_b1_claim_point => 'team_pos_claim_point("b1")',
team_b2_claim_point => 'team_pos_claim_point("b2")',
team_b3_claim_point => 'team_pos_claim_point("b3")',
team_ss_claim_point => 'team_pos_claim_point("ss")',
team_of_claim_point => 'team_pos_claim_point("of")',
team_pos_claim_point => sub {
my $pos = shift;
my $cp = "${pos}_claim_percentage";
my $weight = "${pos}_fielding_weight";
exists $_->fielding->{$pos} ? ($_->$cp - 0.2) * $_->$weight : 0;
},
team_c_ws => 'team_fielding_ws * team_c_claim_point / team_total_claim_point',
team_b1_ws => 'team_fielding_ws * team_b1_claim_point / team_total_claim_point',
team_b2_ws => 'team_fielding_ws * team_b2_claim_point / team_total_claim_point',
team_b3_ws => 'team_fielding_ws * team_b3_claim_point / team_total_claim_point',
team_ss_ws => 'team_fielding_ws * team_ss_claim_point / team_total_claim_point',
team_of_ws => 'team_fielding_ws * team_of_claim_point / team_total_claim_point',
examples/ws.pl view on Meta::CPAN
return $_->{fielding}->{$pos};
},
limit => sub {
my ($val, $max) = @_;
return $val < 0 ? 0 : $val > $max ? $max : $val;
},
# Catchers' Claim Percentage
#c_claim_percentage => 'c_cs_grade + c_non_so_e_rate_grade + c_bunt_allowed_grade + c_pb_grade',
c_claim_percentage => '(
limit(c_cs_grade, 50) +
limit(c_non_so_e_rate_grade, 30) +
limit(c_bunt_allowed_grade, 10)
) * 10 / 9',
non_so_error_per => 'e / (po + a + e - p_so)',
c_cs_grade => '25 + (cs_per - $league->cs_per) * 150',
c_non_so_e_rate_grade => '30 - 15 * non_so_error_per / $league->non_so_error_per',
c_bunt_allowed_grade => '0', # CPBL doesn't have this record
c_pb_grade => '5 + ($league->pb * tlpop - pb) / 5',
# 1st Basemans' Claim Percentage
b1_claim_percentage => '
limit(b1_def_change_grade, 40) +
limit(b1_e_ratio_grade, 30) +
limit(b1_arm_grade, 20) +
limit(err_of_b3ss_grade, 10)',
runners_on_b1 => '(h_allowed - hr_allowed) * (b1 / (h_allowed - hr_allowed)) + bb + hbp - wp - bk - pb',
est_x => 'fielders("b1")->po - 0.7 * fielders("p")->a - 0.86 * fielders("b2")->a - 0.78 * fielders("b3")->a - 0.78 * fielders("ss")->a + 0.115 * runners_on_b1 - 0.0575 * bip',
est_y => '0.1 * bip - fielders("b1")->a',
examples/ws.pl view on Meta::CPAN
b1_e_ratio_grade => '30 - 15 * fielders("b1")->e_ratio / $league->fielders("b1")->e_ratio',
b1_arm_grade => '10 + (
(fielders("b1")->a + fielders("ss")->f_dp / 2 - fielders("p")->po - fielders("b2")->f_dp / 2 + 0.015 * lhp) -
($league->fielders("b1")->a + $league->fielders("ss")->f_dp / 2 - $league->fielders("p")->po - $league->fielders("b2")->f_dp / 2) ) / 5',
err_of_b3ss_grade => '10 - 5 * (fielders("b3")->e + fielders("ss")->e) / (($league->fielders("b3")->e + $league->fielders("ss")->e) * tlpop)',
# 2nd Basemans' Claim Percentage
b2_claim_percentage => '
limit(b2_dp_grade, 40) +
limit(b2_a_grade, 30) +
limit(b2_e_ratio_grade, 20) +
limit(b2_po_grade, 10)',
b2_dp_grade => '20 + (f_dp - expected_dp) / 3',
b2_a_grade => sub {
my $A = $_->fielders('b2')->a - $_->fielders('b2')->f_dp;
my $B = ($_->league->fielders('b2')->a - $_->league->fielders('b2')->f_dp) * $_->tlpop - $_->lhp / 35;
return 15 + ($A - $B) / 6;
examples/ws.pl view on Meta::CPAN
my $Y = $X * ($_->h - $_->hr) + $_->bb + $_->hbp - $_->sh - $_->wp - $_->bk - $_->pb;
my $Z = $league->{'b1'} + $league->bb + $league->hbp - $league->sh - $league->wp - $league->bk - $league->pb;
my $W = $league->f_dp / $Z;
return $Y * $W * ($_->a / $_->ip) / ($league->a / $league->ip);
},
sh => '0',
e_ratio => '1 - fpct',
# 3nd Basemans' Claim Percentage
b3_claim_percentage => '(
limit(b3_a_grade, 50) +
limit(b3_e_ratio_grade, 30) +
limit(b3_dp_grade, 10)
) * 10 / 9',
b3_a_grade => '25 + (fielders("b3")->a - (
a * ($league->fielders("b3")->a / $league->a)
)) / 4',
b3_e_ratio_grade => '15 + (
((fielders("b3")->a + fielders("b3")->po) / league_b3_fpct - (fielders("b3")->a + fielders("b3")->po)) -
fielders("b3")->e
) / 2',
b3_dp_grade => '5 + (fielders("b3")->f_dp - expected_dp * ($league->fielders("b3")->f_dp / $league->f_dp)) / 2',
league_b3_fpct => '$league->fielders("b3")->fpct',
# Shortstops' Claim Percentage
ss_claim_percentage => '
limit(ss_a_grade, 40) +
limit(ss_dp_grade, 30) +
limit(ss_e_ratio_grade, 20) +
limit(ss_po_grade, 10)',
ss_a_grade => '20 + (
(fielders("ss")->a) -
(a * $league->fielders("ss")->a / $league->a + lhp / 100)
) / 4',
examples/ws.pl view on Meta::CPAN
ss_e_ratio_grade => '20 - 10 * fielders("ss")->e_ratio / $league->fielders("ss")->e_ratio',
ss_po_grade => '
5 + (fielders("ss")->po -
((po - p_so) * (fielders("ss")->po / (po - p_so)) + (p_bb / ip - $league->p_bb / $league->ip) / 14 + lhp / 64)
) / 15',
# Outfielders' Claim Percentage
of_claim_percentage => '
limit(of_po_grade, 40) +
limit(of_der_grade, 40) +
limit(of_a_and_po_grade, 10) +
limit(of_e_ration_grade, 10)',
por => 'fielders("of")->po / (po - p_so - a)',
der_point => '100 + (der - $league->der) * 2500',
of_po_grade => '20 + (por - $league->por) * 100',
of_der_grade => 'der_point * 0.24 - 9',
examples/ws.pl view on Meta::CPAN
print "TEAM\tmRunScored\tmRunCreated ææé¶å¹å¼æ¨æº\n";
$_->print qw/ name m_save m_run pitcher_zero_base / for $league->teams;
print "\n";
print "TEAM\tNAME\tBAT\tPITCH\tFIELD\tTOTAL\tææwsæ¯é\n";
$_->print qw/ team name att_ws pitch_ws def_ws ws pitcher_ws_weight / for $league->pitchers;
print "\n";
#$_->print qw/ name c_claim_percentage b1_claim_percentage b2_claim_percentage b3_claim_percentage ss_claim_percentage of_claim_percentage / for $league->teams;
#print Dumper($league->teams('bears'));
for ($league->batters) {
if (keys %{$_->fielding} == 0) {
$_->print qw/ name /;
}
}
( run in 0.448 second using v1.01-cache-2.11-cpan-709fd43a63f )