O'Reilly logo

Baseball Hacks by Joseph Adler

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Measure Batting with OPS

Use OPS as a simple measurement of a player’s offensive contributions.

The on-base percentage captures all of the times a play makes it on base, but it weighs them all the same. The slugging average weighs extra bases in rating hits, but it doesn’t capture all of the times that players make it on base. So why not try adding the two together? That gives you on base plus slugging average, or OPS:

	OPS = OBP + SLG

Pete Palmer came up with OPS in the 1970s. It’s one of the best simple statistics for evaluating players. It captures the most important offensive attributes for a ballplayer: the ability to hit the ball hard, the ability to get on base, and the ability not to get out. It also correlates well with runs scored.

Running the Hack

Here’s the simple way to calculate OPS, if you have already loaded the Baseball DataBank data into R:

	attach(batting)
	batting$OBP <- (H + BB + HBP) / (AB + BB + HBP + SF)
	batting$TB <- (H + X2B + 2 * X3B + 3 * HR)
	batting$SLG <- batting$TB / AB
	batting$OPS <- batting$OBP + batting$SLG

As I explain in “Measure Batting with Batting Average” [Hack #40] , I use a slightly more complicated method of calculation. Basically, I calculate the average number of games a player’s teams played (when the player played on more than one team) and the total statistics for a player for a whole season. This lets me correctly calculate whole-season statistics for a player and determine who qualified for batting awards:

 # assumes that b_and_t dataframe ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required