Ejercicio: Uso del aprendizaje automático y la desviación estándar para crear datos ficticios del partido

Completado

Hemos tenido un problema: no podemos obtener datos en tiempo real del partido que está jugando un equipo de los Looney. No disponemos de ninguna manera de ver un partido de baloncesto de 15 jugadores del equipo de los Looney y probar el modelo en una aplicación real.

Lo que sí podemos hacer es usar el truco que hemos aprendido, que consiste en probar el modelo para crear un conjunto de datos que simule un partido.

La aplicación web que compilaremos en las próximas unidades nos ayudará a decidir a qué jugador debemos darle un descanso para beber cada 12 minutos de un partido estándar de 48 minutos. Por lo tanto, debemos crear un archivo CSV que contendrá datos aleatorios del jugador en cuatro iteraciones: 0 minutos (el inicio del partido), 12 minutos, 24 minutos y 36 minutos:

# Initialize four empty DataFrames, one for each 12-minute period.
number_of_iterations = 4
df_list = [pd.DataFrame(columns=game_stat_cols, index=list(ts_df['player_name'])) for i in range(number_of_iterations)]

# For each period, generate randomized player data and predict the PER.
# Use the model fitted earlier.
for df in df_list:
    for stat in game_stat_cols:
        df[stat] = list(ts_df[stat] + randn(len(ts_df)) * stdev_s[stat])
    df['PER'] = lin_reg.predict(df)

# Concatenate the DataFrames and make the players' names the index.
game_df = pd.concat(df_list)
game_df.rename_axis('player_name', inplace=True)

# Create another index for the period in question.
minutes = [(x // len(ts_df)) * 12 for x in range(len(game_df))]
game_df['minutes'] = minutes
game_df.set_index('minutes', append=True, inplace=True)
game_df = game_df.swaplevel()

game_df

Este es el resultado:

minutes player_name TS% AST TO USG ORR DRR REBR PER
0 Silvestre 0,617897 31,998307 16,008589 39,097789 6,413572 15,286788 12,792845 31,761414
Marvin 0,605018 33,807167 13,666316 34,011445 6,441147 18,954713 15,582038 31,065373
Correcaminos 0,606381 29,732153 15,027962 38,444237 4,532569 27,268949 10,968630 21,550397
Gallo Claudio 0,606442 31,879217 15,467578 36,674624 6,019145 20,964740 14,774713 29,283807
Bugs Bunny 0,636505 35,193108 15,708836 37,962839 6,116200 23,132887 15,677267 31,850749
... ... ... ... ... ... ... ... ... ...
36 Abuelita 0,608159 26,021605 14,814805 31,721274 6,422251 22,213857 16,454224 27,644534
El Coyote 0,601998 29,851305 14,137783 32,102558 5,819653 25,550118 15,818051 25,497379
Piolín 0,607711 25,210393 12,609053 34,014773 6,628928 27,041059 11,643892 20,439595
Penélope 0,613901 25,007772 14,394944 28,324923 7,564207 23,184055 9,919301 16,124275
El Pato Lucas 0,634848 31,911011 14,694308 33,226023 6,308140 18,023737 16,305183 33,155391

60 filas × 8 columnas

El DataFrame final parece completo. Podemos guardarlo como un archivo CSV para usarlo en la aplicación web. Al guardar este DataFrame como un archivo CSV, nos interesa conservar los índices, ya que los hemos convertido en los nombres de los jugadores.

# Export the finished DataFrame to CSV.
game_df.to_csv('game_stats.csv')

En la carpeta de Visual Studio Code debería aparecer un nuevo archivo CSV:

Screenshot that shows the game stats C S V file in Visual Studio Code Explorer.

© 2021 Warner Bros. Ent. Todos los derechos reservados