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

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

Вступление

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

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

Монтаж

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

 $ pip install bokeh 

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

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

 $ conda install bokeh 

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

 $ bokeh --version 

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

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

В этой части мы будем выполнять несколько практических примеров, вызывая функции библиотеки 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 в коде всей этой статьи.

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

Выход:

квадратныйучасток{.ezlazyload .img-responsive}

На изображении выше вы можете видеть инструменты справа (панорамирование, масштабирование рамки, масштабирование колеса, сохранение, сброс, справка - сверху вниз); эти инструменты позволяют вам взаимодействовать с графиком.

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

 from bokeh.plotting import reset_output 
 
 reset_output() 

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

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

 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) 

Выход:

график сравнениялиний{.ezlazyload .img-responsive}

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

 # 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) 

Выход:

дополнительныеинструменты{.ezlazyload .img-responsive}

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

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

Следующее, что мы научимся делать с помощью библиотеки 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) 

Выход:

График подсчета чемпионатовмира{.ezlazyload .img-responsive}

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

 # 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) 

Выход:

улучшенный график подсчета чемпионатовмира{.ezlazyload .img-responsive}

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

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

Хотя помимо документации есть много других замечательных ресурсов, например, « Визуализация данных в Python»{.ebook-link} . Здесь вы получите еще более подробное руководство по Bokeh, а также о 8 других библиотеках визуализации на Python.

Заключение

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

comments powered by Disqus

Содержание