Классификация состояния теплицы по датчикам

тема: Расстояния и kNN · уровень: средний

Условие

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

Требуется определить состояние для новых показаний методом k ближайших соседей при k = 3. Для строки с показаниями (t, h, c) и исторической строки (ti, hi, ci) используется квадрат евклидова расстояния: d = (t - ti)^2 + (h - hi)^2 + (c - ci)^2.

Строки файла, в которых хотя бы одно из трёх показаний отсутствует, не участвуют в поиске соседей. Исторические строки упорядочиваются по возрастанию расстояния, а при равных расстояниях раньше располагается строка с меньшим record_id. Берутся первые три строки этого порядка, и выводится метка, встречающаяся среди них чаще всего.

Если наибольшее число голосов набрали несколько меток, выводится лексикографически меньшая метка. Округление не применяется: требуется вывести метку точно в виде строки.

Формат ввода

В каталоге с программой находится файл data.csv в кодировке UTF-8. Разделитель полей — запятая, первая строка содержит заголовки. Колонки файла: record_id, observed_at, temperature_c, humidity_pct, co2_ppm, state.

В стандартный ввод подаются три целых числа t h c через пробел: температура в градусах Цельсия, влажность в процентах и концентрация углекислого газа в ppm для нового измерения.

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

Выведите одну строку — предсказанную метку состояния: dry, normal или overheat.

Ограничения

В файле от 300 до 2000 строк данных, не считая заголовка. record_id — целое число от 1 до 2000 и не повторяется. Длина observed_at от 16 до 25 символов. Непустое значение temperature_c — вещественное число от 5.00 до 45.00, humidity_pct — вещественное число от 10.00 до 100.00, co2_ppm — целое число от 300 до 2000. В колонках temperature_c, humidity_pct и co2_ppm могут быть пустые значения. Длина метки state от 3 до 8 символов, значение принадлежит множеству dry, normal, overheat.

Во входе t — целое число от 5 до 45, h — целое число от 10 до 100, c — целое число от 300 до 2000. В файле гарантированно есть не менее трёх строк без пропусков среди трёх числовых показаний.

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

Куда дальше