Ejercicio: Uso del aprendizaje automático y la desviación estándar para crear datos ficticios del partido
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 × ocho 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:
© 2021 Warner Bros. Ent. Todos los derechos reservados