{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Päivitetty 2024-02-07 / Aki Taanila\n" ] } ], "source": [ "from datetime import datetime\n", "print(f'Päivitetty {datetime.now().date()} / Aki Taanila')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Datan muuntaminen\n", "\n", "Dataan voi olla tarvetta tehdä monenlaisia muunnoksia:\n", "\n", "* Sarakkeiden otsikoiden (muuttujien nimien) muuttaminen. Usein pitkät otsikot kannattaa muuttaa lyhyemmiksi.\n", "* Tarpeettomien sarkkeiden (muuttujien) poistaminen.\n", "* Indeksin korvaaminen jonkin sarakkeen (muuttujan) arvoilla.\n", "* Virheellisten arvojen korjaaminen.\n", "* Uusien sarakkeiden (muuttujien)laskeminen olemassa olevien sarakkeiden perusteella.\n", "* Puuttuvia arvoja sisältävien rivien poistaminen. Kuvailevasssa ja selittävässä analytiikassa tämä ei yleensä ole tarpeen paitsi korrelaatiokertoimen merkitsevyyden testauksessa.\n", "\n", "Tässä muistiossa käytetään pandas-kirjaston toimintoja yllä mainittujen muunnosten toteuttamiseen." ] }, { "cell_type": "code", "execution_count": 2, "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": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Tuon data-analytiikan peruspaketin\n", "import pandas as pd\n", "\n", "# Avaan datan\n", "df = pd.read_excel('https://taanila.fi/data1.xlsx')\n", "\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sarakkeiden otsikot" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['nro', 'sukup', 'ikä', 'perhe', 'koulutus', 'palveluv', 'palkka',\n", " 'johto', 'työtov', 'työymp', 'palkkat', 'työteht', 'työterv', 'lomaosa',\n", " 'kuntosa', 'hieroja'],\n", " dtype='object')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Jos haluan muuttaa sarakkeiden otsikoita, niin voin hyödyntää sarakeotsikoiden listaa\n", "df.columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Lista** on tärkeä tietorakenne. Lista on aina hakasulkujen sisällä." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['nro', 'sukupuoli', 'ikä', 'perhesuhde', 'koulutus', 'palveluv',\n", " 'palkka', 'johto', 'työtov', 'työymp', 'palkkat', 'työteht', 'työterv',\n", " 'lomaosa', 'kuntosa', 'hieroja'],\n", " dtype='object')" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Voin kopioida tähän sarakeotsikoiden listan ja muuttaa haluamani otsikot\n", "df.columns = ['nro', 'sukupuoli', 'ikä', 'perhesuhde', 'koulutus', 'palveluv', 'palkka',\n", " 'johto', 'työtov', 'työymp', 'palkkat', 'työteht', 'työterv', 'lomaosa',\n", " 'kuntosa', 'hieroja']\n", "\n", "# Tarkistan onnistuiko otsikoiden muuttaminen (sukupuoli, perhesuhde)\n", "df.columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Dictionary** eli sanakirja on myös tärkeä tietorakenne. \n", "* Sanakirja on aina aaltosulkujen sisällä.\n", "* Sanakirja koostuu pareista ja parin jäsenet erotetaan toisistaan kaksoispisteellä." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['nro', 'sukup', 'ikä', 'perhe', 'koulutus', 'palveluv', 'palkka',\n", " 'johto', 'työtov', 'työymp', 'palkkat', 'työteht', 'työterv', 'lomaosa',\n", " 'kuntosa', 'hieroja'],\n", " dtype='object')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Voin vaihtaa sarakkeiden otsikoita myös rename()-toiminnolla\n", "# Huomaa sanakirjan (dictionary) käyttö\n", "df = df.rename(columns = {'sukupuoli':'sukup', 'perhesuhde':'perhe'})\n", "\n", "# Tarkistan onnistuiko sarakeotsikoiden muuttaminen (sukup, perhe)\n", "df.columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Muuttujien poistaminen" ] }, { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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öteht
0113811.022.0358733.0333
1212922.010.0296315.0213
2313011.07.0198934.0113
3413621.014.0214433.0333
4512412.04.0218323.0212
.......................................
777812213.00.0159844.0434
787913311.02.0163813.0212
798012712.07.0261234.0333
808113522.016.0280834.0333
818223523.015.0218334.0434
\n", "

82 rows × 12 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 \n", "0 3 3 \n", "1 1 3 \n", "2 1 3 \n", "3 3 3 \n", "4 1 2 \n", ".. ... ... \n", "77 3 4 \n", "78 1 2 \n", "79 3 3 \n", "80 3 3 \n", "81 3 4 \n", "\n", "[82 rows x 12 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# drop-funktiolla voin poistaa sarakkeita\n", "# drop poistaa oletuksena rivejä (axis=0), mutta haluan poistaa sarakkeita (axis=1)\n", "# Tallennan tämän version datasta df1-nimiseen dataframeen\n", "df1 = df.drop(['työterv', 'lomaosa', 'kuntosa', 'hieroja'], axis=1)\n", "df1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Indeksi\n", "\n", "Dataframen indeksi (**index**) on vasemmanpuoleisin sarake. Oletuksena indeksi on juokseva järjestysnumero, joka alkaa nollasta. Voin halutessani siirtää jonkin muuttujista indeksiin." ] }, { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sukupikäperhekoulutuspalveluvpalkkajohtotyötovtyöymppalkkattyöteht
nro
113811.022.0358733.0333
212922.010.0296315.0213
313011.07.0198934.0113
413621.014.0214433.0333
512412.04.0218323.0212
....................................
7812213.00.0159844.0434
7913311.02.0163813.0212
8012712.07.0261234.0333
8113522.016.0280834.0333
8223523.015.0218334.0434
\n", "

82 rows × 11 columns

\n", "
" ], "text/plain": [ " sukup ikä perhe koulutus palveluv palkka johto työtov työymp \\\n", "nro \n", "1 1 38 1 1.0 22.0 3587 3 3.0 3 \n", "2 1 29 2 2.0 10.0 2963 1 5.0 2 \n", "3 1 30 1 1.0 7.0 1989 3 4.0 1 \n", "4 1 36 2 1.0 14.0 2144 3 3.0 3 \n", "5 1 24 1 2.0 4.0 2183 2 3.0 2 \n", ".. ... ... ... ... ... ... ... ... ... \n", "78 1 22 1 3.0 0.0 1598 4 4.0 4 \n", "79 1 33 1 1.0 2.0 1638 1 3.0 2 \n", "80 1 27 1 2.0 7.0 2612 3 4.0 3 \n", "81 1 35 2 2.0 16.0 2808 3 4.0 3 \n", "82 2 35 2 3.0 15.0 2183 3 4.0 4 \n", "\n", " palkkat työteht \n", "nro \n", "1 3 3 \n", "2 1 3 \n", "3 1 3 \n", "4 3 3 \n", "5 1 2 \n", ".. ... ... \n", "78 3 4 \n", "79 1 2 \n", "80 3 3 \n", "81 3 3 \n", "82 3 4 \n", "\n", "[82 rows x 11 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sarakkeen (nro) siirtäminen indeksiin\n", "df1 = df1.set_index('nro')\n", "df1" ] }, { "cell_type": "code", "execution_count": 8, "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", "
nrosukupikäperhekoulutuspalveluvpalkkajohtotyötovtyöymppalkkattyöteht
0113811.022.0358733.0333
1212922.010.0296315.0213
2313011.07.0198934.0113
3413621.014.0214433.0333
4512412.04.0218323.0212
.......................................
777812213.00.0159844.0434
787913311.02.0163813.0212
798012712.07.0261234.0333
808113522.016.0280834.0333
818223523.015.0218334.0434
\n", "

82 rows × 12 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 \n", "0 3 3 \n", "1 1 3 \n", "2 1 3 \n", "3 3 3 \n", "4 1 2 \n", ".. ... ... \n", "77 3 4 \n", "78 1 2 \n", "79 3 3 \n", "80 3 3 \n", "81 3 4 \n", "\n", "[82 rows x 12 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Voin myös siirtää indeksiksi siirretyn takaisin tavalliseksi sarakkeeksi\n", "df1 = df1.reset_index()\n", "df1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Virheellisen arvon korjaaminen" ] }, { "cell_type": "code", "execution_count": 9, "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", "
nrosukupikäperhekoulutuspalveluvpalkkajohtotyötovtyöymppalkkattyöteht
454625121.028.0198933.0223
464722213.021.0187233.0413
474814221.018.0218345.0413
484912722.07.0272944.0335
495012913.07.0234034.0323
\n", "
" ], "text/plain": [ " nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp \\\n", "45 46 2 51 2 1.0 28.0 1989 3 3.0 2 \n", "46 47 2 22 1 3.0 21.0 1872 3 3.0 4 \n", "47 48 1 42 2 1.0 18.0 2183 4 5.0 4 \n", "48 49 1 27 2 2.0 7.0 2729 4 4.0 3 \n", "49 50 1 29 1 3.0 7.0 2340 3 4.0 3 \n", "\n", " palkkat työteht \n", "45 2 3 \n", "46 1 3 \n", "47 1 3 \n", "48 3 5 \n", "49 2 3 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Korjaan virheellisen iän indeksinumeron 47 mukaiselta riviltä\n", "df1.loc[47, 'ikä'] = 42\n", "\n", "# Tarkistan, onko indeksinumeron 47 rivillä ikä 42\n", "df1.iloc[45:50]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Uusien muuttujien laskeminen" ] }, { "cell_type": "code", "execution_count": 10, "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", "
nrosukupikäperhekoulutuspalveluvpalkkajohtotyötovtyöymppalkkattyötehtsukup_str
0113811.022.0358733.0333Mies
1212922.010.0296315.0213Mies
2313011.07.0198934.0113Mies
3413621.014.0214433.0333Mies
4512412.04.0218323.0212Mies
..........................................
777812213.00.0159844.0434Mies
787913311.02.0163813.0212Mies
798012712.07.0261234.0333Mies
808113522.016.0280834.0333Mies
818223523.015.0218334.0434Nainen
\n", "

82 rows × 13 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 sukup_str \n", "0 3 3 Mies \n", "1 1 3 Mies \n", "2 1 3 Mies \n", "3 3 3 Mies \n", "4 1 2 Mies \n", ".. ... ... ... \n", "77 3 4 Mies \n", "78 1 2 Mies \n", "79 3 3 Mies \n", "80 3 3 Mies \n", "81 3 4 Nainen \n", "\n", "[82 rows x 13 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Luon uuden sarakkeen 'sukup_str', jossa sukupuolet tekstinä eli merkkijonoina\n", "# Huomaa sanakirjan (dictionary) käyttö {}\n", "df1['sukup_str'] = df1['sukup'].replace({1:'Mies', 2:'Nainen'})\n", "df1" ] }, { "cell_type": "code", "execution_count": 11, "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", "
nrosukupikäperhekoulutuspalveluvpalkkajohtotyötovtyöymppalkkattyötehtsukup_strikäluokka
0113811.022.0358733.0333Mies(29, 39]
1212922.010.0296315.0213Mies(19, 29]
2313011.07.0198934.0113Mies(29, 39]
3413621.014.0214433.0333Mies(29, 39]
4512412.04.0218323.0212Mies(19, 29]
.............................................
777812213.00.0159844.0434Mies(19, 29]
787913311.02.0163813.0212Mies(29, 39]
798012712.07.0261234.0333Mies(19, 29]
808113522.016.0280834.0333Mies(29, 39]
818223523.015.0218334.0434Nainen(29, 39]
\n", "

82 rows × 14 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 sukup_str ikäluokka \n", "0 3 3 Mies (29, 39] \n", "1 1 3 Mies (19, 29] \n", "2 1 3 Mies (29, 39] \n", "3 3 3 Mies (29, 39] \n", "4 1 2 Mies (19, 29] \n", ".. ... ... ... ... \n", "77 3 4 Mies (19, 29] \n", "78 1 2 Mies (29, 39] \n", "79 3 3 Mies (19, 29] \n", "80 3 3 Mies (29, 39] \n", "81 3 4 Nainen (29, 39] \n", "\n", "[82 rows x 14 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Luokkarajat ikäluokille\n", "bins = [19, 29, 39, 49, 59, 69]\n", "\n", "# Luon uuden sarakkeen 'ikäluokka', jossa iät luokiteltuina ikäluokkiin\n", "df1['ikäluokka'] = pd.cut(df1['ikä'], bins=bins)\n", "\n", "df1\n", "# Esimerkiksi (29, 39] tarkoittaa luokkaa, johon 29-vuotias ei kuulu, mutta 39-vuotias kuuluu" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 82 entries, 0 to 81\n", "Data columns (total 14 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 sukup_str 82 non-null object \n", " 13 ikäluokka 82 non-null category\n", "dtypes: category(1), float64(3), int64(9), object(1)\n", "memory usage: 8.8+ KB\n" ] } ], "source": [ "# sukup_str on object-tyyppinen ja ikäluokka on category-tyyppinen!\n", "df1.info()" ] }, { "cell_type": "code", "execution_count": 13, "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", "
johtotyötovtyöymppalkkattyötehttyytyväisyys
033.03333.0
115.02132.4
234.01132.4
333.03333.0
423.02122.0
.....................
7744.04343.8
7813.02121.8
7934.03333.2
8034.03333.2
8134.04343.6
\n", "

82 rows × 6 columns

\n", "
" ], "text/plain": [ " johto työtov työymp palkkat työteht tyytyväisyys\n", "0 3 3.0 3 3 3 3.0\n", "1 1 5.0 2 1 3 2.4\n", "2 3 4.0 1 1 3 2.4\n", "3 3 3.0 3 3 3 3.0\n", "4 2 3.0 2 1 2 2.0\n", ".. ... ... ... ... ... ...\n", "77 4 4.0 4 3 4 3.8\n", "78 1 3.0 2 1 2 1.8\n", "79 3 4.0 3 3 3 3.2\n", "80 3 4.0 3 3 3 3.2\n", "81 3 4.0 4 3 4 3.6\n", "\n", "[82 rows x 6 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Lasken vastaajan \"kokonaistyytyväisyyden\" keskiarvona tyytyväisyyksistä eri osa-alueisiin\n", "# axis=1 tarkoittaa keskiarvojen laskemista sivusuunnassa (rivin keskiarvo)\n", "df1['tyytyväisyys'] = df1[['johto','työtov','työymp','palkkat','työteht']].mean(axis=1)\n", "\n", "df1[['johto', 'työtov', 'työymp', 'palkkat', 'työteht', 'tyytyväisyys']]" ] }, { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
työtervlomaosakuntosahierojakäyttö
0NaNNaNNaNNaN0
1NaNNaNNaNNaN0
21.0NaNNaNNaN1
31.0NaNNaNNaN1
41.0NaNNaNNaN1
..................
77NaN1.01.0NaN2
781.0NaNNaNNaN1
791.0NaN1.0NaN2
80NaNNaNNaNNaN0
811.0NaNNaNNaN1
\n", "

82 rows × 5 columns

\n", "
" ], "text/plain": [ " työterv lomaosa kuntosa hieroja käyttö\n", "0 NaN NaN NaN NaN 0\n", "1 NaN NaN NaN NaN 0\n", "2 1.0 NaN NaN NaN 1\n", "3 1.0 NaN NaN NaN 1\n", "4 1.0 NaN NaN NaN 1\n", ".. ... ... ... ... ...\n", "77 NaN 1.0 1.0 NaN 2\n", "78 1.0 NaN NaN NaN 1\n", "79 1.0 NaN 1.0 NaN 2\n", "80 NaN NaN NaN NaN 0\n", "81 1.0 NaN NaN NaN 1\n", "\n", "[82 rows x 5 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Lasken uuden sarakkeen, jossa on käytettyjen etuisuuksien lukumäärä\n", "df['käyttö'] = df[['työterv', 'lomaosa', 'kuntosa', 'hieroja']].count(axis=1)\n", "df[['työterv', 'lomaosa', 'kuntosa', 'hieroja', 'käyttö']]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Puuttuvia arvoja sisältävien rivien poistaminen" ] }, { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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ötehtsukup_strikäluokkatyytyväisyys
0113811.022.0358733.0333Mies(29, 39]3.0
1212922.010.0296315.0213Mies(19, 29]2.4
2313011.07.0198934.0113Mies(29, 39]2.4
3413621.014.0214433.0333Mies(29, 39]3.0
4512412.04.0218323.0212Mies(19, 29]2.0
................................................
777812213.00.0159844.0434Mies(19, 29]3.8
787913311.02.0163813.0212Mies(29, 39]1.8
798012712.07.0261234.0333Mies(19, 29]3.2
808113522.016.0280834.0333Mies(29, 39]3.2
818223523.015.0218334.0434Nainen(29, 39]3.6
\n", "

79 rows × 15 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 sukup_str ikäluokka tyytyväisyys \n", "0 3 3 Mies (29, 39] 3.0 \n", "1 1 3 Mies (19, 29] 2.4 \n", "2 1 3 Mies (29, 39] 2.4 \n", "3 3 3 Mies (29, 39] 3.0 \n", "4 1 2 Mies (19, 29] 2.0 \n", ".. ... ... ... ... ... \n", "77 3 4 Mies (19, 29] 3.8 \n", "78 1 2 Mies (29, 39] 1.8 \n", "79 3 3 Mies (19, 29] 3.2 \n", "80 3 3 Mies (29, 39] 3.2 \n", "81 3 4 Nainen (29, 39] 3.6 \n", "\n", "[79 rows x 15 columns]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Poistan rivit, joilta puuttuu koulutus, palveluv tai työtov\n", "# Tallennan tämän version datasta df2-nimiseen dataframeen\n", "df2 = df1.dropna(subset=['koulutus', 'palveluv', 'työtov'])\n", "df2" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(79, 15)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df2.shape \n", "# Nyt datassa on enää 79 riviä (alunperin oli 82 riviä)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# Halutessasi voit tallentaa muunnetun dataframen Excel-tiedostoon\n", "df2.to_excel('muunnettu.xlsx')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Luettelo muistiossa käytetyistä funktioista ja ominaisuuksista\n", "\n", "* **pd.read_excel()** datan lukeminen Excel-tiedostsosta\n", "* **df.columns** sarakeotsikot\n", "* **df.rename()** sarakeotsikoiden uudelleen nimeämiseen\n", "* **df.drop()** rivien tai sarakkeiden poistamiseen\n", "* **df.set_index()** sarakkeen siirtäminen indeksiin\n", "* **df.reset_index()** indeksin siirtämiseen tavalliseksi sarakkeeksi (tilalle oletusindeksi)\n", "* **df.loc[]** viittaminen dataframen \"viipaleeseen\"\n", "* **df['sarake'].replace()** sarakkeen arvojen korvaaminen uusilla arvoilla\n", "* **pd.cut()** arvojen luokittelu\n", "* **df.mean()** keskiarvojen laskenta\n", "* **df.count()** arvojen lukumäärien laskenta\n", "* **df.info()** arvojen lukumäärät ja tietotyypit\n", "* **df.dropna()** puuttuvia arvoja sisältävien rivien poistaminen\n", "* **df.shape** datan rivien ja sarakkeiden lukumäärät\n", "* **df.to_excel()** dataframen tallentaminen Excel-tiedostoon\n" ] }, { "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.11.5" } }, "nbformat": 4, "nbformat_minor": 4 }