{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Päivitetty 2023-12-11 / Aki Taanila\n" ] } ], "source": [ "from datetime import datetime\n", "print(f'Päivitetty {datetime.now().date()} / Aki Taanila')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Ristiintaulukointi\n", "\n", "Kahden kategorisen muuttujan riippuvuutta tarkastelen ristiintaulukoinnin avulla" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "sns.set_style('white')" ] }, { "cell_type": "code", "execution_count": 3, "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": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_excel('https://taanila.fi/data1.xlsx')\n", "df" ] }, { "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", "
MiesNainen
Peruskoulu225
2. aste237
Korkeakoulu157
Ylempi korkeakoulu20
\n", "
" ], "text/plain": [ " Mies Nainen\n", "Peruskoulu 22 5\n", "2. aste 23 7\n", "Korkeakoulu 15 7\n", "Ylempi korkeakoulu 2 0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Listat muuttujien tekstimuotoisista arvoista\n", "koulutus = ['Peruskoulu', '2. aste', 'Korkeakoulu', 'Ylempi korkeakoulu']\n", "sukup = ['Mies', 'Nainen']\n", "\n", "# Ristiintaulukointi lukumäärinä\n", "df1 = pd.crosstab(df['koulutus'], df['sukup'])\n", "\n", "# Otsikot kuntoon edellä määriteltyjä listoja käyttäen\n", "df1.index = koulutus\n", "df1.columns = sukup\n", "df1" ] }, { "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", "
 MiesNainen
Peruskoulu35.5 %26.3 %
2. aste37.1 %36.8 %
Korkeakoulu24.2 %36.8 %
Ylempi korkeakoulu3.2 %0.0 %
\n" ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Ristiintaulukointi; prosentit sarakkeiden kokonaismääristä (normalize='columns')\n", "df2 = pd.crosstab(df['koulutus'], df['sukup'], normalize='columns')*100\n", "\n", "# Otsikot kuntoon edellä määriteltyjä listoja käyttäen\n", "df2.index = koulutus\n", "df2.columns = sukup\n", "\n", "df2.style.format('{:.1f} %') # Ulkoasun viimeistely" ] }, { "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", "
 Mies, n = 62Nainen, n = 19
Peruskoulu35.5 %26.3 %
2. aste37.1 %36.8 %
Korkeakoulu24.2 %36.8 %
Ylempi korkeakoulu3.2 %0.0 %
\n" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Tässä edellinen n-arvoilla täydennettynä\n", "\n", "df3 = pd.crosstab(df['koulutus'], df['sukup'], normalize='columns') * 100\n", "df3.index = koulutus\n", "df3.columns = sukup\n", "\n", "# Lukumäärätaulukosta (df1) n-arvot sarakeotsikoihin\n", "for sarake in df3.columns:\n", " df3 = df3.rename(columns={sarake:f'{sarake}, n = {df1[sarake].sum()}'})\n", "\n", "df3.style.format('{:.1f} %')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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ezIyMnTHHXdcc3yhCy7FixfXxYsXHYZd/lyiRIkbzl+mTBklJyerRIkS8vHxcUuNAADAtWw2mzIyMlSmTJnrTlfogkvVqlV17tw5nTp1SnfddZck6ffff1e5cuWum8AuM5lMKleunLvLBAAALlag33kP1OGU++67T9HR0XrrrbdksVh0+PBhffjhh3rqqae8XRoAAPAyH9uNroLxglOnTunNN99USkqKTCaT2rVrp0GDBslsNnu7NAAA4EWFMrgAAADkp9CdKgIAALgWggsAADAMggsAADAMggtwm7NarTp8+LC3ywAAlyC4uEDTpk0VERGhyMhIRUZGqlatWmrUqJHeeecd5eV59vHcsbGxmjJlisuXu3jx4iL3NGJX2717t7p166a6deuqYcOGeu2113TmzBm3t9u/f3999dVXbm/ndhEWFqaUlBSHYV9++aUiIiK0YMGCm1pmfHy84uPjXVGeg5SUFIWFhbl8udKl49rixYvdsmxnjRw5Ug0bNtTp06cdhufm5qpTp07q1auXbDab12pu1aqV/vWvf+U7zpU1sR9dQnBxkcTERG3ZskVbtmzR1q1bNXPmTH311Vd6//33vV0aCoGsrCx1795dkZGR+vHHH7V8+XKdO3dOCQkJbm/77Nmzbm/jdvbxxx9r9OjRmjx5sp599llvl1MkDR06VHfddZeGDh3qMHzKlCk6deqU3nnnHa8+KX3FihV68sknvdZ+UUNwcZOwsDDVqVNHO3fuVHZ2tiZNmqTHH39cdevWVY8ePXTw4EGHaUePHq169erpxRdfzLd348qelH379qlLly6qU6eOmjRpoiFDhthfTnWlnTt3qn79+pozZ46kSz9gb7zxhho1aqR69eqpV69e+t///V9J0pEjRxQWFqYjR47Y558yZYpiY2OvWm5+6dxdfwncLtLS0vTAAw+od+/e8vf3V0hIiDp37qxNmzYVaH6LxaJhw4apefPmqlWrlh555BFNnTrVPv6bb75Rq1atFB0drSeeeEIffvihJOn111/X5s2bNW3aNL344ouSpEOHDunFF19UvXr11KRJE02YMEHZ2dmuX2mDs9lsGj16tD755BPNnTtXTZo0sY87evSoXn31VTVo0EANGzbUwIEDdeLECUmX/n80btxYAwcOVO3atfXxxx87LPfo0aN6/PHH9dZbb8lms93w+PDLL7/of/7nf9SoUSNFREQoJiZGW7duzbfe119/Xa1atdLx48clSatXr1ZMTIyioqLUokULzZkzx94LnN//2fx6m6Sre3LzO164U7FixTRhwgRt2rRJn376qSRp48aNmjNnjiZOnKjg4OCr5inIcXfhwoVq0aKFatasqRdffFG//fabnn76aUVGRqpDhw726adMmaKXX35Zffr0Ua1atdS0aVMtXLjQvqyC9iqsW7dO0dHRWrlypST2o5vdjwgubpCTk6OUlBRt2LBBDRs21IQJE7R27VrNmTNH69atU82aNfX888/rzz//tM9z6NAhrV27Vu++++4Nl5+YmKgGDRpo48aN+vLLL7Vz50598cUXDtP89ttvev755zVw4EDFxcVJkvr27atDhw5pyZIlSk5OVqVKlRQXF5dv6IFrVapUSTNmzHB4iOI333yj6tWrF2j+f/7znzpy5IgWLVqkLVu2aNiwYZowYYIOHjyorKwsDR48WMOHD1dqaqrGjRun6dOna/v27RozZoxq166tXr16aerUqcrMzFRcXJyqVq2qH374QQsWLNDPP//sltOLRpaTk6OBAwfqiy++UFJSkiIiIhzGPf/88zKbzfr222/tP0IvvviicnNzJUnHjh1TpUqVtH79eodemsOHDys2NlZt27ZVQkKCfHx8rnt8yMrK0ksvvaQWLVrohx9+UEpKiipWrHjVcSIvL08JCQnatWuXPv30U5UtW1YbNmzQq6++qu7du2vjxo0aP368Zs+erblzvfe6xltRqVIlDR8+XOPGjdOuXbsUHx+v1157TTVq1Mh3+oIcd5ctW6aFCxfq3//+t1JTU/Xyyy9rzJgx+umnn+Tv7+/wx8GaNWsUFRWlTZs26c0339SoUaO0fv36AtefnJysAQMGaPz48XriiSfYj24BwcVFEhMTVbt2bdWuXVsNGjTQqFGj1K1bNz333HNKSkrSgAEDdM8996hYsWLq3bu3cnJytHbtWvv8rVu3VmBg4A3ffi1d+utj3bp1WrVqlUwmk5YuXapu3brZx+/YsUPdunXTCy+8oI4dO0q6tKNv3LhRb7zxhkJDQxUQEKBBgwYpNzdXycnJLv8+cG02m00TJkzQ999/r9dff71A8/Tp00cTJ05UUFCQjh07pmLFikmS/a+zgIAALVq0SOvXr1flypWVmpqa7wF97dq1ys7O1oABA1Ss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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df1.plot(kind='bar', rot=0) # Lukumäärät pylväinä\n", "\n", "plt.ylabel('Lukumäärä')\n", "plt.grid(axis='y') # Vaakasuuntainen taustaviivoitus" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Prosenttien esittämiseen sopii vierekkäisiä pylväitä paremmin pinotut pylväät. Kaaviota varten taulukon rivit ja sarakkeet kannattaa vaihtaa päittäin käyttämällä transponointi toimintoa **T**.\n", "\n", "Pinottuun pylväskaavioon sopii oletusvärikarttaa paremmin jokin sequential-tyyppinen värikartta. Tässä käytän 'Blues'-värikarttaa. Värikarttoja: https://matplotlib.org/stable/tutorials/colors/colormaps.html " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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unTpklWlShVryZIlVlpamrV9+3YrODjY+u6771w97IfK1KlTrbJly1pRUVGWZVnMew7o0KGD1bNnT+vXX3+1kpKSrDfeeMPq2rUrc5+NHA6HVb16dWvRokWWw+Gw/vvf/1r169e3/t//+3/MezbZvXu39de//tV65plnrJ07d1qWdffHl507d1rBwcHW7t27rdTUVGvBggVWWFiYlZycnG3j5AxaLvLLL78oPj5e//jHP+Tr66vixYurR48e+uCDD1w9tIdOQkKCypYtq549e8rLy0v+/v5q3bq1du3apc8//1x+fn5q3769PDw8VK1aNTVp0oTb4QHasWOHPv/8c9WrV8+5jHnPXj/88IO+++47jR8/XgUKFFC+fPk0evRoDRgwgLnPRr/++qvOnj2r9PR05+9mdHd3l6+vL/OeDVavXq0BAwaob9++GZbfba5XrFihRo0aKSQkRJ6enoqMjJS/v78+/fTTbBsrgZaLHD58WH5+fipSpIhzWalSpZSQkKDffvvNhSN7+JQsWVJz587N8ItyN23apOeee06HDx/WM888k2H90qVL6+DBgzk9zIfS+fPnNXToUE2ePFm+vr7O5cx79tq3b59Kly6tjz76SHXr1lWNGjU0YcIEBQQEMPfZyN/fX5GRkZowYYLKly+vmjVr6umnn1ZkZCTzng1q1KihL774Qg0bNsyw/G5z/Z///CfHbwsCLRe5fPlyhicsSc6fk5OTXTGkR4JlWZoyZYq++uorDR069Ja3g4+PD7fBA5Cenq5//OMf6ty5s8qWLZvhMuY9e/366686dOiQjh07ptWrV2vNmjVKTExUVFQUc5+N0tPT5ePjo+HDh+vbb7/V+vXrdeTIEU2bNo15zwYBAQHy8PC4afnd5toVtwWBlovkyZNHV65cybDsxs958+Z1xZAeena7Xb1799a6deu0ZMkSBQUFydfXVykpKRnWS0lJ4TZ4AObMmSMvLy917NjxpsuY9+zl5eUlSRo6dKjy5cunxx9/XG+++aZiY2NlWRZzn02++OILbdq0Se3atZOXl5fKlCmjnj17aunSpdznc9Dd5toVtwWBlouUKVNGly5d0rlz55zLjhw5osDAQOXPn9+FI3s4HT9+XC1atJDdbtfKlSsVFBQkSXrmmWd0+PDhDOv+5z//UZkyZVwxzIfK2rVrFR8fr9DQUIWGhmr9+vVav369QkNDmfdsVrp0aaWnpystLc25LD09XZL07LPPMvfZ5L///a/zE5s3eHh4yNPTk/t8DrrbXJcpUybHbwsCLRd5+umnFRISonHjxslut+vEiROaOXOmWrZs6eqhPXR+/fVXderUSZUqVdK8efNUqFAh52V169bVuXPntHDhQqWlpWnnzp1at26dWrRo4cIRPxw+++wzffPNN9q9e7d2796txo0bq3Hjxtq9ezfzns2ef/55FS9eXEOGDNHly5d14cIFTZkyRX/961/VuHFj5j6b1KhRQ2fPntXs2bPlcDh04sQJzZo1S02aNOE+n4PuNtctW7bUunXrtHPnTqWlpWnhwoU6f/686tatm21jcrNufGwEucK5c+c0atQoxcXFyd3dXc2aNdOAAQMyvJkd92/BggUaP368fH195ebmluGyvXv36vvvv9fYsWP1008/qVChQurRo4ciIiJcNNqH143vQBs/frwkMe/ZLDExUePHj9euXbt09epVhYeHa+jQoSpQoABzn422b9+uqVOn6ueff1b+/PnVtGlT5yfImffsExQUpMWLFyssLEzS3R9f1q5dq1mzZikxMVGlS5fWsGHDVKFChWwbH4EGAABgGF7iBAAAMAyBBgAAYBgCDQAAwDAEGgAAgGEINAAAAMMQaAAAAIYh0AAAAAxDoAHAXdz4hvcbrl69qtOnT7twRA+/M2fO8EvB8Ugj0ADkuPDwcJUvX17BwcEKDg5WxYoVVaNGDU2YMMH5+x9N0rdvX61Zs8b5c7t27bR9+3ZJ0u7duxUcHJzjYwoPD9eqVaty/Lh3cvLkSQUFBenkyZP3tZ9z586pfv36unDhwgMaGZD7eLh6AAAeTTExMRl+jcqhQ4cUGRkpX19f9e7d24Uju9nFixdv+3NoaKj27t2b00N6qKWkpHD2DI88zqABMEJQUJAqV66sAwcOSJI6duyoQYMGqXbt2qpVq5bsdrsOHTqkLl26qEqVKnrxxRc1cuRIJSUlSZLsdrv69u2rsLAwVa9eXX/729905MgR5/43bNigJk2aKCQkRBEREfr666+dl3Xs2FGTJ09W+/btFRwcrAYNGujTTz+VJA0dOlS7d+/WnDlz1L17d7322mtKSEjQiBEjnL8XNygoyLmvL7/8Um3atFG1atVUoUIFdejQQceOHbvldU5MTNTrr7/uvD5vvPGG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XFyGZR9//LHKly+vDz/88J7GMGjQIA0aNOietr2TuLg4BQUFPfD9Stcf11atWpUt+74fDkfOPqZm5XgjR45U9erVdf78+QzLr127platWqlbt26yLMtlc9uoUSN98sknt7zsQY6J+3vWGP8hgTtxc5NSHTkTam5uktc9fKVJTEyMIiIinD8fOnRIkZGR8vX1Ve/evR/gCPFHbm5uivvlopKuXsv2Y+X39lBYCf9Mr5+SkqLXX39drVq10pw5c3T58mVFRUVpyJAhmj17djaOVLp48WK27v9+2NzdNOKTH3XsfHK2Hufpx/Iopumz97WP9957T7NmzdK0adNUu3btBzQy3CubzV2dhyzUwaOns/1YZf8UqAXjIjO9/uDBg7V3714NHjxY7733nnP59OnTde7cOb333nsufRvPhg0bXHZs3F6uPoMmXY8zSznw5wFFYFBQkCpXrqwDBw4oNTVV7777rurUqaMqVaqoS5cu+uWXXzKsO2bMGIWFhal79+63PFv1+zNjhw8fVvv27VW5cmXVrl1bUVFRstvtN43hwIEDqlq1qhYuXCjp+hP28OHDVaNGDYWFhalbt246duyYJOnkyZMKCgrSyZMnndtPnz5dHTt2vGm/t/pfTHb9jymzkq5e06Ur2f8nqxGYkJCgsmXLqmfPnvLy8pK/v79at26tXbt2ZWp7u92uYcOGqV69eqpYsaJeeOGFDGG3adMmNWrUSCEhIWrQoIFmzpwpSRo6dKh2796tOXPmqHv37pKk48ePq3v37goLC1Pt2rU1ZcoUpaamZun6PEjHzifrUKI9W//cTwBalqUxY8Zo0aJFWrx4cYY4O3XqlN58801Vq1ZN1atXV//+/Z0ftY+Li1PNmjXVv39/hYaGZniivrFtnTp1NG7cOFmWddfHh2+++UavvvqqatSoofLlyysiIkLffvvtLcc7dOhQNWrUSImJiZKkf/3rX4qIiFClSpVUv359LVy40HlW/1b/Zm919lC6+cz8rR4vctLBo6f17cGT2f4nqxHo7e2tKVOmaNeuXfrnP/8pSYqPj9fChQs1depU+fn53bRNZp4fli9frvr166tChQrq3r27fvjhB7Vp00bBwcFq0aKFc/3p06erR48e6tWrlypWrKjw8HAtX77cua/MniXatm2bQkJCtHHjRknc37P7/p7rAy03SUtLU1xcnHbu3Knq1atrypQp2rJlixYuXKht27apQoUKeu2113T16lXnNsePH9eWLVs0ceLEu+4/JiZG1apVU3x8vD7++GMdOHBAK1asyLDODz/8oNdee039+/dXZGSkJKl37946fvy4Vq9erdjYWJUsWVKRkZG3jDs8GCVLltTcuXMzfPR606ZNeu655zK1/aRJk3Ty5EmtXLlSe/fu1bBhwzRlyhT98ssvSklJ0T/+8Q9FR0drz549mjx5st5//33t27dPY8eOVWhoqLp166bZs2crOTlZkZGRKlOmjLZu3aoPP/xQ27dvz5aXwx8GaWlp6t+/v1asWKFly5apfPnyGS577bXXZLPZ9PnnnzufxLp3765r164H/OnTp1WyZEnt2LFD7dq1c2574sQJdezYUS+//LKGDBkiNze3Oz4+pKSk6O9//7vq16+vrVu3Ki4uTk899dRNjxPp6ekaMmSIfvzxR/3zn/9UkSJFtHPnTr355pt6/fXXFR8fr3feeUcLFizQ4sWLc2AGH10lS5ZUdHS0Jk+erB9//FGDBg3SwIED9Ze//OWW62fm+WHdunVavny5vvjiC+3Zs0c9evTQ2LFj9e9//1teXl4Z/tO2efNmVapUSbt27dKoUaM0evRo7dixI9Pjj42NVb9+/fTOO++oQYMG3N9zAIGWzWJiYhQaGqrQ0FBVq1ZNo0ePVufOndWhQwctW7ZM/fr1U/HixeXt7a2ePXsqLS1NW7ZscW7fuHFj+fr6qkCBAnc9lre3t7Zt26bPPvtM7u7uWrt2rTp37uy8fP/+/ercubP+9re/6ZVXXpF0/R9KfHy8hg8froCAAPn4+GjAgAG6du2aYmNjH/h84GaWZWnKlCn66quvNHTo0Ext06tXL02dOlX58uXT6dOn5e3tLUnO/736+Pho5cqV2rFjh0qVKqU9e/bc8olgy5YtSk1NVb9+/eTt7a2iRYuqT58++uCDDx7cFXyIDB8+3DnffzzjsHv3bp04cUIxMTHKnz+/ChQooJiYGB08eFA//PCDc72WLVvK09NT+fLlk3T9TELHjh314osvOt/2YFnWHR8fPD09tXz5crVr106pqak6deqU/Pz8nGcMboiKitK2bdu0ePFiFSpUSNL1943WqVNHDRs2lIeHh5577jl17dpVy5Yty86pg6TmzZurXr16zrNc7du3v+V6d7v9b+jQoYP8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7vePUqVKqVevXoqJiVFISMgdHx8sy1K7du3Uvn17paen68knn1THjh01efJk59sWbnBzc9O4cePUtGlT59mPd999VzNmzNCQIUPk7++vtm3bqkuXLpKk1q1b6/vvv1fTpk3l5eWlTp066YknnrjlmLt166ahQ4eqTp06yp8/v3r37q1Nmzbd99zeq7J/CnxojpPV54e7efbZZ7V582aNGTNGjz/+uN5++20FBwdnaR8tWrTQpk2bFBUVpQ8++ID7ezbf392snP42zyxKSUnR0aNH9ac//clZzzdYVvaE0+3k9PFwfyzLytGzQDl9vIeRI92SzT1n5jAnj4Xs53Cky2bLuReFcvp492P69OmKj493fsUHcsad+iUzcse96zZy+rmQ597cJadjiTi7fzkZTMTZwyWnYym3xBlyL+5hAAAAhsn170EDAAC316tXL1cPAfeAM2gAAACGIdAAAAAMk2sCzfAPmwIAADjdb7cYH2ienp6SpOTkZBePBAAAIHNudMuNjskq4z8kYLPZ5Ofn5/wl0Hny5OHrDAAAgJEsy1JycrLOnDkjPz8/569BzCrjv6hWun5lT58+rUuXLrl6KAAAAHfl5+enwMDAez6plCsC7QaHw5HhF5UCAACY5sbvHL0fuSrQAAAAHgXGf0gAAADgUUOgAQAAGIZAAwAAMAyBBgAAYBgCDQAAwDAEGgAAgGEINAAAAMP8fyQ/CKcIhj40AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df3.T.plot(kind='barh', stacked=True, cmap='Blues')\n", "\n", "plt.xlabel('Prosenttia sukupuolesta')\n", "plt.grid(axis='x')\n", "\n", "# Selitteen sijoittelu suhteessa origoon, selitteitä 4 vierekkäin\n", "plt.legend(loc=(-0.14, -0.25), ncol=4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Onko ristiintaulukoinnissa havaittu riippuvuus tilastollisesti merkitsevää?\n", "\n", "Otoksessa havaitut riippuvuudet voivat olla liian pieniä, jotta niitä voisi yleistää laajempaan perusjoukkoon, josta otos on otettu. Kyseessä voi olla otantavirheen (sattuman) aiheuttama riippuvuus.\n", "\n", "Riippuvuutta sanotaan merkitseväksi, jos sen perusteella voidaan tehdä yleistys laajempaan perusjoukkoon, josta otos on otettu. Riippuvuuden merkitsevyyttä voit testata laskemalla niin kutsuttu **p-arvo**. Mitä pienempi p-arvo, sitä merkitsevämpi riippuvuus. Yleensä alle 0,05 (5 %) suuruisia p-arvoja pidetään osoituksena merkitsevästä riippuvuudesta.\n", "\n", "Ristiintaulukointiin liittyvän p-arvon voit laskea khiin neliö -testillä (chi2_contingency). Testin palauttamat arvot ovat khiin neliö, p-arvo ja vapausasteiden määrä (df eli degrees of freedom). \n", "\n", "Lisäksi testi palauttaa teoreettisen ristiintaulukoinnin, jossa ei ole riippuvuutta lainkaan, mutta rivi- ja sarakesummat ovat samat kuin alkuperäisessä ristiintaulukoinnissa. Teoreettisen ristiintaulukoinnin avulla voit arvioida testin pätevyyttä. Mitä enemmän teoreettisessa taulukossa on pieniä, alle viiden suuruisia frekvenssejä sitä varovaisemmin testin tulokseen pitää suhtautua. Esimerkin tapauksessa on kaksi alle viiden suuruista frekvenssiä, joten testiä ei voi pitää pätevänä.\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Chi2ContingencyResult(statistic=1.836533415650563, pvalue=0.6070173075042058, dof=3, expected_freq=array([[20.66666667, 6.33333333],\n", " [22.96296296, 7.03703704],\n", " [16.83950617, 5.16049383],\n", " [ 1.5308642 , 0.4691358 ]]))" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from scipy.stats import chi2_contingency\n", "\n", "# khiin neliö -testi lasketaan aina lukumäärätaulukosta!\n", "chi2_contingency(df1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Khiin neliö -testin tulos: Riippuvuus ei ole merkitsevää (khiin neliö = 1.84, p = 0.607, df = 3).\n", "\n", "Seuraavassa vähän pelkistetympi p-arvon tulostus:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "p-arvo 0.607\n" ] } ], "source": [ "p = chi2_contingency(df1)[1]\n", "print(f'p-arvo {p:.3f}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lisätietoa\n", "\n", "* Tietoa khiin neliö -testistä:\n", "https://tilastoapu.wordpress.com/2011/10/14/6-ristiintaulukointi-ja-khiin-nelio-testi/\n", "\n", "* Lisätietoa p-arvoista:\n", "https://tilastoapu.wordpress.com/2012/02/14/p-arvo/\n", "\n", "* p-arvoja Pythonilla eri testaustilanteisiin:\n", "https://nbviewer.jupyter.org/github/taanila/tilastoapu/blob/master/p.ipynb\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.4" } }, "nbformat": 4, "nbformat_minor": 4 }