Очистка температур по перцентилям

тема: Пропуски, дубликаты, выбросы · уровень: продвинутый

Условие

В файле data.csv записаны измерения температуры воздуха с нескольких погодных станций. В строке может отсутствовать значение температуры: в этом случае поле air_temperature_c пустое.

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

Пусть после удаления пропусков получен отсортированный список температур a[0], a[1], ..., a[m-1]. Пятый перцентиль равен a[floor(0.05 * (m - 1))], а девяносто пятый перцентиль равен a[floor(0.95 * (m - 1))]. Каждая температура x заменяется на max(P5, min(x, P95)), где P5 и P95 — найденные перцентили. Требуется вывести среднее арифметическое заменённых температур.

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

Формат ввода

Во входном потоке дана одна строка с идентификатором станции station_id.

Данные находятся в файле data.csv в кодировке UTF-8. Разделитель полей — запятая, первая строка содержит заголовки. В файле есть столбцы station_id, date, air_temperature_c. Пустое поле air_temperature_c обозначает пропуск измерения.

Формат вывода

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

Ответ нужно вывести ровно с двумя знаками после точки. Округление производится до ближайшего значения с двумя знаками после точки, а при ровно половинном случае — в сторону от нуля.

Ограничения

Количество строк с данными в файле: от 300 до 4000.

Длина station_id: от 4 до 8 символов из заглавных латинских букв и цифр. Дата имеет формат YYYY-MM-DD и лежит в диапазоне от 2025-01-01 до 2025-12-31. Непустая температура air_temperature_c содержит число с двумя знаками после точки от -60.00 до 60.00.

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

Решить задачу с автопроверкой на Python →

Куда дальше