![]() | V OSA sisukord | ![]() |
5.5 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 | ![]() |