„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Verwendung von Plotly für die interaktive Visualisierung von Würfelwurfdaten

Verwendung von Plotly für die interaktive Visualisierung von Würfelwurfdaten

Veröffentlicht am 01.08.2024
Durchsuche:730

In diesem Tutorial erfahren Sie, wie Sie mit Plotly interaktive Visualisierungen erstellen. Unser Projekt konzentriert sich auf die Analyse der Ergebnisse des Würfelns. Beim Würfeln eines einzelnen sechsseitigen Würfels hat jede Zahl von 1 bis 6 die gleiche Chance, zu erscheinen. Wenn Sie jedoch mehrere Würfel werfen, werden einige Zahlen wahrscheinlicher als andere. Unser Ziel ist es, diese Wahrscheinlichkeiten zu bestimmen, indem wir Würfelwürfe simulieren und einen Datensatz erstellen. Danach werden wir die Ergebnisse mehrerer Würfe visuell darstellen, um zu zeigen, welche Ergebnisse statistisch gesehen wahrscheinlicher sind.

Was ist Plotly?

Plotly ist eine Open-Source-Grafikbibliothek, mit der Benutzer interaktive, webbasierte Visualisierungen erstellen können. Es unterstützt viele Diagrammtypen, darunter Liniendiagramme, Streudiagramme, Balkendiagramme und mehr. Plotly eignet sich besonders zum Erstellen von Visualisierungen, die in Webanwendungen eingebettet werden können, da es interaktive Funktionen wie Zoomen, Schwenken und Hover-Informationen bietet.

Plotly installieren

Wir installieren Plotly mit pip. Wir müssen auch Pandas installieren, eine Bibliothek zum effizienten Arbeiten mit Daten, da Plotly Express darauf angewiesen ist.

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

Besuchen Sie die Galerie der Diagrammtypen auf der Website von Plotly, um die verschiedenen Visualisierungen zu sehen, die Sie mit Plotly erstellen können.

Erstellen der Die-Klasse

Zuerst erstellen wir die folgende Die-Klasse, um den Wurf eines Würfels zu simulieren. Wir nennen die Datei 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)

Die Methode __ init __ benötigt ein optionales Argument. Wenn eine Instanz von Die erstellt wird, beträgt die Anzahl der Seiten sechs, wenn kein Argument angegeben wird. Wenn ein Argument angegeben wird, wird die Anzahl der Seiten des Würfels festgelegt.

Die roll()-Methode verwendet die randint()-Funktion, um eine Zufallszahl zwischen 1 und der Anzahl der Seiten zurückzugeben. Diese Funktion kann den Startwert (1), den Endwert (num_sides) oder eine beliebige Ganzzahl dazwischen zurückgeben. Würfel werden nach der Anzahl ihrer Seiten benannt: Ein sechsseitiger Würfel heißt W6, ein zehnseitiger Würfel heißt W10 und so weiter.

Den Würfel rollen

Wir importieren zunächst das Plotly Express-Modul mit dem Alias ​​px, um die wiederholte Eingabe von plotly.express zu vermeiden. Wir erstellen eine Instanz eines Würfels, um das Werfen von zwei W8-Würfeln zu simulieren. Wir nennen diese Datei 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)

Analyse der Ergebnisse

Das kleinstmögliche Ergebnis ist die Summe der kleinsten Zahl auf jedem Würfel (2). Das größtmögliche Ergebnis ist die Summe der größten Zahl auf jedem Würfel (16), die max_results zugewiesen wird. Die Variable max_result verbessert die Lesbarkeit des Codes zur Generierung von poss_results. Wir hätten Reichweite (2,16) schreiben können, aber das würde nur für zwei D8-Würfel funktionieren. Bei der Simulation realer Umstände ist es am besten, Code zu entwickeln, der eine Vielzahl von Szenarien problemlos bewältigen kann.

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

Visualisierung der Ergebnisse.

Wir haben den Titel definiert und ihn „title“ zugewiesen. Wir haben ein Wörterbuch erstellt, um Achsenbeschriftungen anzugeben. Die Schlüssel des Wörterbuchs stellen die Beschriftungen dar, die wir anpassen möchten, während die Werte die benutzerdefinierten Beschriftungen darstellen, die wir verwenden möchten. Wir nennen die x-Achse „Ergebnis“ und die y-Achse „Ergebnishäufigkeit“. Um ein Balkendiagramm zu erstellen, verwenden wir die Funktion px.bar() und übergeben die optionalen Variablen „title“ und „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()

Das Diagramm wird mit einem entsprechenden Titel und Beschriftungen für jede Achse generiert, wie im Bild unten zu sehen ist.

Image description

Weitere Anpassungen

Es gibt ein Problem, das wir mit der Handlung, die wir gerade erstellt haben, angehen müssen. Da es 11 Balken gibt, lassen die Standardeinstellungen für das X-Achsen-Layout einige Balken unbeschriftet. Während die Standardeinstellungen für die meisten Visualisierungen ausreichend sind, würde dieses Diagramm besser aussehen, wenn alle Balken beschriftet wären.

Plotly bietet eine update_layout()-Methode, mit der Sie verschiedene Änderungen an einer Figur vornehmen können, nachdem sie erstellt wurde. So können Sie Plotly anweisen, jedem Riegel ein eigenes Etikett zu geben.

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

Die Methode update_layout() gilt für das Fig-Objekt, das das gesamte Diagramm darstellt. Wir verwenden die Option xaxis_dtick, um den Abstand zwischen Teilstrichen auf der x-Achse festzulegen. Wir setzen den Abstand auf 1, damit jeder Balken beschriftet ist. Wenn Sie dice_visual.py erneut ausführen, sollten auf jeder Leiste Beschriftungen angezeigt werden.

Image description

Dieser Code kann leicht angepasst werden, um Würfel unterschiedlicher Größe zu simulieren. Um einen D6 und einen D10 zu erstellen, übergeben Sie beim Erstellen der beiden Die-Instanzen die Argumente 6 und 10. Ändern Sie die erste Schleife auf die gewünschte Anzahl an Rollen und ändern Sie den Titel der Grafik entsprechend.

Wir können unser Programm dazu bringen, das Diagramm automatisch als HTML-Datei zu speichern, indem wir den Aufruf von fig.show() durch einen Aufruf von fig.write_html() ersetzen.

Die Methode write_html() erfordert ein Argument: den Namen der Datei, in die geschrieben werden soll. Wenn Sie nur einen Dateinamen angeben, wird die Datei im selben Verzeichnis wie die .py-Datei gespeichert. Sie können write_html() auch mit einem Path-Objekt aufrufen, um die Ausgabedatei an einer beliebigen Stelle auf Ihrem System zu speichern.

Hier ist der vollständige Code:

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

Refactoring

Aus Gründen der Übersichtlichkeit verwenden die Auflistungen in diesem Abschnitt die Langform von for-Schleifen. Wir können den Code umgestalten, indem wir Listenverständnisse für eine oder beide Schleifen verwenden. Hier ist der Code, der das Listenverständnis verwendet:

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

Abschluss

Zusammenfassend lässt sich sagen, dass die Analyse und Präsentation statistischer Daten mit Plotly für die interaktive Visualisierung von Würfelwurfdaten leistungsstark und ansprechend wird. Durch die Simulation von Würfelwürfen und die Visualisierung der Ergebnisse können wir die Wahrscheinlichkeiten verschiedener Ergebnisse besser verstehen. Die interaktiven Funktionen von Plotly, wie Hover-Informationen, Schwenken und Zoomen, verbessern das Benutzererlebnis und machen Daten leichter zugänglich. Darüber hinaus erleichtert die Möglichkeit, Visualisierungen anzupassen und als HTML-Dateien zu speichern, deren Weitergabe und Integration in Webanwendungen. In diesem Artikel wird gezeigt, wie Sie die Funktionen von Plotly nutzen, um informative und attraktive Diagramme zu erstellen. Plotly ist ein hervorragendes Tool zur Datenanalyse und -präsentation.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/terrancoder/using-plotly-for-interactive-dice-roll-data-visualization-48f6?1 Bei Verstößen wenden Sie sich zum Löschen bitte an [email protected] Es
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3