🤯 Введение

Вы когда-нибудь чувствовали разочарование, что после создания отличной модели машинного обучения на ноутбуке Jupyter ничего не происходит?

Разве не было бы здорово иметь возможность развернуть его в Интернете и поделиться им со всеми, чтобы столкнуться с ним в реальной жизни? 🤔

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

Однако развернуть веб-сайт с данными в рабочей среде не всегда легко, поскольку для этого требуются навыки в области обработки данных (облачные технологии, Docker…) и веб-разработки (HTML, CSS, JavaScript…), которыми владеет не каждый.

Я представляю здесь простое решение, позволяющее развернуть ваш проект Data через веб-приложение, имея только знания Python и фреймворка с открытым исходным кодом Streamlit (который я представлю).

Чтобы проиллюстрировать свои замечания конкретным случаем, я решил представить учебное пособие по разработке приложения для поиска поездов в режиме реального времени благодаря API, разработанному SNCF (Французская железнодорожная компания).

Окончательный репозиторий Github веб-приложения доступен здесь.

Идём на урок!

Часть 1. Поиск API

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

Существуют миллионы API, и такие компании, как Reddit, Facebook или Twitter, предлагают доступ к некоторым своим данным через API.

В случае этого руководства мы собираемся использовать API SNCF, который разделяет все поезда, доступные для подписки TGV max (подписка за 79 евро в месяц, предлагаемая молодым людям, которая позволяет бесплатно бронировать неограниченное количество поездов). разрешенных поездов в условиях низкой интенсивности движения).

Вот пример данных, возвращаемых API в формате json:

Для каждого поезда мы находим, в частности, поля:

  • дата, время отправления, время прибытия, пункт отправления, пункт назначения.

Эти 5 полей будут полезны для отображения поездов в соответствии с пользовательским вводом.

Часть 2: Создание среды программирования

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

  1. Создайте свой каталог
mkdir project_data

2. Создайте свою виртуальную среду

python3 -m venv env

3. Активируйте виртуальную среду

source env/bin/activate

4. Обновление пункта

pip install --upgrade pip

5. Создайте файл requirements.txt following с тремя зависимостями, которые мы будем использовать.

6. Установите файл зависимостей

pip install -r requirements.txt

Все хорошо !

Наша среда программирования установлена, мы можем кодировать!

Часть 3. Как запросить данные из API

Мы получаем доступ к API с URL-адреса, который предоставляет нам веб-сайт SNCF. Вот URL, который мы будем использовать:

https://ressources.data.sncf.com/api/records/1.0/search/?dataset=tgvmax&q=&rows=10000&sort=-date&facet=date&facet=origine&facet=destination&facet=od_happy_card

Однако вы заметили, что приведенный выше URL-адрес имеет поля:

  • дата
  • происхождение
  • пункт назначения

Это позволяет передать в параметрах дату, место отправления и место прибытия, чтобы запрашивать только интересующие нас поезда, как в этом примере для всех поездов 06–15–2022 из Парижа в Лион:

https://ressources.data.sncf.com/api/records/1.0/search/?dataset=tgvmax&q=&rows=10000&sort=-date&facet=date&facet=origine&facet=destination&facet=od_happy_card&refine.date=2022%2F06%2F15&refine.origine=PARIS+(intramuros)&refine.destination=LYON+(gares+intramuros)

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

Загрузите и сохраните эти 2 файла в своем основном каталоге.

Часть 4: Кодирование приложения с помощью Streamlit

Прежде всего, вам нужно создать файл app.py, который будет основным файлом нашего приложения.

Начнем с импорта необходимых зависимостей:

Теперь мы можем создать две наши основные функции:

  • Функция param: собирает информацию о пользователе, т. е. место отправления, место прибытия и желаемую дату отправления. Эта информация будет использоваться для запроса API для получения желаемых поездов.
  • Функция request: функция, которая запрашивает API из значений, возвращаемых функцией param. Это позволяет запрашивать только те поезда, которые интересуют пользователя.

Функция параметров:

В этой функции мы вызываем объект st, который ссылается на фреймворк Streamlit. Это позволяет нам определять виджеты, элементы, которые позволяют взаимодействовать с пользователем, такие как: боковая панель, кнопки с одним или несколькими вариантами выбора или возможность выбора даты из календаря. Подробнее в документации.

Функция запроса:

В этой функции мы вызываем API SNCF в соответствии с параметрами, которые определил пользователь, а именно: место отправления, место назначения и дата отправления. Функция запроса возвращает панды DataFrame со всеми поездами, возвращенными API, то есть теми, которые имеют право на подписку TGV Max.

Основная программа

Приведем все в порядок!

Прежде всего, загрузите это изображение png, используемое в макете приложения, и вставьте его в свою папку:

Когда эти две функции добавлены в app.py, все, что вам нужно сделать, это вставить их в файл main.

В основной программе мы используем некоторые готовые функции Streamlit, такие как set_page_config или columns или write или markdown для построения макета нашего приложения.

Вот и все, программа готова, просто выполните app.py со стримлитом:

streamlit run app.py

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

Часть 5: Развертывание сайта

Теперь, когда приложение работает локально, нам нужно развернуть его, чтобы к нему можно было получить доступ с общедоступного URL-адреса.

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

Для получения дополнительной информации вы можете обратиться к документации Streamlit: здесь

Вот шаги, которые необходимо выполнить:

  1. Создайте репозиторий github с:
  • требования.txt
  • app.py
  • departure_city.csv
  • arrival_city.csv
  • поезд.jpg
  • README.md (необязательно)

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

3. Нажмите «Новое приложение» и введите имя вашего каталога, имя вашей ветки и имя вашего файлаapp.py. Затем нажмите «развернуть».

4. Через несколько минут Streamlit развернул ваше приложение, которое теперь доступно через общедоступный URL-адрес, поздравляем! 🎉

Заключение

Теперь мы можем разрабатывать приложения для работы с данными, зная только язык Python и фреймворк Streamlit всего за несколько часов!

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

Некоторые полезные ссылки:

🎯 Если вы хотите пойти дальше:

  • Я создал 5-часовой тренинг по Streamlit, в котором я представляю все шаги по созданию веб-приложения Data / ML. → Ссылка на курс Udemy

Пьер-Луи Данье

PS: Если вам понравился этот урок, пожалуйста, не забудьте проголосовать за него, большое спасибо! 👍