🌐 Ссылка на развернутое приложение в Streamlit Cloud: Здесь
https://dataanalysisappweatherapi-kjje8rplqtbrfqz3rpzqcu.streamlit.app/
📊 Ноутбук с дополнительными исследованиями: Здесь
app/notebooks/data_analysis.ipynb
- Описание проекта
- Исследование
- Streamlit приложение
- Развертывание приложения
- Демонстрация работы Streamlit приложения
Этот проект представляет собой аналитическое приложение, разработанное для анализа исторических данных о температуре в различных городах и мониторинга текущей температуры с использованием OpenWeatherMap API. Приложение позволяет выявлять сезонные закономерности, аномалии температуры и сравнивать текущую температуру с историческими данными.
-
Анализ исторических данных:
-
Вычисление скользящего среднего и стандартного отклонения.
-
Определение аномалий температуры.
-
Построение долгосрочных трендов.
-
Визуализация временных рядов и сезонных профилей.
-
-
Мониторинг текущей температуры:
-
Получение текущей температуры через OpenWeatherMap API.
-
Сравнение текущей температуры с историческими данными для определения аномалий.
-
-
Интерактивное приложение:
-
Возможность выбора города из списка.
-
Отображение графиков, статистики и аномалий.
-
Проверка текущей температуры на аномальность.
-
В этом разделе представлены основные этапы исследования, включая анализ исторических данных, исследование распараллеливания анализа данных и сравнение синхронного и асинхронного подходов для запросов к API.
Описание данных
Исторические данные о температуре содержат информацию о среднесуточной температуре в различных городах за период с 2010 по 2019 год. Данные включают:
-
Город (например, Москва, Берлин, Париж).
-
Дата (с шагом в 1 день).
-
Температура (в °C).
-
Сезон (зима, весна, лето, осень).
Основные шаги анализа:
-
Предобработка данных:
-
Преобразование столбца
timestamp
в формат datetime. -
Проверка на пропуски и дубликаты.
-
Анализ распределения температур.
-
-
Визуализация данных:
-
Построение временных рядов для температуры в выбранных городах.
-
Визуализация распределения температур с использованием гистограмм и ядерных оценок плотности (KDE).
-
-
Скользящее среднее и стандартное отклонение:
-
Вычисление скользящего среднего с окном в 30 дней для сглаживания краткосрочных колебаний.
-
Расчет стандартного отклонения для определения диапазона нормальных значений.
-
-
Выявление аномалий:
-
Аномалии определялись как значения температуры, выходящие за пределы диапазона:
скользящее среднее±2σскользящее среднее±2σ -
Аномалии визуализировались на графиках с использованием красных маркеров.
-
-
Сезонный анализ:
-
Группировка данных по сезонам и вычисление средней температуры, стандартного отклонения, медианы и квартилей.
-
Построение сезонных профилей температуры для каждого города.
-
Примеры визуализаций:
- Временной ряд температуры с выделением аномалий.
- Сезонные профили с указанием средних значений и стандартных отклонений.
-
Подход:
-
Использование библиотеки multiprocessing для параллельной обработки данных по городам.
-
Сравнение времени выполнения анализа с распараллеливанием и без него.
-
-
Результаты:
-
Последовательный анализ (без распараллеливания) занял
0.03
секунды.
- Параллельный анализ (с использованием multiprocessing) занял
0.30
секунды.
Почему параллельный анализ оказался медленнее?
На первый взгляд, результат кажется неожиданным, так как ожидалось, что распараллеливание ускорит выполнение задачи. Однако есть несколько факторов, которые могли повлиять на это:
-
Накладные расходы на создание процессов:
-
При использовании
multiprocessing
создаются новые процессы, что требует дополнительных ресурсов и времени. -
Для небольших объемов данных (например, 15 городов) накладные расходы на создание процессов могут превысить выгоду от распараллеливания.
-
-
Объем данных:
-
В данном случае данные не являются достаточно большими, чтобы преимущества распараллеливания перевесили накладные расходы.
-
Параллельная обработка эффективна для задач, где объем вычислений значительно превышает затраты на организацию параллельных процессов.
-
-
Синхронный запрос:
-
Использование библиотеки
requests
для синхронного выполнения запросов. -
Время выполнения для одного запроса: ~0.08 секунд.
-
-
Асинхронный запрос:
-
Использование библиотеки
aiohttp
для асинхронного выполнения запросов. -
Время выполнения для одного запроса: ~0.10 секунд.
-
-
Сравнение для нескольких городов:
- Для 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-приложения, которое позволяет пользователю загружать данные, анализировать их, визуализировать результаты и получать текущую температуру через OpenWeatherMap API. Приложение динамически подстраивается под загруженные данные, что позволяет формировать различные гипотезы и выводы в зависимости от предоставленной информации.
Пользователь может загрузить CSV-файл с температурными данными. После загрузки данные отображаются в виде интерактивной таблицы, а также предоставляется основная информация о данных (столбцы, количество строк).
Ключевые функции:
-
Загрузка файла: Используется
st.file_uploader
для загрузки CSV-файла. -
Отображение данных: Данные отображаются в виде таблицы с помощью
st.dataframe
. -
Информация о данных: Показываются столбцы и количество строк.
Пользователь может выбрать город и режим анализа (последовательный или параллельный). Приложение анализирует данные, вычисляет скользящее среднее, выявляет аномалии и отображает результаты.
Динамический анализ позволяет формировать гипотезы в зависимости от данных. Например, если в данных присутствуют резкие колебания температуры, можно предположить наличие климатических аномалий.
-
Выбор города: Используется
st.selectbox
для выбора города. -
Режим анализа: Пользователь может выбрать последовательный или параллельный анализ.
-
Анализ данных:
-
Вычисление скользящего среднего.
-
Выявление аномалий (температура выходит за пределы среднего ± 2σ).
-
Отображение описательной статистики, временных рядов, сезонных профилей и аномалий.
-
Приложение предоставляет расширенные возможности визуализации данных, включая сезонные профили, тренды температуры, распределение температуры и тепловые карты.
Динамическая визуализация позволяет пользователю исследовать данные и формировать гипотезы. Например, если на тепловой карте видны резкие перепады температуры в определенные месяцы, можно предположить влияние сезонных факторов.
-
Сезонные профили: Отображение средней температуры по сезонам с использованием столбчатых диаграмм.
-
Тренды температуры: Линейный график средней температуры по годам.
-
Распределение температуры: Гистограмма распределения температуры.
-
Тепловая карта: Тепловая карта температуры по дням и месяцам.
-
Boxplot: Распределение температуры по сезонам.
Пользователь может ввести API-ключ OpenWeatherMap и получить текущую температуру для выбранного города. Приложение также проверяет, является ли текущая температура нормальной для текущего сезона. Динамическая проверка позволяет формировать гипотезы о климатических изменениях.
-
Ввод API-ключа: Пользователь вводит API-ключ, который проверяется на корректность.
-
Получение температуры: Температура может быть получена синхронно или асинхронно.
-
Проверка на аномальность: Текущая температура сравнивается с историческими данными для текущего сезона.
Приложение было успешно развернуто в облачной среде, предоставляемой Streamlit Cloud Community, что позволяет пользователям взаимодействовать с ним через веб-интерфейс без необходимости локальной установки и настройки.