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)