Last active
March 12, 2020 21:33
-
-
Save gakonst/d00af7085a47ad6235fb7489a2c5b600 to your computer and use it in GitHub Desktop.
Greece #COVID-19
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
import matplotlib.pyplot as plt | |
import pylab | |
from scipy.optimize import curve_fit | |
import numpy as np | |
import datetime | |
# load the data | |
names = ["date", "infections", "age", "gender", "area", "source"] | |
df = pd.read_csv( | |
'greece.csv', | |
names=names, | |
sep='|', | |
keep_date_col=True, | |
index_col=[0]) # index by date | |
# convert indexes to dates | |
df.index = df.index.map(lambda d: datetime.datetime.strptime(d.strip(), "%d.%m.%Y")) | |
# Add elapsed days | |
day_0 = df.index[0] | |
elapsed = df.index.map(lambda date: (date- day_0).days) | |
df['elapsed-days'] = elapsed | |
# Calculate cumulative infections | |
infections = pd.Series(df['infections']) | |
cumulative = infections.cumsum() | |
df['cumulative-infections'] = cumulative # load it to the dataframe | |
## group all intra day infections together | |
infections_per_day = pd.Series(df.groupby(['date']).agg(sum)['infections']) | |
# calculate the growth rate of the infections | |
growth_rate = [] | |
for i in range(1, len(infections_per_day)): | |
diff = abs(infections_per_day[i] - infections_per_day[i-1]) | |
growth = diff / infections_per_day[i-1] | |
growth_rate.append(growth) | |
cumulative_per_day = infections_per_day.cumsum() | |
elapsed = infections_per_day.index.map(lambda date: (date- day_0).days) | |
# plot the actual data | |
xdata = np.array(elapsed) | |
ydata = np.array(cumulative_per_day) | |
pylab.plot(xdata, ydata, 'o', label='data') | |
# f(x) = \frac{L}{1 + e^{-k(x-x0)}} | |
def sigmoid(x, L, x0, k): | |
y = L / (1 + np.exp(-k*(x-x0))) | |
return y | |
def sigmoid_with_growth(growth): | |
return lambda x, L, x0: sigmoid(x, L, x0, growth) | |
# fit for various growth rates | |
print(cumulative_per_day) | |
hypotheses = [] | |
growth_rates = [0.23, 0.25, 0.27, 0.34] | |
for g in growth_rates: | |
popt, pcov = curve_fit(sigmoid_with_growth(g), xdata, ydata) | |
hypotheses.append([*popt, g]) | |
# plot each scenario | |
# generate x axis over 90 days since Feb 26th | |
x = np.linspace(0, 90, 100) | |
eps = 15 | |
for params in hypotheses: | |
midpoint_time = day_0 + datetime.timedelta(days=params[1]) | |
prediction = params[0] / 2 | |
y = sigmoid(x, *params) | |
# if it exists then check if it's within the expected bounds | |
# ind = midpoint_time | |
# for index in cumulative_per_day.index: | |
# if index >= midpoint_time: | |
# ind = index | |
# real = cumulative_per_day.loc[ind] | |
# if real is not None: | |
# if abs(real - prediction) < eps: | |
# print(f"Prediction {params} was within reality") | |
# pylab.plot(x,y, label=f'{params}') | |
# else: | |
# print(f"Bad prediction: {params}") | |
# else: | |
print(f"Expecting to reach {prediction} by {midpoint_time} ({params[1]} after initial)") | |
pylab.plot(x,y, label=f'{params}') | |
pylab.xlabel("Days since first incident") | |
pylab.xlim([0, 100]) | |
pylab.ylabel("Number tested positive") | |
pylab.legend(loc='best') | |
pylab.show() |
We can make this file beautiful and searchable if this error is corrected: It looks like row 2 should actually have 1 column, instead of 3 in line 1.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
26.02.2020 | 1 |38| F | Thessaloniki | Καταγράφεται το πρώτο κρούσμα κορωνοϊού στην Ελλάδα. Πρόκειται για 38χρονη από την Θεσσαλονίκη. | |
27.02.2020 |1|10| M | Thessaloniki | Ο γιος της 38χρονης από τη Θεσσαλονίκη, ηλικίας 9 ετών, είναι το δεύτερο κρούσμα κορωνοϊού στην Ελλάδα. | |
27.02.2020 |1|40| F | Athens | Τρίτο επιβεβαιωμένο κρούσμα στην Ελλάδα, και πρώτο στην Αθήνα. Πρόκειται για 40χρονη τραπεζικό υπάλληλο, η οποία είχε ταξιδέψει στη Βόρεια Ιταλία. | |
28.02.2020 |1|36| F | Athens | Επιβεβαιώνεται το τέταρτο κρούσμα κορωνοϊού στην Ελλάδα (και δεύτερο στην Αθήνα). Πρόκειται για 36χρονη γυναίκα που νοσηλεύεται σε καραντίνα στο «Αττικόν». | |
29.02.2020 |1|?|F| Thessaloniki | Πέμπτο επιβεβαιωμένο κρούσμα κορωνοϊού στην Ελλάδα και (τρίτο στη Θεσσαλονίκη). Γυναίκα εκπαιδευτικός, φίλη της 38χρονης. | |
29.02.2020 |1|0| F || Έκτο επιβεβαιωμένο κρούσμα κορωνοϊού στην Ελλάδα (και τρίτο στην Αθήνα). Επέστρεψε από ταξίδι στη Βόρεια Ιταλία. | |
29.02.2020 |1|0| M | Athens | Άνδρας, στενή επαφή (σύμφωνα με πληροφορίες συνάδερφος) της 40χρονης τραπεζικού στην Αθήνα είναι το έβδομο επιβεβαιωμένο κρούσμα κορωνοϊού στην Ελλάδα (και τέταρτο στην Αθήνα). | |
04.03.2020 |1|0| F | Thessaloniki | Καταγράφεται το όγδοο επιβεβαιωμένο κρούσμα κορωνοϊού στην Ελλάδα. Πρόκειται για στενή επαφή (σύζυγος) του πέμπτου επιβεβαιωμένου κρούσματος. O φορέας εντοπίστηκε στη Θεσσαλονίκη. | |
04.03.2020 |1|66| M | Ileia | Καταγράφεται το ένατο επιβεβαιωμένο κρούσμα κορωνοϊού στην Ελλάδα. Είναι ο 66χρονος από την Ηλεία, που μπαίνει σε καραντίνα στο νοσοκομείο του Ρίου στην Πάτρα. | |
04.03.2020 |1|60+| F | Ileia | Η σύζυγός του 66χρονου από την Ηλεία είναι το δέκατο επιβεβαιωμένο κρούσμα κορωνοϊού | |
05.03.2020 |21| ? | F | Ileia | Εκτοξεύεται ο αριθμός των κρουσμάτων κορωνοϊού στην Ελλάδα. Ανακοινώνονται 21 νέα κρούσματα (συνολικά 31 κρούσματα), με τον κ. Τσιόδρα να ξεκαθαρίζει ότι «τις επόμενες εβδομάδες αναμένουμε σημαντική αύξηση του αριθμού των κρουσμάτων κορωνοϊού στην Ελλάδα». | |
06.03.2020 |14| ? | ? | Israel | Στους 45 ανέβηκε ο αριθμός των νέων κρουσμάτων στη χώρα μας καθώς άλλοι 14 βρέθηκαν θετικοί στον ιό από αυτούς που ελέγχθηκαν και ήταν στο ταξιδιωτικό γκρουπ που επέστρεψε από το Ισραήλ. Από αυτούς 3 νοσηλεύονται σε σοβαρή κατάσταση. | |
07.03.2020 |21| ? | ? | Israel-Egypt | Ο αριθμός των νέων επιβεβαιωμένων κρουσμάτων έφτασε τους 66. Από αυτούς, οι 51 προέρχονται από την επιδημική έξαρση των εκδρομέων σε Ισραήλ και Αίγυπτο (47 μέλη της ταξιδιωτικής ομάδας και 4 επαφές τους). | |
08.03.2020 |7| ? | ? | ? | ? | |
09.03.2020 |11| ? | ? | ? | ? | |
10.03.2020 |5| ? | ? | ? | ? | |
11.03.2020 |10| ? | ? | ? | ? | |
12.03.2020 |18| ? | ? |? | https://www.alphafreepress.gr/2020/03/12/ellada/nea-krousmata-koronoios-konta-sta-30-ta-nea-krousmata-stin-ellada/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment