{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Päivitetty 2024-04-15 / Aki Taanila\n" ] } ], "source": [ "from datetime import datetime\n", "print(f'Päivitetty {datetime.now().date()} / Aki Taanila')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Dataan tutustuminen\n", "\n", "Datan avaamisen jälkeen kannattaa ensimmäiseksi tutustua dataan. Tähän muistioon olen koonnut mielestäni keskeisimmät pandas-kirjaston funktiot ja ominaisuudet, joita voit käyttää dataan tutustuttaessa." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Tuon data-analytiikan peruspaketin\n", "import pandas as pd\n", "\n", "# Luen datan dataframeen\n", "df = pd.read_excel('https://taanila.fi/data1.xlsx')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(82, 16)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Datan rivien ja sarakkeiden lukumäärät\n", "df.shape" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nrosukupikäperhekoulutuspalveluvpalkkajohtotyötovtyöymppalkkattyötehttyötervlomaosakuntosahieroja
0113811.022.0358733.0333NaNNaNNaNNaN
1212922.010.0296315.0213NaNNaNNaNNaN
2313011.07.0198934.01131.0NaNNaNNaN
3413621.014.0214433.03331.0NaNNaNNaN
4512412.04.0218323.02121.0NaNNaNNaN
...................................................
777812213.00.0159844.0434NaN1.01.0NaN
787913311.02.0163813.02121.0NaNNaNNaN
798012712.07.0261234.03331.0NaN1.0NaN
808113522.016.0280834.0333NaNNaNNaNNaN
818223523.015.0218334.04341.0NaNNaNNaN
\n", "

82 rows × 16 columns

\n", "
" ], "text/plain": [ " nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp \\\n", "0 1 1 38 1 1.0 22.0 3587 3 3.0 3 \n", "1 2 1 29 2 2.0 10.0 2963 1 5.0 2 \n", "2 3 1 30 1 1.0 7.0 1989 3 4.0 1 \n", "3 4 1 36 2 1.0 14.0 2144 3 3.0 3 \n", "4 5 1 24 1 2.0 4.0 2183 2 3.0 2 \n", ".. ... ... ... ... ... ... ... ... ... ... \n", "77 78 1 22 1 3.0 0.0 1598 4 4.0 4 \n", "78 79 1 33 1 1.0 2.0 1638 1 3.0 2 \n", "79 80 1 27 1 2.0 7.0 2612 3 4.0 3 \n", "80 81 1 35 2 2.0 16.0 2808 3 4.0 3 \n", "81 82 2 35 2 3.0 15.0 2183 3 4.0 4 \n", "\n", " palkkat työteht työterv lomaosa kuntosa hieroja \n", "0 3 3 NaN NaN NaN NaN \n", "1 1 3 NaN NaN NaN NaN \n", "2 1 3 1.0 NaN NaN NaN \n", "3 3 3 1.0 NaN NaN NaN \n", "4 1 2 1.0 NaN NaN NaN \n", ".. ... ... ... ... ... ... \n", "77 3 4 NaN 1.0 1.0 NaN \n", "78 1 2 1.0 NaN NaN NaN \n", "79 3 3 1.0 NaN 1.0 NaN \n", "80 3 3 NaN NaN NaN NaN \n", "81 3 4 1.0 NaN NaN NaN \n", "\n", "[82 rows x 16 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df\n", "# Huomaa että vain datan ensimmäiset ja viimeiset rivit näytetään" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Huomautus**: **työtov**-muuttujan arvot ovat desimaalimuodossa (3.0, 5.0, jne.), koska työtov-muuttujalla on puuttuvia arvoja. Kokonaislukutyyppinen muuttuja ei voi sisältää puuttuvia arvoja ja sen vuoksi Python on muuttanut tietotyypiksi liukuluvun (desimaaliluku)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Kategorinen vai määrällinen muuttuja\n", "\n", "* **nro** Tämä muuttuja on keinotekoinen järjestysnumero eikä muuttujan tyypillä ole merkitystä.\n", "* **sukup** Sukupuoli on kategorinen muuttuja. Tässä arvo 1 tarkoittaa miestä ja 2 naista.\n", "* **ika** Ikä on määrällinen muuttuja.\n", "* **perhe** Perhesuhde on kategorinen muuttuja. Tässä arvo 1 tarkoittaa perheetöntä ja 2 perheellistä.\n", "* **koulutus** Koulutus on kategorinen muuttuja (1 = peruskoulu, 2 = 2. aste, 3 = korkeakoulu, 4 = ylempi korkeakoulu).\n", "* **palveluv** Palvelusvuodet on määrällinen muuttuja.\n", "* **palkka** Palkka on määrällinen muuttuja.\n", "* **johto, työtov, työymp, palkkat, työteht** Nämä ovat tyytyväisyysmuuttujia, joiden arvo on välillä 1 = erittäin tyytymätön - 5 = erittäin tyytyväinen. Lähtökohtaisesti nämä ovat kategorisia muuttujia, mutta voidaan tulkita myös määrällisiksi muuttujiksi. Mielipideasteikot ovat usein rajatapauksia, joille voidaan käyttää sekä kategoristen että määrällisten muuttujien menetelmiä.\n", "* **työterv, lomaosa, kuntosa, hieroja** Nämä ovat kategorisia muuttujia, jotka kertovat onko vastaaja käyttänyt (**1**) kyseistä etua." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nrosukupikäperhekoulutuspalveluvpalkkajohtotyötovtyöymppalkkattyötehttyötervlomaosakuntosahieroja
0113811.022.0358733.0333NaNNaNNaNNaN
1212922.010.0296315.0213NaNNaNNaNNaN
2313011.07.0198934.01131.0NaNNaNNaN
3413621.014.0214433.03331.0NaNNaNNaN
4512412.04.0218323.02121.0NaNNaNNaN
\n", "
" ], "text/plain": [ " nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp \\\n", "0 1 1 38 1 1.0 22.0 3587 3 3.0 3 \n", "1 2 1 29 2 2.0 10.0 2963 1 5.0 2 \n", "2 3 1 30 1 1.0 7.0 1989 3 4.0 1 \n", "3 4 1 36 2 1.0 14.0 2144 3 3.0 3 \n", "4 5 1 24 1 2.0 4.0 2183 2 3.0 2 \n", "\n", " palkkat työteht työterv lomaosa kuntosa hieroja \n", "0 3 3 NaN NaN NaN NaN \n", "1 1 3 NaN NaN NaN NaN \n", "2 1 3 1.0 NaN NaN NaN \n", "3 3 3 1.0 NaN NaN NaN \n", "4 1 2 1.0 NaN NaN NaN " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Datan alkupää. Voin myös määrittää näytettävien rivien määrän, esimerkiksi df.head(10)\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nrosukupikäperhekoulutuspalveluvpalkkajohtotyötovtyöymppalkkattyötehttyötervlomaosakuntosahieroja
777812213.00.0159844.0434NaN1.01.0NaN
787913311.02.0163813.02121.0NaNNaNNaN
798012712.07.0261234.03331.0NaN1.0NaN
808113522.016.0280834.0333NaNNaNNaNNaN
818223523.015.0218334.04341.0NaNNaNNaN
\n", "
" ], "text/plain": [ " nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp \\\n", "77 78 1 22 1 3.0 0.0 1598 4 4.0 4 \n", "78 79 1 33 1 1.0 2.0 1638 1 3.0 2 \n", "79 80 1 27 1 2.0 7.0 2612 3 4.0 3 \n", "80 81 1 35 2 2.0 16.0 2808 3 4.0 3 \n", "81 82 2 35 2 3.0 15.0 2183 3 4.0 4 \n", "\n", " palkkat työteht työterv lomaosa kuntosa hieroja \n", "77 3 4 NaN 1.0 1.0 NaN \n", "78 1 2 1.0 NaN NaN NaN \n", "79 3 3 1.0 NaN 1.0 NaN \n", "80 3 3 NaN NaN NaN NaN \n", "81 3 4 1.0 NaN NaN NaN " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Datan loppupää \n", "df.tail()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nrosukupikäperhekoulutuspalveluvpalkkajohtotyötovtyöymppalkkattyötehttyötervlomaosakuntosahieroja
101113921.022.0265135.0313NaNNaNNaNNaN
111214023.021.0284635.0312NaN1.0NaN1.0
121313523.015.0280835.0314NaN1.0NaNNaN
131415823.021.0358745.0413NaNNaNNaNNaN
141515323.012.0339344.0444NaN1.0NaNNaN
\n", "
" ], "text/plain": [ " nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp \\\n", "10 11 1 39 2 1.0 22.0 2651 3 5.0 3 \n", "11 12 1 40 2 3.0 21.0 2846 3 5.0 3 \n", "12 13 1 35 2 3.0 15.0 2808 3 5.0 3 \n", "13 14 1 58 2 3.0 21.0 3587 4 5.0 4 \n", "14 15 1 53 2 3.0 12.0 3393 4 4.0 4 \n", "\n", " palkkat työteht työterv lomaosa kuntosa hieroja \n", "10 1 3 NaN NaN NaN NaN \n", "11 1 2 NaN 1.0 NaN 1.0 \n", "12 1 4 NaN 1.0 NaN NaN \n", "13 1 3 NaN NaN NaN NaN \n", "14 4 4 NaN 1.0 NaN NaN " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Tietyt rivit (huomaa, että rivien numerointi alkaa nollasta)\n", "df[10:15]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Jos haluan näyttää kaikki rivit, niin asetan max_rows arvoksi None\n", "# pd.options.display.max_rows = None\n", "\n", "# Jos haluan näyttää kaikki sarakkeet, niin asetan max_columns arvoksi None\n", "#pd.options.display.max_columns = None\n", "\n", "# df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Varoitus!** Edellisen solut komentoja kannattaa käyttää varoen. Kaikki näytetyt rivit ja sarakkeet tallentuvat muistion mukana, kasvattavat muistion tiedostokokoa ja hidastavat toimintaa." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "nro 82\n", "sukup 82\n", "ikä 82\n", "perhe 82\n", "koulutus 81\n", "palveluv 80\n", "palkka 82\n", "johto 82\n", "työtov 81\n", "työymp 82\n", "palkkat 82\n", "työteht 82\n", "työterv 47\n", "lomaosa 20\n", "kuntosa 9\n", "hieroja 22\n", "dtype: int64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sarakkeiden otsikot (muuttujien nimet) ja arvojen lukumäärät\n", "df.count()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "nro 0\n", "sukup 0\n", "ikä 0\n", "perhe 0\n", "koulutus 1\n", "palveluv 2\n", "palkka 0\n", "johto 0\n", "työtov 1\n", "työymp 0\n", "palkkat 0\n", "työteht 0\n", "työterv 35\n", "lomaosa 62\n", "kuntosa 73\n", "hieroja 60\n", "dtype: int64" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Puuttuvien arvojen lukumäärät\n", "df.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 82 entries, 0 to 81\n", "Data columns (total 16 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 nro 82 non-null int64 \n", " 1 sukup 82 non-null int64 \n", " 2 ikä 82 non-null int64 \n", " 3 perhe 82 non-null int64 \n", " 4 koulutus 81 non-null float64\n", " 5 palveluv 80 non-null float64\n", " 6 palkka 82 non-null int64 \n", " 7 johto 82 non-null int64 \n", " 8 työtov 81 non-null float64\n", " 9 työymp 82 non-null int64 \n", " 10 palkkat 82 non-null int64 \n", " 11 työteht 82 non-null int64 \n", " 12 työterv 47 non-null float64\n", " 13 lomaosa 20 non-null float64\n", " 14 kuntosa 9 non-null float64\n", " 15 hieroja 22 non-null float64\n", "dtypes: float64(7), int64(9)\n", "memory usage: 10.4 KB\n" ] } ], "source": [ "# Sarakkeiden otsikot, arvojen lukumäärät ja sarakkeiden tietotyypit\n", "df.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pelkästään numeroarvoja sisältävät sarakkeet ovat kokonaislukuja (int) tai liukulukuja (float). Liukuluvun voit ajatella olevan käytännössä sama kuin desimaaliluku." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**unique**-funktion avulla on helppo huomata virheellisiä tai epäilyttäviä arvoja.\n", "\n", "Unique näyttää sarakkeen ainutkertaiset arvot listana. Esimerkiksi seuraavasta selviää, että 'työtov' (tyytyväisyys työtovereihin) sarakkeella on arvoja 2, 3, 4 ja 5 sekä yksi tai useampia puuttuvia arvoja (**nan**). Yksikään vastaajista ei siis ole ollut erittäin tyytymätön työtovereihin (arvo 1). \n", "\n", "Arvot tulostuvat siinä järjestyksessä kuin ne tulevat datassa vastaan." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 3., 5., 4., 2., nan])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['työtov'].unique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## for-silmukka\n", "\n", "**for**-silmukka on toistorakenne, joka osaa läpikäydä erilaisia luetteloja. Seuraavan solun for-silmukka käy läpi dataframen sarakkeet lukuun ottamatta nro-saraketta, joka poistetaan **drop**-funktiolla. Parametri **axis=1** määrittää läpi käytäväksi sarakkeet; ilman tätä parametria käytäisiin läpi dataframen rivit." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sukup [1 2]\n", "ikä [38 29 30 36 24 31 49 55 40 33 39 35 58 53 42 26 47 44 43 56 21 45 59 37\n", " 28 50 32 51 22 34 27 41 25 61 20 52 46]\n", "perhe [1 2]\n", "koulutus [ 1. 2. 3. 4. nan]\n", "palveluv [22. 10. 7. 14. 4. 16. 0. 23. 21. 15. 12. 2. 17. 20. 13. 27. 1. 3.\n", " nan 24. 5. 9. 6. 35. 28. 18. 36. 19. 8.]\n", "palkka [3587 2963 1989 2144 2183 1910 2066 2768 2106 2651 2846 2808 3393 2691\n", " 5225 2729 2925 2457 4874 3510 4446 1521 2223 1949 2340 6278 1559 2027\n", " 2300 2534 1872 2261 2417 3119 2574 1715 5069 2495 3470 1598 1638 2612]\n", "johto [3 1 2 4 5]\n", "työtov [ 3. 5. 4. 2. nan]\n", "työymp [3 2 1 5 4]\n", "palkkat [3 1 2 4 5]\n", "työteht [3 2 4 1 5]\n", "työterv [nan 1.]\n", "lomaosa [nan 1.]\n", "kuntosa [nan 1.]\n", "hieroja [nan 1.]\n" ] } ], "source": [ "# for-silmukalla käyn läpi kaikki sarakkeet paitsi 'nro'\n", "# drop poistaa oletuksena rivejä (axis=0), mutta haluan poistaa sarakkeita (axis=1)\n", "for sarake in df.drop('nro', axis=1):\n", " print(sarake, df[sarake].unique())" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nrosukupikäperhekoulutuspalveluvpalkkajohtotyötovtyöymppalkkattyötehttyötervlomaosakuntosahieroja
323315923.015.0627844.0544NaN1.0NaNNaN
161712614.02.0522555.0545NaNNaN1.0NaN
666713724.08.0506934.03221.01.0NaN1.0
\n", "
" ], "text/plain": [ " nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp \\\n", "32 33 1 59 2 3.0 15.0 6278 4 4.0 5 \n", "16 17 1 26 1 4.0 2.0 5225 5 5.0 5 \n", "66 67 1 37 2 4.0 8.0 5069 3 4.0 3 \n", "\n", " palkkat työteht työterv lomaosa kuntosa hieroja \n", "32 4 4 NaN 1.0 NaN NaN \n", "16 4 5 NaN NaN 1.0 NaN \n", "66 2 2 1.0 1.0 NaN 1.0 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# kolme riviä, joissa palkalla suurin arvo\n", "df.nlargest(3, 'palkka')" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nrosukupikäperhekoulutuspalveluvpalkkajohtotyötovtyöymppalkkattyötehttyötervlomaosakuntosahieroja
252612612.03.0152124.02131.0NaN1.01.0
353613123.00.0155924.03131.0NaNNaNNaN
535412512.01.0155924.03121.0NaNNaNNaN
\n", "
" ], "text/plain": [ " nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp \\\n", "25 26 1 26 1 2.0 3.0 1521 2 4.0 2 \n", "35 36 1 31 2 3.0 0.0 1559 2 4.0 3 \n", "53 54 1 25 1 2.0 1.0 1559 2 4.0 3 \n", "\n", " palkkat työteht työterv lomaosa kuntosa hieroja \n", "25 1 3 1.0 NaN 1.0 1.0 \n", "35 1 3 1.0 NaN NaN NaN \n", "53 1 2 1.0 NaN NaN NaN " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# kolme riviä, joissa palkalla pienin arvo \n", "df.nsmallest(3, 'palkka')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**value_counts**-funktio laskee ainutkertaisten arvojen frekvenssit eli esiintymiskertojen lukumäärät.\n", "\n", "Seuraavassa lasken frekvenssit kaikille muuttujille paitsi juoksevalle järjestysnumerolle, iälle ja palkalle. **sort_index()** järjestää arvot arvojen mukaiseen järjestykseen." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sukup\n", "1 63\n", "2 19\n", "Name: count, dtype: int64\n", "perhe\n", "1 31\n", "2 51\n", "Name: count, dtype: int64\n", "koulutus\n", "1.0 27\n", "2.0 30\n", "3.0 22\n", "4.0 2\n", "Name: count, dtype: int64\n", "palveluv\n", "0.0 4\n", "1.0 9\n", "2.0 4\n", "3.0 3\n", "4.0 1\n", "5.0 1\n", "6.0 2\n", "7.0 7\n", "8.0 1\n", "9.0 1\n", "10.0 5\n", "12.0 2\n", "13.0 1\n", "14.0 3\n", "15.0 5\n", "16.0 4\n", "17.0 5\n", "18.0 2\n", "19.0 1\n", "20.0 3\n", "21.0 3\n", "22.0 4\n", "23.0 4\n", "24.0 1\n", "27.0 1\n", "28.0 1\n", "35.0 1\n", "36.0 1\n", "Name: count, dtype: int64\n", "johto\n", "1 7\n", "2 16\n", "3 30\n", "4 23\n", "5 6\n", "Name: count, dtype: int64\n", "työtov\n", "2.0 3\n", "3.0 16\n", "4.0 35\n", "5.0 27\n", "Name: count, dtype: int64\n", "työymp\n", "1 9\n", "2 9\n", "3 30\n", "4 23\n", "5 11\n", "Name: count, dtype: int64\n", "palkkat\n", "1 33\n", "2 19\n", "3 19\n", "4 10\n", "5 1\n", "Name: count, dtype: int64\n", "työteht\n", "1 5\n", "2 15\n", "3 29\n", "4 25\n", "5 8\n", "Name: count, dtype: int64\n", "työterv\n", "1.0 47\n", "Name: count, dtype: int64\n", "lomaosa\n", "1.0 20\n", "Name: count, dtype: int64\n", "kuntosa\n", "1.0 9\n", "Name: count, dtype: int64\n", "hieroja\n", "1.0 22\n", "Name: count, dtype: int64\n" ] } ], "source": [ "for muuttuja in df.drop(['nro', 'ikä', 'palkka'], axis=1):\n", " print(df[muuttuja].value_counts().sort_index())" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nrosukupikäperhekoulutuspalveluvpalkkajohtotyötovtyöymppalkkattyötehttyötervlomaosakuntosahieroja
count82.00000082.00000082.00000082.00000081.00000080.00000082.00000082.00000081.00000082.00000082.00000082.00000047.020.09.022.0
mean41.5000001.23170737.9512201.6219511.98765412.1750002563.8780493.0609764.0617283.2195122.1097563.1951221.01.01.01.0
std23.8152610.4245199.7738660.4878840.8440068.807038849.3503021.0581550.8268261.1549611.1111791.0475020.00.00.00.0
min1.0000001.00000020.0000001.0000001.0000000.0000001521.0000001.0000002.0000001.0000001.0000001.0000001.01.01.01.0
25%21.2500001.00000031.0000001.0000001.0000003.7500002027.0000002.0000004.0000003.0000001.0000003.0000001.01.01.01.0
50%41.5000001.00000037.5000002.0000002.00000012.5000002320.0000003.0000004.0000003.0000002.0000003.0000001.01.01.01.0
75%61.7500001.00000044.0000002.0000003.00000018.2500002808.0000004.0000005.0000004.0000003.0000004.0000001.01.01.01.0
max82.0000002.00000061.0000002.0000004.00000036.0000006278.0000005.0000005.0000005.0000005.0000005.0000001.01.01.01.0
\n", "
" ], "text/plain": [ " nro sukup ikä perhe koulutus palveluv \\\n", "count 82.000000 82.000000 82.000000 82.000000 81.000000 80.000000 \n", "mean 41.500000 1.231707 37.951220 1.621951 1.987654 12.175000 \n", "std 23.815261 0.424519 9.773866 0.487884 0.844006 8.807038 \n", "min 1.000000 1.000000 20.000000 1.000000 1.000000 0.000000 \n", "25% 21.250000 1.000000 31.000000 1.000000 1.000000 3.750000 \n", "50% 41.500000 1.000000 37.500000 2.000000 2.000000 12.500000 \n", "75% 61.750000 1.000000 44.000000 2.000000 3.000000 18.250000 \n", "max 82.000000 2.000000 61.000000 2.000000 4.000000 36.000000 \n", "\n", " palkka johto työtov työymp palkkat työteht \\\n", "count 82.000000 82.000000 81.000000 82.000000 82.000000 82.000000 \n", "mean 2563.878049 3.060976 4.061728 3.219512 2.109756 3.195122 \n", "std 849.350302 1.058155 0.826826 1.154961 1.111179 1.047502 \n", "min 1521.000000 1.000000 2.000000 1.000000 1.000000 1.000000 \n", "25% 2027.000000 2.000000 4.000000 3.000000 1.000000 3.000000 \n", "50% 2320.000000 3.000000 4.000000 3.000000 2.000000 3.000000 \n", "75% 2808.000000 4.000000 5.000000 4.000000 3.000000 4.000000 \n", "max 6278.000000 5.000000 5.000000 5.000000 5.000000 5.000000 \n", "\n", " työterv lomaosa kuntosa hieroja \n", "count 47.0 20.0 9.0 22.0 \n", "mean 1.0 1.0 1.0 1.0 \n", "std 0.0 0.0 0.0 0.0 \n", "min 1.0 1.0 1.0 1.0 \n", "25% 1.0 1.0 1.0 1.0 \n", "50% 1.0 1.0 1.0 1.0 \n", "75% 1.0 1.0 1.0 1.0 \n", "max 1.0 1.0 1.0 1.0 " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Tilastolliset tunnusluvut kannattaa myös vilkaista\n", "df.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Luettelo muistiossa käytetyistä funktioista ja toiminnoista\n", "\n", "* **pd.read_excel()** datan lukeminen Excel-tiedostosta\n", "* **df.shape** datan rivien ja sarakkeiden lukumäärät\n", "* **pd.options.display.max_rows = None** dataframejen kaikkien rivien näyttäminen\n", "* **pd.options.display.max_columns = None** dataframejen kaikkien sarakkeiden näyttäminen\n", "* **df.head()** datan alkupää\n", "* **df.tail()** datan loppupää\n", "* **df.count()** sarakkeiden otsikot ja arvojen lukumäärät kussakin sarakkeessa\n", "* **df.isnull().sum()** puuttuvien arvojen lukumäärät kussakin sarakkeessa\n", "* **df.info()** sarakkeiden otsikot, arvojen lukumäärät ja sarakkeiden tietotyypit\n", "* **df['sarake'].unique()** nimetyn sarakkeen ainutkertaisten arvojen luettelo\n", "* **df.drop()** rivien tai sarakkeiden poistamiseen\n", "* **print()** näytölle tulostaminen\n", "* **df.nlargest()** n suurinta nimetyn sarakkeen suhteen\n", "* **df.nsmallest()** n pienintä nimetyn sarakkeen suhteen\n", "* **df['sarake'].value_counts()** arvojen esiintymiskertojen (frekvenssien) laskemiseen\n", "* **df.describe()** tilastolliset tunnusluvut\n", "\n", "\n", "* Lisäksi opittiin toistamaan samankaltaisia toimia **for**-silmukalla." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lisätietoa\n", "\n", "Data-analytiikka Pythonilla https://tilastoapu.wordpress.com/python/" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.2" } }, "nbformat": 4, "nbformat_minor": 4 }