import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import gradio as gr
def plot_distribution_muestral(simulaciones, n_lanzamientos):
"""
Genera un histograma de la distribución muestral de medias de lanzamientos de un dado.
Args:
simulaciones: Número de simulaciones a realizar
n_lanzamientos: Número de lanzamientos por simulación
"""
# Generar las simulaciones
medias = [np.mean(np.random.randint(1, 7, n_lanzamientos)) for _ in range(simulaciones)]
# Crear la figura
fig, ax = plt.subplots(figsize=(10, 6))
# Crear el histograma
sns.histplot(medias, kde=True, color='skyblue', ax=ax, bins=30)
# Personalizar el gráfico
ax.set_title(f'Distribución Muestral (n={n_lanzamientos}, simulaciones={simulaciones}) de un Dado', fontsize=14)
ax.set_xlabel('Media muestral', fontsize=12)
ax.set_ylabel('Frecuencia', fontsize=12)
ax.grid(True, alpha=0.3)
# Agregar línea vertical en la media teórica (3.5)
ax.axvline(x=3.5, color='red', linestyle='--', linewidth=2, label='Media teórica (3.5)')
# Agregar estadísticas en el gráfico
ax.text(0.02, 0.98, f'Media: {np.mean(medias):.3f}\nDesv. estándar: {np.std(medias):.3f}',
transform=ax.transAxes, verticalalignment='top',
bbox=dict(boxstyle='round', facecolor='white', alpha=0.8))
ax.legend()
return fig
# Crear la interfaz Gradio
with gr.Blocks(title="Simulación de Distribución Muestral") as demo:
gr.Markdown("""
# 📊 Simulación de Distribución Muestral de un Dado
Esta aplicación simula la distribución muestral de las medias de lanzamientos de un dado.
Ajusta los parámetros usando los sliders y observa cómo cambia la distribución.
""")
with gr.Row():
with gr.Column(scale=1):
simulaciones_slider = gr.Slider(
minimum=100,
maximum=5000,
value=1000,
step=100,
label="Número de simulaciones",
info="Cantidad de muestras a generar"
)
n_lanzamientos_slider = gr.Slider(
minimum=10,
maximum=200,
value=30,
step=10,
label="Tamaño de muestra (n)",
info="Número de lanzamientos por simulación"
)
generar_btn = gr.Button("Generar gráfico", variant="primary")
gr.Markdown("""
### 📝 Notas:
- Cada simulación genera `n` lanzamientos de un dado justo (valores 1-6)
- Se calcula la media de cada muestra
- La línea roja punteada muestra la media teórica (3.5)
- El histograma muestra la distribución de todas las medias calculadas
""")
with gr.Column(scale=2):
plot_output = gr.Plot(label="Distribución Muestral")
# Conectar los componentes
generar_btn.click(
fn=plot_distribution_muestral,
inputs=[simulaciones_slider, n_lanzamientos_slider],
outputs=plot_output
)
# También actualizar automáticamente al cambiar los sliders
simulaciones_slider.change(
fn=plot_distribution_muestral,
inputs=[simulaciones_slider, n_lanzamientos_slider],
outputs=plot_output
)
n_lanzamientos_slider.change(
fn=plot_distribution_muestral,
inputs=[simulaciones_slider, n_lanzamientos_slider],
outputs=plot_output
)
# Para ejecutar la aplicación
if __name__ == "__main__":
demo.launch()
Created
December 15, 2025 15:24
-
-
Save robintux/c49760918c46631d9ab88a039961e343 to your computer and use it in GitHub Desktop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment