Ближайший счётчик до и после стандартизации
Условие
В файле data.csv находятся сведения о показаниях электросчётчиков квартир дома. Для каждой записи указаны расход электроэнергии за дневной тариф и накопленное показание общего счётчика.
Требуется найти ближайшую к заданной точке запись двумя способами: по исходным признакам и после стандартизации признаков z-оценкой. Номером записи считается значение столбца row_no.
Пусть у запроса признаки (x, y), а у записи i признаки (a_i, b_i). До стандартизации используется квадрат евклидова расстояния: D_i = (a_i - x)^2 + (b_i - y)^2.
Для стандартизации по каждому признаку среди всех строк без пропусков вычисляются среднее μ и генеральное стандартное отклонение σ = sqrt((1/n) * Σ(v_j - μ)^2). Значение признака заменяется на z = (v - μ) / σ. После этого ближайшая запись определяется по квадрату евклидова расстояния между стандартизированными признаками.
Строки с пропуском хотя бы в одном из двух числовых столбцов не участвуют ни в вычислении средних и отклонений, ни в поиске соседей. Гарантируется, что после исключения пропусков остаются строки и оба стандартных отклонения положительны. При равенстве расстояний выбирается запись с меньшим значением row_no. Округление не применяется.
Формат ввода
Рядом с программой расположен файл data.csv в кодировке UTF-8 с разделителем-запятой. Первая строка файла содержит заголовок:
row_no,apartment,day_kwh,total_kwh
Столбец row_no содержит номер записи, apartment содержит код квартиры, day_kwh содержит дневной расход электроэнергии, total_kwh содержит накопленное показание счётчика. В числовых столбцах day_kwh и total_kwh возможны пустые значения.
В стандартный ввод подаются два целых числа x y через пробел: дневной расход и накопленное показание для точки запроса.
Формат вывода
Выведите два целых числа через пробел: номер ближайшей записи до стандартизации и номер ближайшей записи после стандартизации.
Ограничения
В файле от 300 до 4000 строк данных.
row_no — целое число от 1 до 4000, все значения различны.
Длина кода квартиры apartment составляет от 1 до 12 символов.
Каждое непустое значение day_kwh — целое число от 0 до 1000.
Каждое непустое значение total_kwh — целое число от 0 до 100000.
Во входе 0 ≤ x ≤ 1000, 0 ≤ y ≤ 100000.
Решить задачу с автопроверкой на Python →
Куда дальше
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами
- Перечневые олимпиады: что это и что дают — весь перечень Минобрнауки: уровни, срок диплома, разрезы по предметам и классам
- Олимпиада по информатике: с чего начать — два мира олимпиад — ВсОШ и перечневые: этапы, задания и на каком языке писать