Создавайте красивые приложения на основе данных быстрее, чем когда-либо

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

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

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

Эта проблема

Конвейер машинного обучения / обработки данных выглядит примерно так:

Данные ›Обучение› Модель ›Производство

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

Пример

Адриан Трейль вспоминает, когда он работал в Zoox, и около 80 инженеров по машинному обучению создавали системы для беспилотных автомобилей. Они делали все: планирование, видение, обнаружение пешеходов, весь стек.

Он приводит в пример инструмент, который может потребоваться создать инженерам: приложение для одновременного запуска двух автономных систем и их сравнения. Вероятно, это началось бы как проект для одного инженера, написанный в Jupyter Notebook, скопированный и вставленный в скрипт Python, отправленный на GitHub и построенный с помощью фреймворка, такого как Flask.

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

На этом этапе инженеры по машинному обучению вызовут внутреннюю команду, которая, по сути, является экспертом в создании веб-приложений. Эта команда будет собирать требования к системе, создавать каркасные модели и разрабатывать их в React или Vue с помощью JavaScript, Python, CSS, HTML и т. Д., В конечном итоге создавая потрясающее и хорошо продуманное приложение.

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

Решение

Streamlit - это платформа приложений, которая задает вопрос:

Что, если бы мы могли упростить создание инструментов, как написание скриптов Python?

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

По словам Адриана, приложение Streamlit - это «в основном сценарий данных, который был слегка аннотирован, чтобы сделать его интерактивным приложением».

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

Неужели это так просто?

Да! Проверь это:

Хотите создать ползунок для выбора значения для ввода в модель?

val = st.slider()
# Use val

Вы просто объявляете переменную и устанавливаете ее равной виджету слайдера Streamlit, а затем настраиваете некоторые параметры по своему вкусу. Это отобразит ползунок в вашем приложении и установит значение val в соответствии с тем, что пользователь перемещает. Так же легко создавать кнопки, флажки, радиомодули, поля выбора, поля множественного выбора и многое другое.

Хотите создать скрываемую боковую панель, чтобы можно было расположить некоторые элементы управления и информацию слева?

sidebar = st.sidebar()
with sidebar:
    # Add stuff

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

Хотите добавить заголовки, заголовки и текст?

# Text
st.title()
st.header()
st.write()
# Markdown
st.markdown()
# LaTeX
st.latex()
# Code
st.code()

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

Хотите отображать данные?

st.write(pandas dataframe or chart from supported library)

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

st.line_chart(data)
st.area_chart(data)
st.bar_chart(data)
# Etc.

И если вам нужен больший контроль настройки при использовании поддерживаемой библиотеки черчения:

st.altair_chart(altair chart)
st.plotly_chart(plotly express chart)
# Etc.

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

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

Хорошо, поэтому создавать приложения с помощью Streamlit легко, но как насчет того, чтобы на самом деле сделать их доступными для других?

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

Недостатки

С большой простотой приходит отличный компромисс. Например, если вам нужен очень высокий уровень настройки, этот фреймворк может не подойти.

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

Не пренебрегайте передовыми методами работы с программным обеспечением!

Слишком просто работать над приложением, моргать и иметь файл .py из 500 строк (из которых, вероятно, 5% фактически будут вызовами Streamlit, но 95% будут вашей обработкой данных и моделью. строительство). Это будет нелегко. Разделите свой код на модули и старайтесь всегда следовать принципам DRY - неважно, что это просто сценарий Python, даже Streamlit не может избавить вас от необходимости правильно организовывать код, если у вас средний или большой размер. размер приложения.

Так стоит ли вам его использовать?

Я видел некоторые статьи и сообщения о том, что Streamlit может убить Flask. Это абсурд не потому, что Streamlit недостаточно хорош, а потому, что, если это еще не ясно, у них очень разные варианты использования. Однако это означает, что вам больше не нужны фреймворки, как Flask, для создания приложений определенного типа.

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

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

Загляните в Галерею, чтобы увидеть, что создают люди, и если вы сами создадите что-то действительно крутое, вы сможете разместить это там!

Все, что я действительно должен сказать, это то, чего вы ждете?

Ресурсы