Недостающее звено, которое делает 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
- Обратный вызов отслеживает элементы ввода, помеченные идентификаторами HTML.
- Функция обратного вызова запускается.
- Обратный вызов обновляет вывод элементов.
Это действительно так просто!
📚 Если вы хотите узнать больше, я настоятельно рекомендую книгу
Интерактивные информационные панели и приложения для работы с данными с 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 необходимо переориентировать свою стратегию — выйти на нижний рынок и внедрить мультитенантную платформу, чтобы извлечь выгоду из их существующая пользовательская база.