"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Usando Plotly para visualização interativa de dados de lançamento de dados

Usando Plotly para visualização interativa de dados de lançamento de dados

Publicado em 01/08/2024
Navegar:874

Neste tutorial, aprenderemos como usar o Plotly para criar visualizações interativas. Nosso projeto se concentra na análise dos resultados do lançamento de dados. Ao lançar um único dado de seis faces, qualquer número de 1 a 6 tem chances iguais de aparecer. No entanto, quando você lança vários dados, alguns números se tornam mais prováveis ​​do que outros. Nosso objetivo é determinar essas probabilidades simulando lançamentos de dados e criando um conjunto de dados. Depois disso, representaremos visualmente os resultados de vários lançamentos para mostrar quais resultados são estatisticamente mais prováveis.

O que é Plotly?

Plotly é uma biblioteca gráfica de código aberto que permite aos usuários criar visualizações interativas baseadas na web. Ele oferece suporte a muitos tipos de gráficos, incluindo gráficos de linhas, gráficos de dispersão, gráficos de barras e muito mais. Plotly é especialmente útil para criar visualizações que podem ser incorporadas em aplicativos da web, pois oferece recursos interativos como zoom, panorâmica e informações de foco.

Instalando Plotly

Instalaremos o Plotly usando pip. Também precisamos instalar o pandas, uma biblioteca para trabalhar com dados de forma eficiente, pois o Plotly Express depende disso.

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

Visite a galeria de tipos de gráficos no site do Plotly para ver as diferentes visualizações que você pode criar com o Plotly.

Criando a classe Die

Primeiro, criaremos a seguinte classe Die para simular o lançamento de um dado. Chamaremos o arquivo de 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)

O método __ init __ recebe um argumento opcional. Quando uma instância de Die é criada, o número de lados será seis se nenhum argumento for fornecido. Se um argumento for fornecido, ele definirá o número de lados do dado.

O método roll() usa a função randint() para retornar um número aleatório entre 1 e o número de lados. Esta função pode retornar o valor inicial (1), o valor final (num_sides) ou qualquer número inteiro intermediário. Os dados são nomeados de acordo com o número de lados: um dado de seis lados é chamado de D6, um dado de dez lados é chamado de D10 e assim por diante.

Lançando o dado

Primeiro importamos o módulo Plotly Express usando o alias px para evitar digitar plotly.express repetidamente. Criaremos uma instância de um dado para simular o lançamento de dois dados D8. Chamamos esse arquivo de 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)

Analisando os Resultados

O menor resultado possível é a soma do menor número em cada dado (2). O maior resultado possível é a soma do maior número em cada dado (16) atribuído a max_results. A variável max_result melhora a legibilidade do código para gerar poss_results. Poderíamos ter escrito intervalo (2,16), mas isso funcionaria apenas para dois dados D8. Ao simular circunstâncias do mundo real, é melhor desenvolver um código que possa lidar prontamente com uma ampla variedade de cenários.

# 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 os resultados.

Definimos o título e o atribuímos a 'título'. Criamos um dicionário para especificar rótulos de eixos. As chaves do dicionário representam os rótulos que queremos personalizar, enquanto os valores representam os rótulos personalizados que queremos usar. Chamamos o eixo x de 'Resultado' e o eixo y de 'Frequência do Resultado'. Para construir um gráfico de barras, usamos a função px.bar() e passamos as variáveis ​​​​opcionais 'title' e 'labels'.

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

O gráfico é gerado com título e rótulos apropriados para cada eixo, conforme imagem abaixo.

Image description

Outras personalizações

Há um problema que precisamos resolver com o enredo que acabamos de criar. Como existem 11 barras, as configurações padrão de layout do eixo x deixam algumas barras sem rótulos. Embora as configurações padrão sejam adequadas para a maioria das visualizações, este gráfico ficaria melhor com todas as barras rotuladas.

Plotly oferece um método update_layout() que permite fazer várias alterações em uma figura após ela ter sido criada. Veja como você pode instruir o Plotly a dar a cada barra seu próprio rótulo.

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

O método update_layout() se aplica ao objeto fig, que representa o gráfico inteiro. Usamos a opção xaxis_dtick para definir a distância entre as marcas de escala no eixo x. Definimos o espaçamento como 1 para que cada barra seja rotulada. Ao executar dice_visual.py novamente, você deverá ver rótulos em cada barra.

Image description

Este código pode ser facilmente personalizado para simular o lançamento de dados de diferentes tamanhos. Para criar um D6 e um D10, passe os argumentos 6 e 10 ao criar as duas instâncias do dado. Altere o primeiro loop para o número desejado de lançamentos e altere o título do gráfico de acordo.

Podemos fazer com que nosso programa salve o gráfico como um arquivo HTML automaticamente, substituindo a chamada para fig.show() por uma chamada para fig.write_html().

O método write_html() requer um argumento: o nome do arquivo no qual gravar. Se você fornecer apenas um nome de arquivo, o arquivo será salvo no mesmo diretório que o arquivo .py. Você também pode chamar write_html() com um objeto Path para salvar o arquivo de saída em qualquer lugar do seu sistema.

Aqui está o 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')

Reestruturação

Para maior clareza, as listagens nesta seção usam a forma longa de loops for. Podemos refatorar o código usando compreensões de lista para um ou ambos os loops. Aqui está o código usando compreensão de lista:

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

Conclusão

Concluindo, analisar e apresentar dados estatísticos torna-se poderoso e envolvente com o Plotly para visualização interativa de dados de lançamento de dados. Ao simular lançamentos de dados e visualizar os resultados, podemos compreender melhor as probabilidades de diferentes resultados. Os recursos interativos do Plotly, como informações de foco, panorâmica e zoom, aprimoram a experiência do usuário e tornam os dados mais acessíveis. Além disso, a capacidade de personalizar e salvar visualizações como arquivos HTML facilita seu compartilhamento e integração em aplicativos da web. Este artigo demonstra como usar os recursos do Plotly para criar gráficos informativos e atraentes. Plotly é uma excelente ferramenta para análise e apresentação de dados.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/terrancoder/using-plotly-for-interactive-dice-roll-data-visualization-48f6?1 Se houver alguma violação, entre em contato com [email protected] para excluir isto
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3