Julkaisin muutama päivä sitten tarinan ”Kevään 22 yo-kirjoitusten tuloksien korrelaatiomatriisi Pythonilla”. Tässä artikkelissa kerron, millaisen koodin avulla tuotin sen. Käytän ohjelmointiympäristönä Googlen Colabia. Colabin etuna verrattuna muihin Python ympäristöihin (IDLE, Spyder yms.) on se, että voin muokata koodia pilven kautta ja Colabissa on lähes kaikki Big Datan käsittelyyn käytettävät kirjastot ovat helposti kätettävissä. Samalla saan helpon pääsyn omiin tiedostoihini Google Drivessä ja voin jakaa koodin helposti.
Esitän koodin kuvankaappauksina Colabista ja kommentoin niitä tarinan edetessä. Linkki lopulliseen tiedostoon löytyy tarinan lopusta.
Tähän käytetty tiedosto löytyy ytl:n sivulta https://www.ylioppilastutkinto.fi/tietopalvelut/tilastot/koulukohtaisia-tunnuslukuja
sieltä löytyy linkki myös oppiainekoodeihin ja miten tiedostojen nimet on koodattu.
Itse tiedosto on osoitteessa https://www.ylioppilastutkinto.fi/ext/data/FT2022KD3001.csv
kirjastoista
Python on siitä kiva, että lähes mihin tahansa koodausongelmiin löytyy apua kirjastoista. Tässä tarinassa käytän Pandas, Seaborn ja Matplotlib -kirjastoja.
Pandas on luotu taulukoidun datan käsittelyyn, se ikään kuin tuo taulukkolaskennan rivit ja sarakkeet koodiin. Taulukon tietotyyppi Pandasissa on Dataframe, yleensä kirjallisuudessa käytetylle taulukolle annetaan nimi df. Kun käyttää Pandasia, niin kannattaa ajatella taulukot siten, että rivit ovat tilastoyksikköjä ja sarakkeet muuttujia, kuten ytl:n datassa.
Matplotlib-kirjaston avulla piirretetään kuvaajia. Seaborn on Matplotlibin laajennus. Sen avulla saan taulukon dataan värikoodauksen heatmap-funktion avulla.
koodi kommentoituna, pandas taulukko
Rivit 8-10: ladataan kirjastot
Rivi 13: on Ytl:n datan osoite
Rivi 15: luetaan data Pandasin taulukkoon. Tätä koodatessa havaitsin, että Ytl:n taulukossa erotin on puolipiste, niinkuin usein meillä skandinaaveilla.
Tässä vaiheessa taulukko näyttää tältä. Jos rivin 16 olisi korvannut rivillä
display(talukko)
niin siitä olisi tullut nätimmmän näköisen, taas opin uutta. En jaksa muuttaa tarinaan liitettyjä kuvankaappauksia.
Kuvasta nähdään, että 24911 ylioppilasta valmistui tänä keväänä. Aakkosissa (tai jollain muulla logiikalla) ensimmäinen Vieremän lukion oppilas oli tyttö ja sai yhteensä 18 puoltoääntä jne.
Alla display-funktiolla tuotetun kuvan vasenta reunaa.

Rivillä 19 luodaan taulukosta df-niminen DataFrame-taulukko.
Rivillä 22 poistetaan kuusi vasemmanpuoleista saraketta ja oikeanpuolisin (tutkintotyyppi).
Taulukko df on nyt tämän näköinen.
Rivi 27: Lasketaan rivien summat (axis = 0 on rivit ja axis = 1 on sarakkeet). Funktio count laskee lukumäärät ja list tuottaa luvuista helposti käsiteltävän listan.
Rivit 30-33: Lasketaan sellaiset sarakkeet, joissa on alle 100 kirjoittajaa.
Rivi 37: Poistetaan sellaiset sarakkeet, joissa on poistettava indeksi.
Edellisten rivien printtaus tuottaa tällaista.
Rivi 41: Lasketaan korrelaatiomatriisi, min_periods kertoo kuinka monta paria vähintään pitää olla ja round desimaalien lukumäärän. Oletuksena syntyy neliömatriisi, mikä on minulle parempi. LibreOffice ja Excel tuottavat työkaluillaan vain kolmiomatriiseja.
Tämä näyttää hyvältä.
Rivi 45 ja 47: Pitää poistaa vasemmasta reunasta tuo yht-sarake yhteenlaskuja varten.
Rivit 50-51: Lasketaan selitysasteiden summa ja niiden aineiden summa, joilla korrelaatio on yli 0.6. Tässä näkyy Pandasin käyttökelpoisuus taulukoidun datan käsittelyssä.
Nyt taulukon oikeassa reunassa on
Jos tässä vaiheessa haluaisin tallentaa datan csv-tiedostona omaan Driveeni, niin se toimisi rivillä
df.to_csv(/content/drive/MyDrive/Artikkelit/matriisi/yo.csv", encoding="utf-8”)
seaborn
Tämän kirjaston avulla saan taulukkoon värikoodauksen käyttämällä heatmap-tyyppistä kuvaajaa. Erilaisia väripaletteja on aika paljon, valitsin tähän diskreetin (ei jatkuvan) paletin. Tämän tuottaminen vaati aika paljon yritystä ja erehdystä.
Rivi 58: Valitaan diskreetti väripaletti keltaisesta punaiseen, päädyin kokeilujen jälkeen tuohon kuuteen eri väriin, ne kuvaavat MAOLin taulukoissa olevaa tulkintaa korrelaatiokertoimista. En välitä negatiivista korrelaatikertoimista, niitä kun on niin vähän.
Rivi 59: Tuotetaan heatmap, annot näyttää oikean reunan palkkin, vmax, vmin ja vcenter kertovat rajoista, annot_kws on fontin koko ja title otsikko.
Rivi 62: Tässä määritetään kuvan koko.
Viimein saatiin tämä kuva.
Oikean reunan kielien poistaminen toimii lisäämällä väliin rivit.
Nyt kuva on tällainen
koodaamisesta
Vaikka yllä oleva voi vaikuttaa aika suoraviivaiselta ja jopa ymmärrettävältäkin, niin tuon tuottaminen tällaiselta aloittelijalta vaati aika paljon Googlettamista sekä yritystä ja erehdystä. Koska Colabissa voi helposti kokeilla erilaisia versioita, niin pitää muistaa kirjoittaa paljon kommentteja. Muuten versioiden hallinta menee mahdottomaksi.
Colab-tiedosto https://colab.research.google.com/drive/106rjIDEJWdn2ImdVtjAKzg_3df9fWhPx?usp=sharing
Koodaamisen oppiminen on helppoa, sen opettaminen on vaikeaa.
lähteitä
Korrelaatiomatriisi Pandasilla https://datagy.io/python-correlation-matrix/
Pandas dataframe-ohje https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.corr.html
Seaborn väripaletit https://seaborn.pydata.org/tutorial/color_palettes.html
Seaborn Heatmap, aika hyvä ohje https://www.geeksforgeeks.org/seaborn-heatmap-a-comprehensive-guide/
Kalibur Rahman, Python Data Visualization, Essential Guide, 2021, BpB
One Reply to “Ylioppilaskoekorrelaatiomatriisi koodi Pythonilla”