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

https://colab.research.google.com/drive/1O1koEa0SGWZTCqDzjYEySyPrIkwdjrmv?usp=sharing

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

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

Ylioppilasdatan louhimista Pivot-taulukoilla

[edit. 25.5. Korjasin pari kirjoitus vihrettä ja muutin yo-tiedoston otsikkorivi-kohdan luettavammaksi.]

Tein tämän alunperin Excelillä, niinpä päätin tuottaa saman Google Sheetsin Pivot toiminnolla, jotta oppisin uutta. Tulevassa tarinassa teen saman Excelillä.

Mielestäni kaikkien matikan opettajien tulisi osata käyttää Pivot-toimintoa taulukkolaskennossa ja opettaa se oppilailleen. Näin monen taulukkoja käyttävien henkilöiden työ muuttuisi helpommaksi ja maamme kansantalous kasvaisi :o)

Ylioppilaslautakunnan sivulla Oppilaitoskohtaisia tunnuslukuja https://www.ylioppilastutkinto.fi/tietopalvelut/tilastot/koulukohtaisia-tunnuslukuja on ohjeet miten ladata kevään 19 ylioppilaskirjoitusten tulokset csv-tiedostona. Myös aiempien tutkintokertojen tiedostot ovat ladattavissa. Tiedostoja on kahta eri tyyppiä riippuen niiden päivitettävyydestä. D3000-sarjan tiedostot eivät päivity. D4000-sarjan tiedostot päivittyvät kun ylioppilastutkinnon tiedot täsmentyvät esimerkiksi tarkistusarvostelun takia.

Kevään 19 pakollisten aineiden (ei päivittyvät) tulokset löytyvät tiedostosta https://www.ylioppilastutkinto.fi/ext/data/FT2019KD3002.csv

Kun klikkaat tuohon osoitteeseen, niin selaimesi lataa tiedoston lataukset-kansioosi. Käytän tätä tiedostoa mallina siitä, miten tietoa voi käsitellä Google Sheetsin ja Excelin Pivot-taulukkotoiminnolla (myöhemmin).

Tavoitteena on tuottaa samankaltainen lista koulujen menestymisessä pakollisissa aineissa kuin lehdet ovat tuottaneet. Samoilla menetelmillä voi helposti laittaa kouluja järjestykseen vaikkapa eri oppiaineiden tulosten perusteella tai vertailla tyttöjen ja poikien (vaikka sukupuolella ei ole väliä) menestymistä eri aineissa.

Google Sheets

Koska Google on luonut Google Sheetsin, käytän Googlen Chrome selainta. Mene omaan Driveesi ja luo tyhjä Google Sheets-taulukko. Valise Tiedosto-valikosta Tuo ja Tuo tiedosto-ikkunassa Lähetä. Klikkaa Valitse tiedosto ja hae ladattu Ytl:n tiedosto Lataukset-kansiosta. Laita Erotintyypiksi puolipiste ”;”.

Jos kaikki meni oikein meillä on 29574 riviä dataa eli 29573 oppilaan pakollisten aineiden tulokset. Tässä vaiheessa tiedostolle on syytä antaa nimi vaikka 19Kpakolliset.

Otsikkorivinä näyttää olevan seuraavanlaista:

tutkintokerta koulun_nro koulun_nimi opetuskieli tyyppi sukup yht A O Z I W Q A5 O5 M N BI FF FY HI PS UE UO ET GE KE TE YH BA BB CA CB EA FA SA PA VA EC FC SC PC VC DC IC QC GC TC L1 L7 opintotausta

Ytl:n sivulla on ohje muuttujanimistä:

  • [koekoodi] – Arvosanapisteet; I=0, A=2, B=3, C=4, M=5, E=6, L=7
  • yht – Tutkinnon arvosanapisteet yhteensä
  • sukup – Sukupuoli 1=mies, 2=nainen
  • ka_pak – Pakollisten aineiden keskiarvo
  • ka – Oppilaitoksen keskiarvo kokelaiden kaikken kokeiden keskiarvosta
  • n – Vastaavasti kokeiden lukumäärä (oppilatoksen keskiarvo)
  • ka_pkr – Oppilaitoksen keskiarvo kokelaiden “pitkien aineiden” keskiarvosta; mukana pitkä matematiikka, pitkät kielet, pitkä toinen kotimainen, äidinkieli ja kaikki reaalikokeet
  • n_pkr – Vastaavasti kokeiden lukumäärä (oppilaitoksen keskiarvo)
  • ylioppilas – niiden kokelaiden lukumäärä, jotka ovat kyseisellä tutkintokerralla saaneet hyväksytyn tutkintokokonaisuuden ja joilla lisäksi on julkaisuajankohtana lukion päättötodistus.
  • opintotausta:
    • 1 – Lukion opiskelija
    • 2 – Ammatillisten opintojen pohjalta tutkintoa suorittava kokelas
    • 3 – Lukion oppimäärää ja ammatillista tutkintoa suorittava kokelas
    • 4 – Muu opiskelija/tuntematon

Ytl:n sivulta löytyy linkki sivulle https://www.ylioppilastutkinto.fi/ext/data/FT2016KD0010.csv, sieltä löytyvät yo-kokeiden koodit.

koe                nimi              namn

A                   Äidinkieli, suomi                Modersmålet, finska

A5                 Suomi toisena kielenä        Finska som andraspråk

BA                Ruotsi, pitkä oppimäärä     Svenska, lång lärokurs

BB                Ruotsi, keskipitkä oppimäärä                  Svenska, medellång lärokurs

BI                  Biologia        Biologi

CA                Suomi, pitkä oppimäärä     Finska, lång lärokurs

CB                Suomi, keskipitkä oppimäärä                  Finska, medellång lärokurs

DC                Pohjoissaame, lyhyt oppimäärä               Nordsamiska, kort lärokurs

EA                Englanti, pitkä oppimäärä  Engelska, lång lärokurs

EC                 Englanti, lyhyt oppimäärä  Engelska, kort lärokurs

ET                 Elämänkatsomustieto         Livsåskådningskunskap

FA                 Ranska, pitkä oppimäärä    Franska, lång lärokurs

FC                 Ranska, lyhyt oppimäärä    Franska, kort lärokurs

FF                 Filosofia       Filosofi

FY                 Fysiikka        Fysik

GC                Portugali, lyhyt oppimäärä Portugisiska, kort lärokurs

GE                Maantiede     Geografi

HI                 Historia         Historia

I                    Äidinkieli, inarinsaame      Modersmålet, enaresamiska

IC                  Inarinsaame, lyhyt oppimäärä                  Enaresamiska, kort lärokurs

KE                Kemia           Kemi

L1                 Latina, lyhyt oppimäärä     Latin, kort lärokurs

L7                 Latina, pidempi oppimäärä Latin, längre lärokurs

M                  Matematiikka, pitkä oppimäärä               Matematik, lång lärokurs

N                   Matematiikka, lyhyt oppimäärä               Matematik, kort lärokurs

O                   Äidinkieli, ruotsi                Modersmålet, svenska

O5                 Ruotsi toisena kielenä        Svenska som andraspråk

PA                 Espanja, pitkä oppimäärä   Spanska, lång lärokurs

PC                 Espanja, lyhyt oppimäärä   Spanska, kort lärokurs

PS                 Psykologia    Psykologi

Q                   – ei käytössä –                     – ej i bruk –

QC                Koltansaame, lyhyt oppimäärä                Skoltsamiska, kort lärokurs

SA                 Saksa, pitkä oppimäärä      Tyska, lång lärokurs

SC                 Saksa, lyhyt oppimäärä      Tyska, kort lärokurs

TC                 Italia, lyhyt oppimäärä       Italienska, kort lärokurs

TE                 Terveystieto  Hälsokunskap

UE                Evankelis-luterilainen uskonto                Evangelisk-luthersk religion

UO                Ortodoksi uskonto              Ortodox religion

VA                Venäjä, pitkä oppimäärä    Ryska, lång lärokurs

VC                Venäjä, lyhyt oppimäärä    Ryska, kort lärokurs

W                  Äidinkieli, koltansaame     Modersmålet, skoltsamiska

YH                Yhteiskuntaoppi                 Samhällslära

Z                   Äidinkieli, pohjoissaame    Modersmålet, nordsamiska

Minä itse koen vastenmielisenä laittaa kouluja johonkin ”paremmuusjärjestykseen” mutta pitkin hampain esitän tässä, miten se tehdään.

Google Sheets-taulukossa valitse kaikki rivit klikkaamalla vasemmalla riviin 1 ja sitten Vaihto pohjassa riviin 25974. Tämä on kohta hankala muistaa, jos on tottunut käyttämään Exceliä. Valitaan Tiedot-valikosta Pivot-taulukko.

(Google Sheets-taulukossa valitse ensin koko taulukko klikkaamalla taulukon rivien ja sarakkeiden nurkkaan tai ctrl -A (Macissa cmd-A). Ei toimi sillä se tuottaa tyhjän rivin alkuun joka haittaa suuruusjärjestystä myöhemmin.)

Sheets luo uuden lomakkeen nimeltä Pivot-taulukko.

Valitse Pivot-taulukon editorissa Rivit -> Lisää -> Lajitteluperuste -> Koulun nimi ja Arvot ->Lisää -> yht sekä Yhteenvedon peruste -> Average. Jätä myös Kokonaismäärä pois.

Näin saatiin koulukohtaiset keskiarvot laskettua pakollisista kirjoitetuista aineista.

Jostain kumman syystä en saanut suuruusjärjestystä toimimaan Pivot-taulukossa. Niinpä valitsin koko taulukon ctrl-A:lla (cmd-A Macissä) loin uuden lomakkeen ja Muokkaa valikosta Liitä määräten ->Liitä vain Arvoja.

Valitaan koko taulukko ja Tiedot-valikosta Lajitteluväli.

Näin saatiin koulut järjestykseen.

Kuvittelin, että tämä olisi ollut helpompaa. Se muuten on Excelillä. Niinpä seuraavassa tarinassa tehdään sama Execlissä ja siirretään dataa GeoGebraan.

Lisätään loppuun bonuksena Google Sheetsin lähes ilmaiseksi tuottama histogrammi.