Dummy-muuttujien yhteenveto

Dummy-muuttujaksi (binäärinen, dikotominen) kutsutaan muuttujaa, joka saa arvokseen joko 0 (joskus tämän sijasta käytetään tyhjää solua) tai 1.

Esimerkiksi kyselytutkimuksessa monivalintakysymys, jonka vaihtoehdoista vastaaja saa valita useammankin kuin yhden, koodataan dummy-muuttujiksi: Jokainen kysymyksen vaihtoehto on muuttuja, joka saa arvokseen 1, jos vastaaja on sen valinnut. Muussa tapauksessa arvo on 0 tai tyhjä.

In [1]:
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

# Tyyli vaikuttaa kaavioiden ulkoasuun
# Käytettävissä olevat tyylit voit listata komennolla plt.style.available
plt.style.use('fivethirtyeight')
In [2]:
# Datan avaaminen
df = pd.read_excel('http://taanila.fi/data1.xlsx')
df.head()
Out[2]:
nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp palkkat työteht työterv lomaosa kuntosa hieroja
0 1 1 38 1 1.0 22.0 3587 3 3.0 3 3 3 NaN NaN NaN NaN
1 2 1 29 2 2.0 10.0 2963 1 5.0 2 1 3 NaN NaN NaN NaN
2 3 1 30 1 1.0 7.0 1989 3 4.0 1 1 3 1.0 NaN NaN NaN
3 4 1 36 2 1.0 14.0 2144 3 3.0 3 3 3 1.0 NaN NaN NaN
4 5 1 24 1 2.0 4.0 2183 2 3.0 2 1 2 1.0 NaN NaN NaN
In [3]:
# Yhteenvetoon otettavien muuttujien nimet
monivalinta = ['työterv', 'lomaosa', 'kuntosa', 'hieroja']
In [4]:
# Valintojen lukumäärät count-funktiolla
df1 = df[monivalinta].count().to_frame('lkm').sort_values(by = 'lkm', ascending = False)

#shape[0] antaa datan rivien lukumäärän eli vastaajien lukumäärän
n = df.shape[0]

# Prosentit
df1['% vastaajista'] = df1['lkm'] / n *100

df1.index = ['Työterveyshuolto', 'Lomaosake', 'Kuntosali', 'Hieroja']

# Prosenttilukujen ulkoasun viimeistely
df1.style.format({'% vastaajista':'{:.1f} %'})
Out[4]:
lkm % vastaajista
Työterveyshuolto 47 57.3 %
Lomaosake 22 26.8 %
Kuntosali 20 24.4 %
Hieroja 9 11.0 %
In [5]:
# Vaakapylväskaavio
ax1 = df1['% vastaajista'].plot.barh()

# x-akselin otsikko
ax1.set_xlabel('% vastaajista, n=' + str(n))

# x-akselin prosenttilukujen ulkoasun viimeistely
ax1.set_xticklabels(['{:.0f} %'.format(x) for x in ax1.get_xticks()])
Out[5]:
[Text(0, 0, '0 %'),
 Text(0, 0, '10 %'),
 Text(0, 0, '20 %'),
 Text(0, 0, '30 %'),
 Text(0, 0, '40 %'),
 Text(0, 0, '50 %'),
 Text(0, 0, '60 %'),
 Text(0, 0, '70 %')]
In [6]:
# Valintojen lukumäärät sukupuolen mukaan
df2 = df.groupby('sukup')[monivalinta].count()

# Miesten ja naisten lukumäärät
miehet = df['sukup'][df['sukup']==1].count()
naiset = df['sukup'][df['sukup']==2].count()

# Prosenttien laskenta (iloc[0] viittaa taulukon ensimmäiseen riviin ja iloc[1] toiseen riviin)
df2.iloc[0] = df2.iloc[0] / miehet *100
df2.iloc[1] = df2.iloc[1] / naiset *100


# Riviotsikoiden viimeistely
df2.index = ['Mies, n=' + str(miehet) , 'Nainen, n=' + str(naiset)]

# Prosenttilukujen ulkoasun viimeistely
df2.style.format('{:.1f} %')
Out[6]:
työterv lomaosa kuntosa hieroja
Mies, n=63 55.6 % 25.4 % 12.7 % 20.6 %
Nainen, n=19 63.2 % 21.1 % 5.3 % 47.4 %
In [7]:
# Vaakapylväskaavio (legend='reverse' kääntää selitteen järjestyksen) 
ax2 = df2.plot.barh(legend='reverse')

# x-akselin otsikko
ax2.set_xlabel('% sukupuolesta')

# x-akselin prosenttilukujen ulkoasun viimeistely
ax2.set_xticklabels(['{:.0f} %'.format(x) for x in ax1.get_xticks()])
Out[7]:
[Text(0, 0, '0 %'),
 Text(0, 0, '10 %'),
 Text(0, 0, '20 %'),
 Text(0, 0, '30 %'),
 Text(0, 0, '40 %'),
 Text(0, 0, '50 %'),
 Text(0, 0, '60 %'),
 Text(0, 0, '70 %')]