E cikk írásakor a COV19-ben óriási az új esetek és a betegség miatti halálozások száma. Az alábbi grafikon a járvány napi előrehaladását ábrázolja, és vizuálisan is mutatja, hogy az új esetek száma nő, elsősorban annak a ténynek köszönhető, hogy a vírus egy még fertőzőbb törzsre mutált. A COV19-nek jelenleg három mutációja van, és az Egyesült Királyságból kikerülő törzs sokkal fertőzőbb, mint az eredeti vírus, amelyet először Kínában dokumentáltak:
Az Egyesült Királyság jelenleg négyszintű rendszerben működik, London és a környező területek a negyedik szint alá tartoznak, ami megköveteli, hogy az emberek otthon maradjanak, és csak a nélkülözhetetlen tárgyakért merészkedjenek. Ilyen kemény életkörülmények között az emberek elviselik a COV19 hatásait, ezért úgy gondoltam, jó ötlet lenne tanulmányozni a vírus globális előfordulását, és felépíteni egy olyan modellt, amely megjósolja, hány új megbetegedés fog bekövetkezni, és hány haláleset fog bekövetkezni másnap.
A kísérlet elvégzéséhez egy adatkészletet használtam, amelyet naponta frissítenek az „Or=ur World in Data” webhelyről, a link itt található:- „Coronavirus Source Data — Our World in Data”
Az általam használt .csv fájlt minden nap le kell tölteni, mert naponta frissül. Mentettem a .csv fájlt a Google meghajtómra, mert túl nagy ahhoz, hogy egy GitHub-tárolóban tároljam.
Az .ipynb fájlt a Google Colabban hoztam létre, mert ez egy ingyenes online Jupyter Notebook, amely bármely internettel rendelkező számítógépről használható, és hozzáfér a Google-hoz. Sok könyvtár már telepítve van a Google Colab-on, így csak a két leggyakoribb könyvtárat kellett importálnom, a pandákat és a numpy-t.
Ezután beolvastam a .csv fájlt a programba, hogy dolgozhassak vele:
A dátum oszlop egy karakterlánc volt, ezért át kellett konvertálnom datetime-re, majd számmá, amit az adatkészlet másik oszlopában tároltam:-
Úgy döntöttem, hogy az adatkészlet szeleteit használom, és ki akartam szűrni, hogy melyik országot nézem, ezért létrehoztam egy listát, és egy for ciklust használtam az ismétlődő bejegyzések kiküszöbölésére: -
A len() függvény segítségével kiderítettem, hogy 192 ország van az adathalmazban, de valamiért az egyik ország kiesett, amikor végrehajtottam a jóslataimat.
Meg kellett határoznom az utolsó dátumot az adatkészletben, és a max() függvényt használtam az információ megszerzéséhez.
Meg akartam tudni, hogy milyen típusú adatokról van szó, ezért a type() függvény segítségével állapítottam meg, hogy ez karakterlánc.
Átalakítottam a dátumot datetime formátumba, hogy a dátumhoz egy naptári napot adhassak, amelyet később a programban használok: -
Meg akartam nézni, hogyan áll a hat kontinens a COV19-el kapcsolatban, ezért készítettem egy dobozdiagramot, amelyből kiderül, hogy Észak-Amerikában regisztrálják a legtöbb vírusesetet:
Létrehoztam egy hőtérképet, amely megmutatja, hogy a független változók befolyásolják a függő változókat: -
Ellenőriztem, hogy vannak-e null értékek, és megállapítottam, hogy a legtöbb oszlop null értékeket tartalmaz: -
A hiányzó értékeket a nulla helyettesítésével imputáltam; értékeket a kategorikus oszlopokban a „Nincs listázva” felirattal, ezzel egy extra besorolást hozva létre.
Miután az összes kategorikus oszlop imputálása megtörtént, az adatkészletben maradt nullértékeket 0-ra cseréltem.
Ezután a sklearn OrdinalEncoder() függvényét használtam az összes kategorikus oszlop kódolására, ennek az az oka, hogy a számítógép csak numerikus értékeket akar látni, amikor előrejelzéseket készít: -
A célváltozót többváltozóssá tettem, és az „y” változóhoz rendeltem.
Definiáltam az „X” változót, a céltól független lévén, a több oszlopos vonat adatállomány kiesett. A kihagyott oszlopok a „dátum”, „iso_code” és az esetek vagy halálesetek számával kapcsolatos oszlopok voltak.
Ezután a sklearn StandardScaler() függvényét használtam, hogy az oszlopokban lévő adatokat a célváltozóhoz, az „y”-hoz viszonyított szintre skálázzam:-
Ezután a sklearn train_test_split() függvényét használtam az X adatkészlet felosztására a betanítás és az érvényesítés céljából. A teszt méretét 10%-ra állítottam, hogy a lehető legtöbb adatom legyen az edzéshez.
Kiválasztottam a modellt, és a HistGradientBoostingRegressor()-t választottam, mert bár kísérleti jellegű, nagy adatkészleteken való használatra tervezték. 99,24%-ot értem el, amikor betanítottam és illesztettem a modellt.
Amikor jóslatokat tettem az érvényesítési halmazra, 86,38%-os pontosságot értem el:-
Létrehoztam egy adatkeretet, és beleraktam a tényleges és előre jelzett értékeket:-
Miután sikeresen betanítottam, illesztettem és előre jeleztem az X adatkészletet, a semmiből kellett létrehoznom egy tesztadatkészletet. A last_day adatkészletet használtam, és az új tesztadatkészlet alapjául használtam:-
Ugyanazt a folyamatot kellett követnem a tesztadatkészlettel, mint a vonatadatkészletet ugyanabban a sorrendben. Ezért a dátumot számmá kellett konvertálnom, és el kellett tárolnom az újonnan létrehozott „date_num” oszlopban:-
Ellenőriztem a tesztadatkészletet, hogy vannak-e nullértékek, és azt találtam, hogy jó néhányat kellett imputálni: -
Létrehoztam a prediktív_dátum változót és tároltam benne a test.date értéket, mielőtt kidobtam volna az adatkészletből.
Ezután megtudtam, hogy mely oszlopok nem numerikusak, és a hiányzó értékeket kitöltöttem a „Nincs felsorolva”-val, ezzel létrehozva egy extra osztályt.
Miután az összes kategorikus oszlopot imputáltam, az adatkészlet fennmaradó nullértékeit 0-val töltöttem ki:-
Mivel a modell azt szeretné, hogy az összes oszlop numerikus típusú legyen, a kategorikus oszlopokat sorszámmal kódoltam.
Ezután ugyanúgy definiáltam az X_tesztet, mint korábban a programban.
Annak érdekében, hogy a független változók értéktartománya megegyezzen a célváltozókéval, az X_testet a sklearn StandardScaler függvényével skáláztam, amelyet korábban X-szel használtam a programban: -
Végül megjósoltam az X_teszt adathalmazt, amelyet a semmiből hoztam létre, és ezeket az előrejelzéseket egy adatkeretbe helyeztem, amelyet szintén létrehoztam.
Az előrejelzések csak a következő napra vonatkoznak, és ellenőrizni kell őket a .csv frissítésekor, hogy megtudjuk a modell pontosságát:-
A bejegyzés kódja teljes egészében megtalálható személyes GitHub-fiókomban, amely itt található:- COV19/COV19_HistGradientboosting.ipynb a főoldalon · TracyRenee61/COV19 (github.com)