Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
Baseball::SabermetricsUser Contributed Perl DocumentaBaseball::Sabermetrics(3)

       Baseball::Sabermetrics -	A Baseball Statistics Module

       Baseball::Sabermetrics provides an easy interface for calculating
       baseball	statistics, given a data importer.  In this package, I've
       written for (Chinese Professional Baseball League,

	 use Baseball::Sabermetrics;
	 use Baseball::Sabermetrics::CPBL;

	 my $league = Baseball::Sabermetrics->new(league => 'CPBL');

	 # Actually these are predefined.
	 # Those data with 'p_'	or '_allowed' here are for seperating pitchers
	 # and batters.

	     rc	=> 'ab * obp',
	     babip => '(h_allowed - hr_allowed)	/ (p_pa	- h_allowed - p_so - p_bb - hr_allowed',
	     # what started with '$' will be reserved.
	     # Players have team and league predefined,	and team has league.
	     formula1 => 'hr / $_->team->hr';
	     formula2 => 'hr / $_->league->hr';
	     complex =>	sub {
		   print "You can write	a sub directly\n";
		   $_->slg - $_->ba;

	 # Some	formulas can be	applied	to players, teams, and league, depend on what
	 # columns are used in the formula.  For example, ab and obp are defined for
	 # players, teams, and league, so that rc is available for all of them.

	 # top 5 obp of	teams
	 $_->print qw/ team name ba obp	slg isop / for $league->top('teams', 5,	'obp');

	 # top 10 obp of players
	 $_->print qw/ team name ba obp	slg isop / for $league->top('players', 10, 'obp');

	 # show	a player's information
	 $league->players('Chien-Ming Wang')->print qw/	win lose ip so bb whip go_ao /;
	 $league->teams('Yankees')->players('Chien-Ming	Wang')->print qw/ win lose ip so bb whip go_ao /;

	 # show	team statistics	data (accumulated from players')
	 $league->{Yankees}->print qw/ win lose	ip so bb whip go_ao /;

	 # give	a brief	report for pitchers/batters of the team
	 $league->{Yankees}->report_pitchers qw/ name ip p_so p_bb whip	go_ab /;
	 $league->{Yankees}->report_batters  qw/ name ba obp slg isop /;

	 $league->report_teams qw/ name	win lose era obp /;

	 # show	all available formula
	 print join ' ', $league->formula_list;

Data Structure
       Baseball::Sabermetrics is aimed for providing a base class of your
       interested teams	(a league, for example).  You'll need to provide a
       data retriever to pull data out.	 The following example shows how you
       have to fill data into this structure.

	$league	= {
	   teams => {
	       Yankees => {
		   players => {
		       "Chien-Ming Wang" => {
			   bio => {
			       bats => 'right',	# coule	be left, switch
			       throws => 'right',
			   ip => 57.33333333333,
			   game	=> 9,
			   fielding => {
			       p => {
				   tc => 43,
				   pop => 4,
			       # b1 => { }, b2 => { }, b3 => { },
			       # first,	second and thrid baseman should	be
			       # b1, b2, and b3	respectively for convenient in
			       # fielding context.  Because the	initial	of the
			       # name of subroutine can't be a number in perl.
	       Athletics => {

       Available terms of players (including teams and league, which are
       accumulated from	players	and could be treated as	an abstract player)

	   # pitching
	   p_game win lose tie gs sv bs	hld cg sho ip p_pa np h_allowed
	   hr_allowed sh_allowed sf_allowed p_bb p_ibb hb p_so wp bk ra	er

	   # batting
	   pa ab rbi r h 1b 2b 3b hr tb	dp sh sf ibb bb	hbp so sb cs
	   tc po a e f_dp ppo tp pb c_cs c_sb

	   # fielding
	   pos fgame tc	po a e f_dp tp pb c_cs c_sb

       And there are additional	terms for team:

	   game	win lose tie

	   Create sabermetric data set of a group of teams.  The following
	   keys	are supported:

		   league: a string like 'CPBL', which is a module and has to
		   be defined in Baseball::Sabermetrics::League::CPBL.

		   data: If your league	is not exists there, you can feed in a
		   structure mentioned above.

		   Accumulate: If $hash{Accumulate} is false, players data
		   will	not be accumulated to their teams and the league (and
		   therefore team-wise and league-wise statistics are not
		   allowed).  Default is to accumulate stats.

	       for ($league->players) {	... }
	       # or specify the	name for the player
	       print $league->players('Someone')->obp;

	       for ($league->teams) { ... }
	       # or specify the	name for the team
	       print $league->teams('Someone')->win;

	   Return all pitchers,	i.e., NP (Number of Pitches) > 0.

	   Return all batters, i.e., PA	(Plate Appearances) > 0.

       Victor Hsieh, "<victor at>"

       Please report any bugs or feature requests to "bug-sabermetrics at", or	through	the web	interface at
       I will be notified, and then you'll automatically be notified of
       progress	on your	bug as I make changes.

       You can find documentation for this module with the perldoc command.

	   perldoc Baseball::Sabermetrics

       You can also look for information at:

       o   AnnoCPAN: Annotated CPAN documentation


       o   CPAN	Ratings


       o   RT: CPAN's request tracker


       o   Search CPAN


       Copyright 2006 Victor Hsieh, all	rights reserved.

       This program is free software; you can redistribute it and/or modify it
       under the same terms as Perl itself.

perl v5.24.1			  2006-09-06	     Baseball::Sabermetrics(3)


Want to link to this manual page? Use this URL:

home | help