Continuamos con la temática de Ciencia de Datos para los Meetups de Women Who Code Medellín, este mes tratamos generación de datos aleatorios usando la librería Numpy de Python.
Reglas del juego que se presenta como ejemplo para ser resuelto simulando datos aleatorios para resolver la pregunta ¿Cuál es la probabilidad de Ganar este juego?
REGLAS
- Se usa un dado para jugar, por lo cual los valores son de 1 a 6
- Si tiramos 3 o menos devolvemos 1 peso al juego
- Si tiramos más de 3 y hasta 5 nos dan 1 peso
- Si tiramos 6, entonces tiramos de nuevo el dado y nos dan tantos pesos como el dado lo indique.
- Jugamos con monedas, de modo que no hay valores de pesos negativos
- El turno del jugador consiste en tirar el dado 100 veces
- Se gana el juego si se obtiene más de 50 pesos al final del turno
Aquí el código que usamos en la presentación.
import numpy as np import matplotlib.pyplot as plt #Iniciar la semilla para garantizar que los datos serán iguales cada que se corra el algoritmo np.random.seed(204) todos_turnos = [] #Definir cuántas veces se corre la simulación muestras = 600 for x in range(muestras) : #Comenzar el turno sin monedas monedas = 0 turno_aleatorio = [0] for x in range(100) : dado = np.random.randint(1,7) if dado <= 3 : monedas = max(0,monedas - 1) elif dado < 6 : monedas = monedas + 1 else : monedas = monedas + np.random.randint(1,7) #Registrar cuantas monedas tengo al final de cada tirada turno_aleatorio.append(monedas) #Guardar los resultados del turno todos_turnos.append(turno_aleatorio) #Formatear el arreglo como numpy array np_todos_turnos = np.array(todos_turnos) #Trasponer filas por columnas para adaptar a la gráfica np_todos_turnos_t = np.transpose(np_todos_turnos) #Sacar la última fila - resultado final de todos los turnos ultimos = np_todos_turnos_t[-1,:] #Calcular probabilidad de ganar contando los valores del vector #mayores o iguales a 50 y dividiendo por el número de turnos print('La probabilidad de ganar el juego es de ' + str(round(100*(ultimos >= 50).sum()/muestras,2)) + '%') #Preparar la Gráfica del desarrollo de todos los turnos plt.figure(200) plt.xlabel('Cantidad lanzamientos del dado') plt.ylabel('Monedas') plt.title('Desarrollo de '+ str(muestras)+ ' turnos') plt.plot(np_todos_turnos_t) #Preparar la Gráfica de distribución de los turnos plt.figure(300) plt.xlabel('Total de monedas al final del turno') plt.ylabel('Cantidad de turnos en el rango del total') plt.title('Histograma para '+ str(muestras)+ ' turnos') plt.hist(ultimos) #Mostrar las gráficas plt.show()