1D satunnaiskävely Pythonilla ja histogrammeja

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

Advertisement

One Reply to “1D satunnaiskävely Pythonilla ja histogrammeja”

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out /  Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out /  Muuta )

Muodostetaan yhteyttä palveluun %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggaajaa tykkää tästä: