Лабораторная работа №11 - Интерактивный анализ и визуализация открытых веб-данных с использованием Shiny

Author

Artem A. Golubnichiy

Цель работы

Научиться:

  • получать и обрабатывать данные из открытых API;
  • визуализировать данные с помощью ggplot2 и leaflet;
  • строить полнофункциональные интерактивные веб-приложения с помощью shiny и shinyWidgets.

Задание

Разработайте аналитическое Shiny-приложение, визуализирующее и анализирующее реальные данные, полученные из открытого API (например, OpenWeatherMap, TransportAPI, AirVisual, Data.gov.ru и др.). Приложение должно:

  1. Автоматически загружать данные с использованием httr или jsonlite;
  2. Преобразовывать их во внутренние структуры R, выполняя необходимые преобразования даты, времени и координат;
  3. Визуализировать данные в виде:
  • интерактивной карты с использованием leaflet;
  • графиков (линейных, гистограмм, boxplot и др.) через ggplot2;
  1. Позволять пользователю настраивать отображение данных: выбирать диапазон дат, интересующие параметры, тип графика и т.п.;
  2. Обновлять визуализации в реальном времени при изменении пользовательского ввода.

Структура приложения

Ваше приложение должно состоять минимум из следующих компонентов:

Интерфейс (UI):

•   Панель с выбором параметров (дат, города, показателя);
•   График с возможностью выбора типа визуализации;
•   Интерактивная карта;
•   Таблица с данными (опционально).

Серверная логика:

•   Загрузка и кэширование данных;
•   Предобработка (дата/время, координаты, фильтрация);
•   Реактивная визуализация на основе входных данных пользователя.

Инструкция по выполнению

  1. Регистрация в API:
  • Зарегистрируйтесь на выбранной платформе и получите API key.
  1. Создайте R-скрипт для получения данных:
  • Используйте функции GET() или fromJSON() для загрузки данных;
  • Преобразуйте JSON-структуру в data.frame.
  1. Создайте отдельный модуль для предобработки:
  • Преобразование временных меток в POSIXct;
  • Обработка координат и расчёт дополнительных переменных, если требуется.
  1. Постройте визуализации:
  • ggplot2: графики зависимости параметров от времени;
  • leaflet: отобразите геолокацию и интерактивные маркеры.
  1. Создайте интерфейс приложения (ui.R):
  • Используйте shiny, fluidPage, sidebarLayout, input*() и output*() элементы;
  • При необходимости добавьте shinyWidgets (например, pickerInput, sliderTextInput и др.).
  1. Реализуйте серверную часть (server.R):
  • Реактивные блоки reactive(), observeEvent() и render*();
  • Кэширование или периодическое обновление данных (например, раз в 10 минут).
  1. Объедините в приложение и запустите с помощью shinyApp(ui = …, server = …).

Дополнительное усложнение (по желанию)

  • Реализуйте сохранение выбранных пользователем настроек в файл;
  • Добавьте загрузку данных из нескольких API (например, погода + загрязнение воздуха);
  • Подключите фоновую задачу для обновления данных каждые X минут с использованием invalidateLater().

Отчёт

В отчёте должны быть представлены:

  • Краткое описание выбранного API;
  • Код для получения и предобработки данных;
  • Скриншоты всех визуализаций;
  • Ссылки на Shiny-приложение (если развернуто на shinyapps.io);
  • Ответы на контрольные вопросы.

Контрольные вопросы

  1. Как осуществляется работа с REST API в R?
  2. Как можно визуализировать геопространственные данные с помощью leaflet?
  3. Что такое реактивное программирование в Shiny?
  4. Как происходит обработка даты и времени в R?
  5. Как вы реализовали фильтрацию данных по диапазону дат?