当前位置: 首页 > 科技观察

如果亚美尼亚爆发新冠病毒会怎样?程序员用Python模拟

时间:2023-03-16 17:19:24 科技观察

大数据文摘来源:towardsdatascience编译:大猛、赵继科、吴帅、钱天培2019年底,在中国武汉爆发的冠状病毒疫情影响了整个金融市场和金融市场。实体经济。这座总人口超过1000万、流动人口超过500万的巨型城市在春运期间发生的灾难,在全球范围内引发了一系列的蝴蝶效应,也引起了周边普通民众的恐慌世界。2020年1月30日,2019-nCoV已被世界卫生组织列为国际关注的突发公共卫生事件(PHEIC)。截至撰写本文时,尚未确定经过医学研究验证的具体治疗方法。此外,一些关键的流行病学指标,如基本再生数(一个感染者感染的平均人数,即R0值)仍然未知。在当今全球互联互通的时代,这种流行病已经成为全球范围内的主要威胁之一。可以推测,如果2020年全球发生灾难性事件(大致定义为造成不少于1亿人伤亡的事件),最有可能的原因恰恰是某种流行病——不是核灾难,也不是气候灾难,等。全球范围内的快速城市化进一步加剧了这一问题。人口密集、流动频繁的城市成为疾病传播网络的传播节点,防疫体系极易受到攻击。武汉的灾难也引发了全球对城市规划和防疫政策的思考。如果疾病不在武汉,而是在另一个人口较少、流动人口较少的城市,它的传染情况和感染人数会怎样?在这篇文章中,我们将讨论当流行病病毒袭击城市时会发生什么,应该立即做什么,以及这对城市规划、政策制定和管理有什么影响。我们以亚美尼亚首都埃里温为例,这座人口刚刚超过一百万的城市以钢铁和葡萄酒闻名。我们将建立一个数学模型并模拟冠状病毒在城市中的传播,并研究城市流动模式如何影响疾病的传播。传播。城市交通有效、高效和可持续的城市交通对于现代城市的运作至关重要。它已被证明直接影响城市的宜居性和经济产出(GDP)。但是,一旦爆发,就会火上浇油,扩大疾病的传播范围。因此,让我们首先在平面坐标系上查看埃里温的聚合OD流量网络(起点-终点),以了解城市流量模式的空间结构:接下来,如果我们查看网格的总流入量,我们将看到一个或多或少的单中心空间组织,其中一些网格具有较高的每日流入量但位于中心之外:现在,想象一下在城市的任意位置爆发流行病。它将如何传播?我们可以做些什么来控制它?流行病学建模为了回答这些问题,我们将建立一个简单的分区模型来模拟传染病在城市中的传播。当流行病爆发时,其传播动态可能会有很大差异,这取决于最初感染的地理位置及其与城市其他地区的连通性。这是最近关于城市人口流行病的数据驱动研究中最重要的见解之一。然而,正如我们将在下文进一步看到的那样,各种结果要求采取类似措施来控制疫情,并在规划和管理城市时考虑到这种可能性。注:房室模型又称SIR模型,是传染病的简化数学模型。由于我们的目标是论证城市流行病传播的一般原理,而不是建立一个实时准确的模型,所以我将参考《自然》杂志的一篇文章,简单修改经典的SIR模型来满足我们的需求。相关链接:https://www.nature.com/articles/s41467-017-02064-4该模型将人口分为三部分。在时间t的每个位置i,其三个隔间如下:Si,t:尚未感染或易感的人数;ii,t:感染疾病并有能力将疾病传播给易感人群的人数;Ri,t:由于康复或死亡而被感染后从感染组中移除的人数。该组中的个体没有能力再次感染该疾病或将感染传播给他人。在我们的模拟中,时间将是一个离散变量,因为系统的状态是以天为单位建模的。在t时刻j点的完全易感人群中,被感染的概率为:βt为t时刻的传播率;mj,k是k点到j点的流动性,xk,t和yk,t分别代表t时刻k和j的感染和易感人群数量,其中xk,t=Ik,t/Nk,yj,t=Sj,t/Nj,Nk和Nj代表k和j的总人口数。然后,我们继续模拟将疾病引入完全易感人群所在地区的随机过程,其中Ij,t+1是概率为h(t,j)的伯努利随机变量。一旦在随机位置出现感染,疾病不仅会在那里传播,还会通过携带者传播。这就是以OD流量矩阵为特征的城市流量模式发挥关键作用的地方。此外,为了确定疾病如何通过感染者传播,我们需要考虑其R0值。这里,y代表治愈率,也可以认为是二次感染率。在撰写本文时,新型冠状病毒的基本再生数估计在1.4到4之间。做好最坏的打算,因此我们假设R0值为4。需要注意的是,R0值是一个具有期望值的随机变量。为了让事情更有趣一点,我们在每个区域用不同的R0值进行模拟,其中R0值服从均值为4的gamma分布:现在我们来讨论建立的模型:βk,t是时间t到位k转移率,α是表征出行方式倾向性的参数。上面的模型很简单:为了得到t+1时刻j地未感染者或易感者的数量,我们需要用t时j地未感染者或易感者减去j地本地感染者数时间t(第一个方程的第二部分),减去从其他地方来到地点j的感染者人数,这些外国感染者被他们的传播率加权(第一个方程的第三部分)。由于总人口Nj=Sj+Ij+Rj,我们需要将减去的部分移到感染组,同时将治愈的部分移到Rj,t+1(第二个和第三个方程)。模拟建筑对于此分析,我们将使用从当地拼车公司gg提供的GPS数据中获得的典型一天的总OD交通矩阵作为埃里温市交通模式的代理。接下来,我们需要每个250×250m网格单元的人口计数,通过缩放提取的流量计数来近似,以便不同位置的总流入量之和接近埃里温市110万人口的一半。这是一个大胆的假设,但对结果影响不大。减少公共交通?第一次模拟,我们将模拟背景设置为高度依赖公共交通的未来城市,并设置流量α=0.9:可以看到感染人数比例在大约8-10天后迅速增加到70%,达到高峰,但此时只有一小部分(约10%)的人恢复。到第100天,疫情逐渐缓和,治愈率达到了惊人的90%!现在,让我们看看将公共交通强度α降低到0.2是否有助于缓解传染病的传播。这可以理解为采取严厉措施减少城市流动性(例如实行宵禁),或者增加私家车出行的比例以减少人们在出行时被感染的机会。可以发现,在此假设下,疫情高峰出现在16~20天左右,高峰期感染者比例明显降低(约45%),康复人数较之前增加一倍(约20%)).疫情结束时,易感人群的比例比之前高出一倍(约24%对约12%),这意味着更多人逃脱了疫情。正如人们所预料的那样,通过实施严格的控制措施暂时减少城市的流动性对减少传染病的传播具有显着效果。隔离热区?接下来我们再看看另一个直观的想法——隔离一些关键区域是否能达到预期的效果。为了测试这个想法,首先选择流量前1%的区域:然后完全限制进入这些区域,从而创建有效的隔离机制。从这张图我们可以看到,埃里温的这几个位置主要是位于市中心,另外两个位置是最大的两个shoppingmall。以α为中间值,即0.5,我们得到以下结果:感染者比例的峰值较小(约35%),更重要的是,在疫情结束时,约一半的人没有被感染,说明这种方法可以帮助人们有效降低感染风险!下面的动图展示了一个严重依赖公共交通的场景下的结果:结语这个实验并不意味着我们已经建立了一个准确的传染病模型(即使该模型不涉及任何流行病学基础知识),我们的目标是能够即时了解传染病暴发期间城市交通网络对传染病传播的影响。随着人口密度、流动性和互动性的增加,我们的城市更容易发生“黑天鹅”事件,也更加脆弱。例如,从这个模型中我们可以看到,在重点地区实施隔离制度或采取严厉措施控制人员流动,在疫情期间可以发挥巨大的作用。但还有一个很重要的问题,如何在这些措施实施过程中,将对城市功能和经济的破坏降到最低?此外,传染病的传播机制也是一个活跃的研究领域,这一领域的成果必须渗透并融入到城市规划、政策制定和城市管理中,使我们的城市更安全、更有韧性。上记模型代码如下:importnumpyasnp#initializethepopulationvectorfromtheorigin-destinationflowmatrixN_k=np.abs(np.diagonal(OD)+OD.sum(axis=0)-OD.sum(axis=1))locs_len=len(N_k)#numberoflocationsSIR=np.zeros(shape=(locs_len,3))#makeanumpyarraywith3columnsforkeepingtrackoftheS,I,RgroupsSIR[:,0]=N_k#initializetheSgroupwiththerespectivepopulationsfirst_infections=np.where(SIR[:,0]<=thresh,SIR[:,0]//20,0)#fordemopurposes,randomlyintroduceinfectionsSIR[:,0]=SIR[:,0]-first_infectionsSIR[:,1]=SIR[:,1]+first_infections#moveinfectionstotheIgroup#rownormalizetheSIRmatrixforkeepingtrackofgroupproportionsrow_sums=SIR.sum(axis=1)SIRSIR_n=SIR/row_sums[:,np.newaxis]#initializeparametersbeta=1.6gamma=0.04public_trans=0.5#alphaR0=beta/gammabeta_vec=np.random.gamma(1.6,2,locs_len)gamma_vec=np.full(locs_len,gamma)public_trans_vec=np.full(locs_len,public_trans)#makecopyoftheSIRmatricesSIRSIR_sim=SIR.copy()SIR_nSIR_nsim=SIR_n.copy()#runmodelprint(SIR_sim.sum(axis=0).sum()==N_k。sum())fromtqdmimporttqdm_notebookinfected_pop_norm=[]susceptible_pop_norm=[]recovered_pop_norm=[]fortime_stepintqdm_notebook(range(100)):infected_mat=np.array([SIR_nsim[:,1],]*locs_len).transpose()OD_infected=np.round(OD*infected_mat)inflow_infected=OD_infected.sum(axis=0)inflow_infected=np.round(inflow_infected*public_trans_vec)print('totalinfectedinflow:',inflow_infected.sum())new_infect=beta_vec*SIR_sim[:,0]*inflow_infected/(N_k+OD.sum(axis=0))new_recovered=gamma_vec*SIR_sim[:,1]new_infect=np.where(new_infect>SIR_sim[:,0],SIR_sim[:,0],new_infect)SIR_sim[:,0]=SIR_sim[:,0]-new_infectSIR_sim[:,1]=SIR_sim[:,1]+new_infect-new_recoveredSIR_sim[:,2]=SIR_sim[:,2]+new_recoveredSIR_sim=np.where(SIR_sim<0,0,SIR_sim)#recomputethenormalizedSIRmatrixrow_sums=SIR_sim.sum(axis=1)SIR_nsim=SIR_sim/row_sums[:,np.newaxis]S=SIR_sim[:,0].sum()/N_k.sum()I=SIR_sim[:,1].sum()/N_k.sum()R=SIR_sim[:,2].sum()/N_k.sum()print(S,I,R,(S+I+R)*N_k.sum(),N_k.sum())print('\n')infected_pop_norm.append(I)susceptible_pop_norm.append(S)recovered_pop_norm.append(R)相关报道:https://towardsdatascience.com/modelling-the-coronavirus-epidemic-spreading-in-a-city-with-python-babd14d82fa2【本文为专栏组织大数据文摘原创翻译,微信公众号“大数据文摘(id:BigDataDigest)”】点此查看作者更多好文