A data/ebola.txt file tartalmazza a 2014-es Ebola járvány fertőzöttségi és kumulatív (adott napig hányan haltak meg összesen) halálozási adatait.
Először betöltjük a szükséges csomagot
%pylab inline
Eztután feldolgozzuk a fájlt:
with open("../data/ebola.txt") as f:
adatok = list() # létrehozunk egy adatok táblázatot, amiben a forrásfájlhoz hasonló struktúrával elmentjük az adatokat
for i in range(16):
adatok += [list()]
for sor in f:
if sor[0] != "#":
for i in range(len(adatok)): # Mivel a forrásfájl oszlopaiban voltak az összetartozó adatok, ezeket rendezzük listába
adatok[i] += [int(sor.split()[i])] # Az adatokat pedig int tipusként tároljuk
Majd ábrázoljuk az elhalálozásokat országonként
plot(adatok[0], adatok[2], label="Guinea")
plot(adatok[0], adatok[5], label="Libéria")
plot(adatok[0], adatok[8], label="Nigéria")
plot(adatok[0], adatok[11], label="Sierra Leone")
plot(adatok[0], adatok[14], label="Senegal")
xlabel("Napok", size=12)
ylabel("Elhalálozások", size=12)
title("Az ebolában elhalálozottak száma\naz idö függvényében", size = 18, y = 1.05)
legend(loc=0)
Ezek után az összes halálozást berakjuk egy tömbbe, majd lederiváljuk az idő függvényében. Ezt a numpy
csomag diff()
függvényének a segítségével tudjuk megtenni. Ezzel már ki tudjuk számolni a kért $\alpha$ és $A$ értékeket
halálozások = zeros(len(adatok[0]))
for i in range(len(adatok[0])):
halálozások[i] = adatok[2][i] + adatok[5][i] + adatok[8][i] + adatok[11][i] + adatok[14][i]
dhal_dt = diff(halálozások)/diff(adatok[0])
alpha = mean(dhal_dt/halálozások[1:])
A = halálozások[-1] / exp(alpha * adatok[0][-1])
Végül pedig ábrázoljuk az adatokat, és a kapott függvényt.
plot(adatok[0], halálozások, "rx", label="adatok")
plot(adatok[0], A * exp(alpha * array(adatok[0])), label="illesztett görbe")
title("A halálozások számának\nilleszkedése az exponenciális görbéhez", size=18, y=1.05)
legend(loc=0)
xlabel("napok", size=12)
ylabel("elhalálozások száma", size=12)