М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения


Глава 15 • Генерирование данных Рис. 15.12



Pdf көрінісі
бет250/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   246   247   248   249   250   251   252   253   ...   334
Байланысты:
Изучаем Python

342
Глава 15 • Генерирование данных
Рис. 15.12.
Простая гистограмма, созданная с использованием Plotly
Обратите внимание на интерактивность диаграмм, построенных с использованием 
Plotly: если навести указатель мыши на столбец диаграммы, вы увидите данные, 
связанные с этим столбцом. Данная возможность особенно полезна при нанесе-
нии нескольких наборов данных на одну диаграмму. Также обратите внимание на 
кнопки в правом верхнем углу: они позволяют изменить масштаб визуализации 
и сохранить ее в графическом файле.
Бросок двух кубиков
При броске двух кубиков вы получаете большие значения с другим распределением 
результатов. Изменим наш код и создадим два кубика D6, моделирующих бросок 
пары кубиков. При броске каждой пары программа складывает два числа (по одно-
му с каждого кубика) и сохраняет сумму в 
results
. Сохраните копию 
die_visual .py
под именем 
dice_visual .py
и внесите следующие изменения:
dice_visual.py
from plotly.graph_objs import Bar, Layout
from plotly import offline
from die import Die
# Создание двух кубиков D6.
die_1 = Die()
die_2 = Die()
# Моделирование серии бросков с сохранением результатов в списке.
results = []
for roll_num in range(1000):


Моделирование бросков кубиков в Plotly
343

result = die_1.roll() + die_2.roll()
results.append(result)
# Анализ результатов.
frequencies = []

max_result = die_1.num_sides + die_2.num_sides

for value in range(2, max_result+1):
frequency = results.count(value)
frequencies.append(frequency)
# Визуализация результатов.
x_values = list(range(2, max_result+1))
data = [Bar(x=x_values, y=frequencies)]

x_axis_config = {'title': 'Result', 'dtick': 1}
y_axis_config = {'title': 'Frequency of Result'}
my_layout = Layout(title='Results of rolling two D6 dice 1000 times',
xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, filename='d6_d6.html')
Создав два экземпляра 
Die
, мы бросаем кубики и вычисляем сумму для каждого 
броска 

. Самый большой возможный результат (12) вычисляется суммировани-
ем наибольших результатов на обоих кубиках; мы сохраняем его в 
max_result


Наименьший возможный результат (2) равен сумме наименьших результатов на 
обоих кубиках. В процессе анализа подсчитывается количество результатов для 
каждого значения от 2 до 
max_result

. (Также можно было использовать диапазон 
range(2,
13)
, но он работал бы только для двух кубиков D6. При моделировании 
реальных ситуаций лучше писать код, который легко адаптируется для разных 
ситуаций. В частности, этот код позволяет смоделировать бросок пары кубиков 
с 
любым
количеством граней.)
При создании диаграммы мы включаем ключ 
dtick
в словарь 
x_axis_config


Этот параметр управляет расстоянием между делениями на оси x. С появлением 
дополнительных столбцов на гистограмме в конфигурации по умолчанию Plotly 
будет снабжать метками только часть столбцов. Параметр 
'dtick':
1
приказывает 
Plotly помечать все деления. Также мы обновляем заголовок диаграммы и изме-
няем имя выходного файла.
После выполнения кода в браузере должна появиться диаграмма, примерный вид 
которой показан на рис. 15.13.
На диаграмме показаны примерные результаты, которые могут быть получены 
для пары кубиков D6. Как видите, реже всего выпадают результаты 2 и 12, а чаще 
всего 7, потому что эта комбинация может быть выброшена шестью способами, 
а именно: 1+6, 2+5, 3+4, 4+3, 5+2 и 6+1.
Броски кубиков с разным числом граней
Создадим кубики с 6 и 10 гранями и посмотрим, что произойдет, если бросить их 
50 000 раз:




Достарыңызбен бөлісу:
1   ...   246   247   248   249   250   251   252   253   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет