运用运用python实现实现2019-nCoV疫情确诊数据拟合与预测疫情确诊数据拟合与预测
思路思路
第一步,画出现有数据的散点图,大致了解其分布规律
第二步,利用现有数据拟合出曲线,求解拟合曲线的参数
第三步,利用拟合曲线对未来预测
下面严格按照这散布走模式进行
第一步第一步 散点图散点图
按照时间序列将确诊病人数在坐标轴上描出散点,同时添加坐标的标签,顺便更改横坐标的刻度标签,使得其看起来像随时间变化而变
化的。
#散点图
fig=plt.figure(figsize=(16,8)) #建立画布
ax=fig.add_subplot(1, 1, 1)
ax.scatter(t,confirm, color="k", label="确诊人数") #真实数据散点图
ax.set_xlabel("天数") #横坐标
ax.set_ylabel("确诊人数") #纵坐标
ax.set_title("确诊人数随时间变化情况") #标题
#ax.set_xticklabels(['', '1月13号', '1月18号','1月23号','1月28号', '2月2号', '2月7号','2月13号','2月20号'], rotation=30, fontsize=12) #自定
义横坐标标签
ax.set_xticklabels(['','1月13号', '1月23号', '2月2号', '2月10号','2月20号','3月1号','3月10号'], rotation=30, fontsize=10) #自定义横坐标标
签
第二步第二步 拟合拟合
一般的拟合有两种方法,第一种用多项式拟合,因为多项式是最简单的函数结构,且任何一个连续函数都可以转化为多项式;第二种是
用确定的函数拟合,需要先定义出函数表达式,这里采用logistic函数,因为从散点图可以看到这些散点大致分布在“S”形曲线的前半部
分上,logistic函数表达式如下
其中
K为环境容量,即增长到最后,f(t)能达到的极限
P0为初始容量,就是t=0时刻的数量。
r为增长速率,r越大则增长越快,越快逼近K值,r越小增长越慢,越慢逼近K值。
首先定义出logistic函数,其中K,P0,r是待求的参数,然后调用from scipy.optimize里面的curve_fit函数进行拟合,会得到拟合参数,接
着把拟合曲线也绘制出来
def logistic(t,K,P0,r): #定义logistic函数
exp_value=np.exp(r*(t))
return (K*exp_value*41)/(K+(exp_value-1)*41)
coef, pcov = curve_fit(logistic, t, confirm) #拟合
print(coef) #logistic函数参数
y_values = logistic(t,coef[0],coef[1],coef[2]) #拟合y值
plt.plot(t,y_values,color="blue",label="拟合曲线") #画出拟合曲线
第三步第三步 预测预测
有了拟合曲线的参数就能够得到疫情变化函数表达式
其中ttt是自变量,单位是天数,fff因变量,表示是确诊人数,单位是人,该表达式表示随着天数的增加确诊人数的变化情况,大约2月
11号左右出现平稳点,疫情得到有效控制。
最终图最终图
预测数据
category=OptimizeWarning)
[7.49955152e+04 1.00000000e+00 2.93414741e-01]
评论0