"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Uso de Plotly para la visualización interactiva de datos de tiradas de dados

Uso de Plotly para la visualización interactiva de datos de tiradas de dados

Publicado el 2024-08-01
Navegar:501

En este tutorial, aprenderemos cómo usar Plotly para crear visualizaciones interactivas. Nuestro proyecto se centra en analizar los resultados de tirar los dados. Al lanzar un solo dado de seis caras, cualquier número del 1 al 6 tiene las mismas posibilidades de aparecer. Sin embargo, cuando tiras varios dados, algunos números se vuelven más probables que otros. Nuestro objetivo es determinar estas probabilidades simulando tiradas de dados y creando un conjunto de datos. Después de eso, representaremos visualmente los resultados de múltiples tiradas para mostrar qué resultados son estadísticamente más probables.

¿Qué es Plotly?

Plotly es una biblioteca de gráficos de código abierto que permite a los usuarios crear visualizaciones interactivas basadas en la web. Admite muchos tipos de gráficos, incluidos gráficos de líneas, gráficos de dispersión, gráficos de barras y más. Plotly es especialmente útil para crear visualizaciones que pueden integrarse en aplicaciones web, ya que ofrece funciones interactivas como acercamiento, desplazamiento y desplazamiento de información.

Instalación de trama

Instalaremos Plotly usando pip. También necesitamos instalar pandas, una biblioteca para trabajar eficientemente con datos, porque Plotly Express depende de ella.

$ python -m pip install --user plotly
$ python -m pip install --user pandas

Visite la galería de tipos de gráficos en el sitio web de Plotly para ver las diferentes visualizaciones que puede crear con Plotly.

Creando la clase de troquel

Primero, crearemos la siguiente clase Die para simular la tirada de un dado. Llamaremos al archivo Die.py.

from random import randint

class Die:
    """A class representing a single die."""

    def __init__(self, num_sides = 6):
        """Assume a six-sided die"""
        self.num_sides = num_sides


    def roll(self):
        """Return a random value between 1 and number of sides."""
        return randint(1, self.num_sides)

El método __ init __ toma un argumento opcional. Cuando se crea una instancia de Die, el número de lados será seis si no se proporciona ningún argumento. Si se da un argumento, establecerá el número de lados del dado.

El método roll() utiliza la función randint() para devolver un número aleatorio entre 1 y el número de lados. Esta función puede devolver el valor inicial (1), el valor final (num_sides) o cualquier número entero intermedio. Los dados reciben nombres según su número de caras: un dado de seis caras se llama D6, un dado de diez caras se llama D10, y así sucesivamente.

Tirar el dado

Primero importamos el módulo Plotly Express usando el alias px para evitar escribir plotly.express repetidamente. Crearemos una instancia de un dado para simular tirar dos dados D8. A este archivo lo llamamos dice_visual.py.

import plotly.express as px

from die import Die

# Create two D8.
die_1 = Die(8)
die_2 = Die(8)

# Make some rolls, and store results in a list.
results = []
for roll_num in range(500_000):
    result = die_1.roll()   die_2.roll()
    results.append(result)

Analizando los resultados

El resultado más pequeño posible es la suma del número más pequeño en cada dado (2). El resultado más grande posible es la suma del número más grande en cada dado (16) que se asigna a max_results. La variable max_result mejora la legibilidad del código para generar poss_results. Podríamos haber escrito alcance (2,16), pero esto funcionaría sólo para dos dados D8. Al simular circunstancias del mundo real, lo mejor es desarrollar código que pueda manejar fácilmente una amplia gama de escenarios.

# Analyze the result.
frequencies = []
max_results = die_1.num_sides   die_2.num_sides
poss_results = range(2, max_results   1)
for value in poss_results:
    frequency = results.count(value)
    frequencies.append(frequency)

Visualizando los resultados.

Definimos el título y lo asignamos a 'título'. Creamos un diccionario para especificar etiquetas de ejes. Las claves del diccionario representan las etiquetas que queremos personalizar, mientras que los valores representan las etiquetas personalizadas que queremos usar. Nombramos el eje x como 'Resultado' y el eje y como 'Frecuencia del resultado'. Para construir un gráfico de barras, usamos la función px.bar() y pasamos las variables opcionales 'título' y 'etiquetas'.

# Visualize the results.
title = "Results of Rolling Two D8 Dice 500,000 Times"
labels = {'x': 'Result', 'y': 'Frequency of Result'}
fig = px.bar(x = poss_results, y = frequencies, title = title,
 labels = labels)
fig.show()

El gráfico se genera con un título y etiquetas apropiados para cada eje, como se ve en la imagen a continuación.

Image description

Más personalizaciones

Hay un problema que debemos abordar con la trama que acabamos de crear. Debido a que hay 11 barras, la configuración predeterminada de diseño del eje X deja algunas de las barras sin etiquetar. Si bien la configuración predeterminada es adecuada para la mayoría de las visualizaciones, este gráfico se vería mejor con todas las barras etiquetadas.

Plotly ofrece un método update_layout() que te permite realizar varios cambios en una figura después de haberla creado. Así es como puedes indicarle a Plotly que le dé a cada barra su propia etiqueta.

# Further customize chart.
fig.update_layout(xaxis_dtick = 1)
fig.show()
#fig.write_html('dice_visual_d6d10.xhtml')

El método update_layout() se aplica al objeto fig, que representa el gráfico completo. Usamos la opción xaxis_dtick para establecer la distancia entre las marcas en el eje x. Establecemos el espaciado en 1 para que cada barra esté etiquetada. Cuando vuelvas a ejecutar dice_visual.py, deberías ver etiquetas en cada barra.

Image description

Este código se puede personalizar fácilmente para simular el lanzamiento de dados de diferentes tamaños. Para crear un D6 y un D10, pase los argumentos 6 y 10 al crear las dos instancias de troquel. Cambie el primer bucle al número deseado de rollos y cambie el título del gráfico en consecuencia.

Podemos hacer que nuestro programa guarde el gráfico como un archivo HTML automáticamente reemplazando la llamada a fig.show() con una llamada a fig.write_html().

El método write_html() requiere un argumento: el nombre del archivo en el que escribir. Si solo proporciona un nombre de archivo, el archivo se guardará en el mismo directorio que el archivo .py. También puedes llamar a write_html() con un objeto Path para guardar el archivo de salida en cualquier lugar de tu sistema.

Aquí está el código completo:

import plotly.express as px

from die import Die

# Create two D8.
die_1 = Die(8)
die_2 = Die(8)

# Make some rolls, and store results in a list.
results = []
for roll_num in range(500_000):
    result = die_1.roll()   die_2.roll()
    results.append(result)

# Analyze the result.
frequencies = []
max_results = die_1.num_sides   die_2.num_sides
poss_results = range(2, max_results   1)
for value in poss_results:
    frequency = results.count(value)
    frequencies.append(frequency)

# Visualize the results.
title = "Results of Rolling Two D8 Dice 500,000 Times"
labels = {'x': 'Result', 'y': 'Frequency of Result'}
fig = px.bar(x = poss_results, y = frequencies, title = title, labels = labels)

# Further customize chart.
fig.update_layout(xaxis_dtick = 1)
fig.write_html('dice_visual.xhtml')

Refactorización

Para mayor claridad, los listados de esta sección utilizan la forma larga de bucles for. Podemos refactorizar el código utilizando listas por comprensión para uno o ambos bucles. Aquí está el código que usa la comprensión de listas:

import plotly.express as px

from die import Die

# Create two D8.
die_1 = Die(8)
die_2 = Die(8)

# Make some rolls, and store results in a list.
results = [die_1.roll()   die_2.roll() for roll_num in range(500_000) ]

# Analyze the result.
max_results = die_1.num_sides   die_2.num_sides
poss_results = range(2, max_results   1)
frequencies = [results.count(value) for value in poss_results]

# Visualize the results.
title = "Results of Rolling Two D8 Dice 500,000 Times"
labels = {'x': 'Result', 'y': 'Frequency of Result'}
fig = px.bar(x = poss_results, y = frequencies, title = title, labels = labels)

# Further customize chart.
fig.update_layout(xaxis_dtick = 1)

fig.write_html('dice_visual_list_comprehension.xhtml')

Conclusión

En conclusión, analizar y presentar datos estadísticos se vuelve poderoso y atractivo con Plotly para la visualización interactiva de datos de tiradas de dados. Al simular tiradas de dados y visualizar los resultados, podemos comprender mejor las probabilidades de diferentes resultados. Las funciones interactivas de Plotly, como la información al pasar el mouse, la panorámica y el zoom, mejoran la experiencia del usuario y hacen que los datos sean más accesibles. Además, la capacidad de personalizar y guardar visualizaciones como archivos HTML facilita compartirlas e integrarlas en aplicaciones web. Este artículo demuestra cómo utilizar las funciones de Plotly para crear gráficos informativos y atractivos. Plotly es una excelente herramienta para el análisis y presentación de datos.

Declaración de liberación Este artículo se reproduce en: https://dev.to/terrancoder/using-plotly-for-interactive-dice-roll-data-visualization-48f6?1 Si hay alguna infracción, comuníquese con [email protected] para eliminar él
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3