File:Koronaviruksen R0 Suomessa 6.svg

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search

Original file(SVG file, nominally 928 × 468 pixels, file size: 51 KB)

Captions

Captions

Estimted R0 of Covid-19 in Finland, spring 2020

Summary

[edit]
Description
Suomi: Koronaviruksen arvioitu perusuusiutumisluku (tarttuvuusluku) R0 Suomessa keväällä 2020. Arvio tehty silitetyllä datalla ja yksinkertaisella eksponenttikaavalla.
English: Basic reproduction number R0 of Covid-19 in Finland, spring 2020. Simple expponnetial estimation formula, smoothed data.
Date
Source Own work
Author Merikanto

Python 3 code to produce image

    1. calculaters COVID-19 R0 using simple exponential estimation formula
    2. and smoothed data
    3. COVID-19 statistics from aggregated data from net site
    4. with Python
    5. Input from internet site: cases, recovered, deats.
    6. 11.01.2021
    7. 0001.0001


paiva1="2020-02-28" paiva2="2021-02-22"

  1. ymax1=1000
  2. ymax2=30


import math as math import numpy as np import scipy as sp import pandas as pd import matplotlib.pyplot as plt

import matplotlib.ticker as ticker

from matplotlib.ticker import (MultipleLocator, FormatStrFormatter,

                              AutoMinorLocator)

import datetime as dt import matplotlib.pyplot as plt import matplotlib.dates as mdates

from scipy.signal import savgol_filter from bs4 import BeautifulSoup import requests


    1. very basic exponential r0 calculation

def calculate_r0(time1, time2, val1, val2): k=0 ##td=time2-time1 ## #optim td=1 #print("td") #print (td) #print(val1, val2) gr0=math.log(val2/val1) gr=gr0/td #print (val2, val1) #print(gr) if(gr!=0): td= math.log(2.0)/gr else: return(1)

tau=5.0

k=math.log(2.0)/td


r0=math.exp(k*tau) if(r0==32): r0=1

if(r0>32): r0=4

return(r0)


def calculate_multiple_r0(daata1): lenu1=len(daata1) print (lenu1) #daata2=list(range(1,lenu1,1)) daata2 = [0] * lenu1 for n in range(1,lenu1-2,1): valju1=daata1[n-1] valju2=daata1[n] if(math.isnan(valju1)): valju1=1 if(math.isnan(valju2)): valju2=1 if(valju1==0): valju1=1 if(valju2==0): valju2=1 timex1=0 timex2=1 r0=calculate_r0(0, 1, valju1, valju2) daata2[n]=r0 print (n, r0)

return(daata2)


def format_func(value, tick_number):

   N = int(np.round(value/10))
   if N == 0:
       return "0"
   else:
       return r"${0}\pv$".format(N)
       
       

def smooth(x,window_len=14,window='hanning'):

if x.ndim != 1: return(-1)

if x.size < window_len: return(-1)

if window_len<3: return (x)

if not window in ['flat', 'hanning', 'hamming', 'bartlett', 'blackman']: return(-1)

s=np.r_[x[window_len-1:0:-1],x,x[-2:-window_len-1:-1]]

if window == 'flat': w=np.ones(window_len,'d') else: w=eval('np.'+window+'(window_len)')

y=np.convolve(w/w.sum(),s,mode='valid')

return y


def cut_by_dates(dfx, start_date, end_date): mask = (dfx['Date'] >= start_date) & (dfx['Date'] <= end_date) dfx2 = dfx.loc[mask] #print(dfx2) return(dfx2)


def load_country_cases(maa): dfin = pd.read_csv('https://datahub.io/core/covid-19/r/countries-aggregated.csv', parse_dates=['Date']) countries = [maa] dfin = dfin[dfin['Country'].isin(countries)] #print (head(dfin)) #quit(-1) selected_columns = dfin"Date", "Confirmed", "Recovered", "Deaths" df2 = selected_columns.copy()

df=df2 len1=len(df["Date"]) aktiv2= [None] * len1 for n in range(0,len1-1): aktiv2[n]=0

dates=df['Date'] rekov1=df['Recovered'] konf1=df['Confirmed'] death1=df['Deaths'] #print(dates) spanni=6

#print(rekov1)

#quit(-1)

rulla = rekov1.rolling(window=spanni).mean() rulla2 = rulla.rolling(window=spanni).mean()


tulosrulla=rulla2 tulosrulla= tulosrulla.replace(np.nan, 0) tulosrulla=np.array(tulosrulla).astype(int) rulla2=tulosrulla

x=np.linspace(0,len1,len1); #print("kupla") #print(tulosrulla)

#print(konf1) #print(death1) #print(aktiv2) konf1=np.array(konf1).astype(int) death1=np.array(death1).astype(int) #print(konf1) #quit(-1)

for n in range(0,(len1-1)): #print("luzmu") rulla2[n]=tulosrulla[n] #print ("luzmu2") #aktiv2[n]=konf1[n]-death1[n]-rulla2[n] aktiv2[n]=konf1[n] #print(rulla2[n])

#quit(-1)

#aktiv3=np.array(aktiv2).astype(int)

dailycases1= [0] * len1 dailydeaths1= [0] * len1

for n in range(1,(len1-1)): dailycases1[n]=konf1[n]-konf1[n-1] if (dailycases1[n]<0): dailycases1[n]=0

for n in range(1,(len1-1)): dailydeaths1[n]=death1[n]-death1[n-1] if (dailydeaths1[n]<0): dailydeaths1[n]=0

#quit(-1) df.insert (2, "Daily_Cases", dailycases1) df.insert (3, "Daily_Deaths", dailydeaths1) df['ActiveEst']=aktiv2 #print (df) dfout = df'Date', 'Confirmed','Deaths','Recovered', 'ActiveEst','Daily_Cases','Daily_Deaths' #print(df) #print(dfout) print(".") return(dfout)


def load_fin_wiki_data(): url="https://fi.wikipedia.org/wiki/Suomen_koronaviruspandemian_aikajana" response = requests.get(url) soup = BeautifulSoup(response.text, 'lxml') table = soup.find_all('table')[0] # Grab the first table df = pd.read_html(str(table))[0] #print(df) #Päivä Tapauksia Uusia tapauksia Sairaalassa Teholla Kuolleita Uusia kuolleita Toipuneita

df2 = df'Tapauksia','Uusia tapauksia','Sairaalassa','Teholla','Kuolleita','Uusia kuolleita','Toipuneita'

kaikkiatapauksia=df['Tapauksia'] toipuneita=df['Toipuneita'] uusiatapauksia=df['Uusia tapauksia'] sairaalassa=df['Sairaalassa'] teholla=df['Teholla'] kuolleita=df['Kuolleita'] uusiakuolleita=df['Uusia kuolleita']

len1=len(kaikkiatapauksia)

kaikkiatapauksia2=[] toipuneita2=[] uusiatapauksia2=[] sairaalassa2=[] teholla2=[] kuolleita2=[] uusiakuolleita2=[]

for n in range(0,len1): elem0=kaikkiatapauksia[n] elem1 = .join(c for c in elem0 if c.isdigit()) elem2=int(elem1) kaikkiatapauksia2.append(elem2) elem0=toipuneita[n] elem1 = .join(c for c in elem0 if c.isdigit()) toipuneita2.append(int(elem1)) elem0=uusiatapauksia[n] elem1 = .join(c for c in elem0 if c.isdigit()) uusiatapauksia2.append(int(elem1)) elem0=sairaalassa[n] #elem1 = .join(c for c in elem0 if c.isdigit()) sairaalassa2.append(int(elem0)) elem0=teholla[n] #elem1 = .join(c for c in elem0 if c.isdigit()) teholla2.append(int(elem0)) elem0=kuolleita[n] #elem1 = .join(c for c in elem0 if c.isdigit()) kuolleita2.append(int(elem0)) elem0=uusiakuolleita[n] #elem1 = .join(c for c in elem0 if c.isdigit()) uusiakuolleita2.append(int(elem0))

#kaikkiatapauksia3=np.array(kaikkiatapauksia2).astype(int) #print("---") #print(kaikkiatapauksia2) #print(toipuneita2)

kaikkiatapauksia3=np.array(kaikkiatapauksia2).astype(int) toipuneita3=np.array(toipuneita2).astype(int) uusiatapauksia3=np.array(uusiatapauksia2).astype(int) sairaalassa3=np.array(sairaalassa2).astype(int) teholla3=np.array(teholla2).astype(int) kuolleita3=np.array(kuolleita2) .astype(int) uusiakuolleita3=np.array(uusiakuolleita2).astype(int)

napapaiva1 = np.datetime64("2020-04-01") timedelta1= np.timedelta64(len(kaikkiatapauksia3),'D') napapaiva2 = napapaiva1+timedelta1

#dada1 = np.linspace(napapaiva1.astype('f8'), napapaiva2.astype('f8'), dtype='<M8[D]') dada1 = pd.date_range(napapaiva1, napapaiva2, periods=len(kaikkiatapauksia3)).to_pydatetime()

#print(dada1)

data = {'Date':dada1, 'Kaikkia tapauksia':kaikkiatapauksia3, "Uusia tapauksia":uusiatapauksia3, "Sairaalassa":sairaalassa3, "Teholla":teholla3, "Kuolleita":kuolleita3, "Uusiakuolleita":uusiakuolleita3, "Toipuneita":toipuneita3 }

df2 = pd.DataFrame(data)

#print(kaikkiatapauksia3) #print ("Fin wiki data.") return(df2)



                          1. main proge


  1. df=load_fin_wiki_data()

df=load_country_cases("Finland")

  1. print(df)
  2. quit(-1)

df2=cut_by_dates(df, paiva1,paiva2)

  1. print(df2)
  2. quit(-1)


dates0=df2['Date'] dailycases1=df2['Daily_Cases'] dailydeaths1=df2['Daily_Deaths']

  1. cases0=df2['Daily_Cases']
  2. dailycases1=df2['Uusia tapauksia']
  3. dailydeaths1=df2['Uusiakuolleita']


daily1=dailycases1 x=dates0

moving7a=smooth(np.array(daily1), window="hamming")

  1. print (moving7a)
  1. moving7=as.np.array(moving7a)


moving71=moving7a.astype(int)

  1. print(moving71)
  2. exit(-1)
  3. calculate_r0(0, 1, 1, 100)
  1. r0s1=calculate_multiple_r0(daily1)

r0s1=calculate_multiple_r0(moving71)

r0s2=np.convolve(r0s1, np.ones((14,))/14, mode='valid')

r0s2a=np.round(r0s2,3)

r0s4=np.convolve(r0s2a, np.ones((7,))/7, mode='valid')

len1=len(dates0)

hooline=[1]*len1

print(r0s1)

fig, ax = plt.subplots(constrained_layout=True)


ax.legend(fontsize=14)

  1. secax = ax.secondary_xaxis('top')
  2. secax.set_xlabel('paivia')

plt.title("Koronaviruksen R0 Suomessa",fontsize=22) plt.xlabel('Pvm (2020 - 2021)',fontsize=18) plt.ylabel('Tarttuvuus R0',fontsize=18) plt.xticks(fontsize=16) plt.yticks(fontsize=16) plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d.%m'))

  1. plt.gca().xaxis.set_major_locator(mdates.DayLocator())
  2. plt.gca().xaxis.set_major_locator(mdates.WeekdayLocator(interval=1))

plt.gca().xaxis.set_major_locator(mdates.MonthLocator(interval=1))

  1. plt.hlines(1,0,200)

plt.plot(x,r0s2a, linewidth=3, color="Blue") plt.plot(x,hooline, "--", linewidth=3, color="green" ) plt.gcf().autofmt_xdate()

  1. plt.plot(dates4, daily1)
  2. plt.ylim(0.0,3.0)
  1. plt.xticks(x, dates3, fontsize=14, rotation=70)
  2. plt.xticks(np.arange(0, len1, 10))

print (len(daily1)) print(len(r0s2))

print ("Test EXIT_")

  1. plt.xticks(np.arange(0, len1, 10))


plt.show()



Licensing

[edit]
I, the copyright holder of this work, hereby publish it under the following license:
w:en:Creative Commons
attribution share alike
This file is licensed under the Creative Commons Attribution-Share Alike 4.0 International license.
You are free:
  • to share – to copy, distribute and transmit the work
  • to remix – to adapt the work
Under the following conditions:
  • attribution – You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
  • share alike – If you remix, transform, or build upon the material, you must distribute your contributions under the same or compatible license as the original.

File history

Click on a date/time to view the file as it appeared at that time.

(newest | oldest) View (newer 10 | ) (10 | 20 | 50 | 100 | 250 | 500)
Date/TimeThumbnailDimensionsUserComment
current08:25, 9 August 2021Thumbnail for version as of 08:25, 9 August 2021928 × 468 (51 KB)Merikanto (talk | contribs)Update
12:51, 30 May 2021Thumbnail for version as of 12:51, 30 May 2021886 × 464 (48 KB)Merikanto (talk | contribs)Update
11:52, 22 April 2021Thumbnail for version as of 11:52, 22 April 2021840 × 401 (46 KB)Merikanto (talk | contribs)update
12:40, 23 March 2021Thumbnail for version as of 12:40, 23 March 20211,008 × 386 (45 KB)Merikanto (talk | contribs)Update
19:06, 26 February 2021Thumbnail for version as of 19:06, 26 February 2021800 × 432 (45 KB)Merikanto (talk | contribs)Upload
10:27, 12 January 2021Thumbnail for version as of 10:27, 12 January 2021819 × 460 (42 KB)Merikanto (talk | contribs)Upload
13:49, 11 January 2021Thumbnail for version as of 13:49, 11 January 2021909 × 434 (38 KB)Merikanto (talk | contribs)Update of layout
10:14, 18 December 2020Thumbnail for version as of 10:14, 18 December 2020850 × 394 (42 KB)Merikanto (talk | contribs)Update
11:48, 4 November 2020Thumbnail for version as of 11:48, 4 November 2020576 × 432 (40 KB)Merikanto (talk | contribs)Update
12:14, 18 September 2020Thumbnail for version as of 12:14, 18 September 2020975 × 551 (38 KB)Merikanto (talk | contribs)Update 18.9.2020
(newest | oldest) View (newer 10 | ) (10 | 20 | 50 | 100 | 250 | 500)

There are no pages that use this file.

Metadata