Недостающее звено, которое делает Python полноценным языком

Пролог: чтобы подготовить почву, обратитесь к Краткой истории реактивной веб-разработки, которая была извлечена из этого поста.

💡 Почему Dash такой революционный?

Реактивный внешний интерфейс Dash — это недостающее звено, которое делает Python по-настоящему привлекательным языком с полным стеком. Это позволяет каждому уровню стека приложений (например, переднему и внутреннему интерфейсу) взаимодействовать с одними и теми же данными, используя один и тот же сеанс одного и того же языка программирования, что делает процесс разработки более быстрым, простым и интуитивно понятным. .

Dash революционизирует парадигму уровня разработки приложений Model-View-Controller (MVC):

  • Тесная интеграция контроллера реального времени с представлением.
  • Устранение необходимости в избыточной сериализации данных и чрезмерно формальных API между различными уровнями приложений/языками программирования. Как только данные считываются в память как объект Python, сложные объекты, такие как Pandas DataFrames, могут плавно передаваться по стеку.
  • Включение полнофункциональных приложений для публикации в виде простых пакетов Python.

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

🔩 Как работает Dash?

Dash абстрагирует HTML/CSS, React, Flask и Plotly, объединяя все это в унифицированный и простой в использовании Python API. Он делает настолько хорошую работу, что вы даже не осознаете, что React задействован, если вам об этом не скажут. Нет никакой путаницы со сборкой JS Webpack, с которой нужно было бы иметь дело.

  • @app.callbacks предоставляет Pythonic API для определения методов Controller.
  • app.layout предоставляет Pythonic API для структурирования представлений, которые подключаются к уровню управления. Также существует множество подключаемых компонентов Bootstrap.
from dash import html
import dash_bootstrap_components as dbc
from dash.dependencies import Output, Input
# Layout with a dropdown & placeholder paragraph.
app.layout = html.Div(
    dbc.Select(id='dropdown', options=['hi','bye']),
    html.P(id='target')
)
# Register inputs, outputs, and state (none in this case).
@app.callback(
    Output(component_id='target', component_property='children'),
    Input(component_id='dropdown', component_property='value'),
)
def hello_world(selection:str):
    return selection
  1. Обратный вызов отслеживает элементы ввода, помеченные идентификаторами HTML.
  2. Функция обратного вызова запускается.
  3. Обратный вызов обновляет вывод элементов.

Это действительно так просто!

📚 Если вы хотите узнать больше, я настоятельно рекомендую книгу
Интерактивные информационные панели и приложения для работы с данными с Plotly и Dash
моего нового друга Элиаса Даббаса. Он отлично справляется с тем, чтобы сделать эту широкую структуру доступной по частям.

⚖️ Плюсы и минусы Dash

Плюсы:

  • Чистый Python — никакой ерунды с JS! Если вы не хотите включать свой собственный JS /assets.
  • Отладчик обратного вызова БЕЗУМНЫЙ! Это настолько внушает уверенность, что независимо от того, сколько обратных вызовов вы связываете вместе, эта штука прикроет вашу спину. Он отслеживает ваше приложение в режиме реального времени и пульсирует информацией по мере запуска обратных вызовов.
  • Интеграция Jupyter и Django.
  • Кросс-фильтрация, также известная как взаимодействие с графиками Plotly.
  • Многоязычность для команд, использующих Python/R/Julia.
  • НОВИНКА: многостраничные приложения и параметризованные маршруты.

Минусы (незначительные/области для улучшения):

  • За мячом с WASM.
  • К сожалению, интеграция с JupyterLab непригодна. Многие аналитические платформы обслуживают JupyterLab, поэтому, если бы эта интеграция была надежной, Dash мог бы стать предпочтительным фреймворком приложений/расширений для Jupyter.
  • Компонент DataTable разочаровывает фреймворк, который должен быть посвящен приложениям данных. Это не просто ни в использовании, ни в стиле. Я только что начал использовать таблицы Bootstrap. [ОБНОВЛЕНИЕ: см. новый компонент AG Grid]
  • Мне действительно нужен способ передавать аргументы в app во время инициализации, а не просто полагаться на глобальные переменные в файле .py.
  • Создавалось впечатление, что обратные вызовы преобразовывали все входные данные в строки. Нельзя использовать типы bool и int. Вид побеждает всю нулевую вещь JS, если вам нужно повторно сериализовать ваши данные.
  • Хотелось бы, чтобы была возможность обновить все приложение с помощью Interval без необходимости кропотливо управлять State каждым обратным вызовом.
  • Большая часть документации посвящена запуску службы Dash из необработанного файла .py, но на самом деле ее можно запустить и как подмодуль, например python -m aiqc.ui.app.

📬 Впереди: возможности распространения

В мире SaaS преимущество первопроходца — это, как правило, все. Вот что делает успех Streamlit таким удивительным. Всего несколько недель назад Snowflake приобрела Streamlit за 800 миллионов долларов 💸. Казалось, что Streamlit появился из ниоткуда в одночасье. Не обижайтесь на них, но это было так неожиданно, что я просто предположил, что они либо купили свои лайки, либо вложили все свои первые раунды сбора средств в кампании в социальных сетях, чтобы поднять свои звезды GitHub.

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

С одной стороны, Streamlit имеет бесплатный уровень, доступный уровень для команд и продвигает компоненты, разработанные сообществом. С другой стороны, какова стратегия Plotly? Они только договариваются о корпоративных контрактах, и вам нужно самостоятельно размещать Dash Enterprise, потому что у них нет хостинговых предложений. У Plotly такая огромная пользовательская база, но они не платят за ее монетизацию. Для меня абсурдно, что компания с такими популярными корнями с открытым исходным кодом не использует подход с широкой воронкой. Они не реализуют свой потенциал.

Платформы (также известные как двусторонние торговые площадки) ведут к экспоненциальному росту, потому что:

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

🤔 Забегая вперед: low-code — правильный ход?

💸 Большие оценки с низким кодом

С такими компаниями, как UiPath оценивается в 35 миллиардов долларов и GrandView прогнозирует, что к 2027 году рынок low-code будет стоить 87 миллиардов долларов — я понимаю искушение Plotly сосредоточиться на low-code. Легко предположить, что кто-то выиграет в сфере "приложений с низким кодом для анализа данных". И если вы посмотрите на то, что Plotly делал в прошлом, то это кажется естественным прогрессом:

  • Библиотека Plotly → Интерфейс создателя диаграмм
  • Библиотека Dash → Пользовательский интерфейс Dashboard Maker.

Из зала заседаний это кажется отличным ходом, но, как говорит Аристотель, «Все подвергайте сомнению».

📊 О чем говорят данные?

Мне выпала честь провести опрос JupyterLab 2021. Мы тщательно опросили более 1100 специалистов по данным об их вариантах использования и точках рисования. Визуализация была одним из основных направлений:

[Диаграмма 7e1]Показывает, что специалисты по данным часто создают диаграммы. Однако [Диаграмма 7e] показывает, что им не нужна помощь в создании диаграмм (посмотрите на количество«Нет»).

На самом деле, когда был изучен вопрос "отсутствие встроенного пользовательского интерфейса для создания диаграмм", его настолько не существовало, что он занял 30-е место из 33 протестированных. области (с четвертой по последнюю). Вы бы поставили будущее своей компании на 30-ю лучшую идею?

[Диаграмма 12]показывает, что Plotly является основным предпочтительным инструментом панели мониторинга.

Теперь давайте рассмотрим выборку респондентов, которые сказали, что используют Dash-Plotly для создания сводок. Если мы посмотрим на болевые точки их визуализации, то увидим, что: [Диаграмма слева]интерфейсы с низким кодом значительно менее важны по сравнению с… [Диаграмма справа] просто место дляразмещенияинформационных панелей; подумайте о маленькой синей кнопке RStudio Server.

Опять же, это указывает на платформенный подход, при котором сообщество может делиться приложениями Dash. Это важно для Plotly, потому что компания RStudio, создатель информационных панелей R Shiny, перепозиционировала себя как Posit, чтобы использовать Python (см. мой блог RStudio Re-Posit-ions for Success).

🤷 Мнение: высокоуровневые API-интерфейсы Plotly уже написаны с низким кодом.

Может быть, специалистам по данным не понравится конструировать и стилизовать свой собственный HTML/CSS, поэтому Dash с низким кодом станет большим хитом? Или люди будут начинать с шаблонов с низким кодом, а затем перейдут к редактированию базового кода. Я предполагаю, что low-code может выбить много простых вариантов использования.

Однако после создания приложения Dash с цепочками обратных вызовов и периодическим обновлением состояния low-code кажется наивным. Кроме того, реальная ценность Dash заключается в обратных вызовах. Разве вам не придется самостоятельно писать обратные вызовы даже при низком коде? Так в чем смысл? Это только для макетов или рекламы?

Я никогда не встречал никого, кто на самом деле использует эти пользовательские интерфейсы создателя диаграмм Plotly, так почему мы должны ожидать, что люди будут использовать полноценный пользовательский интерфейс создателя приложений? Я уверен, что у Plotly есть некоторая функция перетаскивания в пользовательском интерфейсе, похожем на холст, которая выглядит гладко в демонстрациях корпоративных продаж. Тем не менее, как разработчик продукта, когда я думаю о том, что from dash import html встречается с low-code, я не могу не думать о вечном стремлении Webflow автоматизировать создание веб-страниц с 2013 года.

Другие сомнения: если кода нет, то в чем разница между low-code продуктами Dash и другими low-code продуктами конкурентов — они все одинаковы для того, кто не умеет кодировать? Если вы не можете использовать высокоуровневый API, сможете ли вы вообще создать стоящее приложение для работы с данными? Какие преимущества low-code действительно предлагает бизнес-пользователям по сравнению со сводными таблицами в MSFT Excel, Google Sheets, Tableau, PowerBI?

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

Так что, возможно, Plotly сильно вырастет в цене благодаря использованию low-code, но я думаю, что сам продукт будет пылиться.

Когда у Dash есть целый мир пользователей Python+R+Julia, умеющих кодировать, почему он стремится к low-code? Стримлиту это не нужно.

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