Answering Tango's question about MVP voting

This morning, the esteemed Tom Tango asked a question about this year's MVP voting. Specifically, he wants to know who had the worst ballot, as measured by eight criteria (all of which measure a ballot's agreement with the full set of ballots).

Although I don't care much about MVP voting (and I care even less about calling voters out for voting a certain way), I thought it'd be a nice quick exercise in using Pandas. I answered the question by writing code that is available here.

Three notes about the code:

  1. It is not particularly elegant. Hopefully it is clear enough to use. The data is so small that inelegant methods work fine.
  2. If you generate your tab-separated files by copy/pasting from the BWWAA's Google Sheets (links: AL / NL), you must delete tabs in two of the lines (Jeff Wilson's and Alex Pavlovic's).
  3. I have run a few ad hoc tests on the code, and I have double-checked some important things (e.g., that sub-processes give the right total voting scores), but I haven't written an exhaustive test suite or anything.

Using the code, we can generate lists of all voters who did not score a perfect 8/8 by Tango's criteria. Again, please note that I made these lists only to answer the question, not to shame anyone or to express any opinion about good and bad ways to cast MVP ballots. And, again, it's possible (but unlikely) that there are errors.

AL:

George A. King III 4
Chris Assenheimer 6
Gerry Fraley 7
John McGrath 7
Paul Hoynes 7
Wallace Matthews 7
La Velle E. Neal III 7

NL:

Paul Newberry 3
Patrick Saunders 3
Todd Rosiak 4
Craig Davis 4
Marc Carig 5
Jack Etkin 5
Dennis Lin 6
Robert Nightengale 6
Bruce Miles 6
Tim B. Kurkjian 6
Mark Saxon 6
Rick Hummel 7
Jim Salisbury 7
Tom Haudricourt 7
J.P. Hoornstra 7
John Fay 7
Gordon Wittenmyer 7
Mark Zuckerman 7

Addendum: Here is a first draft of a list of scores for the metric Tom proposes on comment #4 to the post:

AL:

Bob Elliott 	51.5
Ken Rosenthal 	50.5
Ryan Divish 	49.5
Chris McCosky 	49.0
Marc Topkin 	49.0
Roger Mooney 	49.0
Mike Berardino 	48.5
Michael Silverman 	48.0
Evan Drellich 	46.5
Jesus Ortiz 	46.5
Richard Griffin 	46.5
Peter Abraham 	46.0
Anthony Fenech 	45.5
Joe Posnanski 	45.5
Naoko Sato 	45.5
John Hickey 	45.0
Tim Brown 	45.0
Wallace Matthews 	44.5
Susan Slusser 	44.5
Rich Dubroff 	43.5
Jeff Wilson 	43.0
Pedro Moura 	41.0
Gerry Fraley 	40.0
John McGrath 	38.0
Scot Gregor 	38.0
La Velle E. Neal III 	37.5
Paul Hoynes 	35.5
Sam Mellinger 	35.0
Chris Assenheimer 	32.5
George A. King III 	29.0

NL:

Jayson Stark 	51.0
Tom Haudricourt 	49.5
Clark Spencer 	49.5
Bill Brink 	48.5
Jim Salisbury 	48.0
Alex Pavlovic 	47.5
Scott Miller 	46.5
Derrick Goold 	46.5
Mark Zuckerman 	46.0
Bruce Miles 	46.0
Rob Biertempfel 	44.0
Jack Etkin 	43.5
Joe Kay 	43.5
Charles Odum 	43.5
Henry Schulman 	43.0
J.P. Hoornstra 	43.0
John Fay 	43.0
Marc Carig 	43.0
Dennis Lin 	42.0
Gordon Wittenmyer 	41.5
Mike Puma 	41.0
Tim B. Kurkjian 	40.5
Todd Rosiak 	40.5
Robert Nightengale 	40.0
Rick Hummel 	39.5
Nick Piecoro 	39.5
Craig Davis 	38.5
Paul Newberry 	38.0
Mark Saxon 	37.5
Patrick Saunders 	34.5