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.

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