没有合适的资源?快使用搜索试试~ 我知道了~
首页新冠数据整理和简单分析(二)——SIR及其变种
新冠数据整理和简单分析(二)——SIR及其变种
12 下载量 101 浏览量
更新于2023-03-03
评论 1
收藏 489KB PDF 举报
新冠数据整理和简单分析(二)——使用SIR及其变种 这篇文章主要是想介绍一下使用SIR模型对新冠病毒传播建模。在数据分析方面的研究目前绝大多数都是基于SIR模型变种来模拟病毒传播的过程。所以,我准备以新冠病毒的数据为例,简单介绍一下SIR以及其变种的应用。 准备工作 数据来源和参考 SIR模型是一个简单的传染病模型,它将人群分为三类,分别是易感染者(Susceptibles)、感染者(Infectives)、移除者(Removed)。为了得到相应这三类人群的数据,我通过Kaggle的开源数据集对当前的数据进行了补充。以下是我的数据链接。 病例数据 人口 人口结构 管控措施 在本文的前半部分,我
资源详情
资源评论
资源推荐
新冠数据整理和简单分析(二)新冠数据整理和简单分析(二)——SIR及其变种及其变种
新冠数据整理和简单分析(二)新冠数据整理和简单分析(二)——使用使用SIR及其变种及其变种
这篇文章主要是想介绍一下使用SIR模型对新冠病毒传播建模。在数据分析方面的研究目前绝大多数都是基于SIR模型变种来模拟病毒传播的过程。所以,我准备
以新冠病毒的数据为例,简单介绍一下SIR以及其变种的应用。
准备工作准备工作
数据来源和参考数据来源和参考
SIR模型是一个简单的传染病模型,它将人群分为三类,分别是易感染者(Susceptibles)、感染者(Infectives)、移除者(Removed)。为了得到相应这三类人
群的数据,我通过Kaggle的开源数据集对当前的数据进行了补充。以下是我的数据链接。
病例数据
人口
人口结构
管控措施
在本文的前半部分,我主要参考了Lisphilar的notebook。而后半部分我主要参考了几篇不错的COVID19传播建模论文。跟大家分享一下我的收获。
使用的工具和包使用的工具和包
from collections import defaultdict
from datetime import timedelta, datetime
from dateutil.relativedelta import relativedelta
from pprint import pprint
import warnings
from fbprophet import Prophet
from fbprophet.plot import add_changepoints_to_plot
import pystan.misc # in model.fit(): AttributeError: module 'pystan' has no attribute 'misc'
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib
from matplotlib.ticker import ScalarFormatter
%matplotlib inline
import numpy as np
import optuna
optuna.logging.disable_default_handler()
import pandas as pd
import dask.dataframe as dd
pd.plotting.register_matplotlib_converters()
import seaborn as sns
from scipy.integrate import solve_ivp
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
定义函数和方法定义函数和方法
为了简化介绍和缩短文章长度,我只将主要的函数放在这里。
SIR模型模型
class SIR(ModelBase):
NAME = "SIR"
VARIABLES = ["x", "y", "z"] PRIORITIES = np.array([1, 1, 1])
MONOTONIC = ["z"]
def __init__(self, rho, sigma):
super().__init__()
self.rho = rho
self.sigma = sigma
def __call__(self, t, X):
# x, y, z = [X[i] for i in range(len(self.VARIABLES))] # dxdt = - self.rho * x * y
# dydt = self.rho * x * y - self.sigma * y
# dzdt = self.sigma * y
dxdt = - self.rho * X[0] * X[1] dydt = self.rho * X[0] * X[1] - self.sigma * X[1] dzdt = self.sigma * X[1] return np.array([dxdt, dydt, dzdt])
@classmethod
def param_dict(cls, train_df_divided=None, q_range=None):
param_dict = super().param_dict()
q_range = super().QUANTILE_RANGE[:] if q_range is None else q_range
if train_df_divided is not None:
df = train_df_divided.copy()
# rho = - (dx/dt) / x / y
rho_series = 0 - df["x"].diff() / df["t"].diff() / df["x"] / df["y"] param_dict["rho"] = rho_series.quantile(q_range)
# sigma = (dz/dt) / y
sigma_series = df["z"].diff() / df["t"].diff() / df["y"] param_dict["sigma"] = sigma_series.quantile(q_range)
return param_dict
param_dict["rho"] = (0, 1)
param_dict["sigma"] = (0, 1)
return param_dict
@staticmethod
def calc_variables(df):
df["X"] = df["Susceptible"] df["Y"] = df["Infected"] df["Z"] = df["Recovered"] + df["Fatal"] return df.loc[:, ["T", "X", "Y", "Z"]]
@staticmethod
def calc_variables_reverse(df):
df["Susceptible"] = df["X"] df["Infected"] = df["Y"] df["Recovered/Deaths"] = df["Z"] return df
def calc_r0(self):
if self.sigma == 0:
return np.nan
r0 = self.rho / self.sigma
return round(r0, 2)
def calc_days_dict(self, tau):
_dict = dict()
_dict["1/beta [day]"] = int(tau / 24 / 60 / self.rho)
_dict["1/gamma [day]"] = int(tau / 24 / 60 / self.sigma)
return _dict
SIRD模型模型
weixin_38653508
- 粉丝: 2
- 资源: 904
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0