QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3319|回复: 0
打印 上一主题 下一主题

用Python预测疫情发展

[复制链接]
字体大小: 正常 放大
浅夏110 实名认证       

542

主题

15

听众

1万

积分

  • TA的每日心情
    开心
    2020-11-14 17:15
  • 签到天数: 74 天

    [LV.6]常住居民II

    邮箱绑定达人

    群组2019美赛冲刺课程

    群组站长地区赛培训

    群组2019考研数学 桃子老师

    群组2018教师培训(呼伦贝

    群组2019考研数学 站长系列

    跳转到指定楼层
    1#
    发表于 2020-5-15 15:30 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定

    什么是传染病动力学?numpy和matplotlib用python实现传染病模型SI模型SIS模型SIR模型SEIR模型

    什么是传染病动力学?

    最近,在报道疫情的众多新闻中,相信大家也看到过一些来预测新型冠状病毒会导致感染肺炎的人数。你一定好奇,这个人数要怎么预测呢?预测人数又有什么用呢?

    事实上,从学科方向来说,这类研究属于传染病动力学,就是用数学模型去描述传染病在人群中传播的规律,从而预测患病人数,进而指导政府制定措施和政策去控制传染病的传播。6 f7 }9 v& p- a: p) B! B
    这类研究最早可追溯到18世纪Daniel Bernoulli对天花的研究,而我们今天所要介绍的SIR模型是1927年Kermack与McKendrick在为了研究伦敦黑死病而提出的,是传染病动力学中最基础的模型。

    介绍了传染病模型的背景信息,不知道现在你对传染病模型更有兴趣,还是执着地对python更有兴趣呢?不论哪种,这篇文章会满足你所有的好奇心。

    numpy和matplotlib

    首先,安装一下这节课我们需要使用的两个python包,numpy和matplotlib。
    + {4 p# Z( a: Q& y( u2 _numpy-是python进行科学和矩阵运算最常用的包。

    用numpy建立一维数组,存储和计算每天传染病人数的数据。

    2 u) f* _7 g2 {8 T0 w+ Q( W6 ^2 T, \. [

    import numpy as np

    import matplotlib.pyplot as plt

    用matplotlib绘制传染病人数随天数变化的曲线,给出模型预测人数变化的直观认识。

    好啦,下面开始用python实现传染病模型吧。

    用python实现传染病模型

    为了让大家能够更好地理解,我们先不直接说SIR模型,我们从最简单的开始。

    SI模型首先想象这样一个场景,一个城市有  个人,假设没有人出生和死亡,忽然有一天有  个人感染了病毒成为了患者,如果每天每个患者能够有效传染   个人,那么第二天患病人数是多少呢?最简单的答案是:   ,也就是说每天都会新增   个患者。那这样以来,在无限远的将来会有无穷多的人被感染,显然这是不合理的,那错在哪里?仔细思考,你一定发现了,已经患病的人就不能再被传染了,所以我们有必要把人群分为两类,易感者(S-susceptiable)和感染者(I-infective)(你猜的没错,这就是SIR中S和I的含义,R的含义之后介绍再讲)。为了之后方便计算我们记易感者和感染者在人群中的比例为   ,那么    。

    我们重新考虑上面的问题,顺便来个示意图:

    Image Name这样的话,每天新增的患者数为    ,也就是总传染人数乘以易感者所占的人群比例。
    3 g6 Z3 m; K4 k! `/ g& i$ c那么每天的感染者比例的增加量就是   。

    我们假设城市有一千万(N=10的7次方)人,每个患者每天接触感染每天0.8人(lamda=0.8),初始感染人数为45人(i0 = 45/N),我们来模拟70天(T=70)的情况。

    # population
    * ?, t3 }+ Z; p+ u! eN = 1e7  q( V3 j5 d9 Z& L  i4 C8 e5 R
    # simuation Time / Day! v1 {, f- Z6 Z6 {) G4 G& y
    T = 707 o: a0 `5 ^( L4 n
    # susceptiable ratio9 u$ W- z2 r; m* ]9 a+ A- ^% p
    s = np.zeros([T])+ M9 M3 X7 N& ^
    # infective ratio- ~# G) a) Z8 ~. a' `# R+ i
    i = np.zeros([T])
    7 b; m( g* u9 ?# contact rate! D& N7 t* j* h% ?
    lamda = 0.8
    , h+ Y7 G3 w8 T
    3 h& t9 L! q; T0 K# initial infective people
    & O, L4 q" O9 s- c0 v1 B0 Ri[0] = 45.0 / N
    9 R7 `- ]5 j7 V* n4 m' v
    8 v; f% X5 h! ~, c, f" L0 w  ^for t in range(T-1):2 y6 m# m+ l7 @1 V) T
        i[t + 1] = i[t] + i[t] * lamda * (1.0 - i[t])
    " w) o/ w; C& w( r0 z5 ]$ B6 x7 G/ Z! D

    * ?5 ~  S0 s" j
    : H5 D% [" [' d% P相信其他语句大家都明白,新知识是这两行:
    * z5 t- G0 ]$ B! N- _
    / s( P/ X/ Q1 O8 ^
    8 Z: u- ]  k9 u4 R8 u0 _* R( Y7 Ks = np.zeros([T])3 b0 f2 V9 {. o+ |+ W5 E1 [; s
    i = np.zeros([T])
    $ ]9 J$ k) V5 r7 n
    * F3 R: A- ]% X; t这两句话的意思是一样的,就是利用numpy(已被我们重新命名为np)的函数(zeros())来建立一个所有元素都是零的数组,而给的参数决定了这个数组的维度。比如:" {) g+ W2 t* i& f; _

    $ j0 i: y+ _+ H; va = np.zeros([2,3])9 M9 O3 r1 |; R/ S. N
    a) Q' g( {! i: \

    5 n) P: u  i5 i: D7 Q: xarray([[0., 0., 0.],6 S4 R) N$ J/ Y- J8 M. E
           [0., 0., 0.]]). x! r% H- o5 x) h% I

    ! ]; _6 p) l/ j, O6 z; Q- @& p/ K, j; \
    array([0., 0., 0., 0., 0.])6 n( F$ q% J. Z
    # U+ n4 [+ S9 n, F0 }8 ~

    4 w0 }* q( h1 l2 h. g类似的还有产生元素全部是1的数组的函数np.ones():3 V( N/ A4 G) I4 R+ x5 ^

    * w* x1 n, _: F; \, Z6 Wa = np.ones([5])  \* P5 U" d) B
    a
    ! D0 t" ^+ m& R4 D) u/ f$ b1 p3 O" s  R# ]$ n
    array([1., 1., 1., 1., 1.])2 W2 W% ]# V7 a/ P& m% g2 p

    ; G+ \2 y" L( \5 u
    " K* E9 I. i8 R  Ua = np.ones([2,3])
    ! T. ?9 c% t/ N) Ia
    6 R* v) m: m7 Z0 d' N- z* u
    1 ?8 `8 S3 H6 ]6 ^' v9 m2 C2 ?! O0 L& d* E
    array([[1., 1., 1.],- u) S- P5 ~9 d! }, D
           [1., 1., 1.]])
    " M4 B; X( h$ U, M  h* t4 K  Q+ R8 O) W
    3 t- ~, ^, {' O( [# R
    plt.plot(i)
    0 `  x2 G8 s( ?$ `1 h3 a1 p
    % d$ ?; o0 C+ W1 m' ?; W
    % Z8 N' h+ F" @[<matplotlib.lines.Line2D at 0x7f0c2768d6d8>]
    , C: V7 G, v! ~  L9 Y. N5 ?9 Q  h/ G. @3 F

    5 {3 m6 |; P, _2 ~6 Y* t
    * ?- ^% x4 P7 I3 c2 g0 P# u
      }7 D) w4 x* g  _1 H( A& Y3 Y8 e# t6 G+ G, D
    实现SI模型的核心代码是第三个cell的第11,12行:
    3 |) W& Y6 q0 j# Y# k8 a/ x( h, U' H0 {) S
    for t in range(T-1):& F; `/ ]& Q( k1 y. _" k2 [, P; }: t
        i[t + 1] = i[t] + i[t] * lamda * (1.0 - i[t])
    * L4 f; c8 e5 F7 H4 ^2 ^0 b/ @! z+ |% U. D# w$ ^

    就是我们建立的数学模型,利用python的for循环语句累加迭代的方式把每天的增加量叠加到感染者比例上。

    运行代码完成计算,我们利用matplotlib的pyplot来画出感染者的随天数的变化曲线:

    # Q$ Q' W4 ^# K% K/ @0 x) R9 A
    fig, ax = plt.subplots(figsize=(8,4))5 p& R3 d3 d6 y
    ax.plot(i, c='r', lw=2)) c: ^2 l$ Z4 b0 C# _+ B
    ax.set_xlabel('Day',fontsize=20)
    6 @# v- {: e/ [2 q* H  J; P$ @ax.set_ylabel('Infective Ratio', fontsize=20)
    & n& ^9 x% ^# d$ o) h' fax.grid(1)
    $ `% S+ r" h+ K, Gplt.xticks(fontsize=20)
    2 I+ r5 D+ e8 x/ i: \/ d5 K( Wplt.yticks(fontsize=20);
    9 R' A; w2 T/ |7 F* d' j- c- {) g( Z; ~: _- z
    , A. u8 F# I' O1 N* B) q/ H

    & i7 z3 }, Y0 q8 C' e
    1 X" D% I3 W$ |0 R2 @从这个结果看到,大约在25天左右,全部人群都会变成感染者,感染率  。' \$ R6 m$ _) p  y4 N
    在程序中我们假设每天每个患者传染0.8个人,你可以改变lamda的值,观察全部人群感染的天数的变化。
    " V6 i. R- j1 S4 [# w认真思考你会知道,lamda的现实意义就是该城市的卫生水平,衡量的是消毒,隔离这些措施执行得怎么样。

    回到传染病模型,按照SI模型计算的结果,我们全人类都会患病,这好可怕!原因是我们忽略了一个很重要的因素,那就是我们有奋斗在一线的医护人员,我们会被治愈!所以SI模型只适合研究具有高传染风险又不能被治愈的病(比如HIV)。

    但是对于其他病,我们是可以靠医疗和自身免疫系统康复的,那么紧接着的一个问题就是,被治愈后还会再被传染上嘛?根据这个问题的回答不同,我们有了两个不同的模型,SIR 和 SIS。现在可以揭晓,SIR的R的含义了,就是移出者(Removed),现实含义就是指被治愈后不会再被感染的人。而SIS表示治愈后仍然还是易感者。下面我们用python来分别实现这两个模型。

    SIS模型为了实现这个模型,我们需要引入新的一个参数,治愈率  。好啦,先上我们的新示意图:Image Name和SI模型做比较,区别就是计算感染者的增加数时要减去被治愈的人数。0 h$ v8 r0 a: @9 |/ f; [
    所以这时候每天的增加的感染者为:   ,% ^  G6 T/ M1 W5 C
    增加的感染率为:   。5 Y' j7 L6 d2 [
    模型完成啦,修改python代码:7 N% N. i3 Y& D: S- p( ?. U
    # susceptiable ratio
    3 N4 P. W7 c: B3 ks = np.zeros([T])
    . r7 {+ U$ A5 K; `' Y# infective ratio& S" `& F2 s( p4 C- i9 p1 {
    i = np.zeros([T])$ x6 `9 j; b) [
    # f  V( {1 a& ^
    # contact rate8 `! {6 R; O# ]7 d
    lamda = 1.0
    0 P. u, q. W0 W+ i# recover rate
    0 D- t2 M: H4 Y2 z# pgamma = 0.5 2 h% C" ~, t+ }5 D6 B% c

    ' C$ r+ ~2 V5 _+ W7 o7 y( u# initial infective people  X6 z8 Y, {3 g1 q2 i) R
    i[0] = 45.0 / N
    ( |4 A( H5 i* ]/ t: `" l  X7 k0 @7 |2 B9 I. h
    for t in range(T-1):
    - I% y$ C! p3 ~8 X7 D7 x    i[t + 1] = i[t] + i[t] * lamda * (1.0 - i[t]) - gamma*i[t]2 k3 w* Z8 N3 I" @- }' Z/ P: W3 {
    # v4 ~+ [& q: s! q8 ~( P" J
    ! X3 B+ g+ G$ r" [6 m# b' m* J
    * t; u& o% {! E* i: b7 \9 o  c$ [# y
    运行代码,我们画出曲线(代码和SI模型的画图完全一样):
    ' {% r8 s( M) ~! P9 p( [
    2 e) z6 ?& }! Z" p9 x' ofig, ax = plt.subplots(figsize=(8,4))
    " m& s+ x' B- L9 q, z* _1 x' b2 T5 Lax.plot(i, c='r', lw=2)' ^8 U6 b$ Y( ^1 m8 P* {
    ax.set_xlabel('Day',fontsize=20)
    # m" o* w, N- I( t( Eax.set_ylabel('Infective Ratio', fontsize=20)0 D0 d- i) ^8 E3 G" L
    ax.grid(1)
    9 @# R/ w5 P6 Q- v! \plt.xticks(fontsize=20)
    & O# T$ h5 Z" ^& Xplt.yticks(fontsize=20);
    5 q8 I0 n) v. B+ y. b9 i" q5 e7 Q! Q9 p9 G; \

    ! r; ?: l/ J; H6 M
    ' B% N1 L( ^3 E1 k+ M
    # Y+ L% J7 Z1 @5 \! a/ c( |

    行代码,我们画出曲线(代码和SI模型的画图完全一样)
    4 y7 C, R+ b% c% W2 @可以看到,达到最大感染率的时间退后10天左右,最后感染和治愈达到动态平衡,人群中有始终有一半的人感染着。所以,SIS模型适合研究具有传染性和反复性的流行病,比如常见流感。同样的,感兴趣的话,改变lamda和gamma的值,观察曲线的变化。和lamda不同的是,gamma的现实意义就是对这种疾病的治疗水平。

    SIR模型

    加入了移出者,被治愈的病人不会再被传染,先上我们的新示意图:

    Image Name

    SIR 模型. F1 t4 N+ q& ]/ R4 Z+ i
    注意到这里,人群被分成了三类,不再只有I和S,所以相比于之前的模型,我们需要找到新的约束关系。现在我们需要分别计算三种人每天的增加量了:

    7 O$ D( }0 z  p2 L: b7 `  x; _
    • 易感者:每天都在被传染,所以一直在减少,减少量为被传染的人数:  
    • 感染者:增加了被感染的人,减少了治愈的人:  
    • 移出者:增加了治愈的人:  7 Z9 S2 K! }8 ^+ |8 o

    建模完成,修改python代码,并且假设人群普遍易感,新型疾病,初始没有移出者。

    . N; G  L  ^$ O
    # population
    7 t$ P$ P- Z" |  E# }N = 1e7 + 10 + 5+ q9 ?' ~7 H; ]1 m% q$ C9 ?
    # simuation Time / Day" G& Z) z$ k3 x& s1 p# `9 w
    T = 170
    * s: l( k, K- b/ U  U$ r! z# susceptiable ratio
    , e5 W0 N0 l5 D3 J1 E# g4 Ts = np.zeros([T])$ k+ N, r* a7 I/ z- k
    # infective ratio' [9 c/ [; B4 N/ ^' \' G' m
    i = np.zeros([T])
    . b6 f# @6 N8 n2 `+ s- l5 u# remove ratio
    ! f+ }# ?' |& t* D. F- L; Hr = np.zeros([T])  e4 W5 [! [6 m4 [( E

    6 [# `0 `& ?! G% @# contact rate
    4 i9 p" {5 y+ n) ulamda = 0.2586
    + u0 v2 p2 o1 I  l9 `# recover rate0 L! W8 z+ C1 J( y8 v
    gamma = 0.0821
    , x  a) }2 q$ ~  f; c
    , C: X* K4 u- ^. l' I* o# initial infective people
    % m1 w* t  x  X% Y  v' B. ti[0] = 10.0 / N* r5 ^3 F) |0 [
    s[0] = 1e7 / N- n$ X2 f; ^/ L" g" f1 I5 `- r
    for t in range(T-1):
    + K' J. O' e+ h' _, ~# X  g6 V- _7 g    i[t + 1] = i[t] + i[t] * lamda * s[t] - gamma*i[t]
    : H1 G+ Y/ e- Q    s[t + 1] = s[t] - lamda * s[t] * i[t]
    9 b  m9 L/ i% I0 \  G2 j2 O! G    r[t + 1] = r[t] + gamma*i[t]
    : e4 }0 J- v* p: U1 ?7 z. q3 F. |& A
    0 _. c$ h% _3 cfig, ax = plt.subplots(figsize=(10,6))8 l$ C$ J! r6 e0 Z+ h* ]
    ax.plot(s, c='b', lw=2, label='S'). n# c( O3 J' s) ^5 X4 T
    ax.plot(i, c='r', lw=2, label='I')
    * C/ S3 R' Z3 ^ax.plot(r, c='g', lw=2, label='R')
    ' {* P3 E, O# |3 j( dax.set_xlabel('Day',fontsize=20)
    . B3 h! d# q( qax.set_ylabel('Infective Ratio', fontsize=20)3 E, F7 u: _4 b9 d% P6 l2 }9 \, u3 v
    ax.grid(1)1 g) L! q+ J7 l- G2 M: g" P
    plt.xticks(fontsize=20)
    . D* F+ V0 G  r  y. t- l9 a& ^plt.yticks(fontsize=20)
    5 C) D1 J- S. M8 Y% M+ t( Splt.legend();( P- k" N9 n; |* u0 M
    ( B, \7 G  a' z

    & E3 E. i8 X% q& U" V' ]' k/ c" f) I) ~5 z9 O) M

    4 s8 w* s4 I  t% X! n$ J; n) Z

    感染人数峰值发生在一个月左右,最大感染人数不到人群的20%, 但是最终人群的80%都会得此病(就是最终的移出者的比例)。SIR模型适合研究没有潜伏期的急性传染病,治疗后能够痊愈并具有抗病性。

    到这里,虽然不准确,我们也可以先用SIR模型来分析一下此次疫情,武汉新型冠状病毒的传染病动力学!

    模型有了,其实就是确定参数的问题。一开始就有人做了这个工作:

    Image Name于教授给的参数是参考了非典的,  ,初始易感人数为一千万, 初始感染10人,初始移出者5人,那么我们的城市总人数    , 带入我们的模型得到结果:

    重现于教授的模型
    2 ]4 \$ c; }+ G$ S/ @+ U2 F& O' _高峰和尾声日期的推测基本相符。


    8 n+ e- y1 [, o( G# susceptiable ratio5 ]0 M) ^" C8 @; Z' i7 ?/ O
    s = np.zeros([T])
    $ Z, t0 h; n) G& `# infective ratio1 C9 x5 @" _3 |
    i = np.zeros([T])
    ( W! d1 ?; C% a) k/ C# removed ratio
    ) ^* I" F+ j( e& k7 \9 k( Mr = np.zeros([T])6 s$ Y# V; T" u9 q: s* `! h

    ' J2 V- S7 j% p' M6 n# birth ratio: ~/ P/ e7 ]! r/ F; Y
    b = 20.0 / N
    * ~4 n* R+ e2 \% C5 p2 ~. e/ y1 w# death ratio, A; }# {. t( v% E  P( g
    d = 10.0 / N
    $ p0 H# X  X' Y% }, R
    3 Y; ~; j; a' [  j5 A& r# contact rate8 u$ {. K* V: A9 M
    y = 1.5
    7 j6 E( D# F9 v# recover rate
    ( q  {0 p3 r0 k! eu = 0.8 # 1 / infective_period
    % T9 P( }3 |+ C8 s1 z4 ?* s3 j# t- m; @7 l7 i6 l2 G9 M
    # sigma = y / u
    % T7 g7 ~9 T0 J6 D, d; x, ~6 O$ A( O+ m) Z# E/ ]' d) x- ^3 J
    # initial infective people) W: }, d* I8 m: I
    i[0] = 45.0 / N, y3 R. d+ @1 O# o- @0 }
    s[0] = 1 - i[0]
    # K! c$ _$ r" {- }  C* K% bfor t in range(T-1):! \+ P$ i- A# a* F# K) o; ~
        i[t+1] = i[t] + i[t] * y * s[t] - u*i[t] - d*i[t]% A5 \7 Y" B1 F3 \' w
        s[t+1] = s[t] - y * s[t] * i[t] + b - d*s[t]$ c4 [' O5 k$ j9 I
        r[t+1] = r[t] + u*i[t] - d*r[t]0 r$ w  U* a" L& w
    5 }2 K/ ]+ J, l. r# S% B8 a  W
    plt.plot(i)
    ( ?# B$ P# o8 h1 Splt.plot(s)# P$ ?$ S6 n; i- b: s1 C
    plt.plot(r)- v( x1 i# w7 m2 v, I* m6 T
    plt.plot(np.diff(i),ls='--')6 V3 Z+ D* [  j, Y/ n
      P, f' y$ w; p% |( W# @

    7 E$ K) c) Z9 |) M; D[<matplotlib.lines.Line2D at 0x7f77796e8518>]# L& l5 m* K5 `6 h! y; E2 N5 F: d

    / N% U. d; {0 X8 U0 @/ ]# K% G
    " k0 `2 T$ @+ |2 m  J5 Y9 D. M$ Y' V2 o$ v1 P; T2 w9 [; M- m8 N
    SEIR模型

    但是,SIR模型和实际情况的出入会比较大,因为忽略了太多因素了,比如说潜伏期,比如说政策调控,药物,出生死亡等等。下面我们可以和前面一样,把潜伏期考虑进去,新增一个人群,叫潜伏者E(exposed):

    Image Name

    SEIR模型+ Q- C5 [7 @" I9 \5 H
    同样的我们需要计算各人群每天的增加量:

    S:每天减少:  3 H$ ]8 ^- u$ V8 R& f
    E:每天增加传染,减少发病:  
    0 I* ]% [6 f+ oI:每天增加发病,减少治愈:  
    ( T; q! L; r1 A4 A+ [R:每天增加治愈:  6 W1 b  E' J) b) O$ w$ B5 w6 X7 h
    建模完成,修改我们的python程序,这里的   可以理解为潜伏期的倒数。给的4天。新型冠状病毒给目前临床的潜伏期是3-14天。, `- y- D3 C5 s3 j1 V7 x8 N
    # population/ x1 ^" m3 e) ~8 v
    N = 1e7 + 10 + 5( j  R, D) @6 O4 y5 v' ^; I( g
    # simuation Time / Day* G+ Z- n/ v" I8 H6 p
    T = 170
    - a, R# z2 m& @: H: f/ c% U# susceptiable ratio5 I; [, ~7 ~7 A3 u1 O+ r( D
    s = np.zeros([T])  k% n2 p9 N+ e
    # exposed ratio2 e! _  ~/ [; G! f2 Y* h% g
    e = np.zeros([T])  |, P5 L: w& N- M% ]7 q5 n2 B+ N
    # infective ratio
    1 R2 w( J( ^, V% s$ t. V9 u1 o% x/ ^i = np.zeros([T])
    . B8 m" P- [; n1 c- q% a# remove ratio3 N) M5 T  f' s2 Q
    r = np.zeros([T])7 `( F) a2 ?: I6 D3 H

    8 @, Q4 m3 K- \, `2 D# contact rate
    5 C: l* M) Q# L& e+ X2 Olamda = 0.5' ^  N. J+ ?" i! Y7 u
    # recover rate
    2 Q" ]+ \7 s, q3 x' H7 s9 z$ Jgamma = 0.0821
    2 w6 z# u$ O, ?9 |; {& G! D, m$ Y# exposed period
    ) J0 g4 `3 K, l- f4 xsigma = 1 / 4
    . v: I% H5 @6 h/ g
    6 u4 Q+ y. t* q% k# initial infective people
    0 C8 {  g2 _  K& Li[0] = 10.0 / N+ B6 Y4 P  g# P' }+ K+ Y
    s[0] = 1e7 / N
    ( i! e. ]! h1 v# q: R$ {e[0] = 40.0 / N. B$ T" k# R, t0 F) g: ?
    for t in range(T-1):- v3 K" C4 E+ Z- O( d4 P* R+ r8 L
        s[t + 1] = s[t] - lamda * s[t] * i[t]
    . S6 x" K* k$ T3 H    e[t + 1] = e[t] + lamda * s[t] * i[t] - sigma * e[t]1 Y5 K6 H% |3 H9 M1 F+ v
        i[t + 1] = i[t] + sigma * e[t] - gamma * i[t]
    / u( ?5 K8 J' {  C3 j    r[t + 1] = r[t] + gamma * i[t]2 ?2 x, t. ~$ C4 X6 f1 j

    8 i/ l; G- E' S0 d: F* n1 h, l7 V2 d3 ]6 _7 h
    fig, ax = plt.subplots(figsize=(10,6))
    & L. G- f' Y+ g0 X) H* tax.plot(s, c='b', lw=2, label='S')& \6 P. j6 `: f9 c- D0 }0 N5 E
    ax.plot(e, c='orange', lw=2, label='E')0 f, f% }( F: |& g4 S% a- ]
    ax.plot(i, c='r', lw=2, label='I')
    - R# l& a* T/ d( E2 z7 iax.plot(r, c='g', lw=2, label='R')1 S5 f2 f' t+ t8 Y' l, V
    ax.set_xlabel('Day',fontsize=20)
    , I$ M1 R7 M0 tax.set_ylabel('Infective Ratio', fontsize=20)9 X* c( h) S% A' `2 t, v5 A5 b
    ax.grid(1)- O; M+ E! G( N8 r. B0 u# b1 M
    plt.xticks(fontsize=20)2 {% e5 q, `; y3 H8 K
    plt.yticks(fontsize=20)
    ) h1 M/ Q# f. M: [plt.legend();
    + c$ a( s- U% z( P2 o* U& u! Z& ^% d+ b/ N3 A6 j# `4 c  r

    0 K1 h+ d. h0 l% E7 d* }
    ! d6 p; m  T$ \2 X6 d/ x, l5 T5 L9 d- y$ x/ k1 x8 g: g
    按照模型的结果,此次疫情可能真的要持续到 三四月份。这个接触率    真的非常影响表现,模型给的是个常数,但是由于政府措施的原因,这应该是个变化的值。
    4 [+ w# F+ V4 l; M+ c# X还有治愈率   也是。没有完美的模型,但是随着考虑因素的增多,就会越来越接近实际情况,从而指导政府的疫情方针政策的制定。
    1 S3 Q( N" m0 s4 _8 w' j& ^7 B) D1 X6 P' y# q  n8 s

    7 U% L, u! u% c" U* N7 ]( v6 m
      ^0 P" c4 x, v# O; G- Q
    0 H, k2 _( ?& }5 z1 o) z& C
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-8-2 11:21 , Processed in 0.528089 second(s), 50 queries .

    回顶部