Expectativa de Carrera I: Calculando la Matriz de Expectativa de Carrera.

Introducción

En esta serie de posts vamos a aprender a calcular desde la matriz de expectativa de carrera hasta el wOBA. Para llevar estos cálculos, aplicaremos un enfoque parecido al que utilizo por Tom Tango en su libro The Book y usaremos ademas distintos conjuntos de datos que he creado para la diferentes ligas de beisbol invernales. Así mismo, debo recalcar que en esta serie de posts nos enfocaremos en aprender los conceptos por medio de programación y no por medio de la teoría.

Play by play dataset

He creado un conjunto de datos que contiene información jugada a jugada para cada partido llevado a cabo en distintas temporadas de distintas ligas invernales. El dataset es en su gran mayoría preciso, sin embargo, no descarto que existan jugadas atípicas para las cuales guarde información incorrecta. No obstante, tales jugadas no deberían afectar nuestros cálculos en gran medida.

El conjunto de datos tiene múltiples variables que explican el entorno en el que se llevó a cabo una jugada. Entre tales variables estas podemos destacar:

  • El numero de outs registrados antes de la jugada.
  • El numero de outs efectuados durante la jugada.
  • El numero de outs efectuados después de la jugada.
  • Los corredores en base al iniciar la jugada.
  • Los corredores en base al terminar la jugada.
  • Las carreras anotadas antes de la jugada.
  • Las carreras anotadas durante la jugada.
  • Las carreras anotadas después de la jugada.
  • Las carreras anotadas durante la mitad inning.

Matriz de Expectativa de Carrera en Python

En esta ocasión vamos a calcular la Matriz Expectativa de Carrera para la temporada 2018-2019 de la LIDOM. Para calcular dicha matriz vamos a utilizar pandas, un paquete de Python que facilita la manipulación y análisis de datos, así que si no lo has descargado, por favor hazlo antes de correr el siguiente código.

import pandas as pd
df = pd.read_csv( filepath_or_buffer = 'data.csv'
, sep = ','
, names = [ 'Liga', 'Inning', 'Mitad Del Inning', 'Evento'
, 'Outs Antes De Jugada', 'Corredores Inicio De Jugada'
, 'Carreras Antes De Jugada', 'Carreras Anotadas En Jugada'
, 'Outs En Juego', 'Outs Despues De Jugada', 'Corredores Despues De Jugada'
, 'Carreras Despues De Jugada', 'Carreras Final Inning'
]
, header=0
)
rem = (
df.assign( Carreras = lambda x: x['Carreras Final Inning'] - x['Carreras Antes De Jugada'])
.groupby( by = ['Outs Antes De Jugada', 'Corredores Inicio De Jugada'])['Carreras']
.agg( func_or_funcs = { 'Carreras': 'sum'
, 'N' : 'count'
}
)
.assign( Expectativa = lambda x: x['Carreras'] / x['N'] )
.reset_index()
.rename( columns = { 'Outs Antes De Jugada' : 'Outs'
, 'Corredores Inicio De Jugada' : 'Corredores'
}
)
)
view raw matriz.py hosted with ❤ by GitHub

Ahora bien, si ya descargaste el código y no entiendes mucho de programación, no te preocupes acá te explico linea por línea lo que hace esta lógica: en la línea 1 importamos pandas y en la línea 3 leemos el dataset que creé; en las líneas 14 a 27 hacemos el procesamiento para obtener la expectativa de carrera; en la 15 obtenemos las carreras al final del inning para cada registro del conjunto de datos; en la 16 agrupamos el dataset por cada situación base-out; en la 17 contamos el numero de veces que ocurrió cada situación y el numero de carreras que entraron después de ocurridas y hasta el final del inning; en la línea 21 simplemente dividimos la suma total de carreras de cada base-out entre sus ocurrencias; las 22 a 26 no tienen importancia por ahora; por último la linea 29 imprime la expectativa de carrera:

Outs Corredores Carreras N Expectativa
0 0 --- 1411 3488 0.404530
1 0 --3 86 63 1.365079
2 0 -2- 234 241 0.970954
3 0 -23 80 41 1.951220
4 0 1-- 660 890 0.741573
5 0 1-3 123 75 1.640000
6 0 12- 288 212 1.358491
7 0 123 142 64 2.218750
8 1 --- 535 2500 0.214000
9 1 --3 142 168 0.845238
10 1 -2- 328 492 0.666667
11 1 -23 159 131 1.213740
12 1 1-- 464 1000 0.464000
13 1 1-3 191 164 1.164634
14 1 12- 318 390 0.815385
15 1 123 215 165 1.303030
16 2 --- 126 1989 0.063348
17 2 --3 91 278 0.327338
18 2 -2- 155 599 0.258765
19 2 -23 92 159 0.578616
20 2 1-- 192 1074 0.178771
21 2 1-3 136 250 0.544000
22 2 12- 161 464 0.346983
23 2 123 134 199 0.673367
view raw Matriz.txt hosted with ❤ by GitHub

Tal y como puedes notar, la matriz de expectativa de carrera no se encuentra en el formato y orden en el que la mayoría de autores acostumbran a presentarla. Sin embargo la dejaré así ya que desde el punto de vista computacional es más fácil calcular el wOBA si la dejamos así.

2 comentarios en “Expectativa de Carrera I: Calculando la Matriz de Expectativa de Carrera.

Deja un comentario