{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Päivitetty 2025-05-15 / 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",
" nro | \n",
" sukup | \n",
" ikä | \n",
" perhe | \n",
" koulutus | \n",
" palveluv | \n",
" palkka | \n",
" johto | \n",
" työtov | \n",
" työymp | \n",
" palkkat | \n",
" työteht | \n",
" työterv | \n",
" lomaosa | \n",
" kuntosa | \n",
" hieroja | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 1 | \n",
" 1 | \n",
" 38 | \n",
" 1 | \n",
" 1.0 | \n",
" 22.0 | \n",
" 3587 | \n",
" 3 | \n",
" 3.0 | \n",
" 3 | \n",
" 3 | \n",
" 3 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 1 | \n",
" 2 | \n",
" 1 | \n",
" 29 | \n",
" 2 | \n",
" 2.0 | \n",
" 10.0 | \n",
" 2963 | \n",
" 1 | \n",
" 5.0 | \n",
" 2 | \n",
" 1 | \n",
" 3 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 2 | \n",
" 3 | \n",
" 1 | \n",
" 30 | \n",
" 1 | \n",
" 1.0 | \n",
" 7.0 | \n",
" 1989 | \n",
" 3 | \n",
" 4.0 | \n",
" 1 | \n",
" 1 | \n",
" 3 | \n",
" 1.0 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 3 | \n",
" 4 | \n",
" 1 | \n",
" 36 | \n",
" 2 | \n",
" 1.0 | \n",
" 14.0 | \n",
" 2144 | \n",
" 3 | \n",
" 3.0 | \n",
" 3 | \n",
" 3 | \n",
" 3 | \n",
" 1.0 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 4 | \n",
" 5 | \n",
" 1 | \n",
" 24 | \n",
" 1 | \n",
" 2.0 | \n",
" 4.0 | \n",
" 2183 | \n",
" 2 | \n",
" 3.0 | \n",
" 2 | \n",
" 1 | \n",
" 2 | \n",
" 1.0 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" | 77 | \n",
" 78 | \n",
" 1 | \n",
" 22 | \n",
" 1 | \n",
" 3.0 | \n",
" 0.0 | \n",
" 1598 | \n",
" 4 | \n",
" 4.0 | \n",
" 4 | \n",
" 3 | \n",
" 4 | \n",
" NaN | \n",
" 1.0 | \n",
" 1.0 | \n",
" NaN | \n",
"
\n",
" \n",
" | 78 | \n",
" 79 | \n",
" 1 | \n",
" 33 | \n",
" 1 | \n",
" 1.0 | \n",
" 2.0 | \n",
" 1638 | \n",
" 1 | \n",
" 3.0 | \n",
" 2 | \n",
" 1 | \n",
" 2 | \n",
" 1.0 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 79 | \n",
" 80 | \n",
" 1 | \n",
" 27 | \n",
" 1 | \n",
" 2.0 | \n",
" 7.0 | \n",
" 2612 | \n",
" 3 | \n",
" 4.0 | \n",
" 3 | \n",
" 3 | \n",
" 3 | \n",
" 1.0 | \n",
" NaN | \n",
" 1.0 | \n",
" NaN | \n",
"
\n",
" \n",
" | 80 | \n",
" 81 | \n",
" 1 | \n",
" 35 | \n",
" 2 | \n",
" 2.0 | \n",
" 16.0 | \n",
" 2808 | \n",
" 3 | \n",
" 4.0 | \n",
" 3 | \n",
" 3 | \n",
" 3 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 81 | \n",
" 82 | \n",
" 2 | \n",
" 35 | \n",
" 2 | \n",
" 3.0 | \n",
" 15.0 | \n",
" 2183 | \n",
" 3 | \n",
" 4.0 | \n",
" 4 | \n",
" 3 | \n",
" 4 | \n",
" 1.0 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
"
\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",
" Mies | \n",
" Nainen | \n",
"
\n",
" \n",
" \n",
" \n",
" | Peruskoulu | \n",
" 22 | \n",
" 5 | \n",
"
\n",
" \n",
" | 2. aste | \n",
" 23 | \n",
" 7 | \n",
"
\n",
" \n",
" | Korkeakoulu | \n",
" 15 | \n",
" 7 | \n",
"
\n",
" \n",
" | Ylempi korkeakoulu | \n",
" 2 | \n",
" 0 | \n",
"
\n",
" \n",
"
\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",
" Mies | \n",
" Nainen | \n",
"
\n",
" \n",
" \n",
" \n",
" | Peruskoulu | \n",
" 35.5 % | \n",
" 26.3 % | \n",
"
\n",
" \n",
" | 2. aste | \n",
" 37.1 % | \n",
" 36.8 % | \n",
"
\n",
" \n",
" | Korkeakoulu | \n",
" 24.2 % | \n",
" 36.8 % | \n",
"
\n",
" \n",
" | Ylempi korkeakoulu | \n",
" 3.2 % | \n",
" 0.0 % | \n",
"
\n",
" \n",
"
\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",
"# Ulkoasun viimeistely\n",
"df2.style.format('{:.1f} %')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | | \n",
" Mies, n = 62 | \n",
" Nainen, n = 19 | \n",
"
\n",
" \n",
" \n",
" \n",
" | Peruskoulu | \n",
" 35.5 % | \n",
" 26.3 % | \n",
"
\n",
" \n",
" | 2. aste | \n",
" 37.1 % | \n",
" 36.8 % | \n",
"
\n",
" \n",
" | Korkeakoulu | \n",
" 24.2 % | \n",
" 36.8 % | \n",
"
\n",
" \n",
" | Ylempi korkeakoulu | \n",
" 3.2 % | \n",
" 0.0 % | \n",
"
\n",
" \n",
"
\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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zp1TQkKCzp8/r549e6pdu3batGmTxowZo7Fjx2r79u2eLhMAABRCHg8uaWlpeuCBB9S7d2/5+/srJCREnTt31qZNm/Ttt98qODhYXbp0ka+vrxo0aKA2bdpo/vz5ni4TAAAUQh5/cm6lSpU0Y8YMh2HffPONqlevrn379qlatWoO46pUqaJFixY53Y7VapXVar2lWm+GKx5nfCu8sc5FGdsbAFyjoMczrz7y32azaeLEifr+++81b948zZ07V4GBgQ7TBAQE2F+D7Yzt27erePHiriq1QAIDAxUeHu7RNv9qz549unjxoldrKCrY3gDgOgX9rfdacLFYLBo6dKh27NihefPmKSwsTIGBgUpPT3eYLisrSyVKlHB6+TVq1FBQUJCryjWMsLAwb5cAD2J7A7hdWCyWAk3nleBy6NAh9ejRQxUqVNCiRYtUunRpSVK1atX0008/OUy7f/9+Va1a1ek2zGaz17vxvaEornNRxvYGcLso6PHM4xfnnj9/Xl27dlVUVJRmzpxpDy2S1KxZM506dUpz5sxRTk6ONmzYoGXLlqlDhw6eLhMAABRCHu9xWbx4sdLS0rRy5UqtWrXKYdyWLVs0a9YsjRkzRpMnT1bp0qU1bNgw1a9f39NlAgCAQsjjwaVbt27q1q3bNcdHREQoKSnJgxUBAACj4JH/AADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMAguAADAMLwaXM6cOaNmzZopJSXFPmzEiBF66KGHFBkZaf+3cOFCL1YJAAAKC19vNZyamqr4+HgdOnTIYfivv/6qUaNGqX379l6qDAAAFFZe6XFZsmSJBg0apP79+zsMz87O1t69e/XQQw95oywAAFDIeaXHpVGjRmrTpo18fX0dwsvu3buVm5uryZMnKzU1VXfccYc6dOig7t27y2RyLmNZrVZZrVZXl35DZrPZ421eyRvrXJSxvQHANQp6PPNKcAkNDc13eHp6uurWravY2FiNHz9eu3btUu/evWUymdS9e3en2ti+fbuKFy/uinILLDAwUOHh4R5t86/27NmjixcverWGooLtXbT4+fnpwfDq8vP1TljNybVq184dysnJ8Ur7gLtlZmYWaDqvXeOSn4YNG6phw4b2zzVq1FDXrl319ddfOx1catSooaCgIFeXWOiFhYV5uwR4ENvbs8xms/olbdH+ExaPtlulTJAmPR2p6tWre7RdwJMsloL9vypUwWX16tU6deqUnn76afuw7OxsBQQEOL0ss9ns9W58byiK61yUsb09b/8Ji3akXfBK22xv3M4Kun8Xque42Gw2jR07VuvXr5fNZtOWLVs0d+5cde7c2dulAQCAQqBQ9bg0a9ZMQ4cO1ciRI3X8+HHddddd6tOnj9q2bevt0gAAQCHg9eCyZ88eh89PP/20w6kiAACAywrVqSIAAIDrIbgAAADDILgAAADDILgAAADDILgAAADDILgAAADDuKnboTds2KDjx4/LZrNJknJycrRnzx4NGzbMpcUBAABcqcDBZfny5WrdurVGjx6tpKQklShRQtKltzlmZGSoadOmbisSAABAcuJU0dSpUyVJX3/9tebNm6eJEyeqadOm2rRpk7p27apSpUq5rUgAAADJyR4XScrKylKtWrV08uRJ7dixQz4+PnrllVf0xBNPuK1IAAAAyYkel549e0qSypUrp9OnTys0NFTHjh1TTk6OAgIClJGR4bYiAQAAJCd6XKKjoyVJjRs3VlxcnD755BPVqVNHCQkJKlasmO6//363FQkAACA50ePSq1cvSdKAAQPUtm1b+fn5afjw4Tp37pz279+vUaNGua1IAAAA6SZuh3777bfVv39/BQUF6Y477tD06dPdURcAAMBVnH4A3bJlyxQYGOiOWgAAAK7L6R6XDh06KDExUTExMQoNDZWPj499XIUKFVxaHAAAwJWcDi6zZ8+WJH3++ef20GKz2eTj46Ndu3a5tjoAAIArOB1c1qxZ4446AAAAbsjp4HL33XdfNSw3N1d79+7NdxwAAICrOB1c1q5dq8TERIeXLEpSsWLFtHXrVlfWBgAA4KDAwSUqKkq//PKL3nvvPTVv3lwlS5bUnj171Lp1a33wwQd66qmn3FknAABAwW+H/vjjjyVJR44c0eDBg9WqVSudPXtWzZs317hx45SUlOS2IgEAACQngsuxY8ckSaVLl5bJZFKFChX0+++/S5KqVKmi48ePu6dCAACA/1fg4DJ16lRJUlhYmCZNmiRJuvPOO5WcnKyUlBQeSgcAANyuwMFl+fLlkqTBgwdr9erVOnnypPr27auXX35ZcXFxev75591WJAAAgHQTdxVVrlxZK1askHTp1ujvv/9eGRkZvB0aAAC4ndPBRZIOHz7scDt0Tk6OkpOTFRcX58raAAAAHBQ4uKSmpio6OlrTpk3ThAkTrnrcf82aNQkuAADArQp8jUv37t0lSfPnz9fkyZP10UcfqWPHjtqwYYNatmypyMhItxUJAAAgORFctmzZIklKT09X8+bN9cADD+i3335TcHCwXn/9da1atcptRQIAAEhOBJeRI0dKksqUKSOLxaKyZcvqyJEjstlsKl26tC5cuOCuGgEAACQ5cY3L5Qtx69Spo759+2rixIkKDw/X+PHjVaxYMZUtW9ZtRQIAAEhO9LgkJiZKkuLj43XvvfcqNzdXCQkJWr16tRYuXKiEhAS3FQkAACDdxO3QQUFBGjFihKRLj/9fuXKly4sCAADIj9PB5dy5c1qwYIGOHj2qvLw8h3Fjx451WWEAAAB/5XRwefXVV/XHH3+oVq1aMpkKfKYJAADgljkdXLZt26bvv/9ewcHBbigHAADg2pzuMqlYsaJycnLcUQsAAMB1Od3jMnz4cPXs2VPt2rVTqVKlHMa1a9fOVXUBAABcxengsmjRIu3du1ezZ892uMbFx8eH4AIAANzK6eCyatUqLV26VFWqVHFHPQAAANfk9DUuISEhqlixojtqAQAAuC6ne1z69u2roUOH6oUXXlCpUqXk4+NjH1ehQgWXFgcAAHAlp4NLfHy8JGnFihX20GKz2eTj46Ndu3a5tjoAAIArOB1c1qxZ4446AAAAbsjp4HL33Xe7ow4AAIAbcjq4PPDAAw7XtVyJU0UAAMCdnA4uc+fOdfh85swZffrpp2rbtq3LigIAAMiP08Glbt26Vw2Ljo5WXFycOnXq5JKiAAAA8uOS1zuXLFlSx48fd8WiAAAArsnpHpevvvrK4XNOTo7WrFmjBx980FU1AQAA5Mvp4DJ58mSHz2azWZUrV9aIESNcVhQAAEB+nA4u3333Xb7Ds7KybrkYAACA63H6Gpe/3lUkSVu3buWuIgAA4HZOB5ePPvpIixcvliTl5uZq/Pjxeu655/Twww+7vDgAAIArOX2qaObMmXrhhRd09uxZLV++XBcuXNCMGTNUv359d9QHAABg53RwCQ8P14wZM9StWzdVr15dCxYsUGBgoDtqAwAAcFDg4PL+++87fI6KitKGDRs0bdo0+fpeWswrr7zi2uoAAACuUODgkpKSctWwiIgIpaamStI1318EAADgKgUOLp9++qk76wAAALihW35y7pXatWt3C6UAAABc3y0/Off8+fO6ePGioqOjCS4AAMCtbvnJuTabTdOnT9e5c+dcVRMAAEC+bvnt0D4+PnrhhRe0dOlSV9QDAABwTbccXCTpwIED3FUEAADczulTRbGxsQ4hJScnR3v27NGTTz7p0sIAAAD+yungUq9ePYfPJpNJcXFx+vvf/+5042fOnFHnzp01evRo+3K3bdum0aNHa//+/QoJCdFLL72kjh07Or1sAABw+3E6uOT3dFyr1apDhw7p/vvvL/ByUlNTFR8fr0OHDtmHnT9/Xj179lTfvn3VuXNnbdq0Sb1791ZYWJhq1KjhbKkAAOA245JrXE6dOqWWLVsWePolS5Zo0KBB6t+/v8Pwb7/9VsHBwerSpYt8fX3VoEEDtWnTRvPnz3dFmQAAwOCc7nG5FpvNVuBpGzVqpDZt2sjX19chvOzbt0/VqlVzmLZKlSpatGiR0/VYrVZZrVan57tVZrPZ421eyRvrXJSxvYsWtjfgPgXdv10WXJy5qyg0NDTf4RkZGVe9aTogIECZmZlO17N9+3YVL17c6fluRWBgoMLDwz3a5l/t2bNHFy9e9GoNRQXbu2hhewPuVdDfepcFF1cIDAxUenq6w7CsrCyVKFHC6WXVqFFDQUFBrirNMMLCwrxdAjyI7V20sL1xO7NYLAWarsDBZdOmTdccd+bMmYIu5rqqVaumn376yWHY/v37VbVqVaeXZTabvd6t6w1FcZ2LMrZ30cL2xu2soPt3gYNLbGzsdce74gF0zZo103vvvac5c+aoS5cuSk1N1bJly/Thhx/e8rIBAIDxFTi47N692511SJJCQkI0a9YsjRkzRpMnT1bp0qU1bNgw1a9f3+1tAwCAws/r17js2bPH4XNERISSkpK8VA0AACjMXPIcFwAAAE8guAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAAAMMguAAGFBpUTMqzeq8Ab7ZdBLG9gf/y9XYBAJxXMtBXMpmlL7tLp/Z6tvG7qkkdZni2zSKO7Q38F8EFMLJTe6U/tnm7CngK2xvgVBEAADAOggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADAMggsAADCMQhlcvv76a4WHhysyMtL+b/Dgwd4uCwAAeJmvtwvIz6+//qq2bdtq7Nix3i4FAAAUIoWyx+XXX3/VQw895O0yAABAIVPoelzy8vK0Y8cOBQYGasaMGbJarWrcuLEGDRqkUqVKFXg5VqtVVqvVjZXmz2w2e7zNK3ljnYsyb29vbyqK+xrbG3Cfgu5jhS64nDlzRuHh4WrRooUmT56ss2fPasiQIRo8eLA+/vjjAi9n+/btKl68uBsrvVpgYKDCw8M92uZloUHFpDyr1w6sebk5+m3nLuXk5HilfW/w5vYuDPbs2aOLFy96uwyPYXsXre0Nz8vMzCzQdIUuuNx1112aP3++/XNgYKAGDx6sTp06yWKxKCgoqEDLqVGjRoGnvR2UDPSVTGbpy+7Sqb2e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6H/+53/UqFEjRUREKCYmRlu3bs233tdff12tWrXS8ePHJUmrV69WTEyMoqKi1KJFC82ZM8feC5zf/9n8epukq3ty8zteuFOxYsU0YcIEbdq0SZ9++qkkaePGjZozZ44mTpyo4ODgq+YpyHF34cKFatGihWrWrKkXX3xRv/32m55++mlFRkaqQ4cO9umnTJmil19+WX369FGtWrXUtGlTLVy40L6sgvYqrFu3TtHR0Vq5cqUk9qOb3Y8ILm6Qk5OjlJQUbdiwQQ0bNtSECRO0du1azZkzR+vWrVPNmjX1/PPP688//7TPc+jQIa1du1bvvvvuDZefmJioBg0aaOPGjfryyy+1c+dOffHFFw7T/Pbbb3r++ec1cOBAxcXFSZL69u2rQ4cOacmSJUpOTlalSpUUFxeXb+iBa1WqVEkzZsxweIjiN998o+rVqxdo/n/+8586cuSIFi1apC1btmjYsGGaMGGCDh48qKysLA0ePFjDhw9Xamqqxo0bp+nTp2v79u0aM2aMateurV69emnq1KnKzMxUXFycqlatqh9++EELFizQzz//7JbTi0aWk5OjgQMH6osvvlBSUpIiIiIcxj3//PMym8369ttv7T9CL774onJzcyVJx44dU6VKlbR+/XqHXprDhw8rNjZWbdu2VUJCgnx8fK57fMjKytJLL72kFi1a6IcfflBKSooqVqx41XEiLy9PCQkJ2rVrlz799FOVLVtWGzZs0Kuvvqru3btr48aNGj9+vGbPnq25c733usZbUalSJQ0fPlzjxo3Trl27FB8fr9dee001atTId/qCHHeXLVumhQsX6t///rdSU1P18ssva8yYMfrpp5/k7+/v8MfBmjVrFBUVpU2bNunNN9/UqFGjtH79+gLXn5ycrAEDBmj8+PF64okn2I9uAcHFRRITE1W7dm3Vrl1bDRo00KhRo9StWzc999xzSkpK0oABA3TPPfeoWLFi6t27t3JycrR27Vr7/K1bt1ZgYOAN334tXfrrY926dVq1apVMJpOWLl2qbt262cfv2LFD3bp10wsvvKCOHTtKurSjb9y4UW+88YZCQ0MVEBCgQYMGKTc3V8nJyS7/PnBtNptNEyZM0Pfff6/XX3+9QPP06dNHEydOVFBQkI4dO6ZixYpJkv2vs4CAAC1atEjr169X5cqVlZqamu8Bfe3atcrOztaAAQNU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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Lukumäärät pylväinä\n",
"df1.plot(kind='bar', rot=0)\n",
"\n",
"plt.ylabel('Lukumäärä')\n",
"\n",
"# Vaakasuuntainen taustaviivoitus\n",
"plt.grid(axis='y')"
]
},
{
"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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/Pz8VLhwYZUpU0b16tVTqVKllCdPHlWtWlWnTp1yrhsUFKTOnTvL09NTNWrUUP369bV27dpMjTs2NlY9e/ZUTEyMatasKYn7e07I1e9Byw1GjBiR4T1oN5w/f17Jycnq06eP3N3/18lpaWkZ/lEVLlw408eaOnWqpk+frilTpqhfv36qVKmSRo4cqTJlykiStm/fruDgYK1fv16dOnWSl5eXzp07J0kqXry4cz82m01FixbVqVOnVKFChSxfZ2Se3W7X4MGDtX//fi1ZsiTTb3Q9f/68xo4dqwMHDujJJ5/Un//8Z0nX/wfp4+OjpUuXaubMmerfv7/sdrvq16+vYcOGqWDBghn2c+rUKV24cEGVK1d2LrMsS2lpaTp//jxfDv0HFSpU0MSJE7V9+3b9/e9/17PPPqt69epJun6b+Pv7O5+IJClfvnzy8/PTqVOn9Pjjj0u6+d/07t27Vb16dW3evFl9+/ZVwYIFdeHChTs+PthsNsXFxalLly5KTk5W6dKl5eHhcdMHVU6fPq3Lly9r69atatiwoXOczz6b8f13Tz75ZIbHHWSfN954Q2vXrlWfPn1uu87dbv8bfv/SqM1my/Dv293dPcP94emnn85wjKJFi+rHH3/M1Jh37Nih5557TqtXr85wP+L+nr0INBfx9/eXt7e35s+fr4oVKzqX//zzzypSpIjz59+/cdTd3f2m9wbdeMN3enq6Dhw4oF69emnIkCH673//q7feekuDBg3Sxx9/LEmKjIxUt27d1KRJE02fPl39+/dXsWLFJF1/KfVGyDkcDiUkJCggIMD5Etzvv2jvdm8yv7FuamqqvLy8nOv6+2f+zfOPkuPHj6tLly564okntHLlSuf/+DKjT58+Cg8P17x58+Th4aGLFy/qo48+knQ9+s6cOaPJkydLkn788Uf169dPs2fPVlRUVIb9BAYG6qmnntJnn33mXGa323X+/PksjedR0bZtW3l5ealWrVrq2rWroqKiVKJECQUFBalYsWK6ePGi7Ha780krKSlJFy9eVEBAgPPJ5I9vBm/YsKEmTpyotm3bKiYmRu+8885dHx++++47jR49WsuWLXPG+fz583X06NEM+543b54++ugj55n8woULq1ixYjp+/HiG9U6cOKGAgABJ1x9nfv8y2p0+Wezu7p6pxwb8z40A+X2I/NG9PD/czR/PNp08eTLTv4Kof//+qlWrlho1aqRly5apTZs23N+V/fd3XuJ0EXd3d7Vs2VKTJ0/W6dOnlZ6ertWrV6tx48YZ3hj5e6VKldK5c+e0c+dOWZaltWvX6siRI879jRkzRlOnTtXVq1dVqFAheXt7Z4gjT09P5c2bV2PHjtX8+fP1zTffqHDhwqpZs6bGjBmjs2fPKiUlRZMmTZLD4VDt2rX12GOPqWDBgtqwYYMsy9L+/fszPJn/3lNPPSUPDw/nJ4K2b9+unTt3PuCZezj8+uuv6tSpkypVqqR58+ZlOYaSkpLk4+Mjm82mCxcuaMyYMZKuh/Tly5fVpUsXrVu3TpZlqXDhwnJ3d3feF7y8vJSUlCRJql27ti5fvqy5c+cqNTVVv/32m6KiotS3b1++HPou+vTpo4oVK6pnz566dOmSypcvr9KlS2vEiBFKSkpSUlKSRo4cqaeeekqVKlW67X48PT1ls9n01ltv6V//+pc+/fTTuz4+JCUlyd3dXT4+PpKkb7/9VosXL77pP3BeXl5q3769nnnmGefL5y1atNCXX36pjRs3yuFw6MCBA3r//ffVokULSdcfZ3bv3q3ExESlpKRoxowZt70vlCpVStu2bdNvv/2mpKQkvf/++w9iah959/L8cDfffvut1q5dK4fDodjYWG3evNl5m9+Np6enihQposGDB2vChAk6fvw49/ccuL/n+jNobm66/jHLnDjOAxYVFaXp06erXbt2unTpkooXL65p06apXLlyt1y/fPny+vvf/65Bgwbp8uXL+utf/6r69es7L586dapGjx6tGjVqKD09XZUrV9bo0aNv2k+1atX0yiuvKCoqSmvXrtXEiRM1adIkNW/eXMnJyapYsaIWLVrkPH0+evRoTZs2TfPmzdOf//xntWrVSnv27Llpv4ULF9aQIUM0c+ZMjR49WlWrVlVERISuXLnyYCbsHuT3zpm7eFaPs2rVKiUkJGjjxo03Be/evXslScHBwYqJiVHTpk1v2v6tt97SuHHjNH/+fBUsWFANGzZUuXLl9NNPP6lGjRqaNm2apk6dqujoaPn4+Khhw4bOD4U0a9ZMI0eO1A8//KAPP/xQCxcu1Pjx4zV37lylp6crLCxMs2bNureJeACefiz7f63bgziGu7u7Jk+erIiICL355puaN2+e5syZo/Hjx6t+/fpKTU3V888/rwULFsjD4+73j1KlSqlXr16KiYlRSEjIHR8fLMtSu3bt1L59e6Wnp+vJJ59Ux44dNXnyZOfbFm5wc3PTuHHj1LRpU+fZj3fffVczZszQkCFD5O/vr7Zt26pLly6SpNatW+v7779X06ZN5eXlpU6dOumJJ5645Zi7deumoUOHqk6dOsqfP7969+6tTZs23ffc3quyfwp8aI6T1eeHu3n22We1efNmjRkzRo8//rjefvttBQcHZ2kfLVq00KZNmxQVFaUPPviA+3s239/drJz+Ns8sSklJ0dGjR/WnP/3JWc83WFb2hNPt5PTxcH8sy8rRs0A5fbyHkSPdks09Z+YwJ4+F7OdwpMtmy7kXhXL6ePdj+vTpio+Pd37FB3LGnfolM3LHves2cvq5kOfe3CWnY4k4u385GUzE2cMlp2Mpt8QZci/uYQAAAIbJ9e9BAwAAt9erVy9XDwH3gDNoAAAAhiHQAAAADJNrAs3wD5sCAAA43W+3GB9onp6ekqTk5GQXjwQAACBzbnTLjY7JKuM/JGCz2eTn5+f8JdB58uTh6wwAAICRLMtScnKyzpw5Iz8/P+evQcwq47+oVrp+ZU+fPq1Lly65eigAAAB35efnp8DAwHs+qZQrAu0Gh8OR4ReVAgAAmObG7xy9H7kq0AAAAB4Fxn9IAAAA4FFDoAEAABiGQAMAADAMgQYAAGAYAg0AAMAwBBoAAIBhCDQAAADD/H8kPwinCIY+NAAAAABJRU5ErkJggg==",
"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=np.float64(1.836533415650563), pvalue=np.float64(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.13.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}