Syksyn 2022 ylioppilastutkinnon tuloksien korrelaatiomatriisi 

Julkaisin kesäkuussa tarinan aiheesta ”Kevään 22 yo-kirjoitusten tuloksien korrelaatiomatriisi Pythonilla”. Tuotin syksyn yo-tuloksista samat matriisit. Edelleenkin vaikuttaa siltä, että ei-matemaattiset reaaliaineet ovat kovasti esillä, kun pohditaan, minkä aineen tulos korreloi parhaiten ylioppilaskokeen kokonaismenestymisen kanssa.

Linkit tässä tarinassa käytettyihin tiedostoihin ja koodiin löytyvät tarinan lopusta.

Korrelaatiomatriisi

Syksyllä 22 ylioppilaita valmistui 4466 kappaletta, onnittelut heille. Käytin matriisin tuotossa samaa koodia, kuin kesäkuun tarinassani. Loin taulukon, jossa oli vain oppilaiden puoltoäänien summa (yht) ja eri kirjoituksista saadut arvosanat (”a” = 2, ”b” = 3, …, ”l” = 7) . Poistin taulukosta sellaiset aineet, joita oli kirjoitettu alle 100 kertaa. Loin korrelaatiomatriisin siten, että mukaan laskettiin vain ne aineparit, joissa vähintään 20 oppilasta oli kirjoittanut kyseiset aineet. Lisäsin oikeaan reunaan kaksi saraketta. Sarakkeelle ”∑r2” laskin korrelaatiokertoimien neliöiden eli selitysasteiden summan ja sarakkeelle ”yli .6” laskin niiden korrelaatioden lukumäärän, jotka olivat suurempia kuin 0.6.

Mikäli haluat tuottaa itsellesi erilaisia tuotoksia, niin valmis koodini kommentoituna löytyy Colabista, linkki on Lähteet-luvussa.

pari kommenttia

Parhaiten ylioppilaan puoltoäänien määrää (yht) ennustaa tulkintani mukaan menestyminen evankelis-luterilaisen uskonnon yo-kokeessa (UE, r = 0.80). Biologialla (BI), filosofialla (FF) ja psykologialla (PS) korrelaatiokerroin on lähes sama 0,79. Kevään 22 ylioppilailla korkeimmat korrelaatiot puoltoäänien summan kanssa olivat: historia, evankelis-luterilainen uskonto, maantiede (GE) ja keskipitkä ruotsi (BB); r = 0.75.

Korkeimmat selitysasteiden summat syksyllä: biologia ∑r= 8.5, fysiikka (FY), historia, psykologia ja keskipitkä ruotsi ∑r= 7.1. Kevään ylioppilailla suurimat selitysasteiden summat olivat: biologia (Σr2 = 9), psykologia (Σr2 = 8.9) sekä historia ja keskipitkä ruotsi (Σr2 = 8.5).

Suurimmat aineiden väliset korrelaatiot olivat: yhteiskuntaoppi/biologia r = 0.82, keskipitkä ruotsi/lyhyt englanti (EC) r = 0.81 ja fysiikka/pitkä matikka (M) r = 0.78. Keväällä 22 suurimmat aineiden väliset korrelaatiot: elämänkatsomustieto/historia r = 0.82, elämänkatsomustieto/filosofia ja filosofia/uskonto r = 0.80.

Kesällä jotkut henkilöt olivat sitä mieltä, että kirjoitettujen aineiden lukumäärää olisi mielenkiintoista tutkia. Tein myös sitä varten oman taulukon, johon aineiden oikealle puolelle lisäsin sarakkeen lkm, johon laskin kirjoitettujen aineiden lukumäärän. Havaitaan, että lkm-muuttujan ja kokonaispistemäärän välinen korrelaatio on suuri 0.73, mutta lkm ei juurikaan korreloi minkään yksittäisen aineen kanssa.

Lähteet

Tähän tarinaan liittyvä koodi Google Colabissa

Aiemmat aiheeseen liittyvät artikkelit blogissani

Ylioppilaslautakunnan tiedostot

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/FT2022SD3001.csv

Advertisement

Ylioppilaskoekorrelaatiomatriisi koodi Pythonilla

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

Kevään 22 yo-kirjoitusten tuloksien korrelaatiomatriisi Pythonilla


Tänä keväänä opiskelin Pythonia ja Pandas+Seaborn -kirjastoja sen verran, että pystyin tuottamaan korrelaatiomatriisin taas uudella tavalla. Big datan kanssa puuhasteleminen on kivaa, ongelmaksi tulee se mitä tietoa siitä kaivaa ja miten sen esittää. Matriisi osoittaa (minun mielestäni), että ei-matemaattiset reaaliaineet (bi, et, hi, ge, ff) ennustavat parhaiten ylioppilaiden kokonaismenestystä ylioppilaskokeessa.

edelliset tarinat aiheesta

Vuoden 19 ylioppilaskoematriisi LibreOfficella ​​https://mikkorahikka.blog/2020/01/20/korrelaatiomatriisi-libreofficella-ytln-datasta/

Vuoden 21 ylioppilaskoematriisi Excelillä https://mikkorahikka.blog/2021/05/28/kevaan-21-yo-kirjoitusten-korrelaatiomatriisi/

22 korrelaatiomatriisit

Tähän käytetty tiedosto löytyy ytl:n sivulta https://www.ylioppilastutkinto.fi/tietopalvelut/tilastot/koulukohtaisia-tunnuslukuja

ja itse tiedosto on osoitteessa https://www.ylioppilastutkinto.fi/ext/data/FT2022KD3001.csv

Loin Pythonilla taulukon, jossa oli vain oppilaiden puoltoäänien summa (”yht”) ja eri kirjoituksista saadut arvosanat (”a ” = 2, ”b” = 3, …, ”l”  = 7) . Poistin taulukosta sellaiset aineet, joita oli kirjoitettu alle 100 kertaa. Loin korrelaatiomatriisin siten, että mukaan laskettiin vain ne aineparit, jossa vähintään 20 oppilasta oli kirjoittanut kyseiset aineet.

Klikkaamalla kuvaan, saat sen avautumaan isompana uuteen välilehteen.

Ainekoodit ovat alla. En todellakaan muista mistä löysin nuo alunperin, kaipa ne ovat jossain YTL:n sivuilla.

Tein vielä toisen matriisin, poistin tästä osan oikean reunan kielistä. Tuota on ehkä hieman mukavampi katsella. Toki se hävittää kielten väliset korrelaatiot.

pari kommenttia

Miten näitä matriisejaa pitäisi tulkita. En oikeasti ole tilastotieteilijä, mutta muutamia kommentteja voin tähän raapaista. Käytän tässä tuota ylempää kuvaa.

Parhaiten ylioppilaskokeen puoltoäänien määrää ennustaa menestyminen biologiassa ja elämänkatsomustiedossa (r = 0.77).  Lähes sama korrelaatiokerroin oli historialla, ev-lut.uskonnolla, maantieteellä ja keskipitkällä ruotsilla ( r = 0.75). 

Laskemalla selitysasteiden summan eli korrelaatiokerreinten summan, sain podiumille biologian (Σr^2 = 9), psykologian (Σr^2 = 8.9) ja tasapisteillä historian ja keskipitkän ruotsin (Σr^2 = 8.5).

Sellaisia korrelaatioita, jotka olivat yli 0.6 oli eniten biologiassa (12) filosofiassa (11) ja uskonnossa ja maantieteessä (10).

Suurimmat aineiden väliset korrelaatiot olivat elämänkatsomustiedon ja historian välillä sekä elämänkatsomustiedon ja filosofian välillä (0.82)

Nämä tulokset ovat aika samantyyppisiä kuin vuosina 19 ja 21. Yo-kokeessa menestymistä ennustanee parhaiten menestyminen ei-matemaattisissa  reaaliaineissa. Tarkoittaako tämä sitä, että reaaliaineissa pärjäävät pärjäävät muissakin aineissa vai sitä, että yo-koe yleisesti mittaa reaaliaineissa opittuja tietoja ja taitoja enemmän kuin muita tietoja ja taitoja? En tiedä?


Kunhan opin Pythonia lisää, niin teen oikeasti vertailuja muutoksista aikaisempiin vuosiin. Itse koodin julkaisen lähipäivinä, kunhan saan koodin siivotuksi.