Анализ данных – это процесс извлечения смысла и информации из больших объемов данных. Он помогает выявить закономерности, тренды, аномалии и потенциальные возможности для принятия решений. Однако сырые цифры и факты могут быть трудными для интерпретации. Вот где важность визуализации данных становится явной.
Визуализация данных – это искусство представления информации в виде графиков, диаграмм, дашбордов и других визуальных элементов. Она позволяет сделать данные более доступными и понятными, помогая выявить закономерности и взаимосвязи, которые могли бы остаться незамеченными при анализе сырых данных. Подходящая визуализация способна превратить сложные структуры данных в наглядные образы, позволяя нам видеть и понимать информацию на более глубоком уровне.
В этом контексте библиотека Bokeh для Python выделяется как одно из наиболее мощных и гибких средств для визуализации данных. Bokeh обеспечивает интерактивные и красочные графики, которые можно легко встраивать в веб-приложения и даже динамически изменять в режиме реального времени.
Одним из ключевых преимуществ Bokeh является его способность создавать интерактивные визуализации без необходимости глубокого понимания веб-разработки. С помощью набора инструментов и виджетов Bokeh, вы можете легко добавить возможности масштабирования, панорамирования, взаимодействия и подсказок к вашим графикам, делая анализ данных ещё более увлекательным и информативным.
Bokeh также предоставляет множество стилей графиков и настраиваемых параметров, позволяя адаптировать визуализации под конкретные потребности и стили вашего проекта. Богатый выбор различных типов графиков, начиная от простых линейных и столбчатых диаграмм, и заканчивая сложными географическими картами, позволяет выразить самые разнообразные данные в наиболее понятной и удобной форме.
Помимо упомянутых выше преимуществ, Bokeh также предоставляет возможность создания комплексных графических решений, объединяя несколько графиков и диаграмм в единые композиции. Это особенно полезно при анализе данных, требующем визуализации нескольких аспектов одновременно. С помощью функций компоновки и макетов Bokeh, вы можете создавать дашборды, на которых данные представлены в виде взаимосвязанных графиков, что делает анализ более полным и информативным.
Установим Bokeh:
$ pip install bokeh
Основы создания графиков на Bokeh
Создание линейных графиков с использованием Bokeh
Линейные графики – это одни из самых распространенных и полезных инструментов визуализации данных. Они позволяют отобразить зависимость между двумя непрерывными переменными, что позволяет нам видеть тренды, паттерны и изменения в данных.
Давайте начнем с создания простого линейного графика с использованием Bokeh. Сначала нам необходимо импортировать необходимые модули:
from bokeh.plotting import figure, output_file, show
Здесь мы импортируем figure
для создания графической фигуры, output_file
для указания имени файла для сохранения графика и show
для отображения графика в браузере. Далее, мы можем создать фигуру и добавить на нее данные:
# Создание графической фигуры
p = figure(title='Пример линейного графика', x_axis_label='X-ось', y_axis_label='Y-ось')
# Данные для графика
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]
# Добавление линии на график
p.line(x, y, legend_label='Линия', line_width=2)
# Отображение графика
output_file('линейный_график.html')
show(p)
Здесь мы создаем фигуру p
с заголовком и метками для осей. Далее, мы создаем данные x
и y
, которые будут отображены на графике. С помощью метода line
мы добавляем линию на график, задавая ей ширину линии и метку для легенды. Наконец, мы используем output_file
для сохранения графика в HTML-файл и show
для его отображения.
Настройка осей, меток и заголовков графика
Чтобы сделать график более информативным и читаемым, важно правильно настроить оси, метки и заголовки. Bokeh предоставляет обширный набор инструментов для настройки всех этих аспектов.
# Настройка осей и меток
p.xaxis.axis_label = 'Время'
p.yaxis.axis_label = 'Значение'
# Настройка заголовка
p.title.text = 'Пример линейного графика с настроенными осями и заголовком'
p.title.text_font_size = '16pt'
Здесь мы задаем метки для осей x и y с помощью axis_label
, а также настраиваем заголовок с помощью title.text
и title.text_font_size
.
Использование различных стилей линий и маркеров
Чтобы сделать ваши графики более наглядными и разнообразными, вы можете использовать различные стили линий и маркеров. Bokeh предоставляет множество опций для настройки внешнего вида ваших графиков.
# Создание графической фигуры
p = figure(title='Пример графика с разными стилями линий и маркеров')
# Данные для графика
x = [1, 2, 3, 4, 5]
y1 = [6, 7, 2, 4, 5]
y2 = [8, 5, 3, 6, 7]
# Добавление линий с разными стилями
p.line(x, y1, legend_label='Линия 1', line_color='blue', line_width=2)
p.line(x, y2, legend_label='Линия 2', line_color='red', line_dash='dashed', line_width=2)
# Добавление маркеров
p.circle(x, y1, legend_label='Маркеры 1', fill_color='white', size=8)
p.square(x, y2, legend_label='Маркеры 2', fill_color='black', size=8)
# Отображение графика
output_file('стили_графика.html')
show(p)
Здесь мы создаем графическую фигуру и добавляем две линии с разными стилями. Первая линия имеет синий цвет и обычную сплошную линию, вторая линия – красная с пунктирной линией. Мы также добавляем маркеры к каждой линии, указывая цвет заполнения и размер маркеров.
Визуализация с использованием различных графических элементов
Создание столбчатых диаграмм для анализа категориальных данных
Столбчатые диаграммы – это прекрасный инструмент для визуализации категориальных данных, таких как категории продуктов, регионы, временные периоды и многое другое. Они позволяют наглядно сравнивать значения разных категорий, что делает их незаменимыми для анализа и сравнения данных.
Чтобы создать столбчатую диаграмму с использованием Bokeh, мы можем использовать функцию vbar
. Давайте рассмотрим пример:
from bokeh.plotting import figure, output_file, show
# Создание графической фигуры
p = figure(x_range=['A', 'B', 'C', 'D'], title='Пример столбчатой диаграммы', x_axis_label='Категории', y_axis_label='Значения')
# Данные для диаграммы
categories = ['A', 'B', 'C', 'D']
values = [10, 25, 15, 30]
# Добавление столбцов
p.vbar(x=categories, top=values, width=0.5, color='blue')
# Отображение графика
output_file('столбчатая_диаграмма.html')
show(p)
Здесь мы создаем графическую фигуру p
и используем функцию vbar
для добавления столбцов на диаграмму. Мы указываем значения для каждой категории с помощью аргумента top
, а также задаем ширину столбцов и цвет.
Использование круговых диаграмм для отображения долей и процентных соотношений
Круговые диаграммы предоставляют нам способ визуализации долей и процентных соотношений между различными категориями. Они позволяют наглядно увидеть, какая доля от общего целого приходится на каждую категорию.
Для создания круговой диаграммы в Bokeh, нам нужно использовать метод wedge
. Рассмотрим пример создания круговой диаграммы:
from math import pi
from bokeh.plotting import figure, output_file, show
from bokeh.transform import cumsum
import pandas as pd
# Данные
data = pd.Series([0.25, 0.15, 0.3, 0.2], index=['A', 'B', 'C', 'D'])
# Преобразование данных для круговой диаграммы
data = data.reset_index(name='value').rename(columns={'index': 'category'})
data['angle'] = data['value']/data['value'].sum() * 2*pi
data['color'] = ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3']
# Создание графической фигуры
p = figure(plot_height=350, title='Круговая диаграмма', toolbar_location=None,
tools="hover", tooltips="@category: @value", x_range=(-0.5, 1.0))
# Добавление круговой диаграммы
p.wedge(x=0, y=1, radius=0.4,
start_angle=cumsum('angle', include_zero=True), end_angle=cumsum('angle'),
line_color="white", fill_color='color', legend_field='category', source=data)
# Отображение графика
output_file('круговая_диаграмма.html')
show(p)
В данном примере мы используем библиотеку pandas для удобной работы с данными. Мы задаем доли для каждой категории и преобразуем данные в формат, понятный для круговой диаграммы. Затем мы создаем графическую фигуру, используя метод wedge
для добавления круговой диаграммы.
Создание гистограмм для анализа распределения данных
Гистограммы – это графический способ представления распределения данных по различным интервалам. Они помогают нам понять, как данные распределены по значению и выявить наличие аномалий или особенностей в данных.
Для создания гистограммы в Bokeh, мы используем метод quad
, который позволяет нам рисовать прямоугольники, представляющие интервалы данных. Рассмотрим пример создания гистограммы:
from math import pi
from bokeh.plotting import figure, output_file, show
from bokeh.transform import cumsum
import pandas as pd
# Данные
data = pd.Series([0.25, 0.15, 0.3, 0.2], index=['A', 'B', 'C', 'D'])
# Преобразование данных для круговой диаграммы
data = data.reset_index(name='value').rename(columns={'index': 'category'})
data['angle'] = data['value']/data['value'].sum() * 2*pi
data['color'] = ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3']
# Создание графической фигуры
p = figure(height=350, title='Круговая диаграмма', toolbar_location=None,
tools="hover", tooltips="@category: @value", x_range=(-1, 1))
# Добавление круговой диаграммы
p.annular_wedge(x=0, y=1, inner_radius=0.3, outer_radius=0.7,
start_angle=cumsum('angle', include_zero=True), end_angle=cumsum('angle'),
line_color="white", fill_color='color', legend_field='category', source=data)
# Отображение графика
output_file('круговая_диаграмма.html')
show(p)
В этом примере мы генерируем случайные данные и создаем гистограмму с помощью метода quad
. Мы указываем верхние и нижние границы для каждого интервала данных и задаем цвет заливки столбцов. Таким образом, мы получаем визуализацию распределения данных.
Взаимодействие с графиками
Добавление интерактивности с помощью инструментов Bokeh
Bokeh предоставляет множество встроенных инструментов для взаимодействия с графиками. Эти инструменты позволяют пользователям масштабировать, панорамировать, выделять и анализировать данные на графиках.
Чтобы добавить инструменты взаимодействия к графику, мы можем использовать метод add_tools
объекта figure
. Рассмотрим пример добавления инструментов масштабирования и панорамирования:
from bokeh.plotting import figure, output_file, show
# Данные
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]
# Создание графической фигуры с инструментами
p = figure(title='Интерактивный график', x_axis_label='X-ось', y_axis_label='Y-ось',
tools='pan,box_zoom,reset,save')
# Добавление линии на график
p.line(x, y, legend_label='Линия', line_width=2)
# Отображение графика
output_file('интерактивный_график.html')
show(p)
Здесь мы используем строку 'pan,box_zoom,reset,save'
в аргументе tools
, чтобы добавить инструменты панорамирования, масштабирования прямоугольником, сброса масштаба и сохранения графика.
Создание всплывающих подсказок для точек данных
Всплывающие подсказки - это мощный способ предоставить дополнительную информацию о точках данных на графике, когда пользователь наводит на них курсор. Bokeh позволяет легко создавать и настраивать такие подсказки.
Для добавления всплывающих подсказок мы можем использовать инструмент HoverTool
. Давайте рассмотрим пример:
from bokeh.plotting import figure, output_file, show
from bokeh.models import HoverTool
# Данные
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]
# Создание графической фигуры с всплывающей подсказкой
p = figure(title='График с всплывающей подсказкой', x_axis_label='X-ось', y_axis_label='Y-ось',
tools='hover,reset,save')
# Добавление линии на график
line = p.line(x, y, legend_label='Линия', line_width=2)
# Настройка всплывающей подсказки
hover = HoverTool()
hover.tooltips = [('X', '@x'), ('Y', '@y')] # Определение формата подсказки
hover.renderers = [line] # Применение подсказки к конкретному рендереру
p.add_tools(hover)
# Отображение графика
output_file('график_с_подсказкой.html')
show(p)
В этом примере мы создаем объект HoverTool
и настраиваем формат подсказки с использованием tooltips
. Затем мы применяем подсказку к конкретному рендереру (в данном случае, к линии на графике) и добавляем инструмент hover
к графической фигуре.
Применение масштабирования и панорамирования для удобства анализа
Интерактивность Bokeh также включает в себя возможности масштабирования и панорамирования. Пользователи могут масштабировать графики для более детального анализа или панорамировать по графику для навигации по большим данным.
Как мы уже видели, инструменты масштабирования и панорамирования можно добавить к графику, указав соответствующие инструменты в аргументе tools
метода figure
. Например:
Комплексные графические решения
Создание множественных графиков с использованием layout функций
Часто для анализа данных требуется объединение нескольких графиков на одной странице для сравнения, контраста или агрегации информации. Bokeh предоставляет функциональность для создания множественных графиков с использованием различных layout функций.
Одним из способов создания комплексных множественных графиков является использование функции gridplot
. Эта функция позволяет размещать несколько графиков в виде сетки. Рассмотрим пример создания сетки из двух графиков:
from bokeh.plotting import figure, gridplot, output_file, show
# Данные
x = [1, 2, 3, 4, 5]
y1 = [6, 7, 2, 4, 5]
y2 = [3, 8, 5, 9, 2]
# Создание графиков
p1 = figure(title='График 1', x_axis_label='X-ось', y_axis_label='Y-ось')
p1.line(x, y1, legend_label='Линия 1', line_width=2)
p2 = figure(title='График 2', x_axis_label='X-ось', y_axis_label='Y-ось')
p2.circle(x, y2, legend_label='Точки', size=10)
# Создание сетки из графиков
grid = gridplot([[p1, p2]])
# Отображение сетки
output_file('сетка_графиков.html')
show(grid)
В этом примере мы создаем два графика p1
и p2
, а затем объединяем их в сетку с помощью gridplot
. Сетка графиков позволяет нам отобразить несколько графиков на одной странице для сравнения результатов.
Составление дашбордов для комплексного отображения данных
Дашборд - это комплексное отображение данных, объединяющее несколько графиков и элементов управления на одной странице. Bokeh предоставляет возможности для создания дашбордов, которые позволяют пользователям взаимодействовать с данными и получать полную картину.
Чтобы создать дашборд, мы можем использовать функцию layout
и объединить различные графические элементы и инструменты в один контейнер. Рассмотрим пример создания простого дашборда:
from bokeh.layouts import layout
from bokeh.models.widgets import Slider
from bokeh.plotting import figure, curdoc
# Создание графика
p = figure(title='Дашборд', x_axis_label='X-ось', y_axis_label='Y-ось')
line = p.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], line_width=2)
# Создание слайдера
slider = Slider(start=1, end=10, step=1, value=1, title='Множитель')
# Функция для обновления графика на основе значения слайдера
def update(attr, old, new):
line.data_source.data['y'] = [6*slider.value, 7*slider.value,
2*slider.value, 4*slider.value, 5*slider.value]
# Привязка функции обновления к изменению значения слайдера
slider.on_change('value', update)
# Создание комплексного дашборда
dashboard = layout([[p], [slider]])
# Добавление дашборда в текущий документ
curdoc().add_root(dashboard)
Для отображения дашборда потребуется необходимо запустить Bokeh Server, выполнив в командной строке команду: bokeh serve --show dashboard.py
Этот пример создает график и слайдер, который изменяет множитель для значений графика. Мы используем функцию layout
для объединения графика и слайдера в дашборд, который можно включить в веб-приложение.
Интеграция Bokeh графиков в веб-приложения с помощью Bokeh Server
Bokeh предоставляет мощный инструмент для интеграции созданных графиков и дашбордов в веб-приложения с помощью Bokeh Server. Bokeh Server позволяет создавать интерактивные веб-приложения, в которых пользователи могут взаимодействовать с данными в реальном времени.
Для создания веб-приложения с использованием Bokeh Server, вам необходимо создать скрипт Python, который определяет структуру и поведение приложения. Рассмотрим пример создания простого веб-приложения:
from bokeh.layouts import layout
from bokeh.models.widgets import Slider
from bokeh.plotting import figure, curdoc
from bokeh.server.server import Server
# Создание графика
p = figure(title='Веб-приложение', x_axis_label='X-ось', y_axis_label='Y-ось')
line = p.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], line_width=2)
# Создание слайдера
slider = Slider(start=1, end=10, step=1, value=1, title='Множитель')
# Функция для обновления графика на основе значения слайдера
def update(attr, old, new):
line.data_source.data['y'] = [6*slider.value, 7*slider.value, 2*slider.value, 4*slider.value, 5*slider.value]
# Привязка функции обновления к изменению значения слайдера
slider.on_change('value', update)
# Создание комплексного дашборда
dashboard = layout([[p], [slider]])
# Добавление дашборда в текущий документ
curdoc().add_root(dashboard)
# Запуск Bokeh Server
server = Server({'/': curdoc()}, num_procs=1)
server.start()
В этом примере мы создаем график и слайдер, также как и в предыдущем примере. Затем мы используем curdoc()
для добавления дашборда в текущий документ. Но важное изменение заключается в создании и запуске Bokeh Server с помощью Server()
. Это позволяет создать веб-приложение, доступное через веб-браузер.
Работа с географическими данными
Для добавления географических элементов на карту, мы можем использовать специальные функции и инструменты Bokeh:
from bokeh.plotting import figure, output_file, show
from bokeh.tile_providers import get_provider
# Данные
latitudes = [40.71, 34.05, 51.51]
longitudes = [-74.01, -118.24, -0.13]
# Создание графической фигуры с тайловым фоном
tile_provider = get_provider('CARTODBPOSITRON')
p = figure(x_range=(-2000000, 6000000), y_range=(-1000000, 7000000),
x_axis_type='mercator', y_axis_type='mercator', title='Маркеры на карте')
p.add_tile(tile_provider)
# Добавление маркеров на карту
p.circle(x=longitudes, y=latitudes, size=10, color='red')
# Отображение карты с маркерами
output_file('карта_с_маркерами.html')
show(p)
В этом примере мы используем функцию get_provider
для получения тайлового фона карты. Затем мы создаем графическую фигуру p
с этим фоном и добавляем маркеры с помощью функции circle
.
Заключение
Bokeh становится незаменимым инструментом для профессионалов, желающих визуализировать и анализировать данные в удобной, наглядной и интерактивной форме. Разнообразие возможностей Bokeh представляет нам средства для создания высококачественных графических решений, углубляющих наше понимание данных и помогающих в принятии информированных решений.
Материал подготовлен в преддверии старта онлайн-курса «Системный аналитик. Advanced».