Язык программирования Python

Курс IT-Академии Сухорукова

Апрель-июнь 2020

Этот курс закончился

Задание. Погода за лето

Посчитать среднюю температуру за лето 2019, найти самый холодный и самый тёплый дни. Подсчитать число дождливых дней.

Исходные данные

Данные о погоде за лето находятся в файле weather_2019.csv (https://anhel.in/files/weather_2019.csv). Они получены с метеостанции в Огурцово и охватывают период с 1 июня 2019 по 31 августа 2019 (источник: сайт http://rp5.ru). Файл текстовый, в кодировке UTF-8. Он содержит таблицу наблюдений погоды в следующем формате.

  • Одно наблюдение — одна строка файла.
  • В день делается несколько наблюдений, в разное время.
  • Столбцы таблицы разделяются символом «;» (точка с запятой).
  • Кроме этого, каждое значение взято в кавычки («"»).
  • Строки файла, начинающиеся с символа «#» в первой позиции — комментарии. Они не содержат информации и должны быть проигнорированы.

Скачайте этот файл и поместите в одну папку с вашим скриптом.

Поля таблицы

Повторюсь, поля разделены точкой с запятой, а значение каждого поля взято в кавычки. Это довольно важно: в некоторых полях может попадаться символ «;» (точка с запятой) прямо в середине поля. Именно поэтому каждое поле взято в кавычки. То есть просто разбить прочитанную строку по разделителю «;» недостаточно. Кроме того, у всех чисел с плавающей точкой разделитель целой и дробной части — точка («.»), а не запятая, как в нашей стране принято (это удобно, так как Python и функция float() ожидают именно такой формат числа). Проверять прочитанные из файла данные на корректность не обязательно, файл в полном порядке и не содержит нарушений формата. Поля типа «строка» могут содержать любые символы, кроме кавычки («"»).

  1. Дата и время наблюдения. Строка. Формат всегда один и тот же, «ДД.ММ.ГГГГ ЧЧ:ММ» (например, "01.07.2019 16:00"), время новосибирское, перед числами из одной цифры стоит 0.
  2. T. Температура воздуха в момент наблюдения на высоте 2 м над землёй, в °С. Число с плавающей точкой, разделитель целой и дробной части — точка, «.» (например, "17.0").
  3. Po. Атмосферное давление, в мм. ртутного столба. Число с плавающей точкой.
  4. P. Атмосферное давление, приведённое к среднему уровню моря, в мм. рт. ст. Число с плавающей точкой.
  5. Pa. Барическая тенденция, то есть изменения давления за последние три часа, в мм. рт.ст. Число с плавающей точкой.
  6. U. Относительная влажность воздуха на выстоте 2 м над землёй, в %. Целое число.
  7. DD. Направление ветра на высоте 10-12 м, усреднённое за последние 10 минут. Строка.
  8. Ef. Скорость ветра на высоте 10-12 м, усреднённая за последние 10 минут, в м/с. Целое число.
  9. ff10. Максимальный порыв ветра на высоте 10-12 м за последние 10 минут, в м/с. Целое число.
  10. ff3. Максимальный порыв ветра на высоте 10-12 метров между наблюдениями, в м/с. Целое число.
  11. N. Общая облачность. Строка.
  12. WW. Текущая погода, сообщаемая с метеостанции. Строка.
  13. W1. Прошедшая погода между сроками наблюдения 1. Строка.
  14. W2. Прошедшая погода между сроками наблюдения 2. Строка.
  15. Tn. Минимальная температура за прошедший период, в °С. Число с плавающей точкой.
  16. Tx. Максимальная температура за прошедший период, в °С. Число с плавающей точкой.
  17. Cl. Описание облачности (слоистые, кучевые облака). Строка.
  18. Nh. Количество наблюдаемых облаков Cl, в %. Строка.
  19. H. Высота основания самых низких облаков, м. Строка.
  20. Cm. Описание облачности (высококучевые и высокослоистые облака). Строка.
  21. Ch. Описание облачности (перистые, перисто-кучевые и перисто-слоистые облака). Строка.
  22. VV. Горизонтальная дальность видимости, в км. Число с плавающей точкой.
  23. Td. Температура точки росы на высоте 2 м от земли, в °С. Число с плавающей точкой.
  24. RRR. Количество осадков за сутки. Заносится один раз в сутки. Число, либо строка (типа «Осадков нет», «Следы осадков» и т.д.), либо пустая строка (если в этом наблюдении эту информацию не заносили).
  25. tR. Период времени, за которые накоплено указанное число осадков, в часах. Целое число, либо пустая строка, если поле RRR в этой строке пустое.
  26. E. Состояние поверхности почвы (без учёта снега и льда). Строка.
  27. Tg. Минимальная температура поверхности почвы за ночь, в °С. Число с плавающей точкой.
  28. E’. Состояние поверхности почвы с учётом снега и льда. Строка.
  29. sss. Высота снежного покрова, в см. Целое число.

Откройте файл в любом текстовом редакторе с поддержкой кодировки UTF-8 и посмотрите на формат своими глазами.

Задача

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

Затем нужно вычислить среднее значение температуры по каждому дню, а так же для каждого дня определить, был ли он дождливым. Дождливым считается день, в пределах которого в поле RRR указано любое значение, кроме "Осадков нет" или пустой строки. После этого вычислить среднюю температуру за весь период (методом среднего арифметического). Сохранить даты самого тёплого и самого холодного дня. Самый тёплый день — день, когда зафиксирована максимальная средняя температура. Самый холодный — аналогично, когда была минимальная средняя температура дня. Так же необходимо посчитать, сколько было дождливых дней.

Результаты нужно вывести на экран с сопроводительными надписями, например:

Средняя температура = 21.0 градусов, дождливых дней было 28. Самый тёплый день: 18.06.2019, самый холодный: 27.08.2019

Что понадобится

  1. Открытие файла (open)
  2. Цикл for
  3. Работа со строками: split, find, преобразование типов
  4. Работа со списками.

Проверка работы скрипта

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

Это файлы в том же формате, но содержащие погодные данные за другие периоды времени (лето 2018 и лето 2017 года, соответственно).