# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     name: python3
# ---

# + [markdown] id="YwSHuP37HUoq" colab_type="text"
# # Taller en clase #1 
# Generando numeros aleatorios en ptython.
# Objetivos:
# 1. Familiarizar al estudiante con la generación de numeros aleatorios de diferentes distribuciones en python.
# 2. Usar las herramientas de python de manejo de arreglos.
# 3. Usar las herramientas de generación de gráficas de python.
# ## Entrega
# En U-virtual, antes de la siguiente clase en el link designado como Taller en clase 1. 

# + id="Qo_OPH9SGj1L" colab_type="code" colab={}
import numpy #as np# si no lo tiene instalado por favor correr en su consola         $pip install numpy
import scipy #as sp# si no lo tiene instalado por favor correr en su consola         $pip install scipy
import matplotlib as mpl#si no lo tiene instalado por favor correr  en su consola   $pip install matplotlib
import matplotlib.pyplot as plt

# + [markdown] id="ig65O2p0H60z" colab_type="text"
# ## Primer punto Distribuciones discretas.
# 1. Cree un arreglo de N muestras con N a su selección, pero mayor a 1000 de números distribuidos con las correspondientes distribuciones, para cada arreglo de números: 
# 1. Grafique los números aleatorios, 
# 2. Ordene de mayor a menor y grafique,
# 3. Haga un histograma de m cajones y grafiquelo.
# 4. Encuentre los valores teoricos de media y varianza, y comparelos con los estimados.

# + id="quUeyxDhIHRQ" colab_type="code" colab={}
#Para todas las simulaciones:
N=1000
m=30
np.random.seed(seed=2**32 - 1)#Para fijar una semilla para los experimentos y que los numeros generados siempre sean los mismos en cada corrida completa de este fuente.

# + id="0jgQSvLCHNEu" colab_type="code" colab={"base_uri": "https://localhost:8080/", "height": 894} outputId="acf67ab0-fa31-40b7-c226-525f4701f4e4"
# bernoulli con cierto p entre 0 y 1
p=0.3
mean, var, skew, kurt = scipy.stats.bernoulli.stats(p, moments='mvsk')
r = scipy.stats.bernoulli.rvs(p, size=N)
#ver https://docs.scipy.org/doc/scipy-0.14.0/reference/stats.html
plt.plot(r)
plt.title(str(N)+" puntos distribuidos bernoulli con p="+str(p))
plt.show()
r.sort()
plt.plot(r)
plt.title(str(N)+" puntos distribuidos bernoulli ordenados con p="+str(p))
plt.show()
plt.hist(r, bins = m)
plt.title("Histograma de los "+str(N)+" puntos distribuidos bernoulli con p="+str(p))
plt.show()
print("Note que hasta ahora no sabemos el tipo de nuestro arreglo r:")
print(type(r))
print("Vamos a hallar algunas estimaciones de estadisticas de r")
# ver https://numpy.org/doc/stable/reference/routines.statistics.html 
avg=r.mean()
varest=r.var()
print("Los valores teoricos de la media y varianza para la bernoulli con p=",p,"son u=" ,mean,"var=",var)
print("Los valores estimados en nuestro experimento de la media y varianza para la bernoulli con p=",p,"son u_est=" ,avg,"var_est=",varest)



# + id="85DMs2d4Ispg" colab_type="code" colab={}
# binomial con cierto p entre 0 y 1 y cierto n
n,p = 10, 0.5

# + id="FmypmPs-Rht-" colab_type="code" colab={}
# Geométrica con cierto p entre 0 y 1
p = 0.3

# + id="KXLmQiMBTxWI" colab_type="code" colab={}
# Poisson con cierto Lamnda L
L = 5

# + id="-MaEjoSgVe9V" colab_type="code" colab={}
#Binomial negativa con parametro p después de r fallos
r,p = 5,0.5

# + [markdown] id="fF7owdRIWCMq" colab_type="text"
# ## Segundo punto Distribuciones contínuas.
#

# + id="kI-DMnJOZGQt" colab_type="code" colab={}
#Para todas las simulaciones:
N=1000
m=30
np.random.seed(seed=0)#Para fijar una semilla para los experimentos y que los numeros generados siempre sean los mismos en cada corrida completa de este fuente.

# + id="q--cxWhAWT9m" colab_type="code" colab={"base_uri": "https://localhost:8080/", "height": 894} outputId="60138d75-ac10-4be0-e649-8d2ad73d035e"
# Normal de media 5 y desviación estandar 0.5
u=5
std=0.5
mean, var, skew, kurt = scipy.stats.norm.stats(moments='mvsk',loc=u,scale=std)
r = scipy.stats.norm.rvs (loc=u,scale=std, size=N)
#ver https://docs.scipy.org/doc/scipy-0.14.0/reference/stats.html
plt.plot(r)
plt.title(str(N)+" puntos distribuidos normales con media="+str(u)+" y std="+str(std))
plt.show()
r.sort()
plt.plot(r)
plt.title(str(N)+" puntos distribuidos normales ordenados con p="+str(p))
plt.show()
plt.hist(r, bins = m)
plt.title("Histograma de los "+str(N)+" puntos distribuidos normales con u="+str(u)+ " y std= "+str(std))
plt.show()
print("Note que hasta ahora no sabemos el tipo de nuestro arreglo r:")
print(type(r))
print("Vamos a hallar algunas estimaciones de estadisticas de r")
# ver https://numpy.org/doc/stable/reference/routines.statistics.html 
avg=r.mean()
varest=r.var()
print("Los valores teoricos de la media y varianza para la normal son u=" ,mean,"var=",var)
print("Los valores estimados en nuestro experimento de la media y varianza son u_est=" ,avg,"var_est=",varest)

# + id="chiKc-YVXIdr" colab_type="code" colab={}
# Uniforme entre 0 y 255

# + id="JPz6tdkWalDJ" colab_type="code" colab={}
#T de Student con paramero K 
K=1.0

# + id="a5ZOHlaZZ2Q4" colab_type="code" colab={}
# Exponencial con Lamnda L
L=0.3

# + id="Wyywm9baaTJs" colab_type="code" colab={}
#Chi cuadrada con K grados de libertad
K=3.0

# + id="_ehXNV9gcqSA" colab_type="code" colab={}
#Gamma con parametros k y theta t
k,t=2.54,0.43

StarcoderdataJupyterScriptsDedupFiltered