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

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Tarkvaraarendus. 2. trükk on loodud Eno Tõnisson, Tauno Palts, Kaarel Tõnisson, Heidi Meier, Merilin Säde, Ago Luberg, Birgy Lorenz, Einar Kivisalu, Meelis Antoi, ja Säde Mai Krusberg poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut