Примерно пару недель назад я узнал, что районная администрация Южного Дели, как и правительства всего мира, изо всех сил пытаются найти надежное техническое решение для сдерживания пандемии COVID-19. Особенно в Дели, где количество случаев заболевания резко возросло, становилось все труднее создавать зоны сдерживания вручную, просматривая адреса пациентов, когда каждый день поступают тысячи случаев.

Я придумал лучший способ сделать это и с разрешения окружного магистрата Южного Дели закодировал и развернул свое решение, основанное на их базе данных. Решение было хорошо воспринято теми, кто отвечает за зоны содержания, и теперь оно работает.

В этой статье я кратко объясню свой подход.

Проблема

При том объеме, в котором дела поступали и продолжают поступать, становится практически невозможно создать зоны сдерживания, просматривая только адреса. Необходимо технологическое решение, которое предлагает зону локализации самостоятельно, исходя из заранее заданных параметров.

Решение

Я разработал подход, используя API геокодирования Google Maps и кластеризацию k-средних, который в основном делает следующее:

  • он просматривает все подтвержденные случаи за последние 7 дней — собирает эти данные из живой таблицы Google.
  • преобразует все адреса в геокоды — пары долготы и широты — с помощью API геокодирования Google Maps
  • наносит эти наблюдения на карту — с помощью API динамической карты Google Maps JS.
  • использует кластеризацию k-средних для создания n кластеров среди этих участков карты — значение n определяется на основе максимизации числа зарегистрированных кластеров, которые соответствуют критериям сдерживания
  • предполагаемая зона сдерживания определяется как регион, в котором 3 или более 3 случаев находятся в таком регионе, что они находятся на расстоянии менее 100 м друг от друга.
  • предлагаемые кластеры называются «предлагаемыми зонами сдерживания» и наносятся на карту, опять же с использованием API динамической карты Google Maps JS.
  • в дополнение к этому, используя лист существующих зон сдерживания и мини-зон сдерживания, были добавлены функции для построения и публикации напоминаний о просмотре для указанных зон.
  • приложение построено на python и использует flask для обслуживания веб-страниц.
  • полное приложение было размещено на pythonanywhere — отличной платформе для развертывания приложений на основе Python, которая позволяет планировать пользовательские домены и cron-jobs/script из коробки на бесплатном уровне.

Используемые ресурсы:

Кодовая база в настоящее время является частной, она будет выпущена под лицензией с открытым исходным кодом после истечения срока действия контракта на развертывание.

Первоначально опубликовано на https://vivekkaushal.com 27 июня 2020 г.