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. Funktsioon peab võtma argumendiks algandmed järjendina ning täisarvu, mis näitab, mitme elemendi kaupa keskmistamist rakendatakse. Keskmistamise all mõtleme siinkohal iga järjendi elemendi asendamist eelmise n elemendi aritmeetilise keskmisega.
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]
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]
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.