diff options
author | Dobbertin, Niclas <niclas.dobbertin@gmx.de> | 2023-11-28 12:00:55 +0100 |
---|---|---|
committer | Dobbertin, Niclas <niclas.dobbertin@gmx.de> | 2023-11-28 12:00:55 +0100 |
commit | e381a1e64ddb9e3bacba25389214cfd4756bba06 (patch) | |
tree | 2a7f2671ac72a533b118b2681ce13bcd83d9e0bc | |
parent | 4c71eec3cd5f5f36c1cdc6d2284f6dd93facc193 (diff) |
add jupyter notebook, RTsum plot
-rw-r--r-- | experiment/analysis/RT.png | bin | 0 -> 35267 bytes | |||
-rw-r--r-- | experiment/analysis/analysis.ipynb | 477 | ||||
-rw-r--r-- | experiment/analysis/tools.py | 72 |
3 files changed, 549 insertions, 0 deletions
diff --git a/experiment/analysis/RT.png b/experiment/analysis/RT.png Binary files differnew file mode 100644 index 0000000..20cd0b8 --- /dev/null +++ b/experiment/analysis/RT.png diff --git a/experiment/analysis/analysis.ipynb b/experiment/analysis/analysis.ipynb new file mode 100644 index 0000000..b140e96 --- /dev/null +++ b/experiment/analysis/analysis.ipynb @@ -0,0 +1,477 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "d372d82b-0842-4c24-86d1-b75c6637d2a3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "imported tools\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from pathlib import Path\n", + "from pprint import pprint\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "import tools\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3f7c451c-6afb-439d-8bfe-4e545c4f7992", + "metadata": {}, + "outputs": [], + "source": [ + "data_path = Path(\"/home/niclas/repos/uni/thesis/experiment/data\")\n", + "\n", + "procedures = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"overall\"]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "cffed6cb-ed44-4f8d-92dc-760b752d4302", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['random', 'blocked', 'fixed']" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "conditions = [x.stem for x in data_path.iterdir() if x.is_dir()]\n", + "conditions\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "511c7800-8ca9-457b-90b0-d3c3302f6ef0", + "metadata": {}, + "outputs": [], + "source": [ + "data = {}\n", + "for condition in conditions:\n", + " data[condition] = {}\n", + " for vp in (data_path / condition).iterdir():\n", + " data[condition][vp.stem] = tools.fix_vp(tools.unpickle(vp / \"vp.pkl\"), procedures)\n", + "\n", + "data_train, data_test = tools.train_test_split(data)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "39503de8-fa01-4ce7-a0c9-90f337548945", + "metadata": {}, + "outputs": [], + "source": [ + "condition = \"blocked\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "8f79bdbb-ac99-4577-866a-d566eee527ed", + "metadata": {}, + "outputs": [], + "source": [ + "train_blocked_fixed = tools.block_vps(data_train, \"fixed\")\n", + "train_blocked_random = tools.block_vps(data_train, \"random\")\n", + "train_blocked_blocked = tools.block_vps(data_train, \"blocked\")\n", + "\n", + "test_blocked_fixed = tools.block_vps(data_test, \"fixed\")\n", + "test_blocked_random = tools.block_vps(data_test, \"random\")\n", + "test_blocked_blocked = tools.block_vps(data_test, \"blocked\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "3ab5e63b-9c5a-4c53-9d80-983a27f833e1", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "#fig = tools.plot_vp(blocked_vps[list(blocked_vps.keys())[0]])\n", + "#plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e371b733-1b94-4ec9-8223-06b82dbac3df", + "metadata": {}, + "outputs": [], + "source": [ + "#tools.plot_average_vps(test_blocked_fixed)\n", + "#plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "eb3f2e96-2246-4b08-a7d1-999161ab3fd3", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABMIAAAHUCAYAAADYwISBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAACDIklEQVR4nOzdfXzT1d3/8XealpZCG2mhSSul4i3W4k2RKgyxSIEqUO82dE4EYXNTQLuCAm67gF2Ou01Q8RK3XQoKMvR3KQqTFemkKEMF2qFUnG6u60BawgRbSksLyff3R2gktAVa2uSb5vV8PPLA7/meJJ8kNTn55JzPsRiGYQgAAAAAAADo4MICHQAAAAAAAADgDyTCAAAAAAAAEBJIhAEAAAAAACAkkAgDAAAAAABASCARBgAAAAAAgJBAIgwAAAAAAAAhgUQYAAAAAAAAQgKJMAAAAAAAAIQEEmEAAAAAAAAICSTCAAScxWI5q0thYeE53c/s2bNlsVjaJmgAAAC0mL/GfZJUU1Oj2bNnt8ltAeg4wgMdAAB88MEHPsf//d//rU2bNundd9/1aU9NTT2n+/nhD3+o7Ozsc7oNAAAAtJ6/xn2SJxE2Z84cSVJmZuY53x6AjoFEGICAu/76632Oe/ToobCwsEbtp6qpqVF0dPRZ30/Pnj3Vs2fPVsUIAACAc9facR8AtBWWRgIICpmZmUpLS9N7772ngQMHKjo6WhMmTJAkvfrqqxo+fLgSExPVuXNnXX755ZoxY4aOHDnicxtNLY284IILNGrUKOXn5ys9PV2dO3dWnz599OKLL/rtsQEAAOBb9fX1euKJJ9SnTx9FRkaqR48euv/++3XgwAGffu+++64yMzMVHx+vzp07q1evXrrzzjtVU1Ojf/3rX+rRo4ckac6cOd4ll+PHjw/AIwJgJswIAxA0ysvLde+99+qxxx7T3LlzFRbmyeX//e9/1y233KLc3Fx16dJFf/vb37RgwQJt27at0TT7pnz88ceaOnWqZsyYIbvdrv/93//VxIkTdfHFF2vw4MHt/bAAAABwgtvt1q233qr3339fjz32mAYOHKiysjLNmjVLmZmZ2rFjhzp37qx//etfGjlypG644Qa9+OKLOu+88/TVV18pPz9f9fX1SkxMVH5+vrKzszVx4kT98Ic/lCRvcgxA6CIRBiBoHDx4UP/v//0/3XTTTT7tP//5z73/bRiGvvOd7+jyyy/XjTfeqE8++URXXnnlaW/3P//5j/7yl7+oV69ekqTBgwfrz3/+s1atWkUiDAAAwI9ee+015efn6/XXX9cdd9zhbb/qqqvUv39/LV++XA8++KCKiop09OhR/frXv9ZVV13l7XfPPfd4/7tfv36SPOUxWHoJoAFLIwEEjW7dujVKgknSP//5T91zzz1yOByyWq2KiIjQjTfeKEn67LPPzni7V199tTcJJklRUVG69NJLVVZW1nbBAwAA4Iz++Mc/6rzzztPo0aN1/Phx7+Xqq6+Ww+Hw7gB59dVXq1OnTnrggQf00ksv6Z///GdgAwcQNEiEAQgaiYmJjdqqq6t1ww036KOPPtITTzyhwsJCbd++XW+88YYkqba29oy3Gx8f36gtMjLyrK4LAACAtrN//35988036tSpkyIiInwuFRUV+s9//iNJuuiii1RQUKCEhARNmjRJF110kS666CI9/fTTAX4EAMyOpZEAgsaphe4lT5HUffv2qbCw0DsLTJK++eYbP0YGAACAttC9e3fFx8crPz+/yfMxMTHe/77hhht0ww03yOVyaceOHVqyZIlyc3Nlt9t19913+ytkAEGGRBiAoNaQHIuMjPRp/+1vfxuIcAAAAHAORo0apdWrV8vlcum66647q+tYrVZdd9116tOnj1555RUVFxfr7rvv9o4PmeUP4GQkwgAEtYEDB6pbt276yU9+olmzZikiIkKvvPKKPv7440CHBgAAgBa6++679corr+iWW27RI488ooyMDEVERGjv3r3atGmTbr31Vt1+++16/vnn9e6772rkyJHq1auXjh49qhdffFGSlJWVJckzeywlJUVvvfWWhg4dqri4OHXv3l0XXHBBAB8hgECjRhiAoBYfH6+3335b0dHRuvfeezVhwgR17dpVr776aqBDAwAAQAtZrVatXbtWjz/+uN544w3dfvvtuu222zR//nxFRUWpb9++kjzF8o8fP65Zs2bp5ptv1tixY3XgwAGtXbtWw4cP997eCy+8oOjoaOXk5Kh///6aPXt2gB4ZALOwGIZhBDoIAAAAAAAAoL0xIwwAAAAAAAAhgUQYAAAAAAAAQgKJMAAAAAAAAIQEEmEAAAAAAAAICSTCAAAAAAAAEBJIhAEAAAAAACAkhAc6gNZwu93at2+fYmJiZLFYAh0OAAAIEoZh6PDhw0pKSlJYGL8HmhHjPAAA0BpnO84LykTYvn37lJycHOgwAABAkNqzZ4969uwZ6DDQBMZ5AADgXJxpnBeUibCYmBhJngcXGxsb4GgAAECwqKqqUnJysncsAfNhnAcAAFrjbMd5QZkIa5gmHxsbywAJAAC0GEvuzItxHgAAOBdnGudRHAMAAAAAAAAhgUQYAAAAAAAAQgKJMAAAAAAAAISEoKwRBgAAAAAA0F4Mw9Dx48flcrkCHQpOsFqtCg8PP+daryTCAAAAAAAATqivr1d5eblqamoCHQpOER0drcTERHXq1KnVt0EiDAAAAAAAQJLb7VZpaamsVquSkpLUqVMndps2AcMwVF9frwMHDqi0tFSXXHKJwsJaV+2LRBgAAAAAAIA8s8HcbreSk5MVHR0d6HBwks6dOysiIkJlZWWqr69XVFRUq26HYvkAAADQvHnz1L9/f8XExCghIUG33XabPv/880b9PvvsM+Xk5MhmsykmJkbXX3+9/v3vf3vP19XVacqUKerevbu6dOminJwc7d27158PBQCAc9ba2UZoX23xuvDKAgAAQJs3b9akSZP04YcfauPGjTp+/LiGDx+uI0eOePt8+eWXGjRokPr06aPCwkJ9/PHH+sUvfuHzi2xubq7WrFmj1atXa8uWLaqurtaoUaMoNgwAAEzBYhiGEeggWqqqqko2m02VlZWKjY1t09t2uQ1tKz0o5+GjSoiJUkbvOFnDWA8MAEBH0J5jiI7mwIEDSkhI0ObNmzV48GBJ0t13362IiAitWLGiyetUVlaqR48eWrFihe666y5J0r59+5ScnKz169drxIgRZ7zf9h3nuVTsLNaBmgPqEd1D6QnpsoZZ2/Q+AADB7ejRoyotLVXv3r1bvfQO7ed0r8/ZjiGYEXaS/JJyDVrwrr7/+w/1yOqd+v7vP9SgBe8qv6Q80KEBAAD4VWVlpSQpLi5Okqd48Ntvv61LL71UI0aMUEJCgq677jq9+eab3usUFRXp2LFjGj58uLctKSlJaWlp2rp1a5P3U1dXp6qqKp9LeygoK9CI10dowoYJmv7+dE3YMEEjXh+hgrKCdrk/AAD8zTAMPfDAA4qLi5PFYtF5552n3Nzcdr3P2bNn6+qrr27X+2hrJMJOyC8p14Mri1VeedSnvaLyqB5cWUwyDAAAhAzDMJSXl6dBgwYpLS1NkuR0OlVdXa358+crOztb77zzjm6//Xbdcccd2rx5sySpoqJCnTp1Urdu3Xxuz263q6Kiosn7mjdvnmw2m/eSnJzc5o+noKxAeYV52l+z36fdWeNUXmEeyTAAQIeQn5+v5cuX649//KPKy8v1xRdf6L//+78DHZbpsGukPMsh56zbrabWiBqSLJLmrNutYakOlkkCAIAOb/Lkyfrkk0+0ZcsWb5vb7ZYk3XrrrfrpT38qSbr66qu1detWPf/887rxxhubvT3DMJrden7mzJnKy8vzHldVVbVpMszldmn+tvkymhjpGTJkkUULti3QkOQhLJMEALSZQJRd+vLLL5WYmKiBAwe26/0EO2aESdpWerDRTLCTGZLKK49qW+lB/wUFAAAQAFOmTNHatWu1adMm9ezZ09vevXt3hYeHKzU11af/5Zdf7t010uFwqL6+XocOHfLp43Q6Zbfbm7y/yMhIxcbG+lzaUrGzuNFMsJMZMlRRU6FiZ3Gb3i8AIHQFouzS+PHjNWXKFP373/+WxWLRBRdcoMzMTO/SyL/97W+Kjo7WqlWrvNd54403FBUVpV27dknylEV44IEHlJCQoNjYWN100036+OOPfe5n/vz5stvtiomJ0cSJE3X0aPO5FLMiESbJefjsXriz7QcAABBsDMPQ5MmT9cYbb+jdd99V7969fc536tRJ/fv31+eff+7T/sUXXyglJUWS1K9fP0VERGjjxo3e8+Xl5SopKQnYr9MHag60aT8AAE4nUGWXnn76af3yl79Uz549VV5eru3bt/uc79Onj37zm9/ooYceUllZmfbt26cf/ehHmj9/vvr27SvDMDRy5EhVVFRo/fr1KioqUnp6uoYOHaqDBz2Tgl577TXNmjVLv/rVr7Rjxw4lJibqueeea5fH055YGikpIebsdoI4234AAADBZtKkSVq1apXeeustxcTEeGt62Ww2de7cWZL06KOP6q677tLgwYM1ZMgQ5efna926dSosLPT2nThxoqZOnar4+HjFxcVp2rRp6tu3r7KysgLyuHpE92jTfgAANCeQZZdsNptiYmJktVrlcDia7PPQQw9p/fr1Gjt2rDp16qR+/frpkUcekSRt2rRJu3btktPpVGRkpCTpN7/5jd5880393//9nx544AE99dRTmjBhgn74wx9Kkp544gkVFBQE3awwEmGSMnrHKdEWpYrKo03+wVokOWyeNb0AAAAd0dKlSyVJmZmZPu3Lli3T+PHjJUm33367nn/+ec2bN08PP/ywLrvsMr3++usaNGiQt//ixYsVHh6uMWPGqLa2VkOHDtXy5ctltQam/lZ6Qrrs0XY5a5xN1gmzyCJ7tF3pCekBiA4A0JG0pOzSgIvi/RfYSV588UVdeumlCgsLU0lJibeGZ1FRkaqrqxUf7xtXbW2tvvzyS0nSZ599pp/85Cc+5wcMGKBNmzb5J/g2QiJMkjXMolmjU/XgymJZJJ8hUkOOdtboVArlAwCADsswmvo5sLEJEyZowoQJzZ6PiorSkiVLtGTJkrYK7ZxYw6yakTFDeYV5ssjikwyznBjpTc+YTqF8AMA5C4aySx9//LGOHDmisLAwVVRUKCkpSZJnU5zExETvLO+TnXfeef4Nsp1RI+yE7LRELb03XQ6b7/JHhy1KS+9NV3ZaYoAiAwAAwLnISsnSosxFSohO8Gm3R9u1KHORslICs2wTANCxmL3s0sGDBzV+/Hj97Gc/0/33368f/OAHqq2tlSSlp6eroqJC4eHhuvjii30u3bt3l+TZIOfDDz/0uc1Tj4MBM8JOkp2WqGGpDr9vcQoAAID2lZWSpSHJQ1TsLNaBmgPqEd1D6QnpzAQDALQZs5dd+slPfqLk5GT9/Oc/V319vdLT0zVt2jT9z//8j7KysjRgwADddtttWrBggS677DLt27dP69ev12233aZrr71WjzzyiMaNG6drr71WgwYN0iuvvKJPP/1UF154YUAeT2uRCDuFNcwSsLW6AAAAaD/WMKv6O/oHOgwAQAdl5rJLL7/8stavX6+//vWvCg8PV3h4uF555RUNHDhQI0eO1C233KL169frZz/7mSZMmKADBw7I4XBo8ODBstvtkqS77rpLX375paZPn66jR4/qzjvv1IMPPqgNGzb4/fGcC4txtgUhTKSqqko2m02VlZWKjY0NdDgAACBIMIYwP14jAEAgHT16VKWlperdu7eiolq3hDG/pFxz1u32KZyfaIvSrNGplF06R6d7fc52DMGMMAAAAAAAgDZC2SVzIxEGAAAAAADQhii7ZF7sGgkAAAAAAICQQCIMAAAAAAAAIYFEGAAAAAAAAEICiTAAAAAAAACEBBJhAAAAAAAACAkkwgAAAAAAABASSIQBAAAAAAAgJJAIAwAAAAAAwFkbP368brvttkCH0SokwgAAAAAAABASwgMdAAAAAAAAQIfidkllW6Xq/VJXu5QyUAqz+jWE+vp6derUya/3GQyYEQYAAAAAANBWdq+VnkqTXholvT7R8+9TaZ72dpSZmanJkycrLy9P3bt317Bhw7Ro0SL17dtXXbp0UXJysh566CFVV1d7r7N8+XKdd9552rBhgy6//HJ17dpV2dnZKi8v9/ZxuVzKy8vTeeedp/j4eD322GMyDMPnvuvq6vTwww8rISFBUVFRGjRokLZv3+49X1hYKIvFog0bNuiaa65R586dddNNN8npdOpPf/qTLr/8csXGxur73/++ampq2vV5IhEGAAAAAADQFnavlV67T6ra59teVe5pb+dk2EsvvaTw8HD95S9/0W9/+1uFhYXpmWeeUUlJiV566SW9++67euyxx3yuU1NTo9/85jdasWKF3nvvPf373//WtGnTvOeffPJJvfjii3rhhRe0ZcsWHTx4UGvWrPG5jccee0yvv/66XnrpJRUXF+viiy/WiBEjdPDgQZ9+s2fP1rPPPqutW7dqz549GjNmjJ566imtWrVKb7/9tjZu3KglS5a03xMklkYCAAAAAACcO7dLyp8uyWjipCHJIuXPkPqMbLdlkhdffLEWLlzoPe7Tp4/3v3v37q3//u//1oMPPqjnnnvO237s2DE9//zzuuiiiyRJkydP1i9/+Uvv+aeeekozZ87UnXfeKUl6/vnntWHDBu/5I0eOaOnSpVq+fLluvvlmSdLvf/97bdy4US+88IIeffRRb98nnnhC3/nOdyRJEydO1MyZM/Xll1/qwgsvlCR997vf1aZNmzR9+vQ2e05OxYwwAAAAAACAc1W2tfFMMB+GVPWVp187ufbaa32ON23apGHDhun8889XTEyM7rvvPn399dc6cuSIt090dLQ3CSZJiYmJcjqdkqTKykqVl5drwIAB3vPh4eE+9/Pll1/q2LFj3gSXJEVERCgjI0OfffaZTzxXXnml97/tdruio6O9SbCGtob7bi8kwgAAAAAAAM5V9f627dcKXbp08f53WVmZbrnlFqWlpen1119XUVGR/ud//keSZxZYg4iICJ/bsFgsjWqAnU5DX4vF0qj91LaT78tisTR53263+6zvuzVIhAEAAAAAAJyrrva27XeOduzYoePHj+vJJ5/U9ddfr0sv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UaPkcrnO/REFuYSYqDbtBwAAOq533nlH7733nsaNG6e4uDj99Kc/1ahRo7Rlyxb96U9/0vbt2/X9738/0GECAACYRotqhOXn5/scL1u2TAkJCSoqKtLgwYO97ZGRkXI4HE3eRmVlpV544QWtWLFCWVlZkqSVK1cqOTlZBQUFGjFiREsfQ4eS0TtOibYoVVQeldHEeYskhy1KGb3j/B0aAAAwmbffflvLli1TVlaWHnroIV188cW69NJL9dRTTwU6NAAAAFM6pxphlZWVkqS4ON+kTGFhoRISEnTppZfqRz/6kZxOp/dcUVGRjh07puHDh3vbkpKSlJaWpq1btzZ5P3V1daqqqvK5dFTWMItmjfYUyD+14kfD8azRqRTKBwAA2rdvn1JTPeOGCy+8UFFRUfrhD38Y4KgAAADMq9WJMMMwlJeXp0GDBiktLc3bfvPNN+uVV17Ru+++qyeffFLbt2/XTTfdpLq6Okmewq2dOnVSt27dfG7PbreroqKiyfuaN2+ebDab95KcnNzasINCdlqilt6bLofNd/mjwxalpfemKzstMUCRAQAAM3G73YqIiPAeW61WdenSJYARAQAAmFuLlkaebPLkyfrkk0+0ZcsWn/a77rrL+99paWm69tprlZKSorffflt33HFHs7d3ul2PZs6cqby8PO9xVVVVSCTDhqU6tK30oJyHjyohxrMckplgAACggWEYGj9+vCIjIyVJR48e1U9+8pNGybA33ngjEOEBAACYTqsSYVOmTNHatWv13nvvqWfPnqftm5iYqJSUFP3973+XJDkcDtXX1+vQoUM+s8KcTqcGDhzY5G1ERkZ6B3ihxBpm0YCL4gMdBgAAMKlx48b5HN97770BigQAACA4tCgRZhiGpkyZojVr1qiwsFC9e/c+43W+/vpr7dmzR4mJnuV8/fr1U0REhDZu3KgxY8ZIksrLy1VSUqKFCxe24iEAAACEpmXLlgU6BAAAgKDSokTYpEmTtGrVKr311luKiYnx1vSy2Wzq3LmzqqurNXv2bN15551KTEzUv/71Lz3++OPq3r27br/9dm/fiRMnaurUqYqPj1dcXJymTZumvn37eneRBAAAAAAAANpaixJhS5culSRlZmb6tC9btkzjx4+X1WrVrl279PLLL+ubb75RYmKihgwZoldffVUxMTHe/osXL1Z4eLjGjBmj2tpa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", + "text/plain": [ + "<Figure size 1500x500 with 2 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.rcParams[\"figure.figsize\"] = [15,5]\n", + "fig, axes = plt.subplots(ncols=2, nrows=1)\n", + "tools.plot_average_vps(axes[0], \"fixed\", train_blocked_fixed)\n", + "tools.plot_average_vps(axes[0], \"random\", train_blocked_random)\n", + "tools.plot_average_vps(axes[0], \"blocked\", train_blocked_blocked)\n", + "\n", + "tools.plot_average_vps(axes[1], \"fixed\", test_blocked_fixed)\n", + "tools.plot_average_vps(axes[1], \"random\", test_blocked_random)\n", + "tools.plot_average_vps(axes[1], \"blocked\", test_blocked_blocked)\n", + "\n", + "axes[0].set_title(\"Train\")\n", + "axes[1].set_title(\"Test\")\n", + "plt.xlabel(\"Block\")\n", + "plt.ylabel(\"RTsum\")\n", + "plt.legend()\n", + "plt.savefig(\"RT.png\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "497bd4dc-943a-41f3-a694-3f4b8f049dee", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>train</th>\n", + " <th>test</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>vp05</th>\n", + " <td>0.755556</td>\n", + " <td>0.836667</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp02</th>\n", + " <td>0.842222</td>\n", + " <td>0.983333</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp09</th>\n", + " <td>0.806667</td>\n", + " <td>0.923333</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp11</th>\n", + " <td>0.842222</td>\n", + " <td>0.870000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp07</th>\n", + " <td>0.733333</td>\n", + " <td>0.956667</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp08</th>\n", + " <td>0.711111</td>\n", + " <td>0.830000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp21</th>\n", + " <td>0.871111</td>\n", + " <td>0.470000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp06</th>\n", + " <td>0.726667</td>\n", + " <td>0.950000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp03</th>\n", + " <td>0.813333</td>\n", + " <td>0.923333</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp04</th>\n", + " <td>0.808889</td>\n", + " <td>0.983333</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " train test\n", + "vp05 0.755556 0.836667\n", + "vp02 0.842222 0.983333\n", + "vp09 0.806667 0.923333\n", + "vp11 0.842222 0.870000\n", + "vp07 0.733333 0.956667\n", + "vp08 0.711111 0.830000\n", + "vp21 0.871111 0.470000\n", + "vp06 0.726667 0.950000\n", + "vp03 0.813333 0.923333\n", + "vp04 0.808889 0.983333" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "condition = \"fixed\"\n", + "df = pd.DataFrame([tools.total_accuracy(data[condition][vp], procedures) for vp in data[condition].keys()], index=data[condition].keys(), columns=[\"train\", \"test\"])\n", + "df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "143f7497-2c6c-492c-85ab-da3d2cf2a828", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>1</th>\n", + " <th>2</th>\n", + " <th>3</th>\n", + " <th>4</th>\n", + " <th>5</th>\n", + " <th>6</th>\n", + " <th>overall</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>vp14</th>\n", + " <td>0.992</td>\n", + " <td>0.976</td>\n", + " <td>0.992</td>\n", + " <td>0.976</td>\n", + " <td>0.400</td>\n", + " <td>0.600</td>\n", + " <td>0.968</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp18</th>\n", + " <td>0.976</td>\n", + " <td>0.976</td>\n", + " <td>0.960</td>\n", + " <td>0.392</td>\n", + " <td>0.600</td>\n", + " <td>0.984</td>\n", + " <td>0.904</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp15</th>\n", + " <td>0.992</td>\n", + " <td>0.992</td>\n", + " <td>0.960</td>\n", + " <td>0.392</td>\n", + " <td>0.592</td>\n", + " <td>1.000</td>\n", + " <td>0.928</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp20</th>\n", + " <td>0.992</td>\n", + " <td>0.376</td>\n", + " <td>0.952</td>\n", + " <td>0.976</td>\n", + " <td>0.976</td>\n", + " <td>0.560</td>\n", + " <td>0.784</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp10</th>\n", + " <td>0.968</td>\n", + " <td>0.360</td>\n", + " <td>0.592</td>\n", + " <td>0.984</td>\n", + " <td>0.984</td>\n", + " <td>0.992</td>\n", + " <td>0.712</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp13</th>\n", + " <td>0.384</td>\n", + " <td>0.960</td>\n", + " <td>0.928</td>\n", + " <td>0.560</td>\n", + " <td>0.992</td>\n", + " <td>0.968</td>\n", + " <td>0.568</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp17</th>\n", + " <td>0.392</td>\n", + " <td>0.968</td>\n", + " <td>0.584</td>\n", + " <td>1.000</td>\n", + " <td>1.000</td>\n", + " <td>0.992</td>\n", + " <td>0.648</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp12</th>\n", + " <td>0.992</td>\n", + " <td>0.592</td>\n", + " <td>0.392</td>\n", + " <td>0.976</td>\n", + " <td>0.960</td>\n", + " <td>1.000</td>\n", + " <td>0.016</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp19</th>\n", + " <td>1.000</td>\n", + " <td>0.992</td>\n", + " <td>0.000</td>\n", + " <td>0.576</td>\n", + " <td>0.992</td>\n", + " <td>0.992</td>\n", + " <td>0.848</td>\n", + " </tr>\n", + " <tr>\n", + " <th>vp16</th>\n", + " <td>0.976</td>\n", + " <td>0.600</td>\n", + " <td>0.376</td>\n", + " <td>0.976</td>\n", + " <td>0.992</td>\n", + " <td>1.000</td>\n", + " <td>0.752</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " 1 2 3 4 5 6 overall\n", + "vp14 0.992 0.976 0.992 0.976 0.400 0.600 0.968\n", + "vp18 0.976 0.976 0.960 0.392 0.600 0.984 0.904\n", + "vp15 0.992 0.992 0.960 0.392 0.592 1.000 0.928\n", + "vp20 0.992 0.376 0.952 0.976 0.976 0.560 0.784\n", + "vp10 0.968 0.360 0.592 0.984 0.984 0.992 0.712\n", + "vp13 0.384 0.960 0.928 0.560 0.992 0.968 0.568\n", + "vp17 0.392 0.968 0.584 1.000 1.000 0.992 0.648\n", + "vp12 0.992 0.592 0.392 0.976 0.960 1.000 0.016\n", + "vp19 1.000 0.992 0.000 0.576 0.992 0.992 0.848\n", + "vp16 0.976 0.600 0.376 0.976 0.992 1.000 0.752" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "condition = \"random\"\n", + "proc_accs = [\n", + " tools.count_correct(data[condition][vp], data[condition][vp].keys(), procedures)\n", + " for vp in data[condition].keys()\n", + "]\n", + "for vp in proc_accs:\n", + " for proc in vp.keys():\n", + " vp[proc] /= len(next(iter(data[condition].values())).keys())\n", + "df = pd.DataFrame(proc_accs, index=data[condition].keys())\n", + "df\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "52d6e2e6-999d-47a2-a829-cee5042d5c68", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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": 5 +} diff --git a/experiment/analysis/tools.py b/experiment/analysis/tools.py index d32ccd3..1dffc9a 100644 --- a/experiment/analysis/tools.py +++ b/experiment/analysis/tools.py @@ -2,6 +2,9 @@ import pickle from copy import deepcopy +import matplotlib.pyplot as plt +import numpy as np + def unpickle(pkl): with open(pkl, "rb") as f: @@ -9,6 +12,73 @@ def unpickle(pkl): return data +def fix_vp(data, procedures): + procs = deepcopy(procedures) + if data["train_0"]["procedure_order"] == data["test_0"]["procedure_order"]: + keys = list(data["train_0"].keys()) + keys.remove("procedure_order") + keys.remove("water_sample") + for key in keys: + procs.remove(key) + proc_from = keys[2] + proc_to = procs[0] + for train in [x for x in data.keys() if x.startswith("train")]: + vp = deepcopy(data[train]) + vp[proc_to] = vp.pop(proc_from) + data[train] = vp + return data + +def block_vps(data, condition): + blocked_vps = {} + for vp in data[condition].keys(): + blocked_vps[vp] = blocked_time(data[condition][vp]) + return blocked_vps + + +def blocked_time(vp): + key_stem = list(vp.keys())[0].split("_")[0] + + trial_count = len(vp.keys()) + block_size = 5 + block_count = trial_count / block_size + + result = {} + sum_time = 0 + block_i = 0 + for trial in range(trial_count): + if trial % 5 == 0: + sum_time = 0 + block_i += 1 + sum_time += sum_time_over_trial(vp[f"{key_stem}_{trial}"]) + result[block_i] = sum_time + return result + + +def sum_time_over_trial(trial): + total_time = 0 + for proc in trial.keys(): + if proc != "procedure_order" and proc != "water_sample": + total_time += trial[proc]["time"] + return total_time + + +def plot_vp(ax, data_dict): + x = data_dict.keys() + y = data_dict.values() + + ax.scatter(x, y) + + +def plot_average_vps(ax, label, blocked_vps): + xlist = [list(blocked_vps[x].keys()) for x in blocked_vps] + ylist = [list(blocked_vps[x].values()) for x in blocked_vps] + x = xlist[0] + yarray = np.array(ylist) + y = np.average(yarray, axis=0) + + ax.scatter(x, y, label=label) + + def count_correct(vp, trials, procedures): trials_correct = {} for proc in procedures: @@ -52,9 +122,11 @@ def train_test_split(data): if string in trial: new_dict[cond][vp][trial] = data[cond][vp][trial] return new_dict + data_train = delete_trials(data, "train") data_test = delete_trials(data, "test") return data_train, data_test + print("imported tools") |