Tutkitaan Pythonin avulla yksiulotteista satunnaiskävelyä. Samalla kokeilen eri tapoja tulostaa histogrammeja Pythonin kirjastojen avulla. Yksiulotteisessa satunnaiskävelyssä lähdetään origosta ja arvotaan mennäänkö askel oikealle vai vasemmalle. Tätä toistetaan, kunnes aletaan miettiä, mihin sitä oikein on taas tultu eli kuinka kaukana origosta ollaan.
Tässä ensimmäisessä versiossa askeleen pituus on vakio, tutkitaan myöhemmin tilannetta, jossa askeleen pituus on satunnainen.
konna
Käytän ohjelmointiympäristönä Googlen Colabia.
Teen ensin pienen mallin kävelystä käyttäen Turtle-grafiikkaa. Kävelyn suunta on y-akselin suunnassa ja en kuljetakaan konnaa pelkästään y-akselin suunnassa, vaan liikutan sitä myös vaakasuunnassa, näin liike saadaan näkyville aika-paikka -koordinaatistossa.
Monessa muussa Python-editorissa koko kilpikonnakirjaston saa käskyrivillä
from turtle import *
Ladataan ensin Colabissa ColabTurtle-kirjasto. Tämä pitää olla suoritettuna ennen kirjaston käyttöä.
Rivillä 1 ladataan choice()-funktio. Se arpoo rivin 14 arvot listasta suunnan. Riveillä 9-12 konna siirretään ikkunan vasempaan reunaan. Rivien 16-20 for-silmukassa liikutetaan konnaa arvonnan mukaisesti.
Alla yksi konnan reitti satunnaiskävelyssä. Se taisi päätyä aika lähelle lähtöpaikkaansa.
loppupaikan tutkiminen
Unohdetaan kilpikonna ja tutkitaan vain satunnaiskulkijan paikkaa. Rivillä 6 alkupaikaksi määritellään origo. Rivillä 9 for silmukassa vanhaan paikkaan lisätään arvottu luku. Rivin 9
paikka+=arpa
tarkoittaa samaa kuin
paikka=paikka+arpa
Piirretään matplotlibin avulla kilpokonnan kävelyn tyyppinen kuvaaja. Rivillä 2 ladataan matplotlib-kirjasto. Rivit 12 ja 13 tulostavat kuvaajan.
Luodaan lista nimeltä loppulista, joka kerää viimeisen paikan. Tässä tarvitaan kahta sisäkkäistä for-silmukkaa. Sisemmässä silmukassa riveillä 8-11 liikutetaan kulkijaa 100 kertaa ja ulommassa silmukassa rivit 6-11 lisätään viimeinen paikka loppulista-listaan append-metodin avulla.
Tutkitaan huvin vuoksi, toimiiko koodi Abittin editorilla, jota voi kokeilla sivulla https://cheat.abitti.fi/build/index.html?fi&programming
histogrammit
Piirretään histogrammeja eri menetelmillä. Sopivilla funktioilla Python laskee esiintymien lukumäärät automaattisesti.
Rivillä 2 ladataan matplotlib-kirjasto. Rivillä 15 on varsinainen histogrammi, bins =”auto” tarkoittaa, että komento järkeilee fiksuimman tavan määrittää tolppien lukumäärä. Jos ”auto”:n korvaa luvulla, niin se on tolppien lukumäärä.
Seuraavassa kuvaajassa rivillä 15 rwidth parametri kertoo tolpan leveyden.
Seuraavaan kuvaajaan on lisätty tekstiä riveillä 15 ja 16. plt.txt-funktion kaksi ensimmäistä arvoa ovat koordinaatit kuvaajassa.
Panda on Pythonkirjasto, jonka auttaa taulukoidun datan käsittelyä. Alla esimerkki histogrammista Pandan perusasetuksilla.
Seaborn-kirjasto on suunniteltu datan esittämiseen, tätä minun pitänee opiskella lisää.
pieni todistustehtävä 1
Kun piirtelin näitä histogrammeja, niin tajusin, että jos konna liikkuu parillisen määrän askelia, niin sen päätepiste on aina parillisessa pisteessä ja parittomilla askelilla päätepiste on pariton luku. Miksi? Tässä pieni todistustehtävä lukiolaisille.
pieni todistustehtävä 2
Miksi nuo histogrammit ovat normaalijakauman/binomijakauman näköisiä?
Palaan satunnaiskävelyyn tulevaisuudessa. Erilaiset satunnaiskävelyt, 2D ja 3D satunnaiskävely muun muassa kiinnostavat harrastelijakoodaajaa.
Colab-tiedosto löytyy täältä https://colab.research.google.com/drive/1IlzADCNPgwUMi2ujzstU9pPcH1o-NcKE?usp=sharing
lähteet
Hyvä Python histogramminpiirto-ohje
https://realpython.com/python-histograms/
Seaborn-histogrammiohje
https://seaborn.pydata.org/generated/seaborn.displot.html
Tätä kirjaa käytän apuna kuvaajia piirrellessäni
Yim, Chung, Yu. Matplotlib for Python Developers Second Edition. Pact. 2018
Hyvä artikkeli 1d satunnaiskävelystä
https://galileo.phys.virginia.edu/classes/152.mf1i.spring02/RandomWalk.htm
Wikipediassa
https://en.wikipedia.org/wiki/Random_walk
One Reply to “1D satunnaiskävely Pythonilla ja histogrammeja”