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

На самом деле наука о данных - это общение. Те из нас, кто интересуется этим предметом, тратят свое время на изучение новых численных методов, изучение того, как манипулировать данными, и изучение того, как создавать регрессии, чтобы делать выводы из набора данных.

Но все это ничего не стоит, если вы не можете сообщить результаты.

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

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

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

Мой любимый пакет для построения графиков Python - это боке, и эта статья научит вас всему, что вам нужно знать для создания графиков, готовых к отчету, с использованием инструментов, которые предоставляет боке.

Для тех, кто никогда не использовал Python

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

Существует множество различных способов доступа к Python и его использования, поэтому у вас есть большая свобода экспериментировать и делать свой выбор. Я предпочитаю использовать дистрибутив Python для Anaconda, который поставляется со многими важными пакетами и Spyder IDE.

Вы можете найти бесплатную индивидуальную версию дистрибутива Python для Anaconda по адресу: https://www.anaconda.com/products/individual

Если вы скачаете и установите дистрибутив, у вас будет все необходимое, чтобы следовать этому руководству.

По завершении загрузки и установки Anaconda откройте Spyder IDE, чтобы начать работу.

Первые шаги

Первыми шагами в построении графика с использованием боке являются 1) импорт необходимых нам функций боке и 2) получение набора данных.

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

В этом случае нам нужно начать с операторов импорта. Мы импортируем функции боке, которые позволят нам создавать графики для отчетов. Мы также импортируем numpy, потому что мы хотим использовать его для создания нашего набора данных (в этом руководстве не нужно слишком много узнавать о numpy. Мы будем использовать его для создания некоторых массивов, которые мы можем использовать, и на этом все).

Для импорта этих функций используйте код:

from bokeh.plotting import figure, save, output_file
import numpy as np

Импортированные нами функции боке позволят нам создавать фигуры (рисунок), дадут нам возможность сохранять графики, которые мы создаем (сохранить), и позволим нам указать, где мы сохраняем полученные графики (output_file).

Мы импортировали весь пакет numpy, что дало нам доступ ко всем функциям пакета. Поскольку мы добавили текст «as np», теперь мы можем ссылаться на numpy, набрав «np».

Затем мы можем использовать numpy для создания двух массивов, которые предоставят нам некоторые данные для построения. Мы создадим два массива, представляющих данные x и y на нашем графике. Данные x будут работать от 0 до 10 с шагом 1, а данные y будут работать от 0 до 5 с шагом 0,5.

Эти массивы можно создать с помощью следующего кода:

x = np.arange(0, 10, 1)
y = np.arange(0, 5, 0.5)

Если вы запустите код и изучите вывод, вы заметите, что ни один из списков не включает окончательное значение (10 для x и 5 для y). Это особенность Python, и списки всегда будут вести себя таким образом. Если вы действительно хотите включить окончательные значения, вам необходимо установить верхний предел как желаемое значение плюс один шаг. Поэтому, если вы действительно хотите включить 10 и 5 в эти наборы данных, вам нужно установить верхний предел x равным 11, а верхний предел y равным 5,5.

Создание нашего первого сюжета

Чтобы построить этот новый набор данных, нам сначала нужно создать объект графика. Мы делаем это, вызывая функцию боке «figure» с необходимыми входными данными и присваивая ее переменной.

Имейте в виду, что ни один из входных параметров функции «рисунок» не является действительно необходимым, боке создаст ваш график без них, но ваш график не будет готов для отчета без них. На мой взгляд, действительно необходимые входы:

  • width: определяет ширину изображения в пикселях. Обычно я начинаю график с шириной 800 пикселей и считаю, что это хорошее значение по умолчанию. Однако вы можете использовать разные размеры для разных целей. Если у вас простые участки и вы хотите разместить несколько участков рядом друг с другом, можно сделать участки меньшего размера. Если у вас очень сложный график, на котором отображается много данных, вам может потребоваться увеличить его, чтобы он был удобочитаемым. Это призыв к суждению
  • height: указывает высоту графика в пикселях. Он работает так же, как и ширина. Я использую значение по умолчанию 400 пикселей для высоты, но, как и ширину, при необходимости настраиваю.
  • x_axis_label: определяет метку на оси x графика, сообщая вашему читателю, что представляют собой данные x. Это должен быть очень подробный и конкретный ввод, чтобы читатель мог точно понять, на что он смотрит. Например, если ваши данные x представляют время с момента начала эксперимента, выраженное в минутах, вы должны ввести «Время с начала эксперимента (мин)». И это то, что мы будем использовать в этом примере.
  • y_axis_label: это то же самое, что и подпись оси x, за исключением оси y. Это сообщает вашему читателю, что представляют собой данные y в вашем наборе данных. Например, если ваши данные y представляют собой расстояние, пройденное автомобилем с момента начала эксперимента в километрах, вы должны ввести «Расстояние, пройденное тестовым автомобилем (км)».

В следующем коде показан конкретный синтаксис этого кода.

p1 = figure(width=800, height=400, x_axis_label='Time Since Experiment Start (Minutes)', y_axis_label = 'Distance Driven by Test Car (Kilometers)')

Этот код создает объект графика и присваивает его переменной «p1». Теперь мы можем редактировать график, редактируя переменную p1.

Следующим шагом будет добавление наших данных к графику. Для этого нам нужно создать ряд данных на графике, назначить ему наши данные x и y и предоставить входные данные, необходимые для описания набора данных.

Чтобы добавить серию данных, представляющую наши данные x и y в виде круга, мы можем вызвать функцию «circle» объекта-фигуры. Затем мы можем предоставить необходимые сведения, указав следующие входные данные:

  • x data: этот ввод сообщает bokeh, какой массив описывает значения x вашего набора данных. Это может быть столбец в фрейме данных или отдельный массив. В этом примере у нас есть автономный массив, который мы назвали «x», чтобы он не входил.
  • y data: то же самое, что x data, только описывает значения y набора данных. Мы будем использовать наш автономный массив под названием «y».
  • легенда: это позволяет нам дать название серии данных, которую мы вводим. это дает читателю ценный контекст, особенно если в график включены несколько рядов данных. Например, если мы строим график производительности в гонке, и есть две машины, нам потребуются уникальные записи легенды для обеих, чтобы пользователь мог определить с помощью набора данных, какой автомобиль. Для этого примера мы создадим запись в легенде, обозначив нашу машину как Honda.
  • color: этот ввод устанавливает цвет маркеров, представляющих точки данных. Есть много вариантов. В этом примере мы создадим красные круги, представляющие набор данных.

Следующий код добавит новую серию данных в p1, представляющую наши данные:

p1.circle(x, y, legend='Honda', color = 'red')

После создания сюжета нам нужно указать Python, где сохранить сюжет, а затем попросить его сделать это. Мы устанавливаем место сохранения с помощью функции output_file. Эта функция принимает два входа, один из которых указывает место для сохранения файла, а другой - имя файла. Мы можем сказать программе сохранить файл на рабочем столе и назвать файл, используя следующий код. Обратите внимание, что этот код предполагает, что вы пишете свою программу на ПК с Windows и ваш логин - JSmith. Вам нужно будет изменить "JSmith" в соответствии с вашим логином.

output_file('C:\Users\JSMith\Desktop\FirstPlot.html', title = 'First Plot')

Когда мы сохраняем график, этот код создаст новый файл .html на вашем рабочем столе с именем «FirstPlot». Когда вы откроете файл .html, он будет называться «Первый сюжет».

Мы можем сохранить файл, указав bokeh сохранить график p1 с помощью следующего кода:

save(p1)

При запуске кода будет создан файл .html, указанный выше. Открытие этого файла даст следующие результаты.

В правой части графика вы увидите несколько полезных инструментов. Эти инструменты включают следующие параметры:

  • Панорама: инструмент панорамирования позволяет перемещать график. Если выбран этот параметр, как показано голубой полосой слева от него (показано на рисунке), вы можете щелкнуть левой кнопкой мыши по графику и перетащить указатель мыши. Так вы увидите разные участки сюжета.
  • Масштабирование прямоугольником. Масштабирование прямоугольником дает вам возможность создать на графике прямоугольник, который вы хотите увеличить. Вы выбираете место на графике, щелкаете и перетаскиваете мышь, прежде чем отпустить кнопку, чтобы выбрать часть графика для увеличения.
  • Колесо масштабирования: этот инструмент позволяет выбрать место на графике для масштабирования, наведя на него курсор, а затем увеличивая / уменьшая масштаб с помощью колесика мыши.
  • Сохранить: этот инструмент позволяет сохранить график в виде стандартного файла изображения, позволяя сохранить версию графика с высоким разрешением, готовую для встраивания в отчеты и публикации. Это самый полезный инструмент для этого урока.

Улучшение сюжета

Возможно, вы заметили несколько проблем с этим сюжетом. Некоторые важные вопросы включают:

  • Легенда охватывает последнюю точку данных, скрывая некоторые данные,
  • Шрифты легенды по осям X и Y имеют небольшой размер, что затрудняет их чтение,
  • То же самое и с метками в виде галочки, и
  • То же самое и с легендой.

К счастью, боке предлагает инструменты, необходимые для решения этих проблем.

Легенду исправить проще всего, поэтому мы начнем с нее. Объект figure содержит функцию legend.location, которую мы можем использовать для перемещения легенды. Мы можем установить расположение легенды в правом нижнем углу графика, добавив следующий код в наш раздел создания графика:

p1.legend.location = "bottom_right"

Bokeh также предоставляет функции, необходимые для изменения размера шрифта метки оси. Это можно сделать, добавив еще две строки кода в раздел, создающий сюжет. Следующий код устанавливает для меток осей использование шрифта размером 16 пунктов.

p1.xaxis.axis_label_text_font_size = "16pt"
p1.yaxis.axis_label_text_font_size = "16pt"

И еще две строки кода могут изменить размер шрифта меток на каждой оси. Следующий код устанавливает отметки на каждой оси для использования шрифта размером 14 пунктов.

p1.xaxis.major_label_text_font_size = "14pt"
p1.yaxis.major_label_text_font_size = "14pt"

Следующая строка кода устанавливает размер шрифта легенды равным 16 пунктам.

p1.legend.label_text_font_size = '16pt'

Теперь, когда эти проблемы решены, запуск кода создаст следующий график.

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

Добавление дополнительных рядов данных

График только с одним рядом данных не всегда очень интересен. В нем нет подробного сравнения или рассказа истории. К счастью, боке позволяет очень просто добавлять новые серии данных к одному и тому же графику. Вам просто нужно добавить новую строку кода, добавляя ряд данных, как мы это делали раньше.

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

y2 = np.arange(0, 20, 2)

Затем мы можем добавить этот новый набор данных к графику, добавив одну линию в раздел создания графика.

p1.diamond(x, y2, legend='Ferrari', color = 'blue')

Обратите внимание, что есть четыре изменения от исходного ряда данных к этому. Сначала я изменил данные y, чтобы они ссылались на наш новый y2 вместо исходного y1. Это указывает Python на необходимость ссылки на нашу новую серию данных. Во-вторых, я изменил легенду на «Феррари» вместо «Хонда». Он движется в четыре раза быстрее, так что это казалось безопасным выбором. Я установил синий цвет, чтобы он визуально отличался от исходного набора данных и был легко идентифицирован. Наконец, я заменил маркеры кружков, использованных в первом наборе, на ромбики во втором наборе данных. Это важно, потому что люди часто читают статьи, распечатывая их, а это означает, что они будут читать в черно-белом варианте. Если во всех наборах данных используются круги, люди, читающие печатные, черно-белые копии, не поймут, на что они смотрят.

Одна проблема, о которой вы не знаете (я знаю об этом только потому, что уже запустил код и изучил результаты!), Заключается в том, что добавление данных Ferrari сдвинуло данные Honda еще ниже, и легенда теперь скрывает точку данных. Чтобы решить эту проблему, мы можем переместить легенду в верхний левый угол с помощью следующего кода:

p1.legend.location = "top_left"

Выполнение кода для создания окончательного графика возвращает следующее изображение.

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

Это готовый к отчету сюжет.

Бесстыдная самореклама: Если вам нравится изучать новые советы по программированию на Python, возможно, вам понравится моя книга В 1000 раз быстрее: как автоматизировать анализ лабораторных данных с помощью Python.