Menggunakan Plotly untuk Visualisasi Data Gulungan Dadu Interaktif

PHPz
Lepaskan: 2024-07-18 22:55:01
asal
590 orang telah melayarinya

Dalam tutorial ini, kita akan belajar cara menggunakan Plotly untuk mencipta visualisasi interaktif. Projek kami memberi tumpuan kepada menganalisis keputusan membaling dadu. Apabila melancarkan satu dadu bermuka enam, sebarang nombor dari 1 hingga 6 mempunyai peluang yang sama untuk muncul. Walau bagaimanapun, apabila anda membaling berbilang dadu, beberapa nombor menjadi lebih berkemungkinan daripada yang lain. Matlamat kami adalah untuk menentukan kebarangkalian ini dengan mensimulasikan gulungan dadu dan mencipta set data. Selepas itu, kami akan mewakili secara visual hasil berbilang gulungan untuk menunjukkan hasil yang lebih berkemungkinan secara statistik.

Apakah Plotly?

Plotly ialah perpustakaan grafik sumber terbuka yang membolehkan pengguna mencipta visualisasi berasaskan web yang interaktif. Ia menyokong banyak jenis carta, termasuk plot garis, plot serakan, carta bar dan banyak lagi. Plotly amat berguna untuk mencipta visualisasi yang boleh dibenamkan dalam aplikasi web, kerana ia menawarkan ciri interaktif seperti maklumat zum, sorotan dan tuding.

Memasang Plotly

Kami akan memasang Plotly menggunakan pip. Kami juga perlu memasang panda, perpustakaan untuk bekerja dengan data dengan cekap, kerana Plotly Express bergantung padanya.

$ python -m pip install --user plotly
$ python -m pip install --user pandas
Salin selepas log masuk

Lawati galeri jenis carta di tapak web Plotly untuk melihat visualisasi berbeza yang boleh anda buat dengan Plotly.

Mencipta Kelas Die

Pertama, kami akan mencipta kelas Die berikut untuk mensimulasikan gulungan dadu. Kami akan menamakan fail 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)
Salin selepas log masuk

Kaedah __ init __ mengambil satu hujah pilihan. Apabila contoh Die dibuat, bilangan sisi akan menjadi enam jika tiada hujah disediakan. Jika hujah diberikan, ia akan menetapkan bilangan sisi pada dadu.

Kaedah roll() menggunakan fungsi randint() untuk mengembalikan nombor rawak antara 1 dan bilangan sisi. Fungsi ini boleh mengembalikan nilai permulaan (1), nilai penamat (num_sides), atau sebarang integer di antaranya. Dadu dinamakan mengikut bilangan sisinya: dadu enam belah dipanggil D6, dadu sepuluh belah dipanggil D10, dan seterusnya.

Menggulung Mati

Kami mula-mula mengimport modul Plotly Express menggunakan alias px untuk mengelakkan menaip plotly.express berulang kali. Kami akan mencipta contoh dadu untuk mensimulasikan melancarkan dua dadu D8. Kami menamakan fail ini 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)
Salin selepas log masuk

Menganalisis Keputusan

Hasil terkecil yang mungkin ialah hasil tambah nombor terkecil pada setiap dadu (2). Keputusan terbesar yang mungkin ialah jumlah nombor terbesar pada setiap die (16) yang ditetapkan kepada max_results. Pembolehubah max_result meningkatkan kebolehbacaan kod untuk menjana poss_results. Kita boleh menulis julat (2,16), tetapi ini hanya berfungsi untuk dua dadu D8. Apabila mensimulasikan keadaan dunia sebenar, yang terbaik adalah membangunkan kod yang boleh mengendalikan pelbagai senario dengan mudah.

# 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)
Salin selepas log masuk

Memvisualisasikan hasilnya.

Kami menentukan tajuk dan menetapkannya kepada 'tajuk'. Kami mencipta kamus untuk menentukan label paksi. Kekunci kamus mewakili label yang ingin kami sesuaikan, manakala nilai mewakili label tersuai yang ingin kami gunakan. Kami menamakan paksi-x sebagai 'Result' dan paksi-y sebagai 'Frequency of Result'. Untuk membina graf bar, kami menggunakan fungsi px.bar() dan menghantar pembolehubah pilihan 'title' dan '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()
Salin selepas log masuk

Plot dijana dengan tajuk dan label yang sesuai untuk setiap paksi, seperti yang dilihat dalam gambar di bawah.

Image description

Penyesuaian Selanjutnya

Ada satu isu yang perlu kami tangani dengan plot yang baru kami buat. Oleh kerana terdapat 11 bar, tetapan susun atur paksi x lalai meninggalkan beberapa bar tanpa label. Walaupun tetapan lalai adalah mencukupi untuk kebanyakan visualisasi, carta ini akan kelihatan lebih baik dengan semua bar berlabel.

Plotly menawarkan kaedah update_layout() yang membolehkan anda membuat pelbagai perubahan pada rajah selepas ia dibuat. Begini cara anda boleh mengarahkan Plotly untuk memberikan setiap bar labelnya sendiri.

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

Kaedah update_layout() digunakan pada objek rajah, yang mewakili keseluruhan carta. Kami menggunakan pilihan xaxis_dtick untuk menetapkan jarak antara tanda semak pada paksi-x. Kami menetapkan jarak kepada 1 supaya setiap bar dilabelkan. Apabila anda menjalankan dice_visual.py sekali lagi, anda sepatutnya melihat label pada setiap bar.

Image description

Kod ini boleh disesuaikan dengan mudah untuk mensimulasikan dadu bergolek dengan saiz yang berbeza. Untuk mencipta D6 dan D10, luluskan hujah 6 dan 10 apabila mencipta dua kejadian die. Tukar gelung pertama kepada bilangan gulungan yang diingini dan tukar tajuk graf dengan sewajarnya.

We can get our program to save the chart as an HTML file automatically by replacing the call to fig.show() with a call to fig.write_html().

The write_html() method requires one argument: the name of the file to write to. If you only provide a filename, the file will be saved in the same directory as the .py file. You can also call write_html() with a Path object to save the output file anywhere on your system.

Here is the complete 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')
Salin selepas log masuk

Refactoring

For clarity, the listings in this section use the long form of for loops. We can refactor the code by using list comprehensions for one or both of the loops. Here is the code using list comprehension:

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')
Salin selepas log masuk

Conclusion

In conclusion, analyzing and presenting statistical data becomes powerful and engaging with Plotly for interactive dice roll data visualization. By simulating dice rolls and visualizing the outcomes, we can better understand the probabilities of different results. Plotly's interactive features, such as hover information, panning, and zooming, enhance the user experience and make data more accessible. Additionally, the ability to customize and save visualizations as HTML files makes it easy to share and integrate them into web applications. This article demonstrates how to use Plotly's features to create informative and attractive charts. Plotly is an excellent tool for data analysis and presentation.

Atas ialah kandungan terperinci Menggunakan Plotly untuk Visualisasi Data Gulungan Dadu Interaktif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!