Изучение библиотеки Python с низким кодом для проектов по науке о данных.

Оглавление

Зачем использовать информационные панели?

Могу ли я просто использовать Jupyter Notebook и Altair? Что ж, я тоже так делал, пока мне не понадобилось переключаться между множеством разных параметров графика. Я мог бы либо:

  1. Измените эти параметры и повторно запустите ячейку, чтобы увидеть обновленный график; или
  2. Создавайте все графики немедленно, но в конечном итоге вам придется прокручивать длинный список графиков.

Кроме того, в моем случае код в записной книжке просто загрязнял то, что я действительно хотел видеть — графики и метрики, которые меня интересовали.

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

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

Создание информационных панелей с использованием графического интерфейса Taipy

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

Установите Тайпы с Пипом.

pip install taipy

Taipy состоит из двух основных компонентов:

  1. Taipy Core, фреймворк для эффективного планирования задач и управления сценариями; и
  2. Графический интерфейс Taipy, компонент внешнего интерфейса и предмет этой статьи.

Хотя разработчики Taipy выступают за синергию совместного использования Taipy Core и Taipy GUI, меня в первую очередь интересовало создание информационной панели, поэтому я сосредоточился исключительно на Taipy GUI.

Совершенно не зная языков интерфейса (HTML, CSS и т. д.), я смог создать полнофункциональное веб-приложение.

Taipy GUI — простой пример

Чтобы продемонстрировать простоту и элегантность Taipy, давайте взглянем на следующий фрагмент кода:

Всего за несколько строк интуитивно понятного кода Taipy создал веб-страницу и обслуживает ее для нас через веб-сервер, работающий на локальном компьютере. Тайпи также открыл наш браузер по умолчанию и перешел к localhost:5000, где теперь мы видим следующее:

Содержимое графического интерфейса хранится в переменной md, многострочной строке. Текст отформатирован с помощью Markdown, как вы можете узнать по знакомому синтаксису, используемому для заголовка, полужирного текста и текста, выделенного курсивом в приведенном выше примере.

Интерполяция переменной website была выполнена с использованием синтаксиса <|…|>, указанного в Taipy — повторяющаяся конструкция как часть расширенного Markdown графического интерфейса Taipy, которая будет объяснена далее в следующем разделе.

Изучение пингвинов

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

  • Селекторы
  • Кнопки
  • Графики
  • Столы
  • Всплывающие диалоговые окна

Окончательная панель инструментов будет выглядеть так:

Вы можете найти полный код панели управления в конце этой статьи.

1. Загрузите набор данных

Начнем с загрузки DataFrame из репозитория palmerpenguins GitHub. В следующей таблице показаны сохраненные данные, столбцы которых говорят сами за себя:

2. Визуальные элементы

Визуальные элементы, такие как кнопки, селекторы и диаграммы, создаются в Taipy путем введения нового синтаксиса в Markdown. Подстроки с шаблоном <|…|…|> (угловые скобки с свойствами, окаймленные вертикальными чертами) в строке, переданной объекту taipy.gui.Gui, разбираются на различные типы визуальных элементов.

3. Селектор

Начнем с создания селектора видов пингвинов на левой панели панели управления.

Напоминаем, что графический интерфейс Taipy анализирует строку как Markdown, поэтому ### просто определяет заголовок уровня 3. Однако более интересной частью является определение селектора Taipy.

Эта конструкция состоит из 5 компонентов (окаймленных трубами). Вот что они делают:

  • {species} : переменная, содержащая начальное значение селектора — в данном случае «Адели».
  • селектор : имя визуального элемента Taipy.
  • lov={target_names} : список значений (lov), из которых можно выбрать виды.
  • dropdown=True : указывает, что мы хотим, чтобы селектор использовал раскрывающееся меню.
  • width=100% : устанавливает ширину селектора на полный размер его родительского контейнера.

Дополнительную информацию см. в документации Taipy selectors.

4. Индикатор

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

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

Обратите внимание, что свойство «значение» отделено от первого компонента. Первый компонент (метко названный «отображение») определяет отображаемую метку, тогда как свойство «значение» определяет ее положение в числовой строке. Например, код <|{“Fail”}|indicator|value=20|max=100|> сгенерирует следующий индикатор:

Обратитесь к документации Индикаторы Тайпи для получения дополнительной информации.

5. Диаграмма

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

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

Вот код для нашей диаграммы:

И получившийся график:

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

Помещение таких свойств, как «высота» и «ширина» в chart_properties словарь, а затем передача их в «свойства» в конструкции визуального элемента Taipy — это более чистый способ сделать это.

<|{df}|chart|…|height=35vh|width=40vw|…|>

что привело бы к очень длинной очереди.

Для получения дополнительной информации см. документацию Таблица Тайпи.

6. Макет

Создать панель слева очень просто. Элемент layout можно использовать для создания столбцов. Помните, что в нашем примере мы создали три столбца: один для левой панели и два для диаграмм.

Основной синтаксис для создания макета следующий:

Здесь я создал макет с двумя столбцами с соотношением размеров 1:6. Обратите внимание, что раздел содержимого был заключен в <| и |> на новых строках. На тайпи это называется частью. Нам это было нужно для раздела контента, потому что макет предполагает наличие двух столбцов — один будет отображаться слева, а другой — справа. Отдельный текст для левой панели помещается в первый столбец, а весь блок part помещается во второй столбец.

При желании часть также может быть определена, начиная с <|part.start|> в строке и заканчивая <|part.end|> в другой строке. Любые линии между начальной и конечной конструкциями будут принадлежать части. Мы будем использовать этот немного более подробный синтаксис в окончательном коде, так как он более удобочитаем.

Запуск скрипта выше дает нам это:

Обратитесь к документации Taipy blocks для получения дополнительной информации о макетах и ​​деталях.

7. Кнопка, диалоговое окно и таблица

Последняя функция, которую мы добавим на панель инструментов, — это таблица для отображения penguin_df DataFrame. Более того, мы поместим эту таблицу на страницу диалогового окна, которая будет отображаться, когда мы нажимаем кнопку.

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

Помимо переменной penguin_df, которая представляет собой DataFrame, который мы импортировали ранее, мы используем два других имени для создания этого раздела:

  • show_table_dialog : логическое значение, определяющее, отображается ли диалоговое окно или скрыто; и
  • toggle_table_dialog : функция, которая переключает переменную приложения Taipy GUI State для переменной show_table_dialog.

Но что это за состояние? По сути, каждая переменная, которую мы включили в наше приложение Taipy, на самом деле копируется в объект taipy.gui.State. Другими словами, они существуют в памяти отдельно от исходных переменных, которые мы определили в локальном пространстве имен. Открытие двух разных вкладок этого приложения Taipy в веб-браузере фактически создает два разных экземпляра State — это означает, что их можно использовать независимо, поскольку они имеют отдельное состояние.

Возвращаясь к нашему коду, объявленная нами функция toggle_table_dialog получает один параметр, который мы назвали state. В нашем Markdown и кнопки, и диалоговые конструкции определяют свойство on_action, которому мы присвоили наш toggle_table_dialog, также известный как функция обратного вызова. Теперь всякий раз, когда вы взаимодействуете с кнопкой или диалоговым окном (в последнем случае щелкайте элементы управления «x» или «Отмена»), вызывается функция обратного вызова toggle_table_dialog, которая переключает переменную состояния show_table_dialog.

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

8. Функция глобального обратного вызова

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

В этом разделе мы будем использовать глобальную функцию обратного вызова для изменения переменной состояния df приложения. Напомним, что penguin_df — это полный импортированный набор данных, а df — это подмножество, основанное на выбранных видах пингвинов.

Давайте определим on_change, нашу глобальную функцию обратного вызова:

Эта функция принимает 3 параметра:

  • состояние : объект taipy.gui.State;
  • var_name : имя переменной приложения, которая была изменена; и
  • var_value : значение переменной приложения, которое было изменено.

Другими словами, из-за нашего оператора print, если бы мы изменили вид пингвинов с «Adelie» на «Gentoo», мы увидели бы следующий текст, напечатанный в нашем терминале:

species <class 'str'> Gentoo

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

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

9. Собираем все вместе

Собрав воедино все компоненты, которые мы построили в предыдущих разделах, мы получим простую, но полную панель инструментов, которую мы видели в начале этой статьи:

Как упоминалось ранее, обратите внимание на (необязательное) явное назначение глобальной функции обратного вызова, которую мы определили, назначив ее члену on_change объекта Gui. В этом нет строгой необходимости, поскольку Taipy будет использовать функцию с конкретным именем on_change в локальном пространстве имен, но в противном случае потребовалось бы явное назначение.

Попробуйте установить Taipy на свой компьютер и запустить этот скрипт! Вы будете запускать ту же панель инструментов на своем локальном компьютере. Ознакомьтесь с документацией Taipy control и попробуйте добавить ползунки или переключатели на панель инструментов, которые так же просты (или еще проще!) в использовании.

Последние мысли

До того, как я открыл для себя Taipy, моей любимой библиотекой информационных панелей в Python была Streamlit — признанная библиотека, которую я также обнаружил очень простой в использовании. Хотя мой опыт работы с простыми макетами и прототипами был приятным, разработка более крупного приложения с несколькими страницами и управлением состоянием была довольно неприятной, поскольку эти более сложные приложения, похоже, выходят за рамки, в которых преуспевает Streamlit.

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

Попробуйте Тайпи и дайте мне знать, понравилось ли оно вам так же, как и мне!