Skip to content

🌍 Streamlit приложение для анализа температурных данных и мониторинга текущей температуры через OpenWeatherMap API

License

Notifications You must be signed in to change notification settings

nikfilonenko/data_analysis_app_weatherAPI

Repository files navigation

About the project data_analysis_app_weatherAPI

app Weather Analysis CI/CD

🌐 Ссылка на развернутое приложение в Streamlit Cloud: Здесь

https://dataanalysisappweatherapi-kjje8rplqtbrfqz3rpzqcu.streamlit.app/


📊 Ноутбук с дополнительными исследованиями: Здесь

app/notebooks/data_analysis.ipynb


Содержание

  1. Описание проекта
  2. Исследование
  3. Streamlit приложение
  4. Развертывание приложения
  5. Демонстрация работы Streamlit приложения

Описание проекта

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

Основные функции:

  1. Анализ исторических данных:

    • Вычисление скользящего среднего и стандартного отклонения.

    • Определение аномалий температуры.

    • Построение долгосрочных трендов.

    • Визуализация временных рядов и сезонных профилей.

  2. Мониторинг текущей температуры:

    • Получение текущей температуры через OpenWeatherMap API.

    • Сравнение текущей температуры с историческими данными для определения аномалий.

  3. Интерактивное приложение:

    • Возможность выбора города из списка.

    • Отображение графиков, статистики и аномалий.

    • Проверка текущей температуры на аномальность.

Исследование

В этом разделе представлены основные этапы исследования, включая анализ исторических данных, исследование распараллеливания анализа данных и сравнение синхронного и асинхронного подходов для запросов к API.

1. Анализ исторических данных

Описание данных

Исторические данные о температуре содержат информацию о среднесуточной температуре в различных городах за период с 2010 по 2019 год. Данные включают:

  • Город (например, Москва, Берлин, Париж).

  • Дата (с шагом в 1 день).

  • Температура (в °C).

  • Сезон (зима, весна, лето, осень).

Основные шаги анализа:

  1. Предобработка данных:

    • Преобразование столбца timestamp в формат datetime.

    • Проверка на пропуски и дубликаты.

    • Анализ распределения температур.

  2. Визуализация данных:

    • Построение временных рядов для температуры в выбранных городах.

    • Визуализация распределения температур с использованием гистограмм и ядерных оценок плотности (KDE).

  3. Скользящее среднее и стандартное отклонение:

    • Вычисление скользящего среднего с окном в 30 дней для сглаживания краткосрочных колебаний.

    • Расчет стандартного отклонения для определения диапазона нормальных значений.

  4. Выявление аномалий:

    • Аномалии определялись как значения температуры, выходящие за пределы диапазона:
      скользящее среднее±2σскользящее среднее±2σ

    • Аномалии визуализировались на графиках с использованием красных маркеров.

  5. Сезонный анализ:

    • Группировка данных по сезонам и вычисление средней температуры, стандартного отклонения, медианы и квартилей.

    • Построение сезонных профилей температуры для каждого города.

Примеры визуализаций:

  • Временной ряд температуры с выделением аномалий.

img.png

  • Сезонные профили с указанием средних значений и стандартных отклонений.

img_5.png

2. Исследование распараллеливания анализа данных

  • Подход:

    • Использование библиотеки multiprocessing для параллельной обработки данных по городам.

    • Сравнение времени выполнения анализа с распараллеливанием и без него.

  • Результаты:

  • Последовательный анализ (без распараллеливания) занял 0.03 секунды.

img_4.png

  • Параллельный анализ (с использованием multiprocessing) занял 0.30 секунды.

img_1.png

Почему параллельный анализ оказался медленнее?

На первый взгляд, результат кажется неожиданным, так как ожидалось, что распараллеливание ускорит выполнение задачи. Однако есть несколько факторов, которые могли повлиять на это:

  1. Накладные расходы на создание процессов:

    • При использовании multiprocessing создаются новые процессы, что требует дополнительных ресурсов и времени.

    • Для небольших объемов данных (например, 15 городов) накладные расходы на создание процессов могут превысить выгоду от распараллеливания.

  2. Объем данных:

    • В данном случае данные не являются достаточно большими, чтобы преимущества распараллеливания перевесили накладные расходы.

    • Параллельная обработка эффективна для задач, где объем вычислений значительно превышает затраты на организацию параллельных процессов.

3. Проведение эксперимента с синхронным и асинхронным способом запроса к API

  1. Синхронный запрос:

    • Использование библиотеки requests для синхронного выполнения запросов.

    • Время выполнения для одного запроса: ~0.08 секунд.

img_2.png

  1. Асинхронный запрос:

    • Использование библиотеки aiohttp для асинхронного выполнения запросов.

    • Время выполнения для одного запроса: ~0.10 секунд.

img_3.png

  1. Сравнение для нескольких городов:

    • Для 4 городов синхронные запросы заняли ~0.92 секунд, а асинхронные — ~0.25 секунд.

выполнение асинхронных запросов к API (более одного города за раз):

Время выполнения асинхронных запросов: 0.25 секунд

Результаты запросов:
Moscow: -3.66°C
Berlin: 8.95°C
Paris: 6.17°C
Tokyo: 8.09°C

выполнение синхронных запросов к API (более одного города за раз):

Время выполнения синхронных запросов: 0.92 секунд

Результаты запросов:
Moscow: -3.66°C
Berlin: 8.74°C
Paris: 6.17°C
Tokyo: 8.09°C

Синхронные запросы заняли 0.92 секунд, асинхронные0.25 секунд.
Асинхронные запросы быстрее.

Выводы:

  • Для одного запроса синхронный подход немного быстрее (0.08 сек против 0.10 сек).

  • Для нескольких запросов асинхронный подход значительно эффективнее (0.25 сек против 0.92 сек).

  • Асинхронный метод рекомендуется для задач, требующих выполнения множества запросов к API.

Streamlit приложение

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

1. 📁 Загрузка данных

Пользователь может загрузить CSV-файл с температурными данными. После загрузки данные отображаются в виде интерактивной таблицы, а также предоставляется основная информация о данных (столбцы, количество строк).

Ключевые функции:

  • Загрузка файла: Используется st.file_uploader для загрузки CSV-файла.

  • Отображение данных: Данные отображаются в виде таблицы с помощью st.dataframe.

  • Информация о данных: Показываются столбцы и количество строк.

2. 📊 Анализ данных

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

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

Ключевые функции:

  • Выбор города: Используется st.selectbox для выбора города.

  • Режим анализа: Пользователь может выбрать последовательный или параллельный анализ.

  • Анализ данных:

    • Вычисление скользящего среднего.

    • Выявление аномалий (температура выходит за пределы среднего ± 2σ).

    • Отображение описательной статистики, временных рядов, сезонных профилей и аномалий.

3. 📈 Визуализация

Приложение предоставляет расширенные возможности визуализации данных, включая сезонные профили, тренды температуры, распределение температуры и тепловые карты.

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

Ключевые функции:

  • Сезонные профили: Отображение средней температуры по сезонам с использованием столбчатых диаграмм.

  • Тренды температуры: Линейный график средней температуры по годам.

  • Распределение температуры: Гистограмма распределения температуры.

  • Тепловая карта: Тепловая карта температуры по дням и месяцам.

  • Boxplot: Распределение температуры по сезонам.

4. 🌡️ Текущая температура OpenWeatherAPI

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

Ключевые функции:

  • Ввод API-ключа: Пользователь вводит API-ключ, который проверяется на корректность.

  • Получение температуры: Температура может быть получена синхронно или асинхронно.

  • Проверка на аномальность: Текущая температура сравнивается с историческими данными для текущего сезона.

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

Приложение было успешно развернуто в облачной среде, предоставляемой Streamlit Cloud Community, что позволяет пользователям взаимодействовать с ним через веб-интерфейс без необходимости локальной установки и настройки.

Демонстрация работы Streamlit приложения

video_.mp4

About

🌍 Streamlit приложение для анализа температурных данных и мониторинга текущей температуры через OpenWeatherMap API

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published