Рубрики
Без рубрики

График и выравнивайте «кривую коронавируса» с питоном

В настоящее время мы подвергаемся одной из самых влияющих пандемий в истории человечества. С вспышкой o … Tagged с Python.

В настоящее время мы подвергаемся одной из самых влияющих пандемий в истории человечества. С вспышкой Covid-19 тысячи людей заражаются во всем мире, и еще тысячи умирают.

Одним из основных фронтов в уменьшении повреждения этой пандемией является предотвращение его распространения, «сглаживание кривой», чтобы предотвратить подавляющую способность системы здравоохранения. Но что это за кривая?

Модель сэра

Одной из самых простых математических моделей распространения болезней является Сэр модель Анкет Он объединяет общую популяцию хозяев в три категории и определяет поток людей между ними.

Модель получает свое название после трех групп: Восприимчивый , люди, которые еще не контактировали с этой болезнью; Заражен , все люди, которые носители, которые могут иметь или не иметь симптомов; и Восстановлен Группа, несколько эвфемистический общий термин для людей, которые либо поправились, либо умерли из -за осложнений.

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

Первый поток пропорционален размеру восприимчивой группы (поскольку существует больше доступных хозяев), размер инфицированной группы (поскольку все больше людей распространяют заболевание) и фиксированная скорость, которую мы называем «скоростью инфекции». Этот уровень инфекции представляет собой набор параметров, которые включают инфекционность заболевания, профилактические меры, принятые людьми, среди многих других, все сжаты в один параметр.

Есть еще один поток людей, которые переходят от зараженной к восстановленной группе. Это включает в себя обоих людей, которые стали лучше (и не зарабатывают на дальнейшем), и людей, которые умирают из -за этой болезни. Этот поток также упрощен, чтобы быть лишь пропорциональным количеству инфицированных людей и фиксированной «скорости восстановления».

График кривой с помощью Python

Прежде чем мы сможем рассчитать и график этой кривой, нам понадобится Scipy и matplotlib библиотеки соответственно:

pip install scipy matplotlib

Запуск нашего файла Python, мы определяем начальные параметры: длина моделирования, процент первоначально инфицированных людей (от 0,0 до 1,0) и показатели инфекции и восстановления, упомянутые ранее:

MAX_TIME = 20.0

infected_start = 0.01

infection_rate = 2.5
recovery_rate = 0.3

Мы назначим оставшийся процент населения восприимчивой группе, оставив восстановленную группу изначально пустой:

susceptible_start = 1.0 - infected_start
recovered_start = 0.0

Чтобы рассчитать нашу кривую, нам нужно будет одолжить метод из исчисления. Мы будем Интегрировать набор обычных дифференциальных уравнений Анкет Все, что это делает, это применяет скорость изменения, которые мы определили в течение установленного периода времени. К счастью, Scipy может сделать всю тяжелую работу для нас! Чтобы рассчитать его, нам нужно только определить начальное состояние нашей модели и выражения, которые определяют его скорость изменения.

Начальное состояние нашей модели – размер каждой из групп:

initial_state = [susceptible_start, infected_start, recovered_start]

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

Поскольку модель SIR не меняется со временем, мы проигнорируем параметр временного времени.

Изменение скорости каждой группы объявляется последовательно:

state_change_rate = lambda state, _time: [
    -state[0] * state[1] * infection_rate,
    state[0] * state[1] * infection_rate - state[1] * recovery_rate,
    state[1] * recovery_rate,
]

Затем мы определяем длину моделирования, используя Numpy S Linspace Функция для создания 100 регулярно расположенных образцов между 0 и Max_time :

import numpy as np
time_series = np.linspace(0, MAX_TIME, 100)

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

from scipy.integrate import odeint
state_series = odeint(state_change_rate, initial_state, time_series)

Мы сделали! State_series Переменная теперь со временем со временем содержит изменение в состоянии.

Теперь мы можем извлечь три раза для каждой из групп населения:

susceptible_series = state_series[:, 0]
infected_series = state_series[:, 1]
recovered_series = state_series[:, 2]

Наконец, если мы хотим увидеть график, мы можем использовать matplotlib выполнить это в нескольких простых шагах.

Сначала мы замышляем три кривых:

import matplotlib.pyplot as plt
plt.plot(time_series, susceptible_series, label="Susceptible")
plt.plot(time_series, infected_series, label="Infected")
plt.plot(time_series, recovered_series, label="Recovered")

Обивайте как ось и включите легенду:

plt.xlabel("Time")
plt.ylabel("Population")
plt.legend()

И наконец -то отображайте наш график:

plt.show()

Смотрите полный код

Мы можем видеть, что в какой -то момент более 60% населения инфицировали одновременно. Это гораздо больше, чем врачи, медсестры и все люди в системе здравоохранения, способны обращаться одновременно.

” Сглаживание кривой “

Два основных параметра, которые мы можем изменить в этом моделировании, – это скорость инфекции и скорость восстановления.

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

Уровень восстановления может быть нелегко контролировать, поскольку это зависит от различных факторов, таких как характеристики заболевания и инфраструктура системы здравоохранения.

Мы можем вернуться к коду, изменить скорость инфекции с 2,5 до 0,75:

infection_rate = 0.75

И посмотрите, как это отражается на последней кривой:

Мы можем видеть, что максимум зараженной группы гораздо менее критична, а также восприимчивая группа никогда не падает до нуля, что означает, что существует определенный процент населения, которая никогда не сталкивается с болезнью.

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

Оставайся в безопасности, товарищами землян!

Оригинал: “https://dev.to/fredericojordan/graph-and-flatten-the-coronavirus-curve-with-python-6om”