60 COVID-19 näide
Leidub avalikke andmetabeleid COVID-19 kohta. Järgmises näites loome kaardi, kus on esitatud COVID-19 haigusjuhud riigiti kuupäeva järgi. Andmed loeme European Union Open Data Portal lehelt. Loeme andmed Pandase mooduli abil. Esmalt väljastame tabeli esimesed ja viimased viis rida, et näha millised on andmed. Samuti uurime mitu veergu ja rida on tabelis.
import pandas as pd import plotly.express as px # Andmed url = 'https://opendata.ecdc.europa.eu/covid19/casedistribution/csv' csv = pd.read_csv(url) print(csv.head()) print(csv.tail()) print(csv.shape)
>>> %Run guido.py dateRep ... Cumulative_number_for_14_days_of_COVID-19_cases_per_100000 0 13/09/2020 ... 1.309088 1 12/09/2020 ... 1.224970 2 11/09/2020 ... 1.164510 3 10/09/2020 ... 1.098793 4 09/09/2020 ... 1.180282 [5 rows x 12 columns] dateRep ... Cumulative_number_for_14_days_of_COVID-19_cases_per_100000 42459 25/03/2020 ... NaN 42460 24/03/2020 ... NaN 42461 23/03/2020 ... NaN 42462 22/03/2020 ... NaN 42463 21/03/2020 ... NaN [5 rows x 12 columns] (42464, 12)
Näeme, et tabelis on 12 veergu ja üle 40000 rea (andmed seisuga 12.08.2020 ), kuid päris kõigi veergude nimesid ei kuvata. Lisaks on tabelis ka puuduvaid väärtusi (NaN
) ja kuupäeva veerus (dateRep
) ei ole kuupäevad kasvavas järjekorras. Püüame tabeli veerud leida. Kasutame veergude columns
funktsiooni veergude nimede nägemiseks.
print(csv.columns)
>>> %Run guido.py Index(['dateRep', 'day', 'month', 'year', 'cases', 'deaths', 'countriesAndTerritories', 'geoId', 'countryterritoryCode', 'popData2019', 'continentExp', 'Cumulative_number_for_14_days_of_COVID-19_cases_per_100000'], dtype='object')
Meile on vaja andmed veergudest, kus on kuupäev(dateRep
) ja haigusjuhud(cases
). Lisaks on vaja ka riikide ISO koode, mille järgi ühendatakse vastav riik andmestikus ja selle asukoht kaardil. Vaatame millised on andmed geoId
ja countryterritoryCode
. Võtame nendest veergudest 3 esimest rida, sest kõiki ridu ei ole vaja vaadata.
print(csv["geoId"][:3]) print(csv["countryterritoryCode"][:3])
Näeme, et geoId
veerus on kahetähelised ISO koodid ja countryterritoryCode
veerus kolmetähelised, mis on sobilikud meie kaardi jaoks.
! Kui kasutada kaarte joonistel, siis peab veenduma, et andmestikus on olemas riigi ISO-kood, riigi nimi või koordinaadid, mille abil ühendada andmed kaardiga.
Tabeli esimeses veerus olid kuupäevad, kuid need ei olnud sobilikus järjekorras. Kui tahame näidata, kuidas on COVID-19 haigusjuhud muutunud ajas, siis peame tabelis need järjestama kõige varasemast kõige hilisema kuupäevani. Selleks, on vaja, et kuupäevad oleksid kuupäeva tüüpi (lisaks harilikele tüüpidele nagu täisarvud või sõned, on võimalik nii NumPy kui ka Pandase puhul kasutada eritüüpe nagu kuupäev), sest muidu ei saa kuupäevi ajaliselt järjestada. Pandasega saab otse CSV failist lugedes kuupäevad õigesse tüüpi määrata, tuleb lisada read_csv
funktsiooni parameetri parse_dates
väärtuseks vastav veerg, kus on kuupäevad.
csv = pd.read_csv(url, parse_dates=["dateRep"])
Pärast seda saame kuupäevad õigesti järjestada kuupäeva veeru järgi, kasutades sort_values
funktsiooni, mille parameetri by
väärtus on kuupäeva veerg.
# Sorteerime kuupäeva järgi kuupaev_sort = csv.sort_values(by=["dateRep"])
Lisaks oli andmestikus puuduvaid väärtusi, mis ei ole vajalikud ja need võib eemaldada. Selleks kasutame Pandase dropna
funktsiooni, mis eemaldab tabelist need read, kus on NaN
väärtus.
# NaN väärtuste eemaldamine eemalda_nan = kuupaev_sort.dropna()
Enne veel, kui kaart päris valmis saab on vaja muuta kuupäeva tüüp UNICODE sõne tüüpi, sest kuupäevi saab joonisel kuvada ainult sõnena. UNICODE sõne tüüp on üks paljudest andmetüüpidest, mida Pandasega kasutada saab.
# Kuupäevad peavad olema sõned, et neid joonisel kuvada kuupaev = eemalda_nan["dateRep"].astype("U20")
Kaardi loomiseks kasutame Plotly funktsiooni choropleth
, mille abil saab kuvada maailmakaarti, aga ka teatud piirkondi maailmas, näiteks USA või Euroopa.
import pandas as pd import plotly.express as px # Andmed url = 'https://opendata.ecdc.europa.eu/covid19/casedistribution/csv' csv = pd.read_csv(url, parse_dates=["dateRep"]) # Sorteerime kuupäeva järgi kuupaev_sort = csv.sort_values(by=["dateRep"]) # NaN väärtuste eemaldamine eemalda_nan = kuupaev_sort.dropna() # Kuupäevad peavad olema sõned joonisel kuvamiseks kuupaev = eemalda_nan["dateRep"].astype("U20") kaart = px.choropleth(eemalda_nan, locations="countryterritoryCode", color="cases", hover_name="countriesAndTerritories", color_continuous_scale=px.colors.sequential.Teal, animation_frame=kuupaev, hover_data={"countryterritoryCode": False, "deaths": True}, labels={"cases": "Haigusjuhud", "deaths": "Surmad", "animation_frame": "Kuupäev"}, title="COVID-19 haigusjuhud (allikas: European Union Open Data Portal)" ) kaart.show()
🌌 Joonise näide (klõpsa lingil): http://kodu.ut.ee/~merka123/plotly/covid.html |