9. kodutöö
1. Andmete silumine
Tekstifailis aktsiad.txt on igal real kuupäev ning sellele kuupäevale vastav ühe ettevõtte aktsia hind.
Kirjuta funktsioon silu_andmed, mis rakendab aktsia hindadele keskmistamist ning tagastab keskmistatud andmed uue järjendina. Keskmistamise all mõtleme siinkohal iga järjendi elemendi asendamist eelmise n elemendi harmoonilise keskmisega. Funktsioon peab võtma argumendiks algandmed järjendina ning täisarvu, mis näitab, mitme elemendi kaupa keskmistamist rakendatakse.
Näiteks järjendi [2, 1, 3, 4, 5] puhul, kui n = 3, näeks arvutamine välja nii:
[1/(1/2), 2/(1/2+1/1), 3/(1/2+1/1+1/3), 3/(1/1+1/3+1/4), 3/(1/3+1/4+1/5)] = [2.0, 1.3333333333333333, 1.6363636363636365, 1.8947368421052633, 3.829787234042554]
Näide funktsiooni käivitamisest:
>>> silu_andmed([2, 1, 3, 4, 5], 3) [2, 1.3333333333333333, 1.6363636363636365, 1.8947368421052633, 3.8297872340425534]
Harmoonilise keskmise leidmiseks soovitame kasutada Pythoni moodulis statistics asuvat funktsiooni ‘’harmonic_mean'':
>>> from statistics import harmonic_mean >>> harmonic_mean([1, 2, 3, 2, 1]) 1.5
Seejärel kirjuta programm, mis kuvab nii algandmeid kui ka silutud andmeid graafikul. Graafikute joonistamiseks kasuta moodulit matplotlib, mille kohta saad rohkem lugeda siit. Tulemus võiks välja näha umbes selline (n = 50, algandmed siniselt, silutud punaselt):
Vihje 1. Hoia funktsiooni sees järjendit viimase n elemendiga.
Vihje 2.
>>> a = [1, 2, 3, 4, 5] >>> a.pop(0) >>> 1 >>> a [2, 3, 4, 5] >>> a.append(6) >>> a [2, 3, 4, 5, 6]
Automaatkontroll. Funktsiooni nimi on silu_andmed ning tal on kaks parameetrit: ujukomaarvude järjend ja (positiivne) täisarv. Funktsioon tagastab ujukomaarvude järjendi. Algandmete faili nime küsida kasutajalt. Võib eeldada, et algandmete failis on päevade andmed eraldi ridadel. Iga päeva kohta on kirjas kuupäev ja selle päeva hind, eraldatult komaga. Read on järjestatud kuupäevade kasvamise järjekorras. Hind on mittenegatiivne ujukomaarv.
2. minu_shuffle
Pythoni moodulis random on funktsioon shuffle, mis ajab argumendiks antud järjendis elementide järjekorra juhuslikult segamini:
>>> from random import shuffle >>> a = [1, 3, 3, 4, 5, 5, 5, 6, 6] >>> shuffle(a) >>> a [5, 3, 6, 5, 5, 3, 4, 1, 6]
Kirjuta ise analoogne funktsioon minu_shuffle, seejuures pole lubatud kasutada olemasolevat shuffle-funktsiooni.
Automaatkontroll. Tuleks jälgida, et funktsioon tõstaks elemendid ümber talle etteantud listis, mitte ei tagastaks uut listi.
Kui oled juba hulk aega proovinud ülesannet iseseisvalt lahendada ja see ikka ei õnnestu, siis võib-olla saad abi murelahendajalt
. Püütud on selgitada tüüpilisemaid probleemseid selgitada ja anda vihjeid.