Women Who Code Medellín – Python, generación de datos aleatorios – Mayo 2018

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()

Comentarios

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.