中国疫情发展趋势分析预测(python实现)

中国疫情发展趋势预测

笔者使用的增长模型预测中国疫情发展趋势,使用了3种增长模型进行了预测,这里只贴出利用逻辑斯蒂增长模型的代码。

 

logistic增长的曲线也称为s型曲线。下图左图为曲线数量,右图为增长速率。

 

逻辑斯蒂增长模型,又叫阻滞增长模型,
逻辑斯蒂曲线通常分为5个时期:

  • 开始期,由于种群个体数很少,密度增长缓慢,又称潜伏期。
  • 加速期,随个体数增加,密度增长加快。
  • 转折期,当个体数达到饱和密度一半(K/2),密度增长最快。
  • 减速期,个体数超过密度一半(K/2)后,增长变慢。
  • 饱和期,种群个体数达到K值而饱和。

根据历史经验,2003年非典患者预测,部分学者利用逻辑斯蒂增长模型进行预测,并且准确率很高,所以我们也尝试利用逻辑斯蒂增长模型进行新型冠状病毒患者数量,逻辑斯蒂增长模型具体为:$y=\frac{k}{1+\mathrm{e}^{-a(x-b)}}$
其中k表示新型冠状病毒患者的上限值;a反映了增长速度;b表示拐点,即从b点开始上升速度变慢,在b点时上升速度达到最高。

好了逻辑斯蒂增长模型的基本知识就介绍这么多,现在让我们开始来点干货。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import warnings
# from scipy.optimize import curve_fit  # 非线性最小二乘法拟合
from scipy.optimize  import leastsq

warnings.filterwarnings('ignore')

plt.style.use("seaborn")
plt.rc('font', family='SimHei', size=13)  # 显示中文
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号


# 先读取数据
China_data = pd.read_csv(r"./total.csv", encoding='gbk')
China_data

然后我们先来绘制中国疫情累计确诊患者数量走势图,我们主要的任务是预测,所有就不贴出交互的图,贴个简单的走势图即可

 

plt.plot(China_data['累计确诊'], label='确诊')
plt.plot(China_data['现存疑似'], label='现存疑似')
plt.plot(China_data['累计死亡'], label='死亡')
plt.plot(China_data['累计治愈'], label='治愈')
plt.legend(loc="best")
plt.xlabel("时间")
plt.title("2019-nCoV疫情曲线")

根据之前预测非典患者数量的经验,我们也考虑使用增长模型来预测

# 逻辑斯蒂增长模型
def logistic_increase_function(p, t):
    K, a, b = p
    exp_value = np.exp(-a * (t - b))
    return K / (1 + exp_value)
# 定义预测误差函数
def err_f(p, t, y):
    return logistic_increase_function(p, t) - y
# 参数初始值
logistic_p0 = [80000, 0.8, 20]  # 初始值只要不是太离谱,最终都会收敛

# 我们选择的数据
t = np.array([i + 1 for i in range(56)])
China_y = China_data['累计确诊'].values

# 利用最小二乘法求解参数
logistic_params = leastsq(err_f, logistic_p0, args=(t, China_y))

China_p = logistic_params[0]

# 利用我们定义的逻辑斯蒂增长函数预测
China_predict_data = logistic_increase_function(China_p, t)
China_predict_data

# 预测的误差
China_e = China_y - China_predict_data
China_e

# 绘制误差的散点图
plt.scatter(China_y, China_e)

对于误差大的样本点,可以删除,然后重新拟合参数,这里我们就不删除了

# 绘图
plt.scatter(t, China_y, label="实际确诊患者数量")
plt.plot(t, China_predict_data, label='预测患者数量曲线')
plt.xlabel('time')
plt.ylabel('患者数量')
plt.legend(loc='best') 

 

# 预测中国疫情未来走势
future_t = [i + 1 for i in range(0, 100)]
China_future_fit = logistic_increase_function(China_p, future_t)
China_future_fit
# 绘图
plt.scatter(t, China_y, label="实际确诊患者数量")
plt.plot(future_t, China_future_fit, label="预测未来患者数量")
plt.xlabel('time')
plt.ylabel('患者数量')
plt.legend(loc='best') 

模型预测的结果是中国新冠肺炎最终的患者数量是80717人左右,拐点出现在第30天,即2月7日左右,疫情将在第80天,即3月29日左右结束。

感兴趣的朋友,可以利用这个模型预测韩国、日本、意大利、伊朗等国家的疫情发展趋势,另外笔者还利用Gompertz增长模型也进行了预测,这里就不贴出来了,感兴趣的朋友,可以自己实现一下。

这里仅贴出Gompertz模型的函数

# Gompertz增长模型
def func(p, t):
    k, a, b = p
    return k * a**(b**t)

 

  • 26
    点赞
  • 306
    收藏
    觉得还不错? 一键收藏
  • 160
    评论
物流增长曲线模型是一种数学模型,可以用来预测分析物流运输领域的增长趋势。 物流增长曲线模型通常基于经验规律和历史数据,寻找一种适合描述物流增长的曲线形态。常见的曲线模型包括S型曲线和指数曲线。 S型曲线模型认为物流增长一开始较缓慢,随着时间的推移,增速逐渐加快并达到高峰,最后趋于饱和。这种曲线模型通常适用于物流业初期阶段的增长。 指数曲线模型则认为物流增长呈指数上升的趋势,即随着时间的推移,增长速度越来越快。这种曲线模型常出现在物流业发展较快、市场需求增长迅猛的情况下。 对于物流增长曲线模型的求解,首先需要收集和整理相关的历史数据,包括物流运输量、市场规模、产业发展等方面的数据。然后,通过数据分析和数学建模的方法,确定最适合描述物流增长的曲线模型。 求解过程中,可能需要使用拟合算法和优化方法,来寻找最佳拟合曲线,以使得模型与实际数据的拟合度最高。常见的拟合算法包括最小二乘法、最大似然估计等。 在求解完成后,可以借助所得模型进行物流增长的预测分析。根据模型的结果,可以评估物流市场的潜力和发展趋势,为物流企业的战略决策提供参考。 需要注意的是,物流增长曲线模型虽然能够提供一定的预测能力,但仍然受到各种不确定因素的影响,如经济环境、法规政策等。因此,在应用模型结果时,需要综合考虑各种因素,并进行合理的调整和判断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 160
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值