Qué tal todo y Feliz Navidad espero que hayais disfrutado mucho de vuestros Beloved ones.
Jornada 11 en la ACB y de repente VAN BECK. Los 5 mejores
Aunque su nombre nos despiste, a mí me pasa a menudo con los nombres, es un jugador nacido en Houston, Texas. Wasley Van Beck es de esos casos en los que nadie espera que se fuera a salir esta jornada, pero sí era esperado. Llegó al Tenerife para cubrir la baja de Kramer, que fue fichado por el Real Madrid.
Wesley Van Beck (DRE +15.6)
Con 27 puntos en 20:56 y un acierto excepcional en triples, 8 de 9, Van Beck fue el motor ofensivo del Lenovo Tenerife esta jornada. Su DRE de +15.6 se sostiene casi por completo en ese 8/9 desde el triple, que compensó el desastre de Shermadini que me comí en el Supermanager.
Sergi Martínez (DRE +13.7)
Martínez sumó 20 puntos y 7 rebotes en el toma y daca que fue el partido contra Tenerife intentando contrarrestar la abalancha de triples que se les venía encima. 4/4 en tiros de 2 y 4/5 en tiros de 3 rozó la perfeccción.
Markus Howard (DRE +13.4) – Baskonia
En una victoria agónica y en la última posesión, una vez más, tras un tropiezo delante de Alberto Díaz del que logra levantarse, finta a un defensor del Unicaja y mete un triple espectacular que da la victoria a los vitorianos sobre la bocina. Nueve puntos en el último minuto del estadounidense, decisivos para el triunfo baskonista. Aunque la noticia reciente era su regreso tras lesión y un proceso febril, Howard firmó una actuación sólida en la J11 con 30 puntos.
Devin Robinson (DRE +12.7) – Zaragoza
Junto a Trae Bell-Haynes con 23 puntos, un rebote y siete asistencias, Santi Yusta con 22+4+1, Devin Robinson se marcó un partido de 23 puntos, 6 rebotes y 1 asistencia.
Francis Alonso (DRE +12.0) – SBB
Un dato claro: su aportación de 22 puntos en menos de 17 minutos es excepcional y explica cómo alcanza ese +12. Pero personalmente me da un poco de rabia porque este Francis Alonso es el que hubieramos necesitado en el Estudiantes el año pasado.
Los 3 Peores
Raul Neto, con un DRE de −3.8, encabeza el Top de la vergüenza, sobre todo por las seis pérdidas. Brian Angola le sigue con un DRE de −4.0, tres pérdidas y ningún punto, ya que falló los tres tiros que intentó. Y para cerrar, la gran decepción para todos, especialmente para quienes lo llevaban en el SuperManager, Jean Montero, con un DRE de −4.4 y −5 de valoración. Perdió más balones que asistencias y tiró poco y mal. Cuando un jugador de su calidad da de repente este bajón, suele coincidir con alguna lesión no comunicada. Veremos (esto son peliculas mías).
Españoles en la NCAA esta semana
Esta semana deja un protagonismo claro para Aday Mara y un segundo escalón en el que aparecen nombres como Baba Miller y Pablo Tamba, mientras que el resto mantiene un impacto más puntual y ligado al contexto.
Aday Mara (Michigan)
Es el nombre propio de la semana. Su producción ofensiva (14,5 puntos en solo dos partidos y 24 minutos de media) lo sitúa como el español con mayor visibilidad ahora mismo. Destaca por su eficiencia cerca del aro, su presencia física y un rol cada vez más estable dentro de la rotación.
Baba Miller (Cincinnati)
Semana correcta, 11 puntos y aportación en varias facetas, aunque sin generar los titulares de la semana pasada. Su rendimiento se mantiene en una línea estable.
Pablo Tamba (LSU)
Sus 14 puntos en 38 minutos lo colocan bien en la tabla, pero la cobertura es mínima y prudente. Es un jugador que esta aprovechando sus oportunidades.
O sea, Aday sigue en progresión y Baba sigue estable, el resto siguen en su rol.
La semana pasada escribí y repasé los premios individuales de mitad de temporada. Si se te pasó o no lo viste en su momento, aquí lo tienes:
Cómo están los premios individuales de la NBA en el primer cuarto de la temporada
Esta semana ha sido especialmente desafiante para mí. Tenía que entregar un artículo para la revista digital Five 5, que sale este mes, preparar gráficas especiales para el SuperManager de Navidad y escribir este post. Con las gráficas del SuperManager pasa siempre lo mismo: se puede adelantar poco, porque los datos que importan son los de la jornada vi…
La verdad es que no fue de los posts que más interés despertó, aunque me quedo con que gente a la que admiro sí me dio un feedback muy positivo, algo que agradezco de verdad.
En ese post acompañé cada categoría con un gif animado que reflejaba la evolución de las probabilidades que Las Vegas asignaba a cada jugador para ganar el premio, día a día, desde casi el inicio de la temporada.
¿Por qué digo casi?
Para hacer esos gifs necesito extraer cómo evoluciona la línea de probabilidad cada día desde el inicio de la temporada. Lo de “casi” es porque la NBA empezó el 20 de noviembre y yo comencé el seguimiento el día 24.
¿Extraerlo a mano? Eso exigiría mucha disciplina y sería tan aburrido como darle a un botón cada día y guardarlo en CSV. Por suerte aprendí a usar GitHub Actions y un robot, por decirlo así, lo hace por mí. A esto le dediqué un post y, si no lo leíste, lo tienes aquí:
Cómo pasé de ejecutar scripts manualmente a un sistema que se actualiza solo cada madrugada
¿Te da pereza copiar o actualizar funciones cada vez que empiezas un script nuevo?
De la pagina https://www.rotowire.com/betting/nba/rookie-odds.php extraigo el Json y con este pequeño código guardo cada día los resultados:
library(dplyr) # para manipular los datos
library(jsonlite) # para obtener los datos
# obtener la fecha de hoy
today <- Sys.Date()
# asegurar que la carpeta de salida de datos existe
if (!dir.exists("data")) dir.create("data")
# url para obtener las probabilidades de roy de rotowire
url <- "https://www.rotowire.com/betting/nba/tables/player-futures.php?future=Rookie"
# obtener los datos
result <- fromJSON(txt = url)
# agregar la fecha de hoy como una columna
df <- result %>%
mutate(date = today)
# guardar el dataframe como .csv en una carpeta llamada "data/"
write.csv(df, paste0("data/roy_odds_", gsub("-", "_", today), ".csv"), row.names = F)El action de GitHub se encarga de hacerlo todos los días y aquí también comparto el código por si alguien quiere replicarlo o adaptarlo
name: Cuotas del ROY
on:
workflow_dispatch:
schedule:
- cron: '30 8 * * *'
jobs:
Get-NBA-ROY-Odds:
name: Actualizar cuotas del ROY
runs-on: ubuntu-latest
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v3
- uses: r-lib/actions/setup-r@v2
with:
use-public-rspm: true
r-version: 'release'
- name: Install libcurl and libssl on Linux
run: sudo apt-get -y install libcurl4-openssl-dev
shell: bash
- name: Cache CRAN packages
uses: actions/cache@v3
with:
path: ${{ env.R_LIBS_USER }}
key: ${{ runner.os }}-r-${{ hashFiles('**/DESCRIPTION') }}
restore-keys: ${{ runner.os }}-r-
- name: Install CRAN packages
uses: r-lib/actions/setup-r-dependencies@v2
with:
packages: jsonlite, dplyr
- name: Run R update script
run: Rscript roy-odds.R
shell: bash
- name: Commit changes in data folder
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git add data/roy_odds_*.csv
git diff --cached --quiet || git commit -m "Auto-update: roy odds"
shell: bash
- name: Push changes
run: git push
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}¿Cómo hago el Gif?
Después de haber explicado cómo voy almacenando los datos, ahora toca explicar cómo cargo todos los CSV que se van generando en mi sistema y, después, cómo construyo el gif.
Lo primero son las librerías. En este caso, la más importante es {gganimate}, que es la encargada de animar los datos.
library(tidyverse) #manipular datos
library(gganimate) #animar datos
library(zoo)
library(hoopR) #en este caso colores y nombres de equipo
library(prismatic) #oscurecer colores originales
library(ggtext) #texto enriquecido
# Mi caption personalizado
twitter <- "<span style='color:#c8102e;font-family: \"Font Awesome 6 Brands\"'></span>"
tweetelcheff <- "<span style='font-weight:bold;color: black;'>*@elcheff*</span>"
insta <- "<span style='color:#E1306C;font-family: \"Font Awesome 6 Brands\"'></span>"
instaelcheff <- "<span style='font-weight:bold;color: black;'>*@sport_iv0*</span>"
github <- "<span style='color:#c8102e;font-family: \"Font Awesome 6 Brands\"'></span>"
githubelcheff <- "<span style='font-weight:bold;color: black;'>*IvoVillanueva*</span>"
caption <- glue::glue("**Datos**: *@NBA* | **Gráfico**: *Ivo Villanueva* • {twitter} {tweetelcheff} • {insta} {instaelcheff} • {github} {githubelcheff}")Ahora cargamos los colores y nombres de los equipos.
teams <- hoopR::nba_teams() %>%
select(team = team_abbreviation, color, alternate_color) %>%
mutate(color = paste0("#", color),
alternate_color = paste0("#", alternate_color))








