Hace un tiempo intenté publicar un trabajo que planteaba una transformación MinMax para medir tendencias a lo largo de una temporada. El caso es que aunque me divertí bastante escribiéndolo (ya que comparaba las estadísticas de las carreras de Larry Bird, Earvin Johnson, Michael Jordan y Kobe Bryant), no tuve suerte y no se ha publicado.
El artículo lo tenéis disponible en: https://arxiv.org/ftp/arxiv/papers/2402/2402.07004.pdf. Al final digo cuál de los cuatro tiene un mejor/peor rendimiento. Sólo digo que hay sorpresas (o no).
¿En qué consiste la transformación MinMax? Muy sencillo, dado un conjunto de datos \(x\) su transformación MinMax se obtiene mediante la siguiente expresión: \[y = \frac{x - min_{x}}{max_{x} - min_x} \cdot 100,\] donde \(max_{X}\) y \(min_{X}\) son, respectivamente, el máximo y minimo valor de \(x\). Se verifica que \(y \in [0, 100]\), por lo que se puede interpretar en términos de porcentaje.
Veamos un ejemplo sencillo:
= c(5:7,10:12,4:1)
x x
[1] 5 6 7 10 11 12 4 3 2 1
MinMax(x)
[1] 36.363636 45.454545 54.545455 81.818182 90.909091 100.000000
[7] 27.272727 18.181818 9.090909 0.000000
Se observa que al máximo valor se le asigna el valor 100 y al mínimo el valor 0: en este caso se observa una tendencia creciente al principio, que pasa a decrecer a partir del sexto valor pasando a tener los peores valores del conjunto de datos.
Con una representación gráfica todo es más sencillo:
plot(MinMax(x), type="b")
Vamos a aplicar esta idea a los equipos que disputan en ná y menos la Copa del Rey de 2024 en Málaga. para ello usaremos los datos correspondientes a las 22 jornadas disputadas hasta el momento en la Liga ACB.
En primer lugar, cargamos los datos y vemos lo que tenemos:
library(readxl)
<- read_excel("EquiposACB.xlsx", sheet = "datos")
datos = head(datos)
vistazo library(knitr)
kable(vistazo, align = "c", caption = "Visualización de los datos que tenemos: unas pocas observaciones")
Fecha | Jornada | Liga | Fase | Local | Resultado | Nombre | Min | Seg | Ptos | T2C | T2I | T2P | T3C | T3I | T3P | TCC | TCI | TCP | T1C | T1I | T1P | RT | RD | RO | Asis | BR | BP | Contras | TF | TC | Mates | FP | FPR | MasMenos | Val | PtosQ | Mas10 | Q1 | Q2 | Q3 | Q4 | Nombre_R | Min_R | Seg_R | Ptos_R | T2C_R | T2I_R | T2P_R | T3C_R | T3I_R | T3P_R | TCC_R | TCI_R | TCP_R | T1C_R | T1I_R | T1P_R | RT_R | RD_R | RO_R | Asis_R | BR_R | BP_R | Contras_R | TF_R | TC_R | Mates_R | FP_R | FPR_R | MasMenos_R | Val_R | PtosQ_R | Mas10_R | Q1_R | Q2_R | Q3_R | Q4_R | AtaquesPARTIDO | PosesionesPARTIDO | TiempoAtaques | TiempoPosesiones | NombreBIS | Diferencia | PorcRT | PorcRD | PorcRO | Ataques | Posesiones | PosesionesXAtaque | OER | DER | OERpotencial | Eficacia | PorcBPPosesiones | PorcAsisPosesiones | BRxBP | AsisxBP | TCIAsis | PorcPQ | PorcT3IxTCI | PorcT1 | PorcT3 | T1IxFP | TCIxT1I | BPnoF | PorcBPnoF | TS | eFG | Diferencia_R | PorcRT_R | PorcRD_R | PorcRO_R | Ataques_R | Posesiones_R | PosesionesXAtaque_R | OER_R | DER_R | OERpotencial_R | Eficacia_R | PorcBPPosesiones_R | PorcAsisPosesiones_R | BRxBP_R | AsisxBP_R | TCIAsis_R | PorcPQ_R | PorcT3IxTCI_R | PorcT1_R | PorcT3_R | T1IxFP_R | TCIxT1I_R | BPnoF_R | PorcBPnoF_R | TS_R | eFG_R | DifQ1 | DifQ2 | DifQ3 | DifQ4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
20230923 | 1 | ACB | LR | 1 | 0 | Valencia | 200 | 0 | 85 | 22 | 32 | 68.75 | 8 | 29 | 27.59 | 30 | 61 | 49.18 | 17 | 20 | 85.00 | 27 | 20 | 7 | 16 | 14 | 17 | 13 | 3 | 3 | 3 | 21 | 20 | -20 | 90 | 39 | 4 | 21 | 20 | 17 | 27 | Girona | 200 | 0 | 89 | 20 | 35 | 57.14 | 11 | 26 | 42.31 | 31 | 61 | 50.82 | 16 | 19 | 84.21 | 32 | 22 | 10 | 21 | 11 | 18 | 4 | 3 | 2 | 2 | 20 | 21 | 20 | 104 | 47 | 4 | 27 | 15 | 17 | 30 | 155.6 | 172.6 | 15.42416 | 13.90498 | Valencia | -4 | 45.76271 | 66.66667 | 24.13793 | 79.0 | 86.0 | 1.088608 | 0.9883721 | 1.0277136 | 1.2318841 | 49.70760 | 19.76744 | 18.60465 | 0.8235294 | 0.9411765 | 3.812500 | 45.88235 | 47.54098 | 20.00000 | 28.23529 | 1.0000000 | 3.050000 | 6 | 35.29412 | 60.88825 | 55.73770 | 4 | 54.23729 | 75.86207 | 33.33333 | 76.6 | 86.6 | 1.130548 | 1.0277136 | 0.9883721 | 1.2390671 | 53.29341 | 20.78522 | 24.24942 | 0.6111111 | 1.1666667 | 2.904762 | 52.80899 | 42.62295 | 17.97753 | 37.07865 | 0.9047619 | 3.210526 | 4 | 22.22222 | 64.15802 | 59.83607 | -6 | 5 | 0 | -3 |
20230923 | 1 | ACB | LR | 0 | 1 | Girona | 200 | 0 | 89 | 20 | 35 | 57.14 | 11 | 26 | 42.31 | 31 | 61 | 50.82 | 16 | 19 | 84.21 | 32 | 22 | 10 | 21 | 11 | 18 | 4 | 3 | 2 | 2 | 20 | 21 | 20 | 104 | 47 | 4 | 27 | 15 | 17 | 30 | Valencia | 200 | 0 | 85 | 22 | 32 | 68.75 | 8 | 29 | 27.59 | 30 | 61 | 49.18 | 17 | 20 | 85.00 | 27 | 20 | 7 | 16 | 14 | 17 | 13 | 3 | 3 | 3 | 21 | 20 | -20 | 90 | 39 | 4 | 21 | 20 | 17 | 27 | 155.6 | 172.6 | 15.42416 | 13.90498 | Girona | 4 | 54.23729 | 75.86207 | 33.33333 | 76.6 | 86.6 | 1.130548 | 1.0277136 | 0.9883721 | 1.2973761 | 53.29341 | 20.78522 | 24.24942 | 0.6111111 | 1.1666667 | 2.904762 | 52.80899 | 42.62295 | 17.97753 | 37.07865 | 0.9047619 | 3.210526 | 4 | 22.22222 | 64.15802 | 59.83607 | -4 | 45.76271 | 66.66667 | 24.13793 | 79.0 | 86.0 | 1.088608 | 0.9883721 | 1.0277136 | 1.2898551 | 49.70760 | 19.76744 | 18.60465 | 0.8235294 | 0.9411765 | 3.812500 | 45.88235 | 47.54098 | 20.00000 | 28.23529 | 1.0000000 | 3.050000 | 6 | 35.29412 | 60.88825 | 55.73770 | 6 | -5 | 0 | 3 |
20230923 | 1 | ACB | LR | 1 | 0 | Granada | 250 | 0 | 101 | 16 | 40 | 40.00 | 14 | 38 | 36.84 | 30 | 78 | 38.46 | 27 | 30 | 90.00 | 41 | 24 | 17 | 21 | 9 | 16 | 7 | 3 | 5 | 2 | 26 | 27 | -15 | 104 | 74 | 5 | 25 | 15 | 17 | 19 | Murcia | 250 | 0 | 104 | 31 | 53 | 58.49 | 8 | 26 | 30.77 | 39 | 79 | 49.37 | 18 | 22 | 81.82 | 43 | 29 | 14 | 14 | 10 | 13 | 12 | 5 | 3 | 1 | 28 | 25 | 15 | 113 | 69 | 4 | 24 | 15 | 18 | 19 | 175.8 | 206.8 | 17.06485 | 14.50677 | Granada | -3 | 48.80952 | 63.15789 | 36.95652 | 89.0 | 106.0 | 1.191011 | 0.9528302 | 1.0317460 | 1.1222222 | 45.08929 | 15.09434 | 19.81132 | 0.5625000 | 1.3125000 | 3.714286 | 73.26733 | 48.71795 | 26.73267 | 41.58416 | 1.1111111 | 2.600000 | 6 | 37.50000 | 55.37281 | 47.43590 | 3 | 51.19048 | 63.04348 | 36.84211 | 86.8 | 100.8 | 1.161290 | 1.0317460 | 0.9528302 | 1.1503417 | 50.48544 | 12.89683 | 13.88889 | 0.7692308 | 1.0769231 | 5.642857 | 66.34615 | 32.91139 | 17.30769 | 23.07692 | 0.8800000 | 3.590909 | 4 | 30.76923 | 58.63780 | 54.43038 | 1 | 0 | -1 | 0 |
20230923 | 1 | ACB | LR | 0 | 1 | Murcia | 250 | 0 | 104 | 31 | 53 | 58.49 | 8 | 26 | 30.77 | 39 | 79 | 49.37 | 18 | 22 | 81.82 | 43 | 29 | 14 | 14 | 10 | 13 | 12 | 5 | 3 | 1 | 28 | 25 | 15 | 113 | 69 | 4 | 24 | 15 | 18 | 19 | Granada | 250 | 0 | 101 | 16 | 40 | 40.00 | 14 | 38 | 36.84 | 30 | 78 | 38.46 | 27 | 30 | 90.00 | 41 | 24 | 17 | 21 | 9 | 16 | 7 | 3 | 5 | 2 | 26 | 27 | -15 | 104 | 74 | 5 | 25 | 15 | 17 | 19 | 175.8 | 206.8 | 17.06485 | 14.50677 | Murcia | 3 | 51.19048 | 63.04348 | 36.84211 | 86.8 | 100.8 | 1.161290 | 1.0317460 | 0.9528302 | 1.1845103 | 50.48544 | 12.89683 | 13.88889 | 0.7692308 | 1.0769231 | 5.642857 | 66.34615 | 32.91139 | 17.30769 | 23.07692 | 0.8800000 | 3.590909 | 4 | 30.76923 | 58.63780 | 54.43038 | -3 | 48.80952 | 63.15789 | 36.95652 | 89.0 | 106.0 | 1.191011 | 0.9528302 | 1.0317460 | 1.1555556 | 45.08929 | 15.09434 | 19.81132 | 0.5625000 | 1.3125000 | 3.714286 | 73.26733 | 48.71795 | 26.73267 | 41.58416 | 1.1111111 | 2.600000 | 6 | 37.50000 | 55.37281 | 47.43590 | -1 | 0 | 1 | 0 |
20230923 | 1 | ACB | LR | 1 | 1 | Obradoiro | 200 | 0 | 84 | 21 | 40 | 52.50 | 10 | 22 | 45.45 | 31 | 62 | 50.00 | 12 | 17 | 70.59 | 31 | 26 | 5 | 18 | 11 | 6 | 12 | 1 | 3 | 2 | 18 | 20 | 100 | 102 | 53 | 4 | 28 | 19 | 27 | 10 | Palencia | 200 | 0 | 64 | 14 | 31 | 45.16 | 8 | 26 | 30.77 | 22 | 57 | 38.60 | 12 | 18 | 66.67 | 36 | 25 | 11 | 14 | 2 | 17 | 2 | 3 | 1 | 1 | 20 | 18 | -100 | 58 | 26 | 2 | 20 | 11 | 18 | 15 | 140.0 | 156.0 | 17.14286 | 15.38462 | Obradoiro | 20 | 46.26866 | 70.27027 | 16.66667 | 69.8 | 74.8 | 1.071633 | 1.1229947 | 0.7881773 | 1.2209302 | 51.53374 | 8.02139 | 24.06417 | 1.8333333 | 3.0000000 | 3.444444 | 63.09524 | 35.48387 | 14.28571 | 35.71429 | 0.8500000 | 3.647059 | 4 | 66.66667 | 60.44905 | 58.06452 | -20 | 53.73134 | 83.33333 | 29.72973 | 70.2 | 81.2 | 1.156695 | 0.7881773 | 1.1229947 | 1.3084112 | 40.50633 | 20.93596 | 17.24138 | 0.1176471 | 0.8235294 | 4.071429 | 40.62500 | 45.61404 | 18.75000 | 37.50000 | 1.0000000 | 3.166667 | 6 | 35.29412 | 49.29144 | 45.61404 | 8 | 8 | 9 | -5 |
20230923 | 1 | ACB | LR | 0 | 0 | Palencia | 200 | 0 | 64 | 14 | 31 | 45.16 | 8 | 26 | 30.77 | 22 | 57 | 38.60 | 12 | 18 | 66.67 | 36 | 25 | 11 | 14 | 2 | 17 | 2 | 3 | 1 | 1 | 20 | 18 | -100 | 58 | 26 | 2 | 20 | 11 | 18 | 15 | Obradoiro | 200 | 0 | 84 | 21 | 40 | 52.50 | 10 | 22 | 45.45 | 31 | 62 | 50.00 | 12 | 17 | 70.59 | 31 | 26 | 5 | 18 | 11 | 6 | 12 | 1 | 3 | 2 | 18 | 20 | 100 | 102 | 53 | 4 | 28 | 19 | 27 | 10 | 140.0 | 156.0 | 17.14286 | 15.38462 | Palencia | -20 | 53.73134 | 83.33333 | 29.72973 | 70.2 | 81.2 | 1.156695 | 0.7881773 | 1.1229947 | 0.9968847 | 40.50633 | 20.93596 | 17.24138 | 0.1176471 | 0.8235294 | 4.071429 | 40.62500 | 45.61404 | 18.75000 | 37.50000 | 1.0000000 | 3.166667 | 6 | 35.29412 | 49.29144 | 45.61404 | 20 | 46.26866 | 70.27027 | 16.66667 | 69.8 | 74.8 | 1.071633 | 1.1229947 | 0.7881773 | 0.9302326 | 51.53374 | 8.02139 | 24.06417 | 1.8333333 | 3.0000000 | 3.444444 | 63.09524 | 35.48387 | 14.28571 | 35.71429 | 0.8500000 | 3.647059 | 4 | 66.66667 | 60.44905 | 58.06452 | -8 | -8 | -9 | 5 |
Como véis hay mucha información y de todos los equipos de la liga. Pero como he dicho, me voy a centrar sólo en los que disputan la Copa:
library(dplyr)
= filter(datos, Nombre=="RMadrid")
RMadrid = filter(datos, Nombre=="Murcia")
Murcia = filter(datos, Nombre=="GranCanaria")
GranCanaria = filter(datos, Nombre=="Valencia")
Valencia = filter(datos, Nombre=="FCBarcelona")
FCBarcelona = filter(datos, Nombre=="Manresa")
Manresa = filter(datos, Nombre=="Unicaja")
Unicaja = filter(datos, Nombre=="Tenerife") Tenerife
Por ejemplo, usemos CompararEQUIPOS (disponible en funciones.txt) para comparar los puntos anotados por posesión (OER) de cada uno de los enfrentamientos que se producirán en los cuartos de final. Empezamos por el enfrentamiento entre el R. Madrid y UCAM Murcia:
= "Puntos anotados por posesión"
variable CompararEQUIPOS(RMadrid$OER, Murcia$OER, graf=1, salida=1,
eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del R. Madrid"), eje_y2=paste(variable, "del Murcia"),
leyenda=c("R. Madrid", "Murcia"), columnas=2, tamano=0.75)
R. Madrid Murcia
1 89.67095 64.595153
2 70.41809 48.192614
3 38.57350 65.639460
4 67.64126 7.262409
5 89.19492 71.661928
6 62.11430 70.092004
7 76.88160 5.438569
8 60.96523 48.092466
9 45.61737 47.379995
10 68.62546 65.428009
11 40.83797 100.000000
12 61.18044 19.635596
13 90.89549 0.000000
14 74.70336 79.864183
15 100.00000 17.806483
16 39.31790 57.266019
17 93.99048 21.912724
18 0.00000 27.512182
19 93.04536 49.458897
20 40.55156 37.593079
21 86.12913 98.007383
22 45.44931 96.436379
En primer lugar se tiene la representación gráfica de los datos transformados para cada uno de los equipos, en segundo lugar la representación gráfica conjunta de los dos conjuntos de datos transformados y, por último, los valores transformados para cada equipo.
Se oberva que en las últimas jornadas UCAM Murcia venía presentando sus peores valores en cuanto a puntos anotados por posesión, si bien en la última jornada disputada contra el Covirán Granada ha tenido uno de sus mejores valores.
En cuanto al R. Madrid se observa la irregularidad que ha mostrado el equipo blanco en las últimas jornadas y que le hace llegar con ciertas dudas a la cita copera.
Sobre el resto de enfrentamientos (adviértase que en este caso no salen las representaciones gráficas individuales ni los valores transformados de cada equipo), destaca que Unicaja no llega en su mejor momento anotador al mismo tiempo que se vislumbra la mejora de Tenerife:
CompararEQUIPOS(GranCanaria$OER, Valencia$OER, graf=0, salida=0,
eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del Gran Canaria"), eje_y2=paste(variable, "del Valencia"),
leyenda=c("Gran Canaria", "Valencia"), columnas=2, tamano=0.75)
CompararEQUIPOS(FCBarcelona$OER, Manresa$OER, graf=0, salida=0,
eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del F.C. Barcelona"), eje_y2=paste(variable, "del Manresa"),
leyenda=c("F.C. Barcelona", "Manresa"), columnas=2, tamano=0.75)
CompararEQUIPOS(Unicaja$OER, Tenerife$OER, graf=0, salida=0,
eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del Unicaja"), eje_y2=paste(variable, "del Tenerife"),
leyenda=c("Unicaja", "Tenerife"), columnas=2, tamano=0.75)
Pero claro, no todo va a ser atacar, también hay que defender (y más para ganar títulos):
= "Puntos recibidos por posesión"
variable CompararEQUIPOS(RMadrid$DER, Murcia$DER, graf=0, salida=0,
eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del R. Madrid"), eje_y2=paste(variable, "del Murcia"),
leyenda=c("R. Madrid", "Murcia"), columnas=2, tamano=0.75)
CompararEQUIPOS(GranCanaria$DER, Valencia$DER, graf=0, salida=0,
eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del Gran Canaria"), eje_y2=paste(variable, "del Valencia"),
leyenda=c("Gran Canaria", "Valencia"), columnas=2, tamano=0.75)
CompararEQUIPOS(FCBarcelona$DER, Manresa$DER, graf=0, salida=0,
eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del F.C. Barcelona"), eje_y2=paste(variable, "del Manresa"),
leyenda=c("F.C. Barcelona", "Manresa"), columnas=2, tamano=0.75)
CompararEQUIPOS(Unicaja$DER, Tenerife$DER, graf=0, salida=0,
eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del Unicaja"), eje_y2=paste(variable, "del Tenerife"),
leyenda=c("Unicaja", "Tenerife"), columnas=2, tamano=0.75)
En este caso se observa que Gran Canaria parece llegar mejor que Valencia.
Vamos a centrarnos en el primer enfrentamiento entre el R. Madrid y Murcia. Si nos fijamos en el porcentaje de rebote total capturado, se observa que el R. Madrid ha flojeado en las últimas jornadas (¿factor Tavares?):
= "Porcentaje de rebote total capturado"
variable CompararEQUIPOS(RMadrid$PorcRT, Murcia$PorcRT, graf=0, salida=0,
eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del R. Madrid"), eje_y2=paste(variable, "del Murcia"),
leyenda=c("R. Madrid", "Murcia"), columnas=2, tamano=0.75)
Y si trabajamos con el porcentaje de tiros de campo, se tiene una tendencia creciente muy clara en UCAM Murcia:
= "Porcentaje de tiros de campo"
variable CompararEQUIPOS(RMadrid$TCP, Murcia$TCP, graf=0, salida=0,
eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del R. Madrid"), eje_y2=paste(variable, "del Murcia"),
leyenda=c("R. Madrid", "Murcia"), columnas=2, tamano=0.75)
¿Qué tipo de partido deberíamos esperar? En el siguiente gráfico se observa que ambos equipos tienen una tendencia decreciente en las posesiones disputadas, seguramente se deba a que (como se ha visto anteriormente) ambos equipos no pasan por su mejor momento en la captura del rebote:
= "Posesiones"
variable CompararEQUIPOS(RMadrid$Posesiones, Murcia$Posesiones, graf=0, salida=0,
eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del R. Madrid"), eje_y2=paste(variable, "del Murcia"),
leyenda=c("R. Madrid", "Murcia"), columnas=2, tamano=0.75)
Resumiendo:
- Se observa una tendencia creciente en los últimos partidos en los puntos anotados y recibidos por UCAM Murcia, una tendencia decreciente en el R. Madrid en el porcentaje de rebote total capturado y una tendencia decreciente en ambos equipos en cuanto a las posesiones disputadas.
- Tenéis todos los datos para ver qué información se puede sacar para el resto de enfrentamientos, como el buen momento en ataque de Tenerife o en defensa del Gran Canaria.
- Espero que los datos y código facilitado os anime a jugar un poco con ellos.
Por cierto, también os dejo algunos informes de los equipos y jugadores que participan en la Copa del Rey de este año por si queréis leerlos.