52 Funktsioonide rakendamine seeriatega
Sisseehitatud funktsioonid
Pandasel on mitmeid sisseehitatud funktsioone, mille abil saab andmeid vastavalt soovile töödelda. Järgnevalt vaatame lähemalt peamisi Pandase funktsioone ja mille jaoks neid kasutatakse.
Seeria sorteerimine
Tihti on vaja andmeid mingis kindlas järjekorras sorteerida. Sorteerime andmed õpilaste arvude järgi. Selleks kasutame funktsiooni sort_values
.
andmed = [24, 23, 21, 22, 28, 26, 30, 28, 31, 35, 33, 32, 29, 27, 25, 30, 26, 31, 22] klassid = ['1a', '1b', '2a', '3a', '3b', '4a', '4b', '5a', '6a', '6b', '7a', '8a', '9a', '10 reaal', '10 sotsiaal', '11 reaal', '11 sotsiaal', '12 reaal', '12 sotsiaal'] opilaste_arv = pd.Series(andmed, index = klassid, name = 'Õpilaste arv klassis') opilased_kasvavalt = opilaste_arv.sort_values() print(opilased_kasvavalt)
>>> %Run guido.py 2a 21 12 sotsiaal 22 3a 22 1b 23 1a 24 10 sotsiaal 25 4a 26 11 sotsiaal 26 10 reaal 27 5a 28 3b 28 9a 29 4b 30 11 reaal 30 6a 31 12 reaal 31 8a 32 7a 33 6b 35 Name: Õpilaste arv klassis, dtype: int64
Vaikimisi sorteeritakse andmed kasvavas järjekorras. Selleks, et sorteerida andmed kahanevas järjekorras, lisame sort_values
funktsiooni ascending
parameetri väärtusega False
.
andmed = [24, 23, 21, 22, 28, 26, 30, 28, 31, 35, 33, 32, 29, 27, 25, 30, 26, 31, 22] klassid = ['1a', '1b', '2a', '3a', '3b', '4a', '4b', '5a', '6a', '6b', '7a', '8a', '9a', '10 reaal', '10 sotsiaal', '11 reaal', '11 sotsiaal', '12 reaal', '12 sotsiaal'] opilaste_arv = pd.Series(andmed, index = klassid, name = 'Õpilaste arv klassis') opilased_kahanevalt = opilaste_arv.sort_values(ascending=False) print(opilased_kahanevalt)
>>> %Run guido.py 6b 35 7a 33 8a 32 12 reaal 31 6a 31 11 reaal 30 4b 30 9a 29 3b 28 5a 28 10 reaal 27 11 sotsiaal 26 4a 26 10 sotsiaal 25 1a 24 1b 23 3a 22 12 sotsiaal 22 2a 21 Name: Õpilaste arv klassis, dtype: int64
Samuti saab sarnaselt sorteerida ka siltide järgi, kasutades funktsiooni sort_index
abil.
andmed = [24, 23, 21, 22, 28, 26, 30, 28, 31, 35, 33, 32, 29, 27, 25, 30, 26, 31, 22] klassid = ['1a', '1b', '2a', '3a', '3b', '4a', '4b', '5a', '6a', '6b', '7a', '8a', '9a', '10 reaal', '10 sotsiaal', '11 reaal', '11 sotsiaal', '12 reaal', '12 sotsiaal'] opilaste_arv = pd.Series(andmed, index = klassid, name = 'Õpilaste arv klassis') sildid_kahanevalt = opilaste_arv.sort_index() print(sildid_kahanevalt)
>>> %Run guido.py 10 reaal 27 10 sotsiaal 25 11 reaal 30 11 sotsiaal 26 12 reaal 31 12 sotsiaal 22 1a 24 1b 23 2a 21 3a 22 3b 28 4a 26 4b 30 5a 28 6a 31 6b 35 7a 33 8a 32 9a 29 Name: Õpilaste arv klassis, dtype: int64
Näites sorteeriti sildid tähestikulises järjestuses.
Suurim ja vähim väärtus
Pythonis oleme kasutanud suurima ja vähima väärtuse leidmiseks funktsioone max(järjend)
ja min(järjend)
. Ka Pandasega saab neid funktsioone kasutada.
# Suurim väärtus andmed = pd.Series({'MM13': 34, 'MM34': 56, 'MM55': 66}) max_vaartus = andmed.max() print(max_vaartus)
>>> %Run guido.py 66
# Vähim väärtus andmed = pd.Series({'MM13': 34, 'MM34': 56, 'MM55': 66}) min_vaartus = andmed.min() print(min_vaartus)
>>> %Run guido.py 34
Aritmeetiline keskmine ja mediaan
Üks levinumaid arvkarakteristikud, mida andmete analüüsimisel kasutatakse on arvude aritmeetiline keskmine. Aritmeetiliseks keskmiseks nimetatakse arvu, mis saadakse antud arvude summa jagamisel liidetavate arvuga. Seda saab väga lihtsalt ka teha Pandase abiga, kasutades mean
funktsiooni.
# Aritmeetiline keskmine andmed = pd.Series({'MM13': 34, 'MM34': 56, 'MM55': 66}) keskmine = andmed.mean() print(keskmine)
>>> %Run guido.py 52.0
Sarnaselt saab leida ka mediaani, kasutades median
funktsiooni. Mediaan on variatsioonirea keskmine liige ehk väärtus, millest suuremaid (või võrdseid) ja väiksemaid (või võrdseid) liikmeid on variatsioonireas ühepalju. Kui liikmeid on paaris arv, siis mediaaniks on variatsioonirea kahe keskmise liikme aritmeetiline keskmine.
# Mediaan andmed_paaritu = pd.Series({'MM13': 34, 'MM34': 56, 'MM55': 66}) andmed_paaris = pd.Series({'MM13': 34, 'MM34': 56, 'MM55': 66, 'MM32': 51}) mediaan_paaritu = andmed_paaritu.median() mediaan_paaris = andmed_paaris.median() print("Mediaan (paaritu):", mediaan_paaritu) print("Mediaan (paaris):", mediaan_paaris)
>>> %Run guido.py Mediaan (paaritu): 56.0 Mediaan (paaris): 53.5
Oma funktsiooni kasutamine
Seerial on võimalik rakendada otse ka kasutaja loodud funktsioone. Näiteks teeme funktsiooni, mis arvutab II sambasse lisatava summa brutopalgast, mis on 2%. Funktsiooni argumendiks on seeria ning funktsiooni sees korrutame seeria 0,02ga. Meeles tuleb pidada seda, et funktsioon peab kindlasti tagastama, mitte väljastama, sest nii saame arvutatud seeria muutujasse salvestada.
def pension(seeria): return seeria*0.02 palk = pd.Series({'Madis': 783.45, 'Kristi': 1330.1, 'Ott': 975.23, 'Kalle': 2987}) II_sammas = pension(palk) print(II_sammas)
>>> %Run guido.py Madis 15.6690 Kristi 26.6020 Ott 19.5046 Kalle 59.7400 dtype: float64
Oluline on meelde jätta, et funktsioonide rakendamisel seeria peal, tuleb vajadusel uus ja modifitseeritud seeria uuesti omistada uuele muutujale. Seljuhul saab kasutada nii lähteandmetel põhinevat seeriat kui ka funktsiooni abil loodud seeriat eraldi. Näiteks rakendada veel mõnda funktsiooni lähteandmete seerial.