Edellisessä artikkelissani ”Kuinka monta % fysiikan kirjoittaneista kirjoitti kemian ja päinvastoin?” lupasin jakaa laskennassa käytetyn Python koodin. Kommentoin koodia tässä tarinassa. Tässä on mukana koodinpätkä, jonka ChatGPT loi.
Kirjoittaessani tätä artikkelia huomasin, että edellisen jutun koodissa oli valittu mukaan vain sellaiset aineet, joita oli kirjoittanut yli 100 kokelasta. Tämän artikkelin kuvissa on mukana kaikki sellaiset aineet, joita kirjoitti vähintään yksi ylioppilas.
kemian kirjoittaneiden muut ainevalinnat
Aiemmassa tarinassa kerroin, että kemian kirjoittaneiden muut ainevalinnat näyttävät poikkeavan muiden aineiden kirjoittaneiden valinnoista. Muokkasin koodia sen verran, että sain eroteltua tyttöjen ja poikien valinnat. Tässä muutama huomio.
Kaikista kemian kirjoittaneista 88% kirjoitti myös pitkän matematiikan. Kemian kirjoittaneista tytöistä 85% kirjoitti pitkän matematiikan kun pojista pitkän matematiikan kirjoitti 92%. Vastaavasti kemian kirjoittaneista tytöistä lyhyen matikan kirjoitti 25%, pojilla vastaava suhdeluku oli vain 8%. Biologian ja fysiikan valinnat menivät kemian kirjoittaneilla aika paljon eri tavalla. Tytöistä 79 % kirjoitti biologian, pojista 41%. Fysiikassa luvut ovat lähes päinvastoin. Kemian kirjoittaneilla tytöillä fysiikan kirjoitti 50%, pojilla luku oli jonkin verran suurempi 78%.
| aine | KE kaikki | KE tytöt | KE pojat |
| A | 0,87 | 0,87 | 0,87 |
| M | 0,88 | 0,85 | 0,92 |
| N | 0,12 | 0,15 | 0,08 |
| BI | 0,62 | 0,79 | 0,41 |
| FY | 0,63 | 0,50 | 0,78 |
| PS | 0,10 | 0,15 | 0,03 |
koodi
Linkki aineparien lukumäärien ja suhteellisten määrien laskemiseen tarvittavaaan Python koodiiin löytyy artikkelin lopusta lähteet-luvusta. Kun avaat Colab-koodisivun, niin vasemman yläkulman valikko avaa sisällysluettelon. Alla kommentoin ”Kuinka monta % pitkän matikan …” -kohtaa.
Riveillä 6-8 ladataan tarvittavat kirjastot: Pandas taulukkojen käsittelyyn, Seaborn ja Matplotlib taulukon värikoodauksen piirtoon.
Riveillä 10 – 18 luetaan kevään 2024 ylioppilaiden tiedot, luodaan niistä df-niminen taulukko, joka toimii Pandaskirjaston DataFrame tietotyyppinä. DataFramet helpottavat isojen taulukoiden käsittelyä.
Dataframe nimeltä df näyttää nyt tältä. Taulukossa on 25027 riviä ja 57 saraketta. Taulukossa näkyy jokaisen keväällä 24 kirjoittaneen opiskelijan tiedot. Arvosanat on koodattu lukuarvoina i = 0, a = 2, …, l = 7. Oppiainekoodit löytyvät artikkelin lopusta.
Rivillä 23 poistetaan kuusi vasemmanpuolimmaista saraketta: ”tutkintokerta”, ”koulun_nro”, … ”sukup”. Selite axis = 1 viittaa sarakkeisiin ja axis = 0 riveihin.
Rivillä 24 poistetaan oikean reunan ”opintotausta”-sarake.
Riveillä 28-33 poistetaan aineet, joissa kirjoittaneiden lukumäärä on 0 kokelasta. Tytöt ja pojat -versiossa on fiksumpi tapa poistaa tyhjät sarakkeet.
Rivillä 28 lasketaan eri aineita kirjoittaneiden määrät: [25027, 21894, 1981, 12, 0, 0, 0, 1139, 16, 11365, 11525, 6545, 1415, 6215, 6272, 6827, 2437, 23, 332, 3285, 4904, 5442, 6878, 790, 7515, 1085, 752, 22867, 190, 299, 80, 368, 1398, 471, 938, 572, 179, 5, 2, 0, 10, 52, 15, 5].
Rivien 30-33 for-silmukka lisää indeksi-listaan, niiden maarat-listan jäsenten paikat, jotka ovat nollia: [4, 5, 6, 39] ja rivillä 35 poistetaan ne sarakkeet, joissa ei ole yhtään kirjoittajaa.
Taulukossa on nyt 40 saraketta.
lukumäärät
Rivillä 40 luodaan tyhjä taulukko aineparien lukumäärien laskemista varten.
Taulukon viisi ylintä riviä näyttää tältä, dftaulukko on kooltaan 40 riviä x 40 saraketta ja se on otsikkoja lukuunottamatta täynnä tyhjiä NaN soluja.
Varsinainen laskenta suoritetaan rivien 44-48 for-silmukoissa.
En itse keksinyt yksinkertaista koodia tämän laskemiseksi. Niinpä pyysin ChatGPT:tä tuottamaan tämän koodin. Tekoälyn tuottama koodi oli selkeästi selitetty ja toimi niin kuin halusinkin. Kokeilin samaa Microsoftin Copilotilla ja Googlen Geminillä. Molemmat tuottivat hyvännäköistä koodia selityksineen, tosin molemmat toimivat väärin.
Rivillä 47 luodaan taulukko kahdesta aineesta df[[sarake1, sarake2]] poistetaan ne aineet, joissa on NaN jommassa kummassa aineessa (tai molemmissa) .dropna()-metodilla ja lasketaan rivien lukumäärä .shape[0]-metodilla.
Otetaan esimerkiksi jokin ainepari for-silmukan sisällä, vaikkapa pohjoissaame Z ja pitkä matematiikka M.
Rivi df[[’Z’, ’M’]].dropna()) tuottaa 2×3 taulukon, josta näemme, että kolme ylioppilasta kirjoitti sekä pohjoissaamen, että pitkän matikan.
Rivi df[[’Z’, ’M’]].dropna().shape[0] antaa arvoksi luvun 3 eli rivien lukumäärän. Tämä luku tallennetaan rivillä 48 dftaulukon kohtaan rivi = ”Z”, sarake = ”M”.
DataFramen dftaulukko viisi ensimmäistä riviä
Rivillä 55 tallennetaan csv-tiedosto omaan Google Drive -kansioon. Luo tarvittavat kansiot omaan Driveesi korvaamalla nuo kolme pistettä.
suhteelliset osuudet -taulukko
Suhteellisien osuuksien laskemiseksi pitää kussakin sarakkeessa oleva luku jakaa vasemmanpuoleisen yht-sarakkeen arvojen kanssa. Pandas Dataframessa matriisien jakolasku onnistuu, jos ne ovat samankokoisia ja niissä on samat otsikot. Katso esimerkki Colab-tiedoston lopusta.
Rivillä 59 lasketaan dftaulukon rivien lukumäärä. Rivillä 62 luodaan jakolaskun nimittäjä (jakoviivan alapuoli) kopioimalla vasemmanpuoleinen sarake oikealle päin.
Dataframe dfnimittaja näyttää tältä
Rivillä 68 – 70 korjataan sarakkeiden otsikot, jotta jakolaskussa otsikkorivit ovat identtisiä.
Rivillä 73 suoritetaan jakolasku.
Jostain kumman syystä jakolasku tuottaa viallisia lukuja. Onneksi Colabin Gemini tekoäly ehdotti rivien 78-79 korjausta, joka poistaa mahdolliset vialliset arvot taulukosta dff.
tallennus ja tulostus
Rivillä 83 tallennetaan dff prosenttitaulukko Driveen ja riveillä 85-90 tulostetaan Seabornin avulla taulukko värikoodeilla.
tytöt ja pojat erikseen
Colab-tiedostossa on mukana koodi, jossa ensin erotellaan tyttöjen ja poikien tulokset omiksi dataframeiksi ja sitten suoritetaan samat laskut. Koodin kommentoinnin pitäisi kertoa miten laskenta tapahtuu.
Näiden avulla laskin alussa olevat kemian kirjoittaneiden taulukot. Alla koodin tuottamat kuvat.
ainekoodit
| koe | aine | ämne | subject |
| A | Äidinkieli, suomi | Modersmålet, finska | Mother tongue, Finnish |
| A5 | Suomi toisena kielenä | Finska som andraspråk | Finnish as second language |
| BA | Ruotsi, pitkä oppimäärä | Svenska, lång lärokurs | Sweden, long syllabus |
| BB | Ruotsi, keskipitkä oppimäärä | Svenska, medellång lärokurs | Sweden, medium length syllabus |
| BI | Biologia | Biologi | Biology |
| CA | Suomi, pitkä oppimäärä | Finska, lång lärokurs | Finland, long syllabus |
| CB | Suomi, keskipitkä oppimäärä | Finska, medellång lärokurs | Finland, medium length syllabus |
| DC | Pohjoissaame, lyhyt oppimäärä | Nordsamiska, kort lärokurs | Northern Sami, short syllabus |
| EA | Englanti, pitkä oppimäärä | Engelska, lång lärokurs | English, long syllabus |
| EC | Englanti, lyhyt oppimäärä | Engelska, kort lärokurs | English, short syllabus |
| ET | Elämänkatsomustieto | Livsåskådningskunskap | Ethics |
| FA | Ranska, pitkä oppimäärä | Franska, lång lärokurs | France, a long syllabus |
| FC | Ranska, lyhyt oppimäärä | Franska, kort lärokurs | French, short syllabus |
| FF | Filosofia | Filosofi | Philosophy |
| FY | Fysiikka | Fysik | Physique |
| GC | Portugali, lyhyt oppimäärä | Portugisiska, kort lärokurs | Portugal, short syllabus |
| GE | Maantiede | Geografi | Geography |
| HI | Historia | Historia | History |
| I | Äidinkieli, inarinsaame | Modersmålet, enaresamiska | Mother tongue, Inari Sami |
| IC | Inarinsaame, lyhyt oppimäärä | Enaresamiska, kort lärokurs | Inarinasami, a short syllabus |
| KE | Kemia | Kemi | Chemistry |
| L1 | Latina, lyhyt oppimäärä | Latin, kort lärokurs | Latin, short syllabus |
| L7 | Latina, pidempi oppimäärä | Latin, längre lärokurs | Latin, longer syllabus |
| M | Matematiikka, pitkä oppimäärä | Matematik, lång lärokurs | Mathematics, a long syllabus |
| N | Matematiikka, lyhyt oppimäärä | Matematik, kort lärokurs | Mathematics, short syllabus |
| O | Äidinkieli, ruotsi | Modersmålet, svenska | Mother tongue, Swedish |
| O5 | Ruotsi toisena kielenä | Svenska som andraspråk | Swedish as a second language |
| PA | Espanja, pitkä oppimäärä | Spanska, lång lärokurs | Spain, a long syllabus |
| PC | Espanja, lyhyt oppimäärä | Spanska, kort lärokurs | Spanish, a short lesson |
| PS | Psykologia | Psykologi | Psychology |
| QC | Koltansaame, lyhyt oppimäärä | Skoltsamiska, kort lärokurs | Koltansáme, a short syllabus |
| SA | Saksa, pitkä oppimäärä | Tyska, lång lärokurs | Germany, a long syllabus |
| SC | Saksa, lyhyt oppimäärä | Tyska, kort lärokurs | Germany, short syllabus |
| TC | Italia, lyhyt oppimäärä | Italienska, kort lärokurs | Italy, short syllabus |
| TE | Terveystieto | Hälsokunskap | Health information |
| UE | Evankelis-luterilainen uskonto | Evangelisk-luthersk religion | Evangelical Lutheran religion |
| UO | Ortodoksi uskonto | Ortodox religion | Orthodox religion |
| VA | Venäjä, pitkä oppimäärä | Ryska, lång lärokurs | Russia, a long syllabus |
| VC | Venäjä, lyhyt oppimäärä | Ryska, kort lärokurs | Russia, short syllabus |
| W | Äidinkieli, koltansaame | Modersmålet, skoltsamiska | Mother tongue, Koltsámi |
| YH | Yhteiskuntaoppi | Samhällslära | Social studies |
| Z | Äidinkieli, pohjoissaame | Modersmålet, nordsamiska | Mother tongue, Northern Sami |
lähteet
Artikkelissa esitetty koodi Colabissa
https://colab.research.google.com/drive/1Dsv1mQeq6Tw9GCuSaeb8fduotzff50jg?usp=sharing
Edellinen artikkelini ”Kuinka monta % fysiikan kirjoittaneista kirjoitti kemian ja päinvastoin?”
https://mikkorahikka.blog/2024/06/10/kuinka-monta-fysiikan-kirjoittaneista-kirjoitti-kemian-ja-painvastoin/
YTL:n ”OPPILAITOSKOHTAISIA TUNNUSLUKUJA”-sivu
https://www.ylioppilastutkinto.fi/fi/tietopalvelut/tilastot/oppilaitoskohtaisia-tunnuslukuja
aiemmat ylioppilastutkintoon liittyvät artikkelini
https://mikkorahikka.blog/tag/ylioppilaskoe/

Jätä kommentti