Введение в Streamlit: веб-приложения для работы с данными Python стали проще

автор


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

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

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

Простой пример Streamlit

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

Вот простой пример приложения Streamlit:


import streamlit as st

st.title("Take input from the user")
user_input = st.text_input("Say something:")

if user_input:
    st.write("You said:", user_input)

Вот что произойдет, если вы запустите этот код с помощью Streamlit (используя streamlit run команда):

  1. Появится веб-страница с заголовком Take input from the user.
  2. Текстовое поле с меткой Say something: появляется ниже этого.
  3. Если пользователь вводит что-то в текстовое поле и нажимает Enter, пользовательский ввод отображается под текстовым полем с меткой You said:.

Эти HTML-виджеты и все их поведение генерируются и управляются Streamlit автоматически. Сюда входит состояние приложения — в user_input коробка, например, if Оператор срабатывает только тогда, когда пользователь что-то вводит.

В Streamlit доступно гораздо больше компонентов HTML, чем в примерах, показанных здесь. Такие компоненты, как текст в формате LaTeX, диаграммы боке, вход с камеры и многие другие, доступны изначально.

Более сложный пример Streamlit

Для более сложного приложения Streamlit взгляните на этот пример в документации Streamlit. Это приложение загружает общий набор данных о посадках и высадках Uber на Манхэттене, сгруппированных по часам. Затем он отображает время на гистограмме, а местоположения — на интерактивной карте.

Вся программа занимает всего около 30 строк; он достаточно короткий, чтобы вы могли скопировать его, вставить в файл и запустить самостоятельно. Это также полезно в качестве демонстрации того, как Streamlit делает многие вещи.

Данные в приложениях Streamlit

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

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

Чтобы решить эту проблему, Streamlit предоставляет @st.cache_data декоратор, используемый для обертывания load_data() функция. Кроме того, @st.cache_data кэширует данные при нескольких перезагрузках приложения, поэтому они загружаются только при первом запуске.

Управление состоянием в приложениях Streamlit

Поскольку конструкция Streamlit требует перезагрузки приложения при каждом взаимодействии с пользователем, сохранение постоянного состояния в приложении Streamlit не всегда очевидно. Мы увидели, как данные в текстовом поле обрабатывают состояние между запусками. Но если мы хотим создавать состояние и управлять им отдельно от состояния отдельных элементов управления, нам нужно использовать встроенный объект session_state Streamlit.

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


import streamlit as st

# create the key "sayings" if it doesn't exist
if 'sayings' not in st.session_state:
    st.session_state['sayings'] = []

# for convenience, make a reference
sayings = st.session_state['sayings']

st.title("Take input from the user")
user_input = st.text_input("Say something:")

if sayings:
    # display "sayings" if it has inputs from previous runs
    st.write("You previously said:", sayings)

if user_input:
    # add to "sayings" if we get an input
    sayings.append(user_input)
    st.write("You said:", user_input)

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

Виджеты данных для приложений Streamlit

Мы видели, как элементы на страницах Streamlit могут варьироваться от простых текстовых меток или элементов управления HTML до более сложных элементов, таких как карты, диаграммы, воспроизведение аудио/видео или расширенных взаимодействий, таких как окна чата (например, для взаимодействия с LLM).

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

По умолчанию в Streamlit включена обширная библиотека виджетов общих данных. Другие такие компоненты, созданные и опубликованные сообществом пользователей, доступны посредством простого pip install.

Развертывание приложений Streamlit

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

Более сложные развертывания также следуют той же схеме, что и другие веб-приложения Python — с использованием Docker, Kubernetes или различных распространенных облачных сервисов. Пользователи Snowflake в AWS и Microsoft Azure также могут развертывать приложения Streamlit, поддерживаемые хранилищем данных Snowflake. Наконец, Streamlit предоставляет собственную службу хостинга Community Cloud, хотя это удобно и не обязательно для приложений Streamlit.

Дальше читайте это:

  • Почему компании уходят из облака
  • 5 простых способов запустить LLM локально
  • Программирование с помощью ИИ: советы и лучшие практики от разработчиков
  • Знакомьтесь, Zig: современная альтернатива C
  • Что такое генеративный ИИ? Искусственный интеллект, который создает
  • Лучшее программное обеспечение с открытым исходным кодом 2023 года

Related Posts

Оставить комментарий