Avainsana-arkisto: Luokittelu

Luokiteltu jakauma

Päivitetty 2.10.2017

Tämän artikkelin koodin ohjeineen löydät GitHubista https://github.com/taanila/tilastoapu. Jos kopioit koodia itsellesi, niin kannattaa käyttää GitHubia. Tästä artikkelista kopioidut koodit eivät välttämättä toimi oikein (esimerkiksi sisennykset voivat kopioitua virheellisesti).

Määrällisen muuttujan arvot kannattaa yleensä luokitella ennen frekvenssien laskemista. Pythonilla tämä sujuu pandas-ohjelmakirjaston cut-funktiolla.

Aluksi otan käyttöön pandas-ohjelmakirjaston ja avaan aineiston.

import pandas as pd
df=pd.read_excel('http://www.elisanet.fi/taanila/data1.xlsx', sheetname='Data')

Ennen ikä-muuttujan luokittelua tarkastelen ikää tunnuslukujen valossa:

df['ikä'].describe()

pyluoki1

Huomaan muun muassa, että nuorin on 20-vuotias ja vanhin 61-vuotias. Tältä pohjalta voin miettiä sopivia luokkarajoja. Määritän luokkarajat ja luokkien nimet:

bins = [20, 30, 40, 50, 62]
group_names = ['20-29', '30-39', '40-49', '50-']

Tämän jälkeen määritteleen aineistoon uudet muuttujat (sarakkeet), joiden nimiksi annan luokkarajat ja ikäluokka. Jos right=False niin alarajat kuuluvat luokkaan, mutta ylärajat eivät kuulu. Tämän otin huomioon jo luokkarajojen määrittelyssä asettamalla ylimmän rajan 62-vuoden kohdalle.

df['luokkarajat'] = pd.cut(df['ikä'], bins, right=False)
df['ikäluokka'] = pd.cut(df['ikä'], bins, labels=group_names,right=False)

Voin taulukoida luokkarajat ja niiden frekvenssit crosstab-toiminnolla:

pd.crosstab(df['luokkarajat'],'lkm')

pyluoki3

Luokkarajoissa käytetään matematiikasta tuttua merkintätapaa: hakasulkeen vieressä oleva luku kuuluu luokkaan, mutta kaarisulkeen vieressä oleva luku ei kuulu luokkaan.

Seuraavassa taulukoin ikäluokka-muuttujan frekvenssiprosentit, korvaan vasemman ylänurkan col_0-nimen tyhjällä merkkijonolla ja muotoilen prosenttiluvut yhden desimaalin tarkkuuteen:

df1=pd.crosstab(df['ikäluokka'],'lkm',normalize='columns')
df1.columns.name=''
df1.style.format('{:.1%}')

pyluoki2

Aiemmissa artikkeleissani en ole tainnutkaan määritellä omia funktioita. Nyt korjaan sen puutteen ja määrittelen funktion, joka osaa laskea funktiolle annetuista lähtötiedoista (group) lukumäärän, minimin, maksimin ja keskiarvon. Funktion määrittely aloitetaan sanalla def:

def get_stats(group):
   return {'min': group.min(), 'max': group.max(), 'lkm': group.count(), 'keskiarvo': group.mean()}

Itse määrittelemääni funktiota käyttäen voin kätevästi laskea tunnuslukuja ikäluokittain. Groupby ryhmittelee määrittelemieni ikäluokkien mukaan. Monikäyttöisestä Groupby-toiminnosta tulen kirjoittamaan jossain tulevassa artikkelissani lisää.

df2=df['palkka'].groupby(df['ikäluokka']).apply(get_stats).unstack()

Unstack() hoitaa tunnuslukujen tulostuksen vierekkäin.

Tunnusluvut tulostuvat aakkosjärjestyksessä keskiarvo, lkm, max, min, jollen vartavasten määritä haluamaani järjestystä. Desimaalien määräksi säädän 0.

df2=df2[['lkm','min','max','keskiarvo']] 
df2.style.format('{:.0f}')

Lopputulos näyttää seuraavalta:

pyluoki4

Mainokset

4 Muuttujan arvojen luokittelu ja muuttaminen

Päivitetty 31.8.2017

Muuttujan arvojen luokittelua tai muuttamista tarvitsen esimerkiksi seuraavissa tilanteissa:

  • Haluan luokitella iän, joka on mitattu vuosina, ikäluokkiin.
  • Haluan yhdistellä mielipideasteikon vastausvaihtoehtoja esimerkiksi siten että viisiportaisesta asteikosta tulee kolmiportainen. Tämän teen yhdistämällä arvot 1 ja 2 arvoksi 1, muuttamalla arvon 3 arvoksi 2 ja yhdistämällä arvot 4 ja 5 arvoksi 3.
  • Haluan korvata mielipideasteikkoon kuulumattoman arvon (esimerkiksi viisiportaisen asteikon perässä ollut arvo 6=ei kokemusta asiasta) tekstimuotoisella tiedolla, jolloin se ei sotke keskiarvon laskentaa.
  • Haluan kääntää mielipideasteikon päin vastaiseksi. Esimerkiksi viisiportaisen asteikon voin kääntää siten, että arvosta 1 tulee arvo 5, arvosta 2 arvo 4, arvo 3 pysyy ennallaan, arvosta 4 tulee arvo 2 ja arvosta 5 tulee arvo 1.

Seuraavassa esitän neljä tapaa tehdä luokitteluita ja arvojen muuttamista Excelissä:

  • korvaaminen suoraan alkuperäiseen aineistoon Replace (Korvaa) -toimintoa käyttäen
  • korvaaminen suoraan alkuperäiseen aineistoon päälle kirjoittamalla
  • tasavälinen luokittelu pivot-taulukossa
  • epätasavälinen luokittelu pivot-taulukossa.

Ennen kuin teet muutoksia aineistoon niin huolehdi, että sinulla on varmuuskopio alkuperäisestä aineistosta kaiken varalta.

Korvaaminen suoraan alkuperäiseen aineistoon

  • Valitsen korvaamisen kohteena olevien muuttujien kaikki arvot.
  • Valitsen Home (Aloitus) -välilehdeltä Find&Select – Replace (Etsi ja valitse – Korvaa). Excel Mac: Edit – Replace.
  • Teen tarvittavat korvaukset.

Korvaaminen suoraan alkuperäiseen aineistoon päälle kirjoittamalla

  • Lajittelen (järjestä) aineiston luokiteltavan muuttujan mukaan. Lisätietoa lajittelusta artikkelissa 2 Excel Table (Taulukko).
  • Valitsen arvot, jotka haluan samaan luokkaan.
  • Kirjoitan uuden arvon ja kuittaan sen ctrl-enter -näppäinyhdistelmällä. Näppäinyhdistelmän ctrl-enter ansiosta kirjoitettu arvo menee kaikkiin valittuihin soluihin.

Tasavälinen luokittelu pivot-taulukossa

Oletan, että hallitset artikkelin 3 Taulukointi asiat, koska ilman niitä seuraavaa ei kannata lukea.

Käytän seuraavassa esimerkkiaineistoa data2.xlsx. Jos pivot-taulukoin Ikä-muuttujan siten että raahaan Ikä-muuttujan riviotsikoihin (Row Labels) ja arvoihin (Values) sekä määritän laskentamenetelmäksi Määrä (Count), niin tuloksena on pitkä taulukko. Pitkä taulukko ei ole havainnollinen esitys ikäjakaumasta. Taulukko muuttuu käyttökelpoiseksi, jos luokittelen iät sopiviin ikäluokkiin.

Valitsen yhden ja vain yhden iän pivot-taulukon riviotsikoista. Tämän jälkeen valitsen pivot-taulukkotyökaluista Analyze (Analysoi) -välilehdeltä Group Field (Ryhmän kenttä). Excel ehdottaa luokittelua, mutta voin tarvittaessa vaihtaa ehdotettua luokittelua. Viereisessä esimerkissä luokittelu aloitetaan iästä 20 ja edetään 10 vuoden luokissa niin pitkälle, että aineiston iäkkäinkin henkilö (61 vuotta) löytää luokkansa. Luokittelun jälkeen lukumäärät esittävä pivot-taulukko näyttää seuraavalta:

Voin palata luokittelun määrittelyihin myöhemmin pivot-taulukkotyökalujen Analyze (Analysoi) -välilehden Group Field (Ryhmän kenttä) -toiminnolla. Voin poistaa luokittelun Analyze (Analysoi) -välilehden Ungroup (Pura ryhmittely) -toiminnolla.

Luokittelu on voimassa myös muissa saman tiedoston pivot-taulukoissa. Jos siis olen luokitellut iän, niin ikä esiintyy luokiteltuna kaikissa saman tiedoston pivot-taulukoissa.

Luokitellun aineiston graafiseen esittämiseen sopii histogrammi. Histogrammi on pystypylväskaavio, jossa pylväät ovat kiinni toisissaan.

Jos haluat kerrata kuvioiden muotoiluun liittyviä asioita, niin voit käyttää itseopiskelupakettia kaavio.xlsx.

Epätasavälinen luokittelu pivot-taulukossa

Aina tasavälinen luokittelu ei ole se mitä tavoittelen. Esimerkiksi seuraavan taulukon tapauksessa saatan haluta yhdistää erittäin tyytymättömät (1) ja tyytymättömät (2) yhteen ryhmään samoin kuin tyytyväiset (4) ja erittäin tyytyväiset (5).

Valitsen pivot-taulukosta ne solut, jotka sisältävät 1 ja 2. Tämän jälkeen valitsen pivot-taulukkotyökalujen Analyze (Analysoi) -välilehdeltä Group Selection (Valittu ryhmä).  Pivot-taulukko voi näyttää tämän jälkeen sekavalta. Excel muodostaa arvoista 1 ja 2 ryhmän, mutta arvotkin ovat vielä näkyvillä ryhmän nimen alapuolella. Ryhmän arvot saan piiloon napsauttamalla ryhmän nimen vasemmalla puolella olevaa miinus-painiketta. Ryhmän nimen tilalle voin kirjoittaa haluamani nimen.

Vastaavalla tavalla voin valita solut, jotka sisältävät arvot 4 ja 5 ja määrittää ne ryhmäksi Analyze (Analysoi) -välilehden Group Selection (Valittu ryhmä) -toiminnolla.

Seuraavassa olen ryhmitellyt muuttujan arvot 1 ja 2 ryhmään, jolle olen kirjoittanut nimeksi ’Tyytymätön’. Olen piilottanut ryhmän jäsenet miinus-painikkeella (voin ottaa ryhmän jäsenet tarvittaessa näkyviin plus-painikkeella). Muuttujan arvon 3 tilalle olen kirjoittanut ’Ei tyytymätön eikä tyytyväinen’. Olen ryhmitellyt muuttujan arvot 4 ja 5 samaan ryhmään. En ole vielä kirjoittanut tälle ryhmälle nimeä. Excel on nimennyt ryhmän nimellä ’Group2’.

Seuraavaksi

Voin analysoida aineistoa tarkastelemalla lukumääriä ja/tai prosentteja ryhmittäin. Voin esimerkiksi tarkastella tyytyväisyyttä työtovereihin sukupuolen mukaan. Tällaista taulukointia kutsutaan ristiintaulukoinniksi. Ristiintaulukoinnista enemmän artikkelissa 5 Ristiintaulukointi.