Глава 15 • Генерирование данных
В этом примере создается случайное блуждание из 50 000 точек (что в большей
степени соответствует реальным данным), и каждая точка рисуется с размером
s
=1.
Как видно из рис. 15.10, изображение получается эфемерным и туманным. Простая
точечная диаграмма превратилась в произведение искусства!
Поэкспериментируйте с этим кодом и посмотрите, насколько вам удастся увели-
чить количество точек в случайном блуждании, прежде чем система начнет заметно
«тормозить» или диаграмма потеряет свою визуальную привлекательность.
Рис. 15.10.
Случайное блуждание из 50 000 точек
Изменение размера диаграммы для заполнения экрана
Визуализация гораздо эффективнее передает закономерности в данных, если она
адаптирована под размер экрана. Чтобы диаграмма лучше смотрелась на экране,
измените размер области просмотра
matplotlib
:
rw_visual.py
...
while True:
# Make a random walk, and plot the points.
rw = RandomWalk()
rw.fill_walk()
# Назначение размера области просмотра.
plt.figure(figsize=(10, 6))
...
Функция
figure()
управляет шириной, высотой, разрешением и цветом фона
диаграммы. Параметр
figsize
получает кортеж с размерами окна диаграммы
в дюймах.
Моделирование бросков кубиков в Pygal
327
Python предполагает, что разрешение экрана составляет 80 пикселов на дюйм;
если этот код не дает точного размера, внесите необходимые изменения в числа.
Или, если вы знаете разрешение экрана в вашей системе, передайте его
figure()
в параметре
dpi
для выбора размера, эффективно использующего доступное про-
странство:
plt.figure(dpi=128, figsize=(10, 6))
УПРАЖНЕНИЯ
15-3 . Молекулярное движение: измените программу rw_visual .py и замените plt .scatter()
вызовом plt .plot() . Чтобы смоделировать путь пыльцевого зерна на поверхности водяной
капли, передайте значения rw .x_values и rw .y_values и включите аргумент linewidth . Ис-
пользуйте 5000 точек вместо 50 000 .
15-4 . Измененные случайные блуждания: в классе RandomWalk значения x_step и y_step
генерируются по единому набору условий . Направление выбирается случайно из списка
[1, -1], а расстояние — из списка [0, 1, 2, 3, 4] . Измените значения в этих списках и посмо-
трите, что произойдет с общей формой диаграммы . Попробуйте применить расширенный
список вариантов расстояния (например, от 0 до 8) или удалите –1 из списка направлений
по оси
x или y
.
15-5 . Рефакторинг: метод fill_walk() получился слишком длинным . Создайте новый метод
с именем get_step(), который определяет расстояние и направление для каждого шага, по-
сле чего вычисляет этот шаг . В результате метод fill_walk() должен содержать два вызова
get_step():
x_step = get_step()
y_step = get_step()
Рефакторинг сокращает размер fill_walk(), а метод становится более простым и понятным .
Моделирование бросков кубиков в Pygal
В этом разделе мы воспользуемся пакетом визуализации Pygal для создания фай-
лов с масштабируемой векторной графикой. Такие файлы хорошо подходят для
визуализаций, имеющих разное представление на экранах разного размера, потому
что изображение автоматически масштабируется по размерам экрана зрителя. Если
вы собираетесь использовать свои визуализации в веб-приложениях, Pygal будет
хорошим вариантом; ваша работа будет хорошо смотреться на любом устройстве,
которое будет использоваться для просмотра ваших визуализаций.
В этом проекте мы займемся анализом результатов бросков кубиков. При броске
одного шестигранного кубика существует равная вероятность выпадения любого
числа от 1 до 6. С другой стороны, при броске двух кубиков некоторые суммы
выпадают с большей вероятностью, чем другие. Чтобы определить, какие числа
наиболее вероятны, мы сгенерируем набор данных, представляющих брошенные
кубики. Затем на базе данных большого количества бросков будет построена
диаграмма, по которой можно определить, какие результаты более вероятны.
Броски кубиков часто используются в математике для пояснения различных типов
анализа данных. Впрочем, они также находят применение в реальных приложе-
ниях — скажем, в казино и в обычных играх («Монополия», ролевые игры и т. д.).
328
Достарыңызбен бөлісу: |