MIKKO RAHIKKA

The electrical things have their lives too, paltry as those lives are.


Kemian kirjoittaneiden muut ainevalinnat – Python koodi

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%.

aineKE kaikkiKE tytötKE pojat
A0,870,870,87
M0,880,850,92
N0,120,150,08
BI0,620,790,41
FY0,630,500,78
PS0,100,150,03
kemian kirjoittaneiden muut ainevalinnat

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

koeaineämnesubject
AÄidinkieli, suomiModersmålet, finskaMother tongue, Finnish
A5Suomi toisena kielenäFinska som andraspråkFinnish as second language
BARuotsi, pitkä oppimääräSvenska, lång lärokursSweden, long syllabus
BBRuotsi, keskipitkä oppimääräSvenska, medellång lärokursSweden, medium length syllabus
BIBiologiaBiologiBiology
CASuomi, pitkä oppimääräFinska, lång lärokursFinland, long syllabus
CBSuomi, keskipitkä oppimääräFinska, medellång lärokursFinland, medium length syllabus
DCPohjoissaame, lyhyt oppimääräNordsamiska, kort lärokursNorthern Sami, short syllabus
EAEnglanti, pitkä oppimääräEngelska, lång lärokursEnglish, long syllabus
ECEnglanti, lyhyt oppimääräEngelska, kort lärokursEnglish, short syllabus
ETElämänkatsomustietoLivsåskådningskunskapEthics
FARanska, pitkä oppimääräFranska, lång lärokursFrance, a long syllabus
FCRanska, lyhyt oppimääräFranska, kort lärokursFrench, short syllabus
FFFilosofiaFilosofiPhilosophy
FYFysiikkaFysikPhysique
GCPortugali, lyhyt oppimääräPortugisiska, kort lärokursPortugal, short syllabus
GEMaantiedeGeografiGeography
HIHistoriaHistoriaHistory
IÄidinkieli, inarinsaameModersmålet, enaresamiskaMother tongue, Inari Sami
ICInarinsaame, lyhyt oppimääräEnaresamiska, kort lärokursInarinasami, a short syllabus
KEKemiaKemiChemistry
L1Latina, lyhyt oppimääräLatin, kort lärokursLatin, short syllabus
L7Latina, pidempi oppimääräLatin, längre lärokursLatin, longer syllabus
MMatematiikka, pitkä oppimääräMatematik, lång lärokursMathematics, a long syllabus
NMatematiikka, lyhyt oppimääräMatematik, kort lärokursMathematics, short syllabus
OÄidinkieli, ruotsiModersmålet, svenskaMother tongue, Swedish
O5Ruotsi toisena kielenäSvenska som andraspråkSwedish as a second language
PAEspanja, pitkä oppimääräSpanska, lång lärokursSpain, a long syllabus
PCEspanja, lyhyt oppimääräSpanska, kort lärokursSpanish, a short lesson
PSPsykologiaPsykologiPsychology
QCKoltansaame, lyhyt oppimääräSkoltsamiska, kort lärokursKoltansáme, a short syllabus
SASaksa, pitkä oppimääräTyska, lång lärokursGermany, a long syllabus
SCSaksa, lyhyt oppimääräTyska, kort lärokursGermany, short syllabus
TCItalia, lyhyt oppimääräItalienska, kort lärokursItaly, short syllabus
TETerveystietoHälsokunskapHealth information
UEEvankelis-luterilainen uskontoEvangelisk-luthersk religionEvangelical Lutheran religion
UOOrtodoksi uskontoOrtodox religionOrthodox religion
VAVenäjä, pitkä oppimääräRyska, lång lärokursRussia, a long syllabus
VCVenäjä, lyhyt oppimääräRyska, kort lärokursRussia, short syllabus
WÄidinkieli, koltansaameModersmålet, skoltsamiskaMother tongue, Koltsámi
YHYhteiskuntaoppiSamhällsläraSocial studies
ZÄidinkieli, pohjoissaameModersmålet, nordsamiskaMother 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

This site uses Akismet to reduce spam. Learn how your comment data is processed.