Skip to content

Анализ данных по погодным условиям с выявлением лучшего города для отдыха

Notifications You must be signed in to change notification settings

afoninsb/async-weather-forecast

Repository files navigation

Задание

Проанализировать данные по погодным условиям, полученные от API Яндекс Погоды.

Описание задания

1. Получите информацию о погодных условиях для указанного списка городов, используя API Яндекс Погоды.

Описание

Список городов находится в переменной CITIES в файле utils.py. Для взаимодействия с API используйте готовый класс YandexWeatherAPI в модуле api_client.py. Пример работы с классом YandexWeatherAPI описан в примере. Пример ответа от API для анализа находится в файле.

2. Вычислите среднюю температуру и проанализируйте информацию об осадках за указанный период для всех городов.

Описание

Условия и требования:

  • период вычислений в течение дня — с 9 до 19 часов;
  • средняя температура рассчитывается за указанный промежуток времени;
  • сумма времени (часов), когда погода без осадков (без дождя, снега, града или грозы), рассчитывается за указанный промежуток времени;
  • информация о температуре для указанного дня за определённый час находится по следующему пути: forecasts> [день]> hours> temp;
  • информация об осадках для указанного дня за определённый час находится по следующему пути: forecasts> [день]> hours> condition.

Пример данных с информацией о температуре и осадках за день.

Список вариантов погодных условий находится в таблице в блоке condition или в файле.

3. Объедините полученные данные и сохраните результат в текстовом файле.

Описание

Формат сохраняемого файла - json, csv или xls/xlsx.

Формат таблицы для сохранения, где рейтинг - позиция города относительно других при анализе "благоприятности поездки" (смотри п4).

Город/день 14-06 ... 19-06 Среднее Рейтинг
Москва Температура, среднее 24 27 25.6 8
Без осадков, часов 8 4 6
Абу-Даби Температура, среднее 34 37 35.5 2
Без осадков, часов 9 10 9.5
...

4. Проанализируйте результат и сделайте вывод, какой из городов наиболее благоприятен для поездки.

Описание

Наиболее благоприятным городом считать тот, в котором средняя температура за всё время была самой высокой, а количество времени без осадков — максимальным. Если таких городов более одного, то выводить все.

Требования к решению

  1. Используйте для решения как процессы, так и потоки.
  2. Используйте для решения как очередь, так и пул задач.
  3. Опишите этапы решения в виде отдельных классов в модуле tasks.py:
  • DataFetchingTask — получение данных через API;
  • DataCalculationTask — вычисление погодных параметров;
  • DataAggregationTask — объединение вычисленных данных;
  • DataAnalyzingTask — финальный анализ и получение результата.
  1. Используйте концепции ООП.
  2. Предусмотрите обработку исключительных ситуаций.
  3. Логируйте результаты действий.
  4. Покройте написанный код тестами.
  5. Используйте аннотацию типов.
  6. Приведите стиль кода в соответствие pep8, flake8, mypy.

Пример использования YandexWeatherAPI для работы с API

from api_client import YandexWeatherAPI

city_name = "MOSCOW"
ywAPI = YandexWeatherAPI()
resp = ywAPI.get_forecasting(city_name)
    {
      "hour": "1",
      "hour_ts": 1653516000,
      "temp": 10,
      "feels_like": 7,
      "icon": "ovc",
      "condition": "overcast",
      "cloudness": 1,
      "prec_type": 0,
      "prec_strength": 0,
      "is_thunder": false,
      "wind_dir": "w",
      "wind_speed": 1.7,
      "wind_gust": 3.2,
      "pressure_mm": 747,
      "pressure_pa": 995,
      "humidity": 77,
      "uv_index": 0,
      "soil_temp": 9,
      "soil_moisture": 0.22,
      "prec_mm": 0,
      "prec_period": 60,
      "prec_prob": 0
    },

About

Анализ данных по погодным условиям с выявлением лучшего города для отдыха

Topics

Resources

Stars

Watchers

Forks

Languages