Рубрики
Без рубрики

Библиотека Боке Python для интерактивной визуализации данных

Автор оригинала: Muhammad Junaid Khalid.

Вступление

В этом уроке мы узнаем, как использовать библиотеку Bokeh в Python. Большинство из вас наверняка слышали о matplotlib, numpy, seaborn и т. Д., Поскольку они являются очень популярными библиотеками python для графики и визуализации. Что отличает Bokeh от этих библиотек, так это то, что он позволяет динамическую визуализацию, которая поддерживается современными браузерами (потому что он визуализирует графику с использованием JS и HTML), и, следовательно, может быть использован для веб-приложений с очень высоким уровнем интерактивности.

Bokeh также доступен на языках R и Scala, однако его аналог Python используется чаще, чем другие.

Установка

Самый простой способ установить Broken с помощью Python-это через pip package manager. Если в вашей системе установлен pip, выполните следующую команду, чтобы загрузить и установить Bokeh:

$ pip install bokeh

Примечание : Если вы выберете этот метод установки, вам нужно будет уже установить numpy в вашей системе

Другой способ установки Bokeh-это дистрибутив Anaconda. Просто зайдите в свой терминал или командную строку и выполните эту команду:

$ conda install bokeh

После завершения этого шага выполните следующую команду, чтобы убедиться, что установка прошла успешно:

$ bokeh --version

Если вышеприведенная команда выполняется успешно, то есть версия печатается, то вы можете использовать библиотеку bokeh в своих программах.

Упражнения по кодированию

В этой части мы будем делать некоторые практические примеры, вызывая функции библиотеки Bokeh для создания интерактивных визуализаций. Давайте начнем с попытки сделать квадрат.

Примечание : Комментарии в кодах по всей этой статье очень важны; они не только объясняют код, но и передают другую значимую информацию. Кроме того, может быть “альтернативная” или дополнительная функциональность, которая будет закомментирована, но вы можете попробовать запустить ее, раскомментировав эти строки.

Построение Основных Фигур

Здесь мы указываем координаты x и y для точек, которые будут следовать последовательно при рисовании линии. Функция figure создает экземпляр объекта figure , в котором хранятся конфигурации графика, который вы хотите построить. Здесь мы можем указать как диапазон X, так и диапазон Y графика, который мы задаем от 0 до 4, что охватывает диапазон наших данных. Метод line затем рисует линию между нашими координатами, которая имеет форму квадрата.

from bokeh.io import output_file, output_notebook
from bokeh.plotting import figure, show

x = [1, 3, 3, 1, 1] 
y = [1, 1, 3, 3, 1]

# Display the output in a separate HTML file 
output_file('Square.html', title='Square in Bokeh')
#output_notebook() # Uncomment this line to use iPython notebook

square = figure(title='Square Shape',
             plot_height=300, plot_width=300,
             x_range=(0, 4), y_range=(0, 4))

# Draw a line using our data
square.line(x, y)
#square.circle(x, y) # Uncomment this line to add a circle mark on each coordinate

# Show plot
show(square)

Возможно, вы заметили в коде, что существует альтернатива функции output_file , которая вместо этого показывала бы результат в записной книжке Jupyter с помощью функции output_notebook . Если вы предпочитаете использовать записную книжку, то замените функцию output_file на output_notebook в коде всей этой статьи.

При запуске приведенного выше скрипта вы должны увидеть следующий квадрат, открывающийся в новой вкладке вашего браузера по умолчанию.

Выход:

квадратный участок

На изображении выше вы можете увидеть инструменты с правой стороны (pan, box zoom, wheel zoom, save, reset, help – сверху вниз); эти инструменты позволяют вам взаимодействовать с графиком.

Еще одна важная вещь, которая пригодится, заключается в том, что после каждого вызова функции “show”, если вы создадите новый объект “figure”, последующий вызов функции “show” с новой фигурой, переданной в качестве аргумента, будет генерировать ошибку. Чтобы устранить эту ошибку, выполните следующий код:

from bokeh.plotting import reset_output

reset_output()

Метод reset_output сбрасывает идентификатор фигуры, который в данный момент содержит функция show , чтобы ей можно было назначить новый.

То, что мы сделали до сих пор, довольно просто, давайте теперь попробуем сделать несколько линий/уравнений карты в одном графике. Самый простой пример для этого-попытаться нарисовать линии для уравнений y , y^2 и y^3 . Итак, давайте посмотрим, как мы можем сделать график, чтобы отобразить их все сразу, используя Боке:

from bokeh.plotting import figure, output_file, show

# Declare data for our three lines
x = [1, 2, 3, 4, 5, 6]
x_square = [i**2 for i in x]
x_cube = [i**3 for i in x]

# Declare HTML file as output for when show is called
output_file("Eqs.html")

lines = figure(title='Line Comparisons', x_range=(0, 8), y_range=(0,100),
   x_axis_label='X-Axis', y_axis_label='Y-Axis') 

lines.line(x, x, legend="y = x", line_width=3) # Line for the equation y=x
lines.square(x, x, legend="y = x", size=10) # Add square boxes on each point on the line

lines.line(x, x_square, legend="y = x^2", line_width=3) #Line for the equation y=x^2
lines.circle(x, x_square, legend="y = x^2", size=10) # Add circles to points since it partially overlaps with y=x

lines.line(x, x_cube, legend="y = x^3", line_width=3) # Line for the equation y=x^3
lines.square(x, x_cube, legend="y = x^2", size=10) # Add square boxes on each point of the line

# Display the graph
show(lines)

Выход:

график сравнения линий

Прежде чем мы продолжим рисовать еще несколько графиков, давайте сначала изучим несколько интересных трюков, чтобы сделать вашу графику более интерактивной, а также эстетичной. Для этого мы сначала узнаем о различных инструментах, которые использует библиотека Боке, кроме тех, которые отображаются рядом (либо сверху, либо справа) с графиком. Пояснения будут даны в комментариях к приведенному ниже кодексу:

# Use the same plot data as above
x = [1, 2, 3, 4, 5, 6]
x_square = [i**2 for i in x]
x_cube = [i**3 for i in x]

#now let's make the necessary imports. Note that, in addition to the imports we made in the previous code, we'll be importing a few other things as well, which will be used to add more options in the 'toolset'. 

# Same imports as before
from bokeh.plotting import figure, output_file, show

# New imports to add more interactivity in our figures
# Check out Bokeh's documentation for more tools (these are just two examples)
from bokeh.models import HoverTool, BoxSelectTool

output_file("Eqs.html")

# Add the tools to this list
tool_list = [HoverTool(), BoxSelectTool()]

# Use the tools keyword arg, otherwise the same
lines = figure(title='Line Comparisons', x_range=(0, 8), y_range=(0, 100),
   x_axis_label='X-Axis', y_axis_label='Y-Axis', tools=tool_list)

# The rest of the code below is the same as above
lines.line(x, x, legend="y = x", line_width=3)
lines.square(x, x, legend="y = x", size=10)

lines.line(x, x_square, legend="y = x^2", line_width=3)
lines.circle(x, x_square, legend="y = x^2", size=10)

lines.line(x, x_cube, legend="y = x^3", line_width=3)
lines.square(x, x_cube, legend="y = x^2", size=10)

# Display the graph
show(lines)

Выход:

дополнительные инструменты

На приведенном выше рисунке вы можете увидеть две дополнительные опции, добавленные к ранее доступным инструментам. Теперь вы также можете навести курсор мыши на любую точку данных, и ее детали будут показаны, а также вы можете выбрать определенную группу точек данных, чтобы выделить их.

Обработка категориальных данных с помощью Bokeh

Следующее, что мы научимся делать с помощью библиотеки Боке, – это обрабатывать категориальные данные. Для этого мы сначала попробуем сделать гистограмму. Чтобы сделать это интересным, давайте попробуем создать диаграмму, которая представляет количество чемпионатов мира, выигранных Аргентиной, Бразилией, Испанией и Португалией. Звучит интересно? Давайте закодируем его.

from bokeh.io import show, output_file
from bokeh. plotting import figure

output_file("cups.html")

# List of teams to be included in the chart. Add or
# remove teams (and their World Cups won below) to
# see how it affects the chart
teams = ['Argentina', 'Brazil', 'Spain', 'Portugal']

# Activity: We experimented with the Hover Tool and the
# Box Select tool in the previous example, try to
# include those tools in this graph

# Number of world cups that the team has won
wc_won = [5, 3, 4, 2]

# Setting toolbar_location=None and tools="" essentially
# hides the toolbar from the graph
barchart = figure(x_range=teams, plot_height=250, title="WC Counts",
           toolbar_location=None, tools="")

barchart.vbar(x=teams, top=wc_won, width=0.5)

# Acitivity: Play with the width variable and see what
# happens. In particular, try to set a value above 1 for
# it 

barchart.xgrid.grid_line_color = 'red'
barchart.y_range.start = 0

show(barchart)

Выход:

График подсчета кубков мира

Вы заметили что-то на графике выше? Это довольно просто и не впечатляет, не так ли? Давайте внесем некоторые изменения в вышеприведенный код и сделаем его немного более красочным и эстетичным. У Боке есть много вариантов, чтобы помочь нам в этом. Давайте посмотрим, что мы можем с этим сделать:

# Mostly the same code as above, except with a few
# additions to add more color to our currently dry graph

from bokeh.io import show, output_file
from bokeh.plotting import figure

# New imports below
from bokeh.models import ColumnDataSource

# A was added 4 to the end of Spectral because we have 4
# teams. If you had more or less you would have used that
# number instead
from bokeh.palettes import Spectral4

from bokeh.transform import factor_cmap

output_file("cups.html")

teams = ['Argentina', 'Brazil', 'Spain', 'Portugal']
wc_won = [5, 3, 4, 2]

source = ColumnDataSource(data=dict(teams=teams, wc_won=wc_won, color=Spectral4))

barchart = figure(x_range=teams, y_range=(0,8), plot_height=250, title="World Cups Won",
           toolbar_location=None, tools="")

barchart.vbar(x='teams', top='wc_won', width=0.5, color='color', legend='teams', source=source) 

# Here we change the position of the legend in the graph
# Normally it is displayed as a vertical list on the top
# right. These settings change that to a horizontal list
# instead, and display it at the top center of the graph
barchart.legend.orientation = "horizontal" 
barchart.legend.location = "top_center"

show(barchart)

Выход:

улучшен график подсчета Кубков мира

Очевидно, что новый график выглядит намного лучше, чем раньше, с добавленной интерактивностью.

Прежде чем закончить эту статью, я хотел бы сообщить вам всем, что это был всего лишь проблеск функциональности, которую предлагает Боке. Есть масса других интересных вещей, которые вы можете сделать с ним, и вы должны попробовать их, обратившись к документации Bokeh и следуя доступным примерам.

Хотя, есть много других замечательных ресурсов, кроме документации, например . Здесь вы получите еще более подробное руководство по Боке, а также 8 других библиотек визуализации в Python.

Вывод

Подводя итог, в этом уроке мы узнали о варианте Python библиотеки Bokeh. Мы видели, как загрузить и установить его с помощью дистрибутива pip или anaconda . Мы использовали программы библиотеки Боке для создания интерактивных и динамических визуализаций различных типов, а также с использованием различных типов данных. Мы также узнали, увидев практические примеры, почему Боке необходим, хотя есть и другие более популярные библиотеки визуализации, такие как matplotlib и Seaborn . Короче говоря, Боке очень изобретателен и может делать практически все виды интерактивных визуализаций, которые вам могут понадобиться.