![]() | V OSA sisukord | ![]() |
5.5 SILMARING: TEATRIKÜLASTUSTE NÄIDE
Sissejuhatus
Eelmises peatükis tutvustati pandase põhilisi andmestruktuure - seeriat (Series) ja andmefreimi (DataFrame). Nüüd tegutseme andmefreimi abil põhjalikumalt tegelike andmetega. Kui siin on vaatluse all teatrikülastused, siis ülesanne tuleb raamatukogude kohta.
Senini oleme vaadanud olukordi, kus me defineerime mõnes teises andmestruktuuris asuvate algandmete järgi andmefreimi (DataFrame). Selleks, et säästa end andmete ümberkirjutamisest, saab andmeid ka otse failist andmefreimi (DataFrame) laadida.
Siin näete lühikest videot sellest, kuidas andmeid statistikaametist alla laadida ning neid töödelda.
Andmete saamine failist
Kasutades andmetöötluseks Pythoni moodulit pandas, saab andmed lihtsalt sisse lugeda näiteks csv-failist. Võtame näiteks faili teater2.csv, mille sisu näeb tavalise tekstiredaktoriga (nt notepad) avades välja selline:
;2015;2016;2017;2018 Teatrite arv;49;46;47;58 Lavastused;550;540;559;582 ..uuslavastused;216;196;204;211 Etendused;6434;6573;6713;6695 Vaatajad. tuhat;1146.6;1186;1164;1192 Teatriskäigud 1000 elaniku kohta;872.2;901.4;883.5;901.7
Ärgem laskem end hetkel segada moondunud ä-tähest. Hiljem tegeleme ka sellega.
import pandas as pd
andmed = pd.read_csv('teater2.csv', delimiter=';')
print(andmed)
Muutuja delimiter väärtus näitab, milline eraldaja on andmeid sisaldavas failis määratud, antud juhul on tegemist semikooloniga. Seda, missugust eraldajat kasutatakse, saab näiteks statistikaameti andmebaasis valida andmete salvestamisel, kuid vajadusel võib andmefaili teisele kujule ka ümber teisendada.
Funktsiooni read_csv kasutamisel on veel mitmeid muid parameetreid, mida võib vaja minna. Nendega saab lähemalt tutvuda siin.
Saame väljundiks:
Unnamed: 0 2015 2016 2017 2018
0 Teatrite arv 49.0 46.0 47.0 58.0
1 Lavastused 550.0 540.0 559.0 582.0
2 ..uuslavastused 216.0 196.0 204.0 211.0
3 Etendused 6434.0 6573.0 6713.0 6695.0
4 Vaatajad. tuhat 1146.6 1186.0 1164.0 1192.0
5 Teatriskäigud 1000 elaniku kohta 872.2 901.4 883.5 901.7
Tutvumine andmetega
Püüame täpsemalt tutvuda meie poolt sisse loetud tabeliga. Kuna sisseloetud tabel on meil nüüd DataFrame-kujul, siis saame kasutada pakutavaid pandase võimalusi. Püüame näiteks teada saada, mitu veergu ja rida on tabelis.
Tunnus DataFrame.shape annab andmefreimi mõõtmed:
print(andmed.shape) (6, 5)
# Nii saab teada, mitu veergu meil tabelis on.
# Veergude arv asub tunnuse shape väljundi teisel positsioonil
print("Tabelis on ", andmed.shape[1], " veergu.")
Tabelis on 5 veergu.
----------------------------------
# Veergude pealkirjad
print(andmed.columns)
Index(['Unnamed: 0', '2015', '2016', '2017', '2018'], dtype='object')
----------------------------------
# Nii saab teada, mitu rida meil tabelis on:
# Ridade arv asub tunnuse shape väljundi esimesel positsioonil
print("Tabelis on ", andmed.shape[0], " rida.")
Tabelis on 6 rida.
----------------------------------
# Prindime 2 esimest rida
print(andmed.head(2))
Unnamed: 0 2015 2016 2017 2018
0 Teatrite arv 49.0 46.0 47.0 58.0
1 Lavastused 550.0 540.0 559.0 582.0
----------------------------------
# Prindime 2 viimast rida
print(andmed.tail(2))
Unnamed: 0 2015 2016 2017 2018
4 Vaatajad. tuhat 1146.6 1186.0 1164.0 1192.0
5 Teatriskäigud 1000 elaniku kohta 872.2 901.4 883.5 901.7
Andmete töötlemise funktsioonid
Näeme, et hetkel on eraldi veerud siltidega ja veerg, mille väärtused võiksid tegelikult siltidena kasutuses olla.
Muudame soovitud veeru siltide veeruks. Veergude pealkirjade järjendist näeme, et see veerg on pealkirjaga "Unnamed: 0".
andmed = andmed.set_index('Unnamed: 0')
# Prindime 5 esimest tabeli rida, et kontrollida.
print(andmed.head())
2015 2016 2017 2018
Unnamed: 0
Teatrite arv 49.0 46.0 47.0 58.0
Lavastused 550.0 540.0 559.0 582.0
..uuslavastused 216.0 196.0 204.0 211.0
Etendused 6434.0 6573.0 6713.0 6695.0
Vaatajad. tuhat 1146.6 1186.0 1164.0 1192.0
Sama tulemuse saaksime ka andmete sisselugemisel parameetrit index_col kasutades.
andmed = pd.read_csv('teater2.csv', delimiter=';', index_col='Unnamed: 0')
Vahel on vaja lisada andmeid tabelisse juurde. Seda saab teha veergude või ridade lisamise abil. Lisame veeru, kus on arvud 1-6.
andmed['Uus veerg'] = [1, 2, 3, 4, 5, 6]
print(andmed)
2015 2016 2017 2018 Uus veerg
Teatrite arv 49.0 46.0 47.0 58.0 1
Lavastused 550.0 540.0 559.0 582.0 2
..uuslavastused 216.0 196.0 204.0 211.0 3
Etendused 6434.0 6573.0 6713.0 6695.0 4
Vaatajad. tuhat 1146.6 1186.0 1164.0 1192.0 5
Teatriskäigud 1000 elaniku kohta 872.2 901.4 883.5 901.7 6
Kui on vaja lisada väärtused vastavatesse kindla sildiga ridadesse, saab seda teha uue seeria (Series) loomise ning selle tabelisse lisamise abil.
andmed['Uus veerg'] = pd.Series([1,2,3,4,5,6], index = ['Lavastused', 'Teatrite arv', '..uuslavastused', 'Etendused', 'Vaatajad. tuhat', 'Teatriskäigud 1000 elaniku kohta'])
print(andmed)
2015 2016 2017 2018 Uus veerg
Teatrite arv 49.0 46.0 47.0 58.0 2
Lavastused 550.0 540.0 559.0 582.0 1
..uuslavastused 216.0 196.0 204.0 211.0 3
Etendused 6434.0 6573.0 6713.0 6695.0 4
Vaatajad. tuhat 1146.6 1186.0 1164.0 1192.0 5
Teatriskäigud 1000 elaniku kohta 872.2 901.4 883.5 901.7 6
Nüüd aga kustutame loodud veeru. Kasutame selleks 2 erinevat funktsiooni: drop() ja pop().
pop()
# pop() funktsioon tagastab eemaldatud veeru, eemaldab veeru tabelist, ei vaja uuesti omistamist
eemaldatud = andmed.pop('Uus veerg')
print(eemaldatud)
Teatrite arv 2
Lavastused 1
..uuslavastused 3
Etendused 4
Vaatajad. tuhat 5
Teatriskäigud 1000 elaniku kohta 6
Name: Uus veerg, dtype: int64
drop()
# drop() funktsioon tagastab uuendatud tabeli, milles on märgitud veerg eemaldatud, vajab uuesti omistamist, sest protseduuri tehakse tabeli koopia peal, veeru eemaldamiseks tuleb kasutada parameetrit axis=1
andmed = andmed.drop(['Uus veerg'], axis=1)
print(andmed)
2015 2016 2017 2018
Teatrite arv 49.0 46.0 47.0 58.0
Lavastused 550.0 540.0 559.0 582.0
..uuslavastused 216.0 196.0 204.0 211.0
Etendused 6434.0 6573.0 6713.0 6695.0
Vaatajad. tuhat 1146.6 1186.0 1164.0 1192.0
Teatriskäigud 1000 elaniku kohta 872.2 901.4 883.5 901.7
Proovime tabelist ka rea eemaldada. Teeme seda algul indeksipõhiselt ja seejärel eemaldame rea, mis vastab mingile määratud kriteeriumile.
drop()
andmed = andmed.drop(['Teatrite arv'], axis=0)
print(andmed)
2015 2016 2017 2018
Lavastused 550.0 540.0 559.0 582.0
..uuslavastused 216.0 196.0 204.0 211.0
Etendused 6434.0 6573.0 6713.0 6695.0
Vaatajad. tuhat 1146.6 1186.0 1164.0 1192.0
Teatriskäigud 1000 elaniku kohta 872.2 901.4 883.5 901.7
loc()
Eraldame uude andmefreimi vaid read, kus on 2012. aasta väärtused suuremad või võrdsed arvust 1000.
uus_andmefreim = andmed.loc[andmed['2018'] >= 1000]
print(uus_andmefreim)
2015 2016 2017 2018
Etendused 6434.0 6573.0 6713.0 6695.0
Vaatajad. tuhat 1146.6 1186.0 1164.0 1192.0
Juhul, kui indeksi Teatrisk�igud 1000 elaniku kohta nimetuses oli ä-tähe asemel midagi muud, saame selle asemel päris ä-tähte panna.
andmed = andmed.rename(index={'Teatrisk�igud 1000 elaniku kohta' : 'Teatriskäigud 1000 elaniku kohta'})
print(andmed.tail(1))
2015 2016 2017 2018
Teatriskäigud 1000 elaniku kohta 872.2 901.4 883.5 901.7
Andmete kajastamine graafikul
Andmete põhjal saab graafiku teha mooduli matplotlib abil. Moodul tuleb installide enne importimist. Sellega tegelesime eelmises peatükis.
import pandas as pd
import matplotlib.pyplot as plt
# Loeme CSV nii, et esimene veerg ("Unnamed: 0") muutub indeksiks
andmed = pd.read_csv("teater2.csv", delimiter=';', index_col=0)
# Kontrollime andmete struktuuri
print(andmed.head())
# Transponeerime andmed (aastad muutuvad indeksiks, kategooriad veergudeks)
transponeeritud_andmed = andmed.T
# Kontrollime, kas "Teatrite arv" on indeksite seas
print(transponeeritud_andmed.index)
# Joonistame graafiku "Teatrite arv" andmetest
transponeeritud_andmed["Teatrite arv"].plot(kind='line', marker='o', linestyle='-')
# Lisame pealkirja ja sildid
plt.title('Teatrite arvu muutus ajas')
plt.xlabel('Aasta')
plt.ylabel('Teatrite arv')
# Kuvame graafiku
plt.show()
Graafik:

Andmete kirjutamine faili
Kui andmed on töödeldud, võib tekkida vajadus need uude faili kirjutada. Seda saab teha funktsiooni .to_csv abil. Kirjutame muudetud andmed faili nimega uued_andmed.csv, kasutame eraldajana semikoolonit.
andmed.to_csv('uued_andmed.csv', sep=';', encoding='UTF-8')
![]() | V OSA sisukord | ![]() |

