如何解决如何转换日期以建立图表?林空间
使用精简输入法,输入日期数据,以便在其上构建图形。第一次做。我收到此错误。
datetime.date' object cannot be interpreted as an integer
据我了解,日期需要以某种方式进行转换。但是不要扔石头,我也不知道如何
def SIR(y,t,N,beta,gamma):
S,I,R = y
dSdt = -beta * S * I / N
dIdt = beta * S * I / N - gamma * I
dRdt = gamma * I
return dSdt,dIdt,dRdt
st.subheader("Date parameters")
today = datetime.date.today()
tomorrow = today + datetime.timedelta(days=1)
one_day = tomorrow - datetime.timedelta(days=1)
start = st.date_input('Start date')
end = st.date_input('End date',tomorrow)
last = st.date_input('Last date',one_day)
if start < end:
st.success('Start date: `%s`\n\nEnd date: `%s`\n\n' % (start,end))
else:
st.error('Error: End date must fall after start date.')
if last < end:
st.success('Last date: `%s`\n\nEnd date: `%s`\n\n' % (last,end))
else:
st.error('Error: End date must fall after last date.')
t = np.linspace(start,last,end)
ret = odeint(SIR,y0,args=(N,gamma))
S,R = ret.T
def plotsir(t,S,R):
f,ax = plt.subplots(1,1,figsize=(10,4))
ax.plot(t,'b',alpha=0.7,linewidth=2,label='Susceptible')
ax.plot(t,'y',label='Infected')
ax.plot(t,R,'g',label='Recovered')
ax.set_xlabel('Time (days)')
ax.yaxis.set_tick_params(length=0)
ax.xaxis.set_tick_params(length=0)
ax.grid(b=True,which='major',c='w',lw=2,ls='-')
legend = ax.legend()
legend.get_frame().set_alpha(0.5)
for spine in ('top','right','bottom','left'):
ax.spines[spine].set_visible(False)
st.pyplot()
if st.button("Show Plot SIR"):
st.text("Enjoy")
plotsir(t,R)
以前只驱动了三个数值
t = np.linspace(0,49,50)
我了解精简在这里间接受到影响。我真的很困惑。
解决方法
之所以不起作用,是因为np.linspace
正在寻找整数作为其输入。不是用于创建带有日期的范围。
使用熊猫中的pd.date_range()
之类的东西来设置日期范围。
>>> pd.date_range(start='1/1/2018',end='1/08/2018')
DatetimeIndex(['2018-01-01','2018-01-02','2018-01-03','2018-01-04','2018-01-05','2018-01-06','2018-01-07','2018-01-08'],dtype='datetime64[ns]',freq='D')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。