Vieläkö muistat biorytmit? Teorian, jonka mukaan ihmisen vireystila noudattaa 23, 28 ja 33 vuorokauden jaksoja. Riskit ovat kohollaan päivinä, jolloin käyrä leikkaa nolla-akselin joko alas tai ylös mennessään.
Itse muistan biorytmit hyvin, sillä kun IT-matkani 1980-luvulla alkoi, biorytmit olivat yleisimpiä ohjelmia, mitä mikrotietokoneille tehtiin. Niitä tulostettiin rätisevällä matriisikirjoittimella erilaisissa yleisötapahtumissa. Vieras sai mukaansa pitkän tulosteen, joka oli oikein tietokoneella tehty.
![]() |
Tyypillinen biorytmikaavio grafiikkana. Ei ollut näin hienoa 1980-luvulla. |
Kiinnostus biorytmejä kohtaan oli korkeimmillaan 80-luvun alussa, kuten Wikipedia tietää kertoa. Sen mukaan biorytmejä pidetään nykyään pseudotieteenä, jolla ei ole todellista pohjaa. Mutta kun löysin vanhat, vuonna 1985 lerpulle siirtämäni tiedot suurmiesten syntymä- ja kuolinpäivistä, tuli mieleen valjastaa Excel töihin.
Keräsin tiedot aikanaan erilaisista lähdeteoksista Tampereen kirjaston lukusalissa istuen. Kopioin ne kynällä paperille, ja siirsin tiedot sitten Tampereen teknillisen yliopiston PDP-keskustietokoneelle iltaisin päätteellä naputellen. Myöhemmin pelastin aineiston IBM PC -lerpuille ja tein muutamia tilastollisia analyysejä, joista kirjoitin jutun Tietokone-lehden kevään 1986 numeroon. Niinpä, 39 vuotta sitten.
![]() |
Tietokone-lehti 4/1986, vanha vuosikerta (kuka vielä muistaa Wangin?). |
Aineistossa on 651 historiallista luonnontieteilijää, 644 kirjailijaa, 144 matemaatikkoa ja 463 säveltäjää - yhtensä 1902 ihmistä. Sen jälkeen laskin, kuinka moni henkilöistä oli kuollut 23, 28 tai 33 vuorokauden biorytminsä nollakohdassa, ja vertasin tuloksia tilastolliseen keskiarvoon.
Vielä 1980-luvun puolivälissä laskenta oli hidasta, mutta nykyiset koneet pyörittävät laskentaa helposti, joten pystyin laajentamaan tutkimusta mahdollisten uusien "vaarallisten" biorytmijaksojen löytämiseksi.
Lerpun aineisto oli ASCII-pohjaisena numerodatana, joten ensimmäinen työ oli lukea se Exceliin. Ohjelmassa on kehittynyt import-toiminto, joten sisään lukeminen kävi helposti, joskin päivä, kuukausi ja vuosi olivat omissa sarkkeissaan, joten päivämäärät piti muodostaa niistä kaavalla yhdistäen.
Sitten tulikin yllättävä ongelma: Excelin päivämääräfunktiot alkavat vasta 1.1.1900, joten vanhemmat päiväykset antavat kummallisia tuloksia (eivät kuitenkaan virheilmoitusta, vaikka pitäisi). Elinpäivien lukumäärän laskemiseksi oli keksittävä toinen tapa. VBA-funktion koodaaminen oli yksi vaihtoehto, mutta karkauspäivien huomiointi vaati työtä, joten käytin Pythonin valmista datetime-modulia.
![]() |
Python-koodi Excelin solussa - näppärää! |
Python-koodi soluissa on näppärä ominaisuus, mutta vaatii Excelin yritysversion, ja sielläkin nopeaa laskentaa saa vain rajoitetusti.
![]() |
Pilvipalvelujen kiroja: kaikesta voi rahastaa erikseen. |
Microsoft on keksinyt uuden tavan rahastaa. Perushintaan kuuluu vain rajoitettu määrä nopeaa Python-suoritusta kuukaudessa. Jos haluaa säilyttää nopeuden siitä pitää maksaa lisää.
![]() |
Python-nopeutta rajoitetaan kuukausitasolla. |
Itselleni tämä ei ole ongelma, koska elinpäivien laskenta toimii hitaammallakin teholla, mutta laittaa kyllä miettimään, millaisen kultaisen häkin pilvipalveluista itselle rakennamme. Häkki on hieno, mutta siitä ulos pääseminen maksaa.
Olisi hienoa, jos Excelissä voisi suoraan noutaa jokaiselta laskentasivulta alimman tai toiseksi alimman rivin soluja yhteenvetosivulle, mutta itse en ole keksinyt tähän fiksua tapaa. Miksei viittauksissa voisi käyttää esim. sivu!A[#last] tai sivu!A[#last-1]-tyyppistä rakennetta? Kikkailemalla viittaus kyllä hoituu, mutta lopulta päädyin tekemään yhteenvedot manuaalisesti kaavoja päivittämällä.
![]() |
Erilaisia "biorytmejä" 20-84 vuorokauden jaksoina. |
Suoraan asiaan: 23, 28 ja 33 vuorokauden jaksot eivät pistä aineistossa esiin millään tavalla. Vain matemaatikkojen ryhmässä 28 vrk osoittaa 56 % "ylikuolleisuutta", toisaalta kirjailijoilla -30 % "alikuolleisuutta". Säveltäjillä 33 vrk on +35 % tilastollista odotusarvoa korkeammalla.
Suurin yli-arvo on 34 vrk matemaatikoilla (+113%), mutta 56 vrk:n arvo (+211 %) on vielä reilusti suurempi. Mitä pidemmästä jaksosta on kyse, sitä epäluotettavammiksi tulokset käyvät, koska matemaattisesti nollakohtia tulee yhä vähemmän ja virhemarginaali kasvaa. Paljon kertoo myös se, että suurimmat erot tulevat juuri siinä ryhmässä, jossa on vähiten aineistoa.
Kaikista (N=1902) laskettuina lukemat osuvat hyvin keskiarvoon ts. ne selittyvät sattumalla (84-109 %). Ensimmäinen isompi ero (+120 %) on 33 ja 34 vuorokauden kohdilla, heti sen jälkeen 35 kohdalla onkin sitten poikkeama toiseen suuntaan (75 %).
Mikään jaksopituus ei nouse erityisesti esiin uhkaavana (suuri prosenttimäärä) kaikissa neljässä ryhmässä.
On helppo uskoa, ettei kulkutautien ja tapaturmien niittäessä satoaan biorytmien asennolla ollut käytännössä vaikutusta kuoleman ajankohtaan. Nykymaailmassa voisi olla toisin, sillä monen henkinen kestävyys on koetuksella. Manuaalisesti kerätty vajaan 2000 henkilön aineisto on myös liian pieni, jotta siitä voisi tehdä mitään johtopäätöksiä.
Siksi tämä laskelma on yhtä viihteellinen kuin biorytmit itsessään, mutta kuitenkin kiinnostava esimerkki siitä, miten monenlaisiin tehtäviin Excel taipuu ja miten sillä voi selvitellä asioita, jotka vielä muutama vuosikymmen sitten olivat laskennallisesti liian raskaita.
Hjoo, muistan kyllä itsekin nuo rätisevillä kirjoittimilla, kieli poskessa printatut tulosteet. Jo silloin epäilyksen piru kuiskutteli korvaan, että mikäs sen tietää tai takaa, että kaikien ihmisten rytmien aallonpituudet ovat samoja - tai varsinkaan vakioisia. Ei tietenkään mikään, mutta yksilöllisten vaihteluiden ottaminen huomioon laskennassa olisi vaatinut ihan toisenkokoisia aineistoja ja olisi luultavasti tikahduttanut noiden pahaisten masiinojen muistit. No, hupia kumminkin riitti.
VastaaPoistaViimeisen tms rivin löytäminen on tosiaan hankalaa. Erityisen kivaa on jos on taulukko missä on väliyhteenvetoja, tyyliin
VastaaPoistaSITRUSHEDELMÄT
appelsiinit 5
sitrunnat 6
Yhteensä 11
MARJAT
Mustikka 3
Mansikka 6
Yhteensä 9
Jos haluan kaavoilla saada aikaan taulukon joka sanoo
SITRUSHEDELMÄT 11
MARJAT 9
Niin paras keksimäni ratkaisu on hirviö
=INDEX(INDIRECT(...);MATCH("Yhteensä";INDIRECT(...););2)
Jossa indirectien sisällä on apusarakkeet josta löytyy soluviittaus mistä sanaa "Yhteensä" tulee hakea. Lopussa oleva kakkonen on sarakkeen numero.
(Triviaalitapauksessa INDIRECTiä ei väliin tietty tarvita).
LOOKUP toimisi ilmeisesti samaan tyyliin myös.
Itse ajattelin, että laitan A-sarakkeessa viimeiselle riville jonkin koodin, mitä missään muualla ei esiinny (vaikka numerot 9999), ja kun etsintäfunktio palauttaa sen rivinumeron, pystyn helposti generoimaan muidenkin sarakkeiden viimeiset soluosoitteet. Tämä kaikki vaatii kuitenkin manuaalista työtä eikä ole aukoton. Luulisi, että viimeiseen soluun viittaamiseen olisi 40 vuodessa keksitty parempikin tapa.
VastaaPoistaTämä toimii:
Poista=MAKS(JOS(A:A<>"";RIVI(A:A)))
Ja jos haluat rivinumeron sijasta viimeisen rivin solun arvon niin
VastaaPoista=INDEX(sivu!A:A;MAX(IF(sivu!A:A<>"";ROW(sivu!A:A))))
missä sivu on laskentasivun nimi. Helppoa kuin heinänteko... not.
Ei toki, mutta tuolla tavalla sinne ei tarvitse laittaa mitään koodeja. Tietenkin, jos se on taulukkona niin menee vielä lyhyemmällä kaavalla. Jos siis se pelkkä rivinumero tarvitaan.
Poista=MAKS(RIVIT(Taulukko1))