Temppuja dataframe-tietorakenteella

Tässä artikkelissa avaan Excel-muotoisen datan dataframeen ja teen sen jälkeen erilaisia suodatuksia ja laskentaa datalle. Tämän artikkelin ohjelmakoodin ja tulosteet löydät GitHubista:

https://github.com/taanila/tilastoapu/blob/master/df2.ipynb

Jos kopioit koodia itsellesi, niin kannattaa käyttää GitHubia. Tästä artikkelista kopioidut koodit eivät välttämättä toimi oikein.

Oletan, että lukijalla on asennettuna Anaconda ja sen mukana tuleva Jupyter notebook.

Aluksi otan käyttöön pandas-kirjaston ja avaan Excel-datan:

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

Datan alustavaa tarkastelua

Komennolla df.shape minulle selviää datan koko (82 riviä ja 16 saraketta).

Komennolla df.count() minulle selviää arvojen lukumäärä kussakin sarakkeessa:

df5

Joidenkin muuttujien kohdalla on puuttuvia tietoja ja sen seurauksena arvojen määrä on pienempi kuin 82. Työterveyshuollon, lomaosakkeen, kuntosalin ja hierojan kohdalla on arvo vain niillä vastaajilla, joka ovat käyttäneet kyseisiä työnantajan tarjoamia palveluita.

Komennolla df.sort_values(’palkka’) voin näyttää datan palkan mukaisessa järjestyksessä.

Suodatuksia

Dataa suodattamalla voin muodostaa erilaisia osadatoja. Voin esimerkiksi muodostaa osadatan niistä riveistä, joilla vastaaja on tyytymätön johtoon (tyytyväisyys johtoon on pienempi kuin 3). Funktiolla head() voin tulostaa muodostetun osadatan 5 ensimmäistä riviä:

df_filtered1 = df[df['johto'] < 3]
df_filtered1.head()

Seuraavassa suodatan mukaan ne, joilla on palveluvuosia alle 2 ja jotka ovat erittäin tyytymättömiä johtoon:

df_filtered2 = df[(df['palveluv'] < 2) & (df['johto'] == 1)]
df_filtered2.head()

Suodatusehdoissa voit käyttää Pythonin loogisia operaattoreita (and &, or | ).

Laskentaa

Voin laskea uusia sarakkeita olemassa olevien sarakkeiden perusteella. Esimerkkinä lisään sarakkeen bonus, johon lasken lisäbonuksen (5 % palkasta) ja sarakkeen yhteensä, johon lasken palkan ja lisäbonuksen yhteensä:

df['bonus'] = df['palkka'] * 0.05
df['yhteensä'] = df['palkka'] + df['bonus']
df[['palkka', 'bonus', 'yhteensä']].head()

Viimeisessä komennossa määritän näytettäväksi dataframesta vain sarakkeet palkka, bonus ja yhteensä. Huomaa, miten lista täytyy sijoittaa hakasulkeiden sisään.

Lisään vielä 3 prosentin bonuksen alle 3000 euron palkoille:

df['lisäbonus'] = (df['palkka'] < 3000) * 0.03 * df['palkka']
df[['palkka', 'bonus', 'yhteensä', 'lisäbonus']]

Testi (df[’palkka’] < 3000) antaa tulokseksi 1 (True), jos ehto on totta. Muussa tapauksessa ehto antaa tulokseksi 0 (False). Datan alkuosa näyttää seuraavalta:

df6

Frekvenssejä ja tilastollisia tunnuslukuja

Value_counts-funktio laskee muuttujan ainutkertaisten arvojen frekvenssit. Esimerkiksi

df['koulutus'].value_counts()

antaa tulokseksi

df7

Jos haluan järjestää tulokset frekvenssien mukaisen järjestyksen sijasta koulutuksen mukaiseen järjestykseen, niin käytän komentoa

df['koulutus'].value_counts(sort = False)

Describe-funktio laskee dataframen jokaiselle muuttujalle tunnusluvut: count (lukumäärä), mean (keskiarvo), std (keskihajonta; jakajana n-1), min (pienin), 25 % (alaneljännes), 50 % (mediaani), 75 % (yläneljännes), max (suurin).

Voit siis laskea kyseiset tunnusluvut komennolla df.describe().

Komennolla df.corr() lasket muuttujien väliset korrelaatiokertoimet.

Lopuksi lasken vielä keskiarvopalkan niille, jotka ovat tyytyväisiä palkkaan (tyytyväisyys palkaan on 4 tai 5):

df['palkka'][df['palkkat'] >= 4].mean()

Seuraavassa artikkelissani Ryhmittelyjä groupby-toiminnolla teen monenlaisia ryhmittelyjä groupby()-toiminnolla.

 

Mainokset