Базовый Streamlit для всех ваших потребностей в области обработки данных

Автор: Chanin Nantasenamat

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

В этой статье ты узнаешь как освоить Streamlit, если только начал свой путь в data science.

Давай же приступим!

1. Введение в курс дела

1.1. Зачем разворачивать модели?

В data science процесс сводится к необходимости преобразовать данные в знание/понимание за счет обобщения этого преображения в рамках CRISP-DM (Cross-Industry Standard Process for Data Mining, прим. переводчика) и OSEMN (Obtain-Scrub-Explore-Model-iNternet, прим. переводчика) методологий. Кроме знания/понимания данных, data sciense проект может быть полезен, если развернуть твои модели машинного обучения как веб-приложение.

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

1.2. Типы разворачивания моделей

Разворачивание модели - это финальная точка data science проекта. Модели могут быть развернуты как:

  • Jupyter notebooks

  • API

  • Веб-приложения

Jupyter notebooks. Обычно такие блокноты используются для создания прототипов data science проектов и они могут быть:

  • Загружены на GitHub

  • "Расшарены" в виде ссылки в Google Colab'е

  • "Расшарены" с помощью Binder'a

API. Также модели могут быть развернуты как REST API с использованием таких инструментов, как FastAPI. Этот подход не включает в себя фронтенд для графического отображения, что не способствует простоте его использования.

Web apps. Это подводит нас к развертыванию моделей машинного обучения как веб-приложений. Традиционный подход состоит в оборачивании API с помощью фреймворков, таких как Django или Flask. Гораздо более простой подход - использовать решение с небольшим количеством кода (далее - "low-code", прим. переводчика), такое как Streamlit, для создания веб-приложения.

Давай исследуем этот раздел чуть подробнее.

1.2. Традиционные веб-фреймворки против "low-code" веб-фреймворков

Хотя Django и Flask могут быть золотым стандартом для разработки веб-приложений, технические барьеры ограничивают их использование в более широком кругу дата-сатанистов аналитиков данных. "low-code" решения, такие как Streamlit, снизили барьер для входа, позволив энтузиастам обработки данных (например, специалистам по обработке данных: аналитикам и любителям) легко преобразовывать модели машинного обучения в интерактивные веб-приложения, которые управляются данными.

Вот схема "low-code" решения:

2. Streamlit 101

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

2.1. Что тебе надо для использования Streamlit

Для использования Streamlit тебе надо:

  • Иметь базовые знания Python'а

  • Написать скрипты для решения специфических задач (типа брать несколько Excel-файлов на вход и комбинировать их в один)

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

Если ты можешь делать все вышеперечисленное, поздравляю! Ты готов погрузиться в мир Streamlit.

2.2. Четыре принципа дизайна Streamlit

Согласно Adrian Treuille, сооснователю и CEO Streamlit'a, Streamlit изначально базировался на трех принципах (2019 PyData LA talk, Medium launch post). Четвертый принцип был представлен при запуске Streamlit Cloud.

  1. Используй скрипты на Python. Построчно создавайте и расширяйте приложения Streamlit.

  2. Рассматривай виджеты как переменные. Виджеты - это элементы ввода, которые позволяют пользователям взаимодействовать с приложениями Streamlit. Они представлены в виде основных текстовых полей ввода, флажков, ползунков и т.д.

  3. Повторно используй данные и вычисления. Исторически данные и вычисления кэшировались с помощью @st.cache декоратора. Это экономит вычислительное время при внесении изменений в приложение. Это может происходить сотни раз, если ты активно редактируешь приложение! В версии 0.89.0 Streamlit запустил два новых примитива (st.experimental_memo и st.experimental_singleton), что позволило значительно повысить скорость работы по сравнению с @st.cache.

  4. Сразу же разворачивай. Просто и мгновенно разворачивай приложения с помощью Streamlet Cloud.

3. Как настроить рабочее пространство Streamlit'а

3.1. Установи Streamlit

Установи библиотеку Streamlit используя pip:

pip install streamlit

3.2. Запрограммируй приложение Streamlit

После этого ты можешь приступить к написанию кода приложения, создав файл скрипта на Python (например, app.py). Внутри этого файла можешь импортировать библиотеку Streamlit с помощью import streamlit as st и использовать любую из доступных функций Streamlit'a.

3.3. Запусти свое Streamlit-приложение

После того, как приложение закодировано, запустить его так же просто, как выполнить streamlet run app.py.
Начинающий пользователь, ты также можешь ввести streamlit hello в командной строке, чтобы увидеть Streamlit в действии.
Вперед, попробуй!

3.4. Создай среду conda

Как я показываю на своем канале YouTube, мне нравится размещать приложения Streamlit в выделенной среде conda. Таким образом, библиотечные зависимости не переплетаются с другими моими библиотеками Python. Я рекомендую тебе сделать то же самое.
Начни с создания приложения EDA. Посмотри, как я создал специальную среду conda в репозитории GitHub в файле readme.md, а потом глянь это обучающее видео о том, как создать приложение EDA с использованием профилирования Pandas, и выполни следующие действия:

Шаг 1. Создай среду conda под названием eda:

conda create -n eda python=3.7.9

Шаг 2. Активируй eda среду:

conda activate eda

Шаг 3. Установи необходимые библиотеки, загрузив файл requirements.txt (он содержит номера версий библиотек):

wget https://raw.githubusercontent.com/dataprofessor/eda-app/main/requirements.txt

Шаг 4. Установи библиотеки с помощью pip:

pip install -r requirements.txt

Шаг 5. Загрузи и распакуй содержимое GitHub репозитория:

https://github.com/dataprofessor/eda-app/archive/main.zip

Шаг 6. Запусти приложение:

streamlit run app.py

Ты увидишь как веб-приложение выскочит в браузере:

Функциональность этого EDA приложения использует возможности pandas-профилирования.

Поздравляю! Теперь ты знаешь как клонировать приложение Streamlit с репозитория на GitHub, настроить специальную среду conda и успешно запустить приложение!

Давай настроим приложение по своему вкусу.

4. "Hello, World!" практика

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

Вот как это сделать в Streamlet за четыре простых шага:

Шаг 1. Запусти свой любимый редактор кода (Atom.io, VS Code и т.д.)

Шаг 2. Создай файл и назови его app.py

Шаг 3. Добавь этот код в файл app.py :

import streamlit as st

st.write('Hello world!')

Шаг 4. Запусти приложение, набрав в командной строке:

streamlit run app.py

5. Сделай свое собственное Streamlit приложение

Я люблю начинать свои Streamlit проекты с кодирования "мозгов" приложения в Google Colab.

На высоком уровне веб-приложение состоит из трех ключевых элементов:

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

  1. “Мозги” приложения. "Мозги" или внутренняя работа приложения - это то, что отличает одно приложение от другого. Оно выполняет функцию преобразования вводимых пользователем данных в выходные.

  2. Вывод. Это может быть что угодно: распечатки фреймов данных, изображения, графики, числовые значения, текст или вставки аудио, видео и твитов.

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

5.1. Элементы Streamlit приложения

  • Контент (текст, изображения, встроенные видео, аудио, твиты и т.д.)

  • Виджеты

  • Дополнения (баблы, code-боксы и т.д.)

5.2. "Мозги" Streamlit приложения

  • Используй компоненты Streamlit'a

  • Используй существующие возможности из необходимых тебе Python библиотек

  • Пиши свои собственные функции

5.3. Верстка приложения

Мне нравится размещать виджеты на левой боковой панели приложения. Используй st.sidebar перед любыми интересующими функциями виджета (вместо st.). Например, чтобы поместить поле ввода текста на боковую панель, используй st.sidebar.text_input("Name") вместо st.text_input("Name") (что приведет к размещению поля ввода текста на главной панели).

6. Разверни свое Streamlit приложение

Теперь, когда ты создал приложение Streamlit, разверни его в облаке для общего доступа. Проще всего это сделать с помощью Streamlit Cloud:

  1. Создай репозиторий файлов приложения на GitHub (app.py, requirements.txt и файлы зависимостей).

  2. В Streamlit Cloud привяжи свою учетную запись на GitHub и выбери репозиторий приложения для развертывания.

Еще ты можешь посмотреть это видео о том, как разворачивать приложения Streamlit.

7. Ресурсы

7.1. Документация

Лучшее место для того чтобы начать - это сайт с документацией Streamlit'a:

  • Библиотека Streamlit. Руководство по созданию приложений Streamlit с различными функциями Streamlit'a (ссылка на API), инструкции по началу работы и шпаргалка.

  • Streamlit Cloud. Все, что тебе нужно знать о том, как развертывать приложения для оптимизации облачных вычислений.

  • База знаний. Постоянно растущая коллекция обучающих статей и часто задаваемых вопросов об использовании Streamlit'a и устранении неполадок.

7.2. Форум с обсуждением

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

7.3. YouTube туториалы

Вот список YouTube каналов про Streamlit:

  • Streamlit. Официальный YouTube-канал Streamlit с официальными анонсами новейших функций.

  • Data Professor. Мой канал на YouTube с видеороликами по data-science и биоинформатике и постоянно пополняющимся плейлистом из 30 видеороликов о Streamlit.

  • JCharisTech. YouTube-канал Джесси с обучающими видеороликами по Python и Streamlit и плейлистом из почти 70 видеороликов по Streamlite.

  • 1littlecoder. YouTube-канал Абдулмаджида с обучающими видеороликами по Python и Streamlit и плейлистом из почти 20 видеороликов по Streamlite.

7.4. Книги

Тайлер Ричардс написал книгу под названием "Getting Started with Streamlit for Data Science: Create and Deploy Streamlit Web Applications from Scratch in Python ". Она знакомит читателей с тем, как они могут создавать интерактивные приложения, управляемые данными.

Было очень интересно читать последнюю главу, когда Тайлер брал интервью у опытных пользователей Streamlit.
Я также взял интервью у Тайлера в часовом подкасте Подкаст по науке о данных с Тайлером Ричардсом, специалистом по данным Facebook. Мы поговорили о его пути в науку о данных, о его опыте работы в качестве специалиста по данным, а также о его мыслях и вдохновении на написание книги о Streamlit.

Закругляемся

Ты изучил основы Streamlit, которые помогут тебе приступить к созданию собственных интерактивных приложений на Python, управляемых данными. Отличная работа! Конечно, всегда есть чему поучиться. Не стесняйся оставлять комментарии (под оригинальным постом, прим. переводчика) или предложения по темам, о которых ты хотел бы узнать больше.

Счастливого Streamlit'инга!

Комментарии (8)


  1. Danplot
    24.06.2024 12:47

    Извините, может я что-то не понял. Легче же на Gradio написать. Скорее всего не понял суть статьи


    1. yanayurksht Автор
      24.06.2024 12:47
      +1

      Обычно пишут что Streamlit шире (например, тут https://medium.com/@sujathamudadla1213/differences-between-streamlit-and-gradio-cf3ef123d0e1)
      Но лично Gradio не юзала, поэтому сама сравнить не могу :(


    1. Ravius
      24.06.2024 12:47
      +2

      На градио легче только если ты его уже знаешь. Streamlit - простой как пробка. Файлик app.py перезапускается на КАЖДЫЙ новый клик, streamlit выполняет файл заново с "новыми аргументами". Проще чем это уже не будет. Для демо за 3 минуты - ничего проще нет.

      Это же кстати самая большая проблема - чуть сложнее код написать...можно...но с костылями.

      Такой подход максимально соотвествует парадигме юпитер ноутбуков - к ноутбуку прикрутили удобные виджеты.

      Набор виджетов - разный, как плюс streamlit выглядит поприятнее.

      Так ещё же от разрабов гугла mesop вышел.


  1. Ravius
    24.06.2024 12:47

    Нейросеть писала? Старый перевод? Зачем ссылки на уже deprecated experimental_memo методы?


    1. yanayurksht Автор
      24.06.2024 12:47

      Перевод относительно старой статьи. Если человек перейдет по ссылке, он увидит плашку deprecated и рекомендации по использованию и сам решит, что с этим делать.

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


  1. nryabykh
    24.06.2024 12:47

    7.3. YouTube туториалы

    Для advanced-уровня в Streamlit могу посоветовать канал https://www.youtube.com/@andfanilo


  1. ToyJoy
    24.06.2024 12:47

    Хорошая статья, у меня несколько вопросов:

    1. А можно ли развернуть streamlit не на streamlit cloud, а на своём сервере?

    2. Как насчёт безопасности данных? Могут ли люди видеть мои данные если я задеплою на streamlit cloud/своём сервере?


    1. svvema
      24.06.2024 12:47

      1. Можно локально.

      2. Пользоваться могут, видеть кажется нет