8. 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 aritmeetilise keskmisega. Funktsioon peab võtma argumendiks algandmed järjendina ning täisarvu, mis näitab, mitme elemendi kaupa keskmistamist rakendatakse.
Näiteks järjendi [1, 3, 2, 4, 3, 5] puhul, kui n = 3, näeks arvutamine välja nii:
[1/1, (1+3)/2, (1+3+2)/3, (3+2+4)/3, (2+4+3)/3, (4+3+5)/3] = [1, 2, 2, 3, 3, 4]
Näide funktsiooni käivitamisest:
>>> silu_andmed([1, 3, 2, 4, 3, 5], 3) [1.0, 2.0, 2.0, 3.0, 3.0, 4.0]
Aritmeetilise keskmise leidmiseks soovitame kasutada Pythoni moodulis statistics asuvat funktsiooni mean:
>>> from statistics import mean >>> mean([1, 2, 3, 2, 1]) 1.8
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.