Лабораторная работа №11 - Интерактивный анализ и визуализация открытых веб-данных с использованием Shiny
Цель работы
Научиться:
- получать и обрабатывать данные из открытых API;
- визуализировать данные с помощью
ggplot2иleaflet; - строить полнофункциональные интерактивные веб-приложения с помощью
shinyиshinyWidgets.
Задание
Разработайте аналитическое Shiny-приложение, визуализирующее и анализирующее реальные данные, полученные из открытого API (например, OpenWeatherMap, TransportAPI, AirVisual, Data.gov.ru и др.). Приложение должно:
- Автоматически загружать данные с использованием
httrилиjsonlite; - Преобразовывать их во внутренние структуры R, выполняя необходимые преобразования даты, времени и координат;
- Визуализировать данные в виде:
- интерактивной карты с использованием
leaflet; - графиков (линейных, гистограмм, boxplot и др.) через
ggplot2;
- Позволять пользователю настраивать отображение данных: выбирать диапазон дат, интересующие параметры, тип графика и т.п.;
- Обновлять визуализации в реальном времени при изменении пользовательского ввода.
Структура приложения
Ваше приложение должно состоять минимум из следующих компонентов:
Интерфейс (UI):
• Панель с выбором параметров (дат, города, показателя);
• График с возможностью выбора типа визуализации;
• Интерактивная карта;
• Таблица с данными (опционально).
Серверная логика:
• Загрузка и кэширование данных;
• Предобработка (дата/время, координаты, фильтрация);
• Реактивная визуализация на основе входных данных пользователя.
Инструкция по выполнению
- Регистрация в API:
- Зарегистрируйтесь на выбранной платформе и получите API key.
- Создайте R-скрипт для получения данных:
- Используйте функции
GET()илиfromJSON()для загрузки данных; - Преобразуйте JSON-структуру в data.frame.
- Создайте отдельный модуль для предобработки:
- Преобразование временных меток в POSIXct;
- Обработка координат и расчёт дополнительных переменных, если требуется.
- Постройте визуализации:
ggplot2: графики зависимости параметров от времени;leaflet: отобразите геолокацию и интерактивные маркеры.
- Создайте интерфейс приложения (
ui.R):
- Используйте
shiny,fluidPage,sidebarLayout,input*()иoutput*()элементы; - При необходимости добавьте
shinyWidgets(например,pickerInput,sliderTextInputи др.).
- Реализуйте серверную часть (
server.R):
- Реактивные блоки
reactive(),observeEvent()иrender*(); - Кэширование или периодическое обновление данных (например, раз в 10 минут).
- Объедините в приложение и запустите с помощью shinyApp(ui = …, server = …).
Дополнительное усложнение (по желанию)
- Реализуйте сохранение выбранных пользователем настроек в файл;
- Добавьте загрузку данных из нескольких API (например, погода + загрязнение воздуха);
- Подключите фоновую задачу для обновления данных каждые X минут с использованием
invalidateLater().
Отчёт
В отчёте должны быть представлены:
- Краткое описание выбранного API;
- Код для получения и предобработки данных;
- Скриншоты всех визуализаций;
- Ссылки на Shiny-приложение (если развернуто на shinyapps.io);
- Ответы на контрольные вопросы.
Контрольные вопросы
- Как осуществляется работа с REST API в R?
- Как можно визуализировать геопространственные данные с помощью
leaflet? - Что такое реактивное программирование в Shiny?
- Как происходит обработка даты и времени в R?
- Как вы реализовали фильтрацию данных по диапазону дат?