Taipy: создание полнофункциональных приложений для работы с данными

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

Сооснователи Taipy  —  Винсент Госселин и Альберт Антуан  —  обладают большим опытом работы в ведущих компаниях, выпускающих программное обеспечение. Они сосредоточились на решении трех ключевых задач:

  1. Изолированная работа специалистов, связанных с обработкой данных.
  2. Нехватка Python-инструментов для разработки как фронтенда, так и бэкенда.
  3. Работа над приложениями Data Science, которым не уделяется достаточно внимания. 

Следующее видео даст представление о том, что такое Taipy.

Taipy и Streamlit

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

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

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

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

Библиотеке Streamlit не хватает встроенной поддержки/оптимизации для работы с большими объемами данных. Независимо от размера данных, каждое приложение Streamlit собирается/компилируется одинаково. Taipy, обладая такими возможностями, как пагинация таблиц, класс Decimator для диаграмм и асинхронное выполнение, превосходит Streamlit в сфере поддержки больших данных и тяжелых процессов обработки.

Концепция Taipy Core

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

Taipy GUI

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

Источник

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

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

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

Taipy поддерживает два формата шаблонов, обрабатываемых классами Markdown и Html, для описания содержимого страниц. Основная идея заключается в том, чтобы создавать страницы по мере необходимости, присваивать им имена для удобства доступа и передавать их экземпляру GUI в приложении.

Метод run() GUI запускает веб-сервер, позволяя клиентам подключаться и направлять запросы к страницам. Затем Taipy преобразует созданную страницу в HTML-контент, который отправляется обратно клиенту, позволяя пользователям видеть интерфейс приложения и взаимодействовать с ним.

Data node (узел данных)

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

Источник

Узел данных может ссылаться на различные типы данных:

  • Текст.
  • Числовые значения.
  • Списки, кортежи, наборы или словари параметров.
  • Пользовательские объекты Python (например, датафрейм или класс данных).
  • Данные из файлов, таких как JSON, CSV, Pickle и Parquet.
  • Данные из одной или нескольких таблиц базы данных
  • Любые другие формы данных.

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

Task (задача)

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

Источник

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

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

Характеристики задачи, включая узлы входных данных, узлы выходных данных и функцию Python, задаются конфигурацией задачи (TaskConfig). Эта конфигурация должна быть указана при создании новой задачи.

Job (задание)

Такие концептуальные сущности, как Tasks (задачи), Sequences (последовательности) и Scenarios (сценарии), отправляются на выполнение. Когда сценарий отправлен, он инициирует отправку всех содержащихся в нем задач. Аналогично, отправка последовательности запускает выполнение всех задач в рамках этой последовательности.

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

Scenario (сценарий)

Сценарий в Taipy представляет собой бизнес-задачу с определенными данными и параметрами.

Источник

Сценарии  —  мощный инструмент для создания различных версий бизнес-задачи, основанных на предположениях. Это особенно полезно для анализа типа “что-если” в процессе принятия решений, позволяя пользователям генерировать, сохранять, редактировать и запускать несколько сценариев с различными параметрами в рамках одного приложения.

Каждый сценарий состоит из DAG (Directed Acyclic Graph  —  направленный ациклический граф), который может быть отправлен на выполнение. Этот DAG представляет собой набор задач, объединяющих узлы данных, и его можно разделить на более мелкие графы для выполнения путем определения последовательностей. Последовательность  —  это подмножество связанных задач из набора задач сценария, образующее меньший исполняемый DAG. Его можно представить отдельно. Кроме того, сценарий иногда включает в себя дополнительные узлы данных, не входящие в DAG-сценарий и представляющие дополнительные данные, связанные со сценарием. Однако при выполнении сценария эти дополнительные узлы данных не вычисляются.

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

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

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

Cycle (цикл)

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

Источник

Вот примеры таких задач:

  • Еженедельное прогнозирование данных о продажах для магазина X.
  • Ежемесячное мастер-планирование для цепочки поставок компании A.

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

  • Frequency.DAILY (ежедневно);
  • Frequency.WEEKLY (еженедельно);
  • Frequency.MONTHLY (ежемесячно);
  • Frequency.QUARTERLY (ежеквартально);
  • Frequency.YEARLY (ежегодно).

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

Scope (область видимости)

Источник

Область видимости узла данных определяется перечислением со следующими значениями:

  • Scope.SCENARIO (значение по умолчанию);
  • Scope.CYCLE;
  • Scope.GLOBAL.

Каждый узел данных имеет scope (область видимости)  —  атрибут, определяемый DataNodeConfig, указывающий на видимость узла данных в графе сущностей. В этом графе каждый узел является частью одного или нескольких родительских узлов. Узел данных связан как минимум с одним сценарием в рамках одного цикла.

Проще говоря:

  • Узел данных со Scope.SCENARIO может быть использован несколькими задачами и последовательностями в рамках одного сценария, но не может являться частью задач или последовательностей из другого сценария.
  • Узел данных со Scope.CYCLE может быть общим для всех задач, последовательностей и сценариев в рамках одного цикла, но не может являться общим для задач, последовательностей или сценариев из другого цикла.
  • Узел данных со Scope.GLOBAL может быть общим для любой задачи, последовательности и сценария независимо от их циклов.

Taipy Studio

Taipy Studio, расширение для Visual Studio Code, значительно упрощает разработку Taipy-приложений, фокусируясь на двух ключевых областях.

Создание конфигураций:

  • Для функциональных возможностей Taipy Core создание конфигурации Taipy чрезвычайно важно. Оно включает в себя объявление конфигураций DataNode, Task и т. д.
  • Выполнение приложения часто начинается с создания сущностей, зависящих от этих элементов конфигурации.
  • В Taipy Studio есть графический редактор, позволяющий создавать и настраивать элементы, хранящиеся в файлах TOML. Эти файлы загружаются приложением Taipy во время выполнения.
  • В редакторе показаны последовательности и сценарии в виде графов, а узлы представляют собой DataNodes или Tasks.
  • Более подробную информацию о редактировании конфигурационных файлов Taipy можно найти на странице “Редактирование конфигурационных файлов”.

Определение содержимого страниц Taipy GUI с помощью Markdown:

  • В Taipy GUI используется расширенная реализация синтаксиса Markdown, позволяющая определять визуальные элементы для страниц приложения.
  • Учитывая разнообразие доступных визуальных элементов, ручной ввод может оказаться обременительной задачей. Taipy Studio предоставляет функцию дополнения кода, которая помогает заполнять фрагменты текста определения элементов.
  • Обнаружение опечаток и ошибок в Markdown-тексте  —  непростое занятие. Taipy Studio выявляет такие случаи и сообщает о них в представлении Problems (“Проблемы”), часто предлагая действия по быстрому устранению синтаксических проблем.
Источник

После установки Taipy Studio становится активной при следующих условиях:

  • Текущий проект включает файл с расширением .toml (предполагается, что это конфигурационные файлы Taipy).
  • Текущий проект включает файл с расширением .md (предполагается, что это страницы определения страниц графического интерфейса Taipy).
  • Текущий проект включает файл с расширением .py (исходные файлы Python, которые могут содержать строки, определяющие страницы графического интерфейса Taipy).
  • При явном открытии представления Taipy Configs с помощью опции меню “View > Open View…”.

Визуальные элементы пользовательского интерфейса

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

Здесь можно найти полезный плейлист с более подробной информацией.

Controls (элементы управления)

Ниже  —  список доступных элементов управления в Taipy.

Text (текст):

Button (кнопка):

Input (ввод):

Number (число):

Slider (слайдер):

Toggle (тумблер):

Date (дата):

File_download (загрузка файлов):

File_selector (выбор файлов):

Image (изображение):

Indicator (индикатор):

Menu (меню):

Navbar (панель навигации):

Selector (селектор):

Status (статус):

Table (таблица):

Dialog (диалог):

Tree (дерево):

Charts (диаграммы):

Все диаграммы

Blocks (блоки)

Ниже  —  список всех доступных элементов блоков в Taipy.

Part (блок частей):

Expandable (расширяемый блок):

Layout (компоновочный блок):

Pane (окно):

Установка

Установите библиотеку Taipy с помощью pip.

pip install taipy

Пример создания пользовательского интерфейса + управление сценариями и данными

Приведенный ниже пример демонстрирует способность Taipy анализировать CSV-файлы и создавать содержательные презентации. Здесь полностью использованы функциональные возможности Taipy, охватывая разработку как фронтенда, так и бэкенда. Хотя бэкенд в этой демонстрации представляет собой простой конвейер, состоящий из одной задачи, важно отметить, что Taipy предназначена для построения более сложных конвейеров с несколькими задачами. В данном контексте конвейер, называемый в Taipy сценарием, фильтрует данные о фильмах на основе выбранного жанра. Любые изменения в выборе жанра вызывают автоматический запуск конвейера, показывающего диаграмму с семью самыми популярными фильмами в этом жанре.

import taipy as tp
import pandas as pd
from taipy import Config, Scope, Gui

# Сценарий Taipy и управление данными

# Функция фильтрации (задача)
def filter_genre(initial_dataset: pd.DataFrame, selected_genre):
filtered_dataset = initial_dataset[initial_dataset["genres"].str.contains(selected_genre)]
filtered_data = filtered_dataset.nlargest(7, "Popularity %")
return filtered_data

# Загрузка конфигурации, выполненной с помощью Taipy Studio
Config.load("config.toml")
scenario_cfg = Config.scenarios["scenario"]

# Запуск сервиса Taipy Core
tp.Core().run()

# Создание сценария
scenario = tp.create_scenario(scenario_cfg)

# Пользовательский интерфейс Taipy
# Добавим GUI в систему управления сценариями для создания полнофункционального приложения

# Определение обратного вызова - передача сценария с определением жанра
def on_genre_selected(state):
scenario.selected_genre_node.write(state.selected_genre)
tp.submit(scenario)
state.df = scenario.filtered_data.read()

# Получение списка жанров
genres = [
"Action", "Adventure", "Animation", "Children", "Comedy", "Fantasy", "IMAX"
"Romance","Sci-FI", "Western", "Crime", "Mystery", "Drama", "Horror", "Thriller", "Film-Noir","War", "Musical", "Documentary"
]

# Инициализация переменных
df = pd.DataFrame(columns=["Title", "Popularity %"])
selected_genre = "Action"

## Установка первичного значения Action
def on_init(state):
on_genre_selected(state)

# Определение пользовательского интерфейса
my_page = """
# Film recommendation
## Choose your favorite genre
<|{selected_genre}|selector|lov={genres}|on_change=on_genre_selected|dropdown|>
## Here are the top seven picks by popularity
<|{df}|chart|x=Title|y=Popularity %|type=bar|title=Film Popularity|>
"""
Gui(page=my_page).run()
Приложение

Развертывание в Taipy Cloud

Используя Taipy Cloud, можно развернуть Taipy-приложение.

Источник

Почему стоит попробовать Taipy

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

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

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Manoj Das: Taipy: Magical Python Library to Create Simple, Quick & Efficient Way Build a Full-Stack Data App 🧩

Предыдущая статьяПостроение архитектуры данных реального времени с помощью Apache Kafka, Flink и Druid
Следующая статьяСоздание UI-компонентов React на продвинутом уровне