Примерно пару недель назад я узнал, что районная администрация Южного Дели, как и правительства всего мира, изо всех сил пытаются найти надежное техническое решение для сдерживания пандемии 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 из коробки на бесплатном уровне.
Используемые ресурсы:
- API Карт Google
- API Google Таблиц
gspread
— API-оболочка листов Pythongooglemaps
— Python-оболочка Maps API- PythonAnywhere — бесплатный веб-хостинг
Кодовая база в настоящее время является частной, она будет выпущена под лицензией с открытым исходным кодом после истечения срока действия контракта на развертывание.
Первоначально опубликовано на https://vivekkaushal.com 27 июня 2020 г.