{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sample Analysis of A Single Carcassonne Game\n", "\n", "This demonstrates some of the single-game analysis possible with the data recorded via this Carcassonne score keeping system.\n", "\n", "It requires the `CarcassonneScore-sample.db` sqlite database in the same directory.\n", "\n", "This script also requires the `numpy` and `matplotlib` libraries." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preliminaries" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import sqlite3\n", "from datetime import datetime" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "DBFILE = 'CarcassonneScore-sample.db'" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "timefmt = \"%Y-%m-%dT%H:%M:%S\"" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "conn = sqlite3.connect(DBFILE)\n", "cur = conn.cursor()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "gameID = 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## General Game Info\n", "\n", "Load some general information about this particular game." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Players in game 1:\n", "John Smith\n", "Jane Doe\n" ] } ], "source": [ "playerIDs = cur.execute('''SELECT DISTINCT playerID from turns where gameID={0:d}'''.format(gameID)).fetchall()\n", "print(\"Players in game {0:d}:\".format(gameID))\n", "players = {}\n", "for playerID in playerIDs:\n", " playername = cur.execute('''SELECT name FROM players WHERE playerID={0:d}'''.format(playerID[0])).fetchall()[0]\n", " print(playername[0])\n", " players[playerID[0]] = playername[0]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Expansions:\n", "1) The River\n" ] } ], "source": [ "expIDs = cur.execute('''SELECT expansions FROM games WHERE gameID={0:d}'''.format(gameID)).fetchall()[0]\n", "try:\n", " expIDs = [int(x) for x in expIDs[0].split(',')]\n", " if len(expIDs):\n", " print(\"Expansions:\")\n", " for i, expID in enumerate(expIDs):\n", " expname = cur.execute('''SELECT name FROM expansions WHERE expansionID={0:d}'''.format(expID)).fetchall()[0]\n", " print(\"{0:d}) \".format(i+1) + expname[0])\n", "except ValueError:\n", " print(\"No expansions used.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Score Evolution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### By Turn" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1,1,\n", " squeeze=False)\n", "colors = ['blue', 'orange', 'green', 'red']\n", "sdtype = [('turnNum', float), ('ingame', float), ('points', float)]\n", "for i, playerID in enumerate(playerIDs):\n", " start = np.array((0, 1, 0), dtype=sdtype)\n", " rec = cur.execute('''SELECT turnNum,ingame,points FROM scores WHERE gameID={0:d} and playerID={1:d} ORDER BY turnNum'''.format(gameID,\n", " playerID[0])).fetchall()\n", " rec = np.array(rec, dtype=sdtype)\n", " endT = cur.execute('''SELECT turnNum from scores WHERE gameID={0:d} ORDER BY turnNum DESC LIMIT 1'''.format(gameID)).fetchall()[0][0]\n", " end = np.array((endT, 1, 0), dtype=sdtype)\n", " rec = np.hstack((start, rec, end))\n", " ig = rec['ingame'] == 1\n", " postscore = np.sum(rec['points'][ig])\n", " ax[0][0].step(rec['turnNum'][ig],\n", " np.cumsum(rec['points'][ig]),\n", " where='post',\n", " color=colors[i],\n", " label=players[playerID[0]])\n", " ax[0][0].scatter(rec['turnNum'][~ig],\n", " postscore + np.cumsum(rec['points'][~ig]),\n", " marker='o',\n", " facecolor='',\n", " edgecolor=colors[i])\n", " fscore = np.sum(rec['points'])\n", " ax[0][0].axhline(fscore,\n", " ls=':',\n", " color=colors[i])\n", " plt.annotate('Final score: {0:1.0f}'.format(fscore),\n", " (30, fscore),\n", " color=colors[i])\n", "ax[0][0].set_xlabel('Turn Number')\n", "ax[0][0].set_ylabel('Cumulative Points')\n", "ax[0][0].set_xlim([0, rec['turnNum'][-1]*1.05])\n", "ylims = ax[0][0].get_ylim()\n", "ax[0][0].set_ylim([0, ylims[1]])\n", "ax[0][0].minorticks_on()\n", "ax[0][0].legend(loc='best')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# JOIN the scores and turns tables to get the timesteps for a sample game" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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NWpUeHj69Onh3+fPn0/jxo3LXMfs2bOT8tLMyNeqqKiIHj16JLA1JO4h0dXywNYvF8X+Ed9bv359pZddsWKFNWvWzFasWFGlNsyZM8cGDRpU6jzDhg2rUp2uXbva2rVrw8M33XST7du3r0LrOHToUPj3Vq1alZh2+HB51pEsDn9t4v0aRHsPU8pDonXZokgUPXv2ZMGCBQwePJgFCxZUuq/ySH7tbbGoqCjcwdfcuXMZPXo0zz77LLfccgs5OTnUr1+f2bNnH9HuLVu2cNttt9G5c2caNGjAxIkTmTFjBhdddBGXXnop55xzDhs2bGDIkCH07t2bOXPmkJWVxZ133klubi7bt2/nmmuu4Y033mDjxo0sWbKEBg0a8MknnzB58mQ6derEZ599xr333kvr1q2PaO/GjRvp06cPX3/9NccddxwzZswA4MEHH+TAgQMcOnSI2rVrM27cuHDtm266iYKCAtauXct1111X4rXatm0bI0aMYNeuXTH/3v/4xz+4/fbbueSSSygqKmLNmjX87W9/K9HPT5XESnqvfxK5h77ihYne15aEq8oeerGq7qkX76GvX7/eOnXqFB5/44032lNPPWVmwT30QCBgZmZTpkyxqVOnmpnZli1brGXLlnbw4EE7ePCg/fKXv4xaY8eOHTZq1ChLTU21U045xaZPnx6eNmzYMJs1a5aZmd122202duxYMzObNm1aiTo9evQILxNtDz0vL8/MzPr27Ws5OTlHtGHFihU2bNiw8HCdOnVs165dZmbWoUMH2759+xHLXHzxxfbcc8+ZmdnGjRvDdX/44QdbunRpeNsyMjLCy/To0cPeeustMzMbMGBAeNtGjBhhL774opmZnXnmmfbee++F23XhhRdGbW/37t3Dw3369LElS5bY66+/bn379i0x/o033gjXfvXVV83MbPXq1TFfKzMr8+89c+ZMMzN7+OGHw3+HaCq6h550x9CzV65j8I26c0/KJ3JPvSrHuZOtt8Vf/OIXNGzYEAg++2DPnj2sXLmSPn360KdPHz7//HM++eQT0tPTw9tZzMzIzs7mwQcfJBAIUFhYWGLdZW1Pbm4ub775JpMmTWLFihXUr18/ahsja7Zt25ZPPvmE3NzcI8ZH/p2Kb8OPfDhPNGX9vU855ZQSr028JFWgF4f5gpmjE90UqUHiEerJ1ttitPm7devG66+/zuuvv07r1q3p0KEDeXl5AHz++efh+WbNmsXXX3/NH/7wB+68884Kt79z585cdNFFjBkzhnvuuYe+fftGnS+yZl5eHh06dKBz585s3rw5PL6sv1O01woq//euqqQ5hh4Z5nqSkVRUVY6p+723xT179jBv3jxyc3N5//33Wb9+Pbt372bhwoU0adKE/Px8Zs+ezQMPPFCi3ZMnT+bWW29l3bp1/OpXvwqH3AUXXMCLL77IXXfdRZMmTcLratCgAfn5+cydO5f+/ftH3bbf/va3PP300zzyyCOkpaXx5ZdfcsUVV0T9u9StW5dJkyaxefNm2rZtS9++fXHOsWrVKrKysjAzunXrxvnnn8/SpUvJz8/nz3/+M6NHjyYlJQWgxGtVvN0zZ87kxhtvrPDfu/hbUJXEOhbj9U91HkNf8cJEa9akQfDYua5ySRrxOIZeWcXHgB999FG75ZZbEtaOo1leXp4VFhaamVl+fr716tWr2moffsz/aKWrXA6jPXNJBPW2WLb8/Hzuu+8+Tj/9dDZt2sS0adOqpW7kN4p3332Xs88+u1rqVgdfB7rCXBJFvS2WrXfv3vTu3bva655wwgklnufqJ74+KaowF5Fk4utAV5iLSDLxdaArzEUkmfg60EVEkolnJ0Wdc+2Ay4GfgB7AeDP7wKt6ImUq7aHhlVHGg8aXL1/OjBkzyMvLY9KkSfTv3z++9YEXXniBu+++m7POOov09HS2b99Ox44dyczMLNHfiiQHT/bQnXO1gGnAA2Y2GbgW2FL6UiL+ct5554W7z/UizAEuueQSUlNTGTJkCPfffz+PP/44+fn5jBw50pN6cnTzag/914ADbnXOHQ/sAP7iUS2RGmHgwIH8+te/pqCggO7duzN06NBwj4jRet/76quvyMrKomPHjmzatIkbbriBrl27llln3LhxNG7cmIceegiAUaNG0bp1a/Lz87ngggsYMGAARUVFjBw5kvT0dAoKCujfvz8XXHCB1y+BeMyrQG8FdAMuN7Pdzrn/AfYDc4tnKCwsLNHBTWZmJpmZmR41RyTxrr76agYMGMDPP/9M+/btGTp0KP369WPhwoW0atWKG264gSlTprBw4ULuvPNORo0aRb9+/RgyZAhbt25l4MCBR/QZEs3xxx9Po0aN+Oabb5gzZw7p6emMGjWKffv20aZNG8455xwefvhh2rZtS1ZWFj/99BOnnnoqmzdv5thjfX1rSo0VCAQIBALFg81izefVX68I+MzMdoeG3wV6EhHoKSkp5OTkeFRe5Ohy8OBB1q9fz5o1a6hXr94RPQhG9r63detWINhrYPPmzfniiy8wM5o3b86hQ4fCHULF8uOPP7Jr1y5OPPFEcnNzufbaawGoU6cOjRs3ZtOmTeTm5tK0aVMmTZoEBDuT+v7772nevHmct1ziIXKH1zm3PdZ8XgX6/wFNnXO1zOxngnvseR7VEjnqvfrqqyxdupTly5cDHPG4tmi973Xu3JlevXrRv39/zIyTTjqpzDAHmDhxItdddx0nnHBCid4D9+3bx86dO0lPT6dz5860aNEi/GCKefPm0bRp06pupiSYJ4FuZt8750YD051zhUAK8EAZi4n4knOObt268eijj3LrrbfSsmVLfvjhB2bPnk3Hjh1j9r43depUxo0bx7p16/j2228599xzj1j3woULyc/P5/nnn+ejjz5i27ZttGvXLvxko6ysLO644w4mTJjAF198weOPP06jRo3Iysri7rvvZsKECezevTvc77rUbM5C/ShXt4yMDPP8kEtpl6mVccmZ1Hyffvpp+IEE1e2tt96id+/eTJ8+nc2bNyflA5Sl6qK9h51zH5pZ1Cds6AyIiAfU26IkggJdxAPqbVESQbf+i4j4hAJdRMQnFOgiIj6RlIGevXJdopsgIhJ3SRfoxY+lE6mM7OxsUlJSyM7OLnPe5cuXhzvnWrRokSfteeGFF8Kdc9133338/ve/58knn+Tnn3+u8rqLioro0aNHHFpZs7z88svhu3UBrrnmmnJ1uXA0SKpAj3zGqEhFZWdnM3jwYBYsWEDPnj3LnL+m97bYoEGDcv3H5TeHB/rs2bM5/fTTE9egCkiayxb1wGipioqGeTQ1rbfFZ555hhEjRrBr165S23m4ESNGcODAAU466SRee+010tPTmTFjBlOmTGH//v3Url2bvXv3MmXKFDZu3Mg111xDWloajRs3ZvXq1dx+++2sXLmS1atXk5WVRd++fTl48CAjR46kefPm7N69my5dunDllVdGbe8999zDnj17WLt2LX/6059IS0vjvffe469//Stt27bls88+Y8KECfzwww9cc801nHjiiaSlpbFgwQKef/55/vnPfzJ37lxWrVrFf//3fzNixAiuvvpqrr76aj799FMeeeQRTjnlFD777DPuuusuWrRoweWXX06tWrU47bTTWLVqFUOGDOH666+v1PukSswsIT9du3Y1z325yOzLRbbihYnWrEkDW/HCxPA48b/169fHZT0rVqywZs2a2YoVKyq87Jw5c2zQoEFmZvbyyy+bmdnBgwctPT09PM+wYcNs5syZZmb28MMP29SpU83M7LLLLrP58+ebmdmWLVusS5cuUWv06NHDFi9eXGJc8+bNbcOGDTZmzBibMmWKmZnt3bvXTjrpJPv+++9tzJgxNnHiRDMz+/HHH+3kk0+2AwcOHLHuVq1aldnOSEuWLLE+ffqEh7t37x5+3Yq338ysX79+9vHHH4dfoyuuuMLMzF566SU7++yzzcxszZo19rvf/c7MzGbOnGnXX3+9mZkdOnTI2rVrZ999913U9m7cuNHMzJ577jm7+OKL7dChQ3bSSSfZtm3bwuMvv/zycO3BgwebmdmmTZts586dNmzYsBJ/6/vuu8/mzJljZmZnnnmmrV692szMVq1aZd26dTOz4HvkzDPPNDOzbdu2WceOHY9oW2VEew8DORYjV32/h649c6mKeOyZg396W4zWzosvvph//etfDBw4kN27d5Oenh6ev3Xr1uHf9+/fz913302TJk346quvSrwGbdq0AaBRo0bh3xs3bsyePXvCr8U333wTbm/Hjh359ttvo7a3uGbbtm355JNP2L59O0VFRaSkpITHr127Njx/8a31xXVLk5ubW2L9keuJfG2K213dfB3oCnOpiniFOfint8Vo7XzxxRfDvy9ZsiS8jQCff/45ALt27eLKK6+kqKiI2rVrk5ubW2atSJ07d6ZOnTqMGTMGCN6JG+1wT3HNtm3bkpeXR4cOHWjWrBkNGzZk27ZtNG/enI0bN9KlS5eY21SrVi3MjE2bNtGiRYsj2rF582aaNGlS5noSwdeBrjCXyopnmNfU3hbnz5/P7t27mTlzJmeccUbMdrZt2za8TN++fXnttde4/vrradOmDXXq1ME5R8OGDbnkkku46qqryMjIYP369cybN4/27duH15WXl8e8efPIzc1lzZo1LFq0iPz8fJYuXcq1117L3Xffzfjx49m/fz/16tVj4MCBUV/vt956izlz5vDRRx/x2GOP4ZzjueeeIysrizZt2rBhwwamTp3Kd999F669bNkyevXqBUDv3r2ZNWsWhw4d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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 1,\n", " squeeze=False)\n", "hatches = ['\\\\', '/', '|', '-']\n", "maxpts = cur.execute('''SELECT points FROM scores WHERE gameID={0:d} ORDER BY points DESC LIMIT 1'''.format(gameID)).fetchall()[0][0]\n", "bins = np.arange(0.5, maxpts+1.5, 1)\n", "for i, playerID in enumerate(playerIDs):\n", " rec = cur.execute('''SELECT points,ingame FROM scores WHERE gameID={0:d} and playerID={1:d}'''.format(gameID,\n", " playerID[0])).fetchall()\n", " rec = np.array(rec, dtype=[('points', float), ('ingame', float)])\n", " ig = rec['ingame'] == 1\n", " ax[0][0].hist(rec['points'],\n", " bins=bins,\n", " alpha=0.3,\n", " color=colors[i],\n", " label=players[playerID[0]])\n", " ax[0][0].hist(rec['points'][ig],\n", " bins=bins,\n", " alpha=0.0,\n", " color=colors[i],\n", " hatch=hatches[i],\n", " label=players[playerID[0]] + ' in-game portion')\n", "\n", "ax[0][0].set_xticks(np.arange(0, maxpts+1, 4))\n", "ax[0][0].set_xlim([0, maxpts+1])\n", "ax[0][0].minorticks_on()\n", "ax[0][0].tick_params(axis='y', which='minor', left=False, right=False)\n", "ax[0][0].set_ylabel('N')\n", "ax[0][0].set_xlabel('Points')\n", "ax[0][0].legend(loc='best')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Scores by Type" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Fraction of scores and fraction of points per scoretype" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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Hpl1HCIipUKTkYoUCDPjoIMOYuTIkYwaNYrOnTuz5557MmLECObPn8/ixYu5//77GThwIIlEgg0bNrBs2TLuvfdeVq1axbPPPkt9fT2bNm1i9uzZjBjRcEqnQYMGMWLECHr16sX69evp3bs3Z599doPPPuCAA3jhhRd46623OOGEE7afZ+nSpdx1112sWrWKJ554gq9//escffTRjB07lg4dOrBs2bLt5z3iiCO2f96JJ57YZMuaiEhbV/zL6mh0obTS22+/zaBBg/Jy7meeeYbTTz+d6dOns3z5cm677ba8xBGndOVdSMvqtFZz6i+NLhRpG7SsjkgBmjlzJs8++yxLlixhypQp+Q5HcqA5UziISHErpCkcRKSRuXMbr9wixU5TOIiUjkKawkFERESkZCjJEhEREYlAQSZZyT4Nibh7hYpIrBKJRHLW97T9GUREillB9slSnwaR0pCpP4OISDEryCRLJK9yPS1IhqlAnnvuOWbMmMHSpUuZPHlyk4tEt8bDDz/MVVddxQknnED//v1Zu3Ythx56KNXV1btcX1BERFquIG8XipSSIUOG8I1vfIODDz44kgQL4JxzzqGiooLzzjuPiRMnMnPmTFatWsWoUaMiOV8pU3cHkdKRqcuDWrJECszw4cM55phjqK2t5cQTT+T8888nkUgwevRozjnnHOrr61m4cCG//OUvqaio4P3332fs2LEceuihLFu2jIsvvrjBUjxNGT9+PF27duWGG24AYMyYMfTp04dVq1Zx5plncvbZZ1NfX8+oUaPo378/tbW1DBs2jDPPPDPqIihq6u4gUjoydXlQkiVSYC688ELOPvtsvvjiCwYNGsT5559PVVUVc+bMoVevXlx88cXcfPPNzJkzhyuvvJIxY8ZQVVXFeeedx8qVKxk+fDiLFi3KeJ69996bLl268OGHH3LPPffQv39/xowZw2effUbfvn05+eSTuemmm+jXrx9jx47l008/5aCDDmL58uXsvruqDhGRTFRTihSQrVu3smTJEhYuXEiHDh2oq6tr8PqAAQMAKCsrY+XKlQAsXryYnj17snr1atydnj17sm3btu0LODfl73//Oxs3bmT//fdn8eLFXHTRRQDstddedO3alWXLlrF48WK6d+/O5MmTgWAB6/Xr19OzZ88cf3MRkbZHSZZIAXn88cd5+umnee655wB2WsvQ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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1,2,\n", " squeeze=False,\n", " figsize=(10,4))\n", "# get the list of unique scoretypes in this game\n", "stypes = cur.execute('''SELECT DISTINCT scoretype FROM scores WHERE gameID={0:d} ORDER BY scoretype'''.format(gameID)).fetchall()\n", "\n", "for i, playerID in enumerate(playerIDs):\n", " rec = cur.execute('''SELECT points,ingame,scoretype FROM scores WHERE gameID={0:d} and playerID={1:d}'''.format(gameID, playerID[0])).fetchall()\n", " scores = np.array(rec, dtype=[('points', float), ('ingame', float), ('scoretype', 'S30')])\n", " pstypes, Ntypes = np.unique(scores['scoretype'], return_counts=True)\n", " ax[0][0].hist(scores['scoretype'],\n", " color=colors[i],\n", " alpha=0.3,\n", " label=players[playerID[0]])\n", " for stype in stypes:\n", " ax[0][1].bar(stype,\n", " np.sum(scores['points'][scores['scoretype']==str.encode(stype[0])]),\n", " width=0.4,\n", " alpha=0.3,\n", " color=colors[i])\n", "ax[0][0].set_xlabel('Score type')\n", "ax[0][1].set_xlabel('Score type')\n", "ax[0][0].set_ylabel('N scores')\n", "ax[0][1].set_ylabel('N points')\n", "ax[0][0].minorticks_on()\n", "ax[0][1].minorticks_on()\n", "ax[0][0].tick_params(axis='x', which='minor', bottom=False, top=False)\n", "ax[0][1].tick_params(axis='x', which='minor', bottom=False, top=False)\n", "ax[0][0].legend(loc='best')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Distribution of time per turn" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Turn time for John Smith: median=11s, mean=13s\n", "Turn time for Jane Doe: median=14s, mean=17s\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEBCAYAAAB2RW6SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xl8VNX5+PHPyb6RhRAIEEjCDiKoBFTAfbeipbXaau3Xahur1oprxVLFVq0LRa1VamrVam2tP6gLICriBiJiAFlkC1sgbFlICAnZZub8/jiTmGQmkMncmclNnvfrNa/JnMx57rmZ5MmdM+c+V2mtEUII0XWFhXoAQgghAksSvRBCdHGS6IUQoouTRC+EEF2cJHohhOjiJNELIUQXFxHqAXiTkJCgR4wY0e7nHz58mKSkJJ+2EYw+HdlGSUkJaWlpLdrq6819VFT7t7Nli7kfPrzVk131VFZWkpjcy6dxeWyj0r2BxNYbaHtMx+Nt330el8XPD1Yf2ffA7ntH+gTr5+Xr/h9rG6tWrSrVWnsG01p3ultcXJz2xS9/+Uufnh+sPh3Zxrhx4zzazjrL3HzZTpt9Fp+lNz/X1+dxeWxj8Vnm5sOYjsfbvh9PMF6TYPSRfQ/sNjrSJ1g/L1/3/1jbAPK1l5zaKY/ofTVlypRO2acj2/Bmxgzft9Nmn9EzOHTkS5/H4LGN0ccelFX7fjzBeE2C1SfQ2+jO+96RPl1p35XuhGfGxsfH6+rq6lAPIyRycnLIz88P9TBCQvZd9r07snL/lVKrtNY5rds75YexvXr5Nn/cleTm5nq07dhhbr745htz81C1w9z8Vf6NuVnI2753F7Lv3Vcw9r9THtHn5OTo7vwfvrWzzzb3n35qQZ+P3N8434dg3lgVR3QJDQ0NFBUVUVtbG+qhdAsxMTFkZGQQGRnZor2tI/ouMUff1T30kIXBTrQymBBGUVERPXr0ICsrC6VUqIfTpWmtKSsro6ioiOzs7Hb1kURvA2edZWGwPlYGE8Kora2VJB8kSilSU1MpKSlpd59OOUcvWtqy5bt18X6r3PLdGnghLCRJPnh8/VnLEb0N3HSTufdljr5NK93BZG5dBND8+dbGO96Kwo8//pi//OUvbN26lccee4zLL7/c4znLli3jN7/5DbNnz+bsxg+xfLR06VL+/ve/M3jwYMrLyykoKOCdd94hIqJ9qXTJkiUsWrSIWbNmAfD0008zbdo0AF5//XV+/etfU15e3qGxHYsk+k7G2x/IpZe2/b22tNUnxfkoAOVeYvm0PHfsoz48WYjAOvfcc9m9ezcLFizwmuQBJk+ezJgxY/zazh133MFLL73UFOeWW27B5XK1u/95553Hueee2/S4eaK/9tpr+d3vfufX+Noiid4GRo60rk95+ET/BtMozaI4QgRAXl4eW7duJTk5mZKSEmbPnk14eDgAH374IfPmzWP16tW8/vrrZGVlcfXVV7Nr1y4uvvhi8vPzycnJ4SEvqyDS09OZPXs2M2bMYMiQITz//PMAzJ8/nzvuuIMf//jHHDhwgK1btzJt2jQWL17M2rVr+c9//kNmZiZ33nknq1ev5tNPPyUvL4+KigpmzpzJaaedxsUXXwzACy+8wIoVKyguLubdd99tGrc/ZI7eBgoLzc0XmzaZW2s9nBvo4dzg/6BKlpubEJ3Mpk2b+Otf/8qsWbOYMWMG9fX1/OMf/2j6fnZ2Ns8++yxTp05l3rx5ADz++OPs27ePBx54gHfffZcXX3zRa+xXX32VtLQ0LrjgAoYPH84zzzwDmLNVJ0+eTHZ2Ni+++CKnnHIKa9asYc6cOfzoRz9i7ty5APzmN79pipWbm0tycjIzZ85sSvJg3p28/PLLKKX4xuvJML6TRG8DL7xgbr547TVza2103a8ZXfdr/we19n5zE6KT2bBhA1lZWU2PhwwZwtq1a1s8BnNi5pEjR5raBw0aRHh4OOHh4R7r0xv17NmTJ598kp07d/L6668ze/ZsFixY0PT9wYMHA5CcnNz0dUpKSovtHE9b4/OHJHob+PnPzc0KG6OfZGP0k9YEE6ITOvHEE9m5c2fT44KCAk466aSmx22tWGnPSpYLLriAxpNMc3JyGDNmDPWN5WU7ICzMpOA1a9b4NA5fyRy9DQwdal2sw+HjrQsmRCejlGLEiBHcdtttTJs2jaSkJKKiorjhhhtYuXIl69at47XXXmP48OHMnz+f8vJytm3bxiuvvEJhYSFLliyhsrKSw4cP89JLL3HDDTe0iD9y5EhuuOEGMjMzOXToENnZ2VxxxRUtYvfr14/PP/+c9evXM3HixKbtbN26lRdffJHCwkIWLVrEJZdcwrhx45g+fTqxsbFs27atabsnnXRSU7xJkya1+Q6j3T8XKYHQuXhbWdNY52bQoPbHud89q/Joq8UxiU4z51cZfhKt+bTqRkogiGY2bdrEyI6sGrDARx99xPnnn8/TTz/N9u3befbZZ0MyjmDz9jOXEgg21vi5UOuk3REn1JmlXF/Gfep/MCE6geeee44lS5awceNGHn/88VAPp1OSRG8Dv/iFdX2+jX7av8E0GmdRHCH89NZbb4V6CJ2eJHob8GXK5nh9vE3ZdEiKRXGEEAEnq25soKDA3HzRVj36JOfXJDm/9n9QBz4yNyFEpxeQRK+USldKvaiU8sgoSqlrlVJaKZUQiG13RS+/bG6+ePNNc2ttVN09jKq7x/9BbXjY3IQQnV6gpm4mA+8ALd7fK6VGAqMCtM0uq7GomRU2RP/VumBCCFsISKLXWs9VSp3dvE0pFQfcC9wEyCmVPsjMtC7WkfDR1gUToi1FFpevzDj22t/2VK/015tvvsm9997LxIkTGTp0KKWlpYwePZrc3FxL6tEEUjDn6B8B/qi1Pu5pZCUlJeTk5DTd8vLygjC8zqutujUdkeJcTopTatSIruXcc8/l+9//PqNGjQpIkge46qqryMrK4pprruGhhx7iueeeo7CwsKn6ZKjk5eU15UrA6wW3g7LqRik1AEgBrmp2eu+dSqn3tNYeZ0alpaV166vCt9ZYs8aKdfQj6sybKVlHL7qyqVOnMn78eIqKipg0aRLXXnttU4XJq666isrKSlavXs2///1vsrKy2Lt3L9OnT2f06NFs27aNm266iXHjxh13Ow888AApKSk86v7jvPvuuxk0aBCFhYVcdNFFXHHFFVRWVjJt2jSGDh1KUVERl19+ORdddJFl+5qbm9t0gXGlVKm35wQl0Wut9wDXNz5WSv0JmK21rgrG9u3ullus67MuxsfqaG2ZYFEcIQLg+uuv54orrsDpdDJy5EiuvfZapkyZwrx588jMzOSmm27iySefZN68edx1113cfffdTJkyhWuuuYZdu3YxderUFvVn2hIXF0dycjL79+/n5ZdfZujQodx9993U1dUxePBgzjzzTJ544gmGDBnC9OnTqampYcSIEWzfvr3dFyuxQkC2pJQ6C7gO6KuUmgH8WWtdo5RKw8zRA9yrlHpBa703EGPoSjIyrOtTHTbcv8E0SrQojhAWczgcbNy4kdWrVxMbG+txbdVhw4YBZuZg165dAKxbt47evXuze/dutNb07t0bl8vVVHSsLUePHqWiooK+ffuybt06brzxRgCio6NJSUlh27ZtrFu3jtTUVB577DHAFF07dOgQvXv3tnjP2xaoD2M/Az7z0l4CPOy+iXba4C4fP9qHz1FXrjT3Eya0bE91mJelLMLPi4Q3fth2nA/JhAi2hQsXsnjxYj7++GMAj9o33qpDjh07lvPOO4/LL78crTX9+/c/bpIHeOSRR/jFL35Bjx49GDt2LNu3bwegrq6O8vJyhg4dytixY0lPT2+qRf/aa6+Rmprq7276RM6MtYF//9vc+zJH//bb5r51oh9W/yAAX0Z86t+gNv/Z3EuiF52IUorTTz+dp556ittuu42MjAyqq6t56aWXGD16dJvVK2fNmsUDDzzA+vXrOXDgAOecc45H7Hnz5lFYWMh///tf1qxZQ3FxMcOHD2+6EtX06dO58847efjhh9m9ezfPPfccycnJTJ8+nXvvvZeHH36Yw4cPN9W9D+rPRapXdi7eqlceOGDu09PbH6et6pVxLlMK82iYZ40EqV4pOkqqVwafVK/sYnxJ8MfjLcELYWdSvfL4JNHbQGPNmpMsqCPWy2Hq05RGnO9/MCE6AaleeXyS6G2gsWaNFYl+aL35HFwSvRDdhyR6G7jjDuv6rInxcsXwjjjdojiiy9BaB+R6p8KTr5+tSqK3gbQ06/rUhg3wbzCN4i2KI7qEmJgYysrKSE1NlWQfYFprysrKiImJaXcfSfQ2sGqVuW/HGdlNli4192ec0bI9zfE+ACURF/s3qML/mvvMq/2LI7qEjIwMioqKPE5OEoERExNDhg9nUkqit4F588y9L4l+0SJz3zrRD6k3Z+f5negL5ph7SfQCiIyMJDs7O9TDEG2QRN+Kt3XsoXaPBdcJabQ65g3rggkhbEESvQ2kpFgXqy7MwkX5QghbkGvG2sDKld/VrvFXH8d8+jg64dsWIUTAyBG9DbRVt6YjBtWbGjUHI6RGjRDdhSR6G7jvPuv6rIqZ699gGk22KI4QIuAk0dtAYqJ1ferDvF5pzHcxFsURQgSczNHbwPLl5uaLJUvMrbX0hv+R3vA//we14xVzE0J0enJEbwMLFpj7iRPb36cxyZ93Xsv27Ia/AHAg8gf+DaoxyQ+63r84QoiAk0RvA7/7nXWxvo59x7pgQghbkERvA/Hx1sVyqCTrggkhbCFgiV4plY65NuxYrfV4d9tvgXTgADAOeEBrvTlQY+gq2qpb0xH9GkyNmn2RUrpAiO4ikEf0k4F3gOZV1BOAO7XWWil1NfAkIAu6j6OtujUdkdlgatRIohei+whYotdaz1VKnd2q7ffNHoYBVYHaflfy4IPW9VkZ+55/g2l0tkVxhBABF5I5eqVUFPB/wK2h2L7dREdb18ep4vwbTKMIi+IIIQIu6IneneTnAL/TWm/39pySkhJycr67kHlubi65ublBGmFoeatDs+iz/gBcctbedseZuygTgCsvKWzRnur4BICyiHO89PJhFm3r8+Z+2C3t7yOEsFxeXh55eXmND72eyRjURK+UigWeB2Zprb9VSv1Qaz2v9fPS0tLIz88P5tA6tXc/Ggj4luiXLO8HeCb6NOdioK1E74Pd7gvZSqIXIqSaHwgrpUq9PSeQq27OAq4D+iqlZgB/Bl4HRgPZ7suNxQMeiV609OyDKyyLtSXqD5bFEkLYQyA/jP0M+KxVs5+nY3ZPERG+XQj4WLSSUyeE6G6k1o0NLPg4gwUft//6kMfSy7GEXg4vRXCEEF2WJHobWPjJABZ+MsCSWL2cS+jllEQvRHci7+NtYM4fv7Ssz+boR/0djnH+p9bEEUIEnBzRCyFEFyeJ3gbeXjyQtxcP9KnPv94exL/eHuTRnub4gDTHB/4PatMscxNCdHqS6G3goy/68dEX/Xzq88WqPnyxqo9He0/nMno6l/k/qL0LzE0I0enJHL0N/HWmhevoo/9oWSwhhD3IEb0QQnRxkuhtYO6izKbaNf7q7XiP3g6pPClEdyKJ3gaW5aezLD/dpz7RUS6io1we7cnOlSQ7V/o/qPBYcxNCdHpKa+tOr7dKTk6ODlVRs/mexSODylv1ymCZMFWuASOEnSmlVmmtc1q3yxG9EEJ0cZLobeCNBdm8sSDbpz7/eHMo/3hzqEd7H8e79HG86/+g1v/R3IQQnZ4kehvIX9eL/HVeryfQdp/1vchf79kn0bmOROc6/wd1cIm5CSE6PVlHbwOz7v/aslgF0TMsiyWEsAc5ohdCiC5OEr0NtFW3piPSG94iveEtS2IJIexBpm5sYP3Wnu6vdrS7T2KPBq/tCa7NFowIiE61Jo4QIuAk0dvA4/f6fk5BW322RU/3dzjGGXKpXyHsQqZuhBCiiwtYoldKpSulXlRKfd2sLUYp9Vel1HSl1EtKqWGB2n5X8s//DeGf/xviU5/n/jWC5/41wqO9b8Nc+jbM9X9Q30w3NyFEpxfIqZvJwDvASc3apgG7tdZPKKVOBP4BnBHAMXQJW3cm+txnw5YUr+1xeqe/wzFKfb+8oRAiNAKW6LXWc5VSZ7dq/h5wv/v765VSY5VSiVrrykCNoyt45K7VlsXaHnWPZbGEEPYQ7Dn63sCRZo8r3W0tlJSUkJOT03TLy8sL2gCFEMJO8vLymnIl4PUU+mCvuikGejR7nOhuayEtLY1QVa/sjBpr1tx4VYHfsfo1vAHAvsgf+x1LCBF6ubm55ObmAqCUKvX2nGAn+oXA6cBS9xz9Wpm2Ob7d+xJ87tM7tdZre4ze6+9wjLgMa+IIIQIuYPXolVJnAT8DLgbmAH92f2sWsB8YAjyqtd7auq/Uow8NqUcvhL21VY8+kB/GfgZ85uVbtwZqm0IIITzJCVM28MJ/hvPCf4b71Gf2P05g9j9O8Gjv3/A6/Rte939Qq6aZmxCi05MSCDZwsDTG5z4Fu7yvvY/SXj+r8V35N9bEEUIEnCR6G3jgtrWWxdoZdbtlsYQQ9iBTN0II0cVJoreBturWdERGwz/JaPinJbGEEPYgUzc2cPhIlM99BvSr9toeoY94bfdZD6lHJ4Rd+JTolVInARu01o4AjUd4cf/Nvl/Mu60+u6J+7e9wjFOlLIUQdnHcRK+UegN4GnPi0wXAeuBXAR6XEEIIi7Rnjj5fa70CuBQ4C9gd2CGJ1p55ZRTPvDLKpz6PzhnDo3PGeLQPaHiJAQ0v+T+or3LNTQjR6bVn6iZbKXUd8I3W2qGUig30oEIplCUI2lJX7/tn5nv2xXttD9P1/g7HOOJRucJ/RSH+2WdICQjRNbUn0X+EqVlzp1LqMmSlTtDdm7vBsliFUTLrJkR3c9xEr7V+C3jL/XCnUmpfYIckhBDCSu35MPYU4P/4ro78GMCjOpoInMaaNXfe+K3fsQbW/x2A3VG/9DuWEMIe2jN181dgNlDifnxd4IYjrDI0K8Bl/lNOOv5zhBCdQnsS/Qqt9dzGB0qpzQEcj/CiI0fybfWx7Eh+3NPWxBFCBFx7En2UUuoRYCuggSnAjwI6KiGEEJZpzwqaSUA9kAVkAz0DOSDh6Ym80TyRN9qnPg8+fTIPPn2yR3tm/d/IrP+b/4Na/lNzE0J0eu05or8Z2KS1PgyglBoa2CGJ1qKjXD73KS7zXsPepXyvm+PV0SJr4gghAq49if514HzgMIDWuiCgIxIebr9+o2Wx9kTeYFksIYQ9tGfqZq7WemfjA6XUOQEcjxBCCIu1twTCG8Am9+MzgE86ukGl1D2Y+f5SYChwo9a6pqPxuoPGmjUdqWLZWlb9XwELq1gKITq99iT6vsCLzR6f2NGNKaXSgelAL621Syn1DvADzPSQaENSD9/r04weXu613aF6eG33Wa/TrYkjhAi49iT6n2uttzU+UEot8mN7RzEreBKBCiAB8P90zy7u1p/6fupCW32KIv/P3+EYJ/3JmjhCiIBrT6KvV0oNbPb4V8D9HdmY1rrSPXXzX6XUfqAI2Nb6eSUlJeTkfFdlITc3l9xcKYkrhBCt5eXlkZfXdCGgXt6eo7TWxwyilNoJ7AQUMACo1Fqf0pEBua9Q9Spwirvk8Z8Bp9b63ubPy8nJ0fn5+R3ZhN9WvtX5yhT/4dmxADxw29p29/ntE+Yf5eP3tvw5Ztc/A8DOqNs9+kyY6kOZ3qU/NPdnzGt/n+ORMsVC+EUptUpr7VGLrD1H9Lla68XNAt3kxzj6A4eaXYpwPzDwGM8XQJ9etT73qTwS6bW9Xnn9h++7ujJr4gghAq49ZYoXt2ry7VJHLb0PXOo+kq8ARgPT/IjXLdz0ky2Wxdobea1lsYQQ9tCeMsU7MTVulLvp1Y5uTGvtBG7taH8hhBC+a8/UzWNa6xcCPhLRpsaaNQ9NW+N3rEH1fwZgR9RdfscSQthDexJ987NiTwIu01o/HLghidYG9qvyuU/OiaVe22tVf3+HY/Q5z5o4QoiAa0+iPw34EEBr/Y1SSkoUB9mNV/leXqitPvsif+zvcIwTf29NHCFEwLWZ6JVSt2M+KE1SSl3vbnYBq4IwLiGEEBZpM9FrrZ8BnlFK/VJr/fcgjkm08rs/m9MWHrlrdbv7TPvjqQA8/fuvWrQPrn8SgO1R9/g3qE8uMffn+HOitBAiGNqzvFKSfIgNy/b9+q919d4Lkx5V2f4Ox3BKHToh7KI9c/QixP7vBx5VIjpsf+SVlsUSQthDe+rRCyGEsLE2E71SyreLlIqA+e0TOU21a/w1pO5PDKmTypNCdCfHmrr5g1LqbW/f0Fp3+OxY4bsThx3yuc+kcQe9tleFjWizz3wfaooNqr8MgB0W1iGb4nktcyGEBY6V6A8Du/iu9EEK8BfgY/wogyB899Pv77Csz4HIqf4OB4AdUXdbEkcIEXjHSvQztNZ7AZRSY4E84Cmt9VNBGZkQQghLHGsdfWOSvw54GHOlqY+DNTDxnbsfHQ/ArPu/bnefm39vLvU3549ftmgfWmeqVxREz/BrTKcfPRuAL+M+9SuOECLwjnVmbDjwDDAROEtrvcvdHisX8w6unDHe69Z0RGX4GMtiCSHs4VhTN58DDuAawOW+nKDClBm+9xj9hMV+fNnO4z+pnQ5GXG5ZLCGEPRwr0dcDnwJX8d0HsgAduoygEEKI0DhWon9Aa720daNSalIAxyO8aKtuTUcMq5sJwNbomX7HEkLYw7E+jPVI8u72LwI3HOHN5JwDPvc5b+I+r+0V4RP8HQ4A+yKusiSOECLwpNaNDVx5SaFlfYojLvV3OAAURt1iSRwhROCFJNErpYYDPwFqgLOAmVrrlaEYS1dVWxcOQEy0MyDxw/VRAJwqLiDxhRDWCXqidy/bnA1M0Vq7lFKvYlb3iDb8euZpAPx15op297njYTNF03od/fA6c2WoLdF/9GtME2rMOwNZRy9E5xeKI/rxmFU8tyml4oAyQGreH8P5k7zPt3fEofDJlsUSQthDKBJ9JnA68BOt9WGl1L8wSzlfaXxCSUkJOTnfVWvMzc0lNzc32OPsNL5/wW7LYpVEXGRZLCFE6OXl5ZGXl9f4sJe354Qi0VcCm7XWh92PlwFn0yzRp6WlkZ+fH/yRCSGEzTQ/EFZKeT2NPhQXHvkKSHXP1YM5wt8agnHYxs2/P72pdo2/RtTdz4i6+y2JJYSwh6Af0WutDymlfgs8rZQqAdKAPwR7HHbyvXP2WNanNPw8f4cDwJ7I6y2JI4QIvJAsr9RavwW8FYpt29Fl5xZZ1qc0wppEXySJXgjbkGvG2oDDoXA41PGf2ExFZRQVlVEe7Uo7UNr/1axRrlKiXNZV1RRCBI6cGWsDtz1k1tG3XhN/LNOfHOe1z/D6BwDYHP2oX2MaV3slIOvohbADSfQ2cPn5Fi6vDL/AslhCCHuQRG8Dl5y117JYZRHnWBZLCGEPMkdvA7V14U21a/wVpusI03WWxBJC2IMc0dtAW3VrOmJY/UOA/3P0Qgj7kERvAz+4yPcyxW31KQ6/xN/hAFAYebMlcYQQgSeJ3gYumOx7UbO2+hyKOMPf4QCwL/JqS+IIIQJP5uhtoKo6gqpq3/4nHyyN4WBpjEd7uK4mXFf7PaYY1x5iXL6fsSuECD45oreBex4bD/g2Rz/zmZO99hla/wjg/xz9ybXXAbKOXgg7kERvA1d9b6dlsQ5GXGZZLCGEPUiit4FzTvP94uBtKQ+faFksIYQ9yBy9DbRVt6YjInQlEbrSklhCCHuQRG8D058c11S7xl9D6h9jSP1jlsQSQtiDTN3YwDWX77Csz4GI7/s7HAB2RN1lSRwhROBJoreBM8YftKxPRfgEf4cDwMGIKZbEEUIEnkzd2EBZeTRl5dE+9SncG0/h3niP9khdTqQu93tM8a4txLu2+B1HCBF4kuhtYMbsU5gx+xSf+jz2tzE89rcxHu2D659kcP2Tfo9pTO1NjKm9ye84QojAk6kbG/jZ1G2Wxdof8UPLYgkh7EESvQ2cfkqJZbEOh1uzekcIYR8hmbpRSsUqpdYppWaFYvt201bdmo6IcpUQ5bLuH4cQovML1Rz9w8CaEG3bdmY+c3JT7Rp/DWp4ikENT1kSSwhhD0GfulFKXQd8AYwBEoK9fTv6+ZUFlvXZF3GVv8MBoCBqhiVxhBCBF9REr5QaBYzUWt+vlPJcEuJWUlJCTk5O0+Pc3Fxyc3ODMcROacLYUsv6VIaf5O9wACiNON+SOM2t/NrykD6ZwPzQbTxDzksQHZOXl0deXl7jw17enhPsI/qpQK1S6j5gMhCllJqmtX66+ZPS0tLIz88P8tA6r70H4gDon3603X227kwEYFh2y7o20S5TIK0uLN2vMSU6vwGs+8chhOiY5gfCSimvR3hBTfRa60cav1ZKxQAJrZO88PTwc2MB3+rRP/XSCV77ZDf8BfC/Hv0JddMAqUcvhB2EZHmlUuqHwJmYI/qfaK3/E4px2MUvf7zVslh7I66xLJYQwh5Ckui11vOAeaHYth2dckKZZbGOhI+2LJYQwh6kBIINtFW3piNiXEXEuIosiSWEsAdJ9DbQVt2ajshqeJ6shuctiSWEsAcpgWADN1+72bI+RRHX+TscwP8Pc4UQwSOJ3gbGjPC9rHBbfarCR/o7HECuPSuEncjUjQ1sL+zB9sIePvVZtzmFdZtTPNpjXYXEugr9HlOKczkpzuV+xxFCBJ4kehuY9eJoZr3o22qZOa+PYM7rIzzaMxteILPhBb/HNKLufkbU3e93HCFE4MnUjQ3c9rONlsXaE/lzy2IJIexBEr0NjBp62LJY1WFDLYslhLAHmbqxga07E5tq1/grzrWDONcOS2IJIexBjuhtoK26NR0xsOFFwPvyyD6O9ldvjNJlPvcRQoSGJHobuOOGby3rszvyF/4Ox9I4QojAk0RvA61LDfvT52jYIH+HY2kcIUTgyRy9DWwsSGJjQZJPfVau7cXKtZ7XIIh3FRDv8v2KVa0lOr9pqkkvhOjc5IjeBp59dRTg2xz9y3PN6prWV5oa0PAy4H8Jg36ONwG58IgQdiCJ3gbu/sUGy2JnDBhgAAAaoklEQVQVRt5kWSwhhD1IoreBwZlHLItVE5ZpWSwhhD3IHL0NtFW3piMSnJtIcG6yJJYQwh4k0dtAW3VrOiLD8RoZjtcsiSWEsAeZurGB+361zrI+uyJv8Xc4lsYRQgSeJHobyOxfbVmf2rAMf4djaRwhROAFPdErpQYDDwOrgQygTGv9h2CPw05Wf5sK+HaR8KVf9wHgjPEHW7T3cJoVPP5eJDzZuRKAivAJfsURQgReKI7oewJvaK3fAVBKbVRKLdRarwrBWGzh728MA3xbR//vd82Zq60TfX/HvwHYHO7fOvp0x9uAJHoh7CDoiV5r/XWrpjDA97mJbmTGrWsti7Uz8jeWxRJC2ENI5+iVUlOBD7TWLa5kXVJSQk5OTtPj3NxccnNzgz28TqN/+lHLYtWFpVsWSwgRenl5eeTl5TU+9Kx7QggTvVLqHOAcYFrr76WlpZGfnx/8QXVSjTVrWpcz6IjG+jRSukCIrqH5gbBSymuSCEmiV0p9DzgDuB3oq5TK1Fr7X2y9i2qrbk1HSI0aIbqfUKy6GQf8F8gHPgHigecASfRtmHn7Gsv67Ii8w9/hWBpHCBF4ofgwdhWQEOzt2lmfXrWW9akPS/N3OJbGEUIEnpRAsIEvV6fx5WrfEuviZf1YvKyfR3uScxVJTv9XsvZ0LKWnY6nfcYQQgSdnxtrAq28NAeD0U0ra3ed/H5gqlRdM3teiva9jHgCHw8f5NabezkUAHIo4w684QojAk0RvAw/fudqyWNuj7rEslhDCHiTR20BqSp1lsRqUNeWOhRD2IXP0NrD06z5NtWv8lexc2VSnRgjRPcgRvQ20VbemI6RGjRDdjyR6G/jTPb6vkmmrz7ao+/wdjqVxhBCBJ4neBpIT6y3r41CJ/g7H0jhCiMDrnIm+/jAUzQ/1KDqNT1aYQmTnnHag3X0WfGwuDHLZuUUt2lOcywEoD5/o15h6OZYAUBpxnl9xOpOVreuqBtPXof19nzA+pJsPrYwpoR5BwHXORC9aeHNhNuBbol/4yQDAM9H3cSwALEj0zq6X6IXoqiTR28CT91l3qFkQ9TvLYgkh7KF7Lq90VIHD81onRyrrKD1QhcupW7S7nE6qD1fhaHB49Nm5E/bt82jmaOVRDu0vweV0tWivqTzKvm/XUFV+2KPPru1HObDPc818bWUJ5UW7cDmcLdob6hoo21dMQ11Dq/FqGhpcOFvtB8ChA+UU79ztOd4qJwWbqqipabkNraG6GhoaPLqAywF1hzyaHQ6orgJXy1AmVpX3WLVHa6mpqvForztaR9m+Yo99dzldVFdW4aj3EqxqN1QXebY7G6ChygykZTCoKQaHl/MVHDXg9NLeVqxjqKmBOqtOiWg46n1cbXA6vb8mHeJqgPoK0FYEs5CrHhoqANdxn9rddK8j+qNFsG0OVBaYx0mjYOjNHKlPZs3clxg34FPi9+ZQvjOOva7zGTNpOLvXriG54XMiVAMNCooaxjEw50wWfxTOymbL0ZWCy6fAoIGVOApeIyn2EDGAqzic3fVnkjV+MjVrniQmopa+AEXQsDsCNeJuln9azKDY90nvUYaq1GxaP5jIzIuJi6oi9fArrN58FgD9616moHw8gydfyL6v3qRfQgEpAKVQVDWUfqdexZZvikip+YCw2gEoBVs+eos+J19MQ/k2Uo++TVaPMlBwaH0qpXVDSBl7NSvmL+fkzBX0Axo2hLOicDLnXDmeHdvhw8Vw5IjJZyNGwEUXQbRzP9TtAe2Cfc9BWBT0uwxXjxP47HNY5V7wExkJZ54JJ58MW7fCRx+Zfxpaw+jRcMEFUHO4gqqt75EauwcF7K/tS3TWJfTomUzFmn+SGr+fFA26NIzC6pPJPP1Sir7dSEL1x0RH1OJQLvbWjaX/uPOIKP8Kij9u+Zr3OR965sDBJVCxDgiDiFjocy4kjYS9C6H8G5qSQ2x/yLoO6sth/yKodU+XxWVCv0sgPBb2fwiV35pYkQlmG4lD2/y1278P3v8ASkrMvg/KhksuhYSOlPar3gP7P4D6Q4CGhCFmXBFxXp+uNSxfDitWmK/Dw2DiRJhwqvmd9Y0Ldr0B+xaah2GRkPlj6HtxB3bEQq4G2PlPOPARqDCISIDsn0Ha5NCOqxNR2ocjkmDJGTNU578329qgzhr4+mYY+CNIvxDQUPQuHFjMik3DCMNBvzNvouhgEptX7WJg2FsU1Z5G3+hV1Pf5IWkD+1FZWkF1wbscrh/A//v8HHr2hBtugKoqePllc7R2xyVP4XBFQOY1JPZKYfeqZQyM+Yw6RwwxkbXsrRlDxoQrKFq1hP5Ry2lwRtDgiGJF4UVMvmwk5WUOCr/+nP4pe0hP2k+DI4pb3/gvUVER3HfRnWSmbOHgkX6kxhdTHH0l/UcMZe/mAnrXzeXAkWx6xhaxveZ7PP/+DTidLm4/50ESosrITN2FyxXG8OwywiOjWL2xL3FRlWw7OJTYqKOURH2fk0/ryYpPixkcNY9viiaybs9YLr8chgyB2lpYvBjqax1cOepJRmQUQHQam6MeNgmxYh1fHfoVm3f24oorIDkZ9u+HuXPhlFNg5Vfw/amQlQVHq03iCw9zcHb/F6hQY+k/5lRUmGLvhjX0dH5BnSOOuMhKqtOuIW1gPwrXrGJA+PvsqRpDz6jtHO35A3pnDeBoZRXlGxeiwqLpn7ABwuNh0C/Ma77jRXBWQ+Ioc/TZ71KIiIfq3VD0P0gYBBUboN/3oOdJ5kBg1xsQlWTe9aWdCSknmX9opV9C5QaI7g2EQ9+LzD+Mqh1Q9A5k/QRi+3r82lVXwQt5cP555p9bgwOWLYMdO+DGGyHMl/fUdRVmn/peYv5JuRrg4CdQe9AkNi+Z+6sVsH4D/GAq9Ew1/2zmzYNTTzX/gBu168PYwjegfA2MuBNi+ph93/Q4ZF4Lvc/0YUcsVjAH6kph2K0QlQKHN8GmJ8w4k8ccv38X+jBWKbVKa53Tur37TN0UL4XE4eaPOizSHIUOvJJaVzJj+n/F0Mt+Q0Z2MmHhilETsik4fAYDYr/kSMIFpA00VSATeyUTP+wKBiasIiLcwa23QmwspKXBvffCgNRC4qKqiB2dS3KfVMLCw8iacCYHqgYRE1lLaXU/MiZcAUDGuPPYW5tDZLiDzftHcN4PRxMdHU56v2jGX3Y+yXEVhIe5CDthGs8/vIanH/iarDOv4khtD/r02Md+LqH/CHMU2X/EUPZzKf0TC9hedjJjJo/k6d+v5NmZ+Yw49yL6p5hpDDXqPnb0+BMFMQ8RP+52tFYM6VPAXqZw8mk9ATjt7N5sKLuYE/t9xamnwtChJn/ExsKll0LviK9wAVuT5rA15g8QHgkZl+OKSKFnw5KmJA/Qty9ceKE5mpw0GbKzTaz4BLjsMtCVBdQ4epA1fjKR0ZFEREaQefJ4KuvTSY0/SE3fnzX97DNPHsee6pPpH7+e8siz6TNoICpMEZ/cg9QxV9A3bgMaYOSdEJ1obiPvNAOp3AT9LzdH30pBQqZJ4hUbIHW8SfIAcRmQda05io/NgNRxEBZu9rHPmaCioGo79L8MIuNMrB6DodfpUOb9c5Rv1sLw4TBmrAkVHQ3nnmuOrnd7zqAdW8Uak7iSTzBHruHR0PdCaDgCNfu9dlnxFUyZYpI8mN/VSy81r4lPtBP2LoDht5skD+Yf5eBc2PuOj8Es5KiC4s/MuKJ6Asq8U8/6KeyVlXuNuk+irzsI8dkezRW1adTUx5GSGtuiPSa5D9ERdSSmtbzGamJqEgDJPTzrvfdL3k+9M5rouOgW7fURZqmjI6XlSpd+J11ohuZs+R4+LFzhcIXjcoURHRNJTLSTmGgzH1pRY/7I+gwb2aJP3xGjUApc0eb7jX0iIsIBk1jCIsNxqWhcyoyv1hEDwPhJLS8zOeiEdJLiKujTqupCRARkpBbjUIkt4gC4ItNIij3clOQbpaebdzqtY0VHQ2piBVUOz9IODuLRGlL79W7RHp48iLAwJ7E9W/aJTYgFFJpIj1hNs5MRMS2bY/sALogf3LI9zn1UHtnDM1RkIoTFmsTfOlaD52cuABUVnvuuFPTuDYe9d2lbXQXEtrrmrwqDmN7uuemWXE6orDTJvbk+feCw59OPzVlr5sBbv2tJyIbaYh+DWai+wrwDi2x1XkdCtnmnI4DulOgTBsOh1UCzqSrtpFfMdmIjj7Jjc8vL9NWXbaeqtgfle7a3aC/ZvY96ZyRlFbEtPtg6ehS2HRxMVEQd5QdbxkpwbTH3Rz5o0V62+jUAUmJb/kJWlDcQHV5PWJiL4qIyFn3Wn0Wf9Qegd489aA371y1v0WfvN8twusKIbjDjnbsok7mLMjlyuA7QKAVVh0pJdXxCquMTAGIia9Ba8dl7u1rE2rZmOwcO92V7y13n6FHYuGcwkbqC3vXz6e14z3zD5SK8fjfFVX09Ppjetg169MAjVmUlFJX2JTVqJy7ndz9I7dLEuC97WbRpS8tO5d/Q4Iii+kDLYBXFZWitUDSYTx0bORsAB6BMkmzuyHbzzq6iVWXQio3mvvZgyw9aXU6oLTFTgA1VnrFivF90PT3d/AyaczigsNB8zyexfaGy1Q/S2QBH93jdfli4Seo7drRs37Ed0j1nmY4tIg6iks27o+bK15i/rVCJ6W1ej5pWv3iHVod2XJ1M+MyZM0M9Bg95c56dmXvtRdYGje1rPsSq3GzeetYfgu0vEhYezmebz6Jn5b9YX5DOgeJodqxazZCe+RRHXky660P2HYxGRcRSWlhIXPkCStWZrN/Wj+XLzQqS9evhrbegpj6eEwYUkFCzjKJ9EdRU11G1dSFp8fs4dLQPybGHOFq0iuIDDeiid0mJLaayNonYyBo2rKlgb3Ei2zaWE1X8HsWVfUiMqSSx/ise+dfVbNicwHm97icu6ii7Kk8mM+Frdu+ooq4hmrLNXzAwbiWF1afTO6aArRurePWjC9lcEMvElFnsPzyIXgn7iTqST7/Iz4mu20jptnWEKU3+7jMZk/4py77qQVV1FBuWb+a0rI9YV3oxG7clU19nEvXBgzB/AfTs14fByfkMiF5CrN5LaU02FM1DNVRRHHct770fSVKSOfr/9lv45BO49BJYthRcLvMB5P598O58yB6eRHLYFir3FlCnU6itOkrpt0uICquivC6DvuFL2V3oorZOUbF5Mf0StrLXeT5pajn79oehIuM5VLSX8AMLKGUCyRG7oPQLs1LmyDbYMxfQZpqm+BOIdL/dKF9jplrSzoBDK00CD4837QcWmzl9h3s6JDIZGirN705YNCSOgJKlJulpl0ko5Wug/xQIj/H4tevVC774AsrKICkJysvhvfcgJQUm+FpuKDoVDn5qxhOZZOal9y2E2H7fTT+1kpAACxea1zAqCrZuMZ+1XHQhpPT87nn9+x9v48ocNW+dA9FpEB4FJcthxz9h2M2mLRRUuLnteNn8XYeFwYElsOd/MPw283M6nsThgR9nkDz00EP7Z86cmde6vft8GAtmSeXu/2c+WFNh5lP5gVfiIoolry8hK3oRO0sGcrByIDEDzyBzWC9Kdu+lrugLEiP3c9SRjCPpVDJGjWDHdnjzTfPhGkBMDNx0EyTEOSla+S594zYTHuaisjaZmtTv0XdwFgdXvEbv+F1Nwymv6UPPCbls3VhF5falDE7bRr0zki0HxpBz0amER7ioXP0SSbFlKAUOVwT71RUMOnk4u1atoDfLiImso7YhmmI9iayc0zmwp5KyTUt5euHNuHQYv778DU48ezyOmqOEbX+OqHCzJM+lwymLuZS0Yaew5J1tDEr8kp7xhyiu7M3e+kmcfelAKirg889h1y4zR3/KKeYDvDBXHSOqbwFnLZv3jTJHVRlTIaYXWzabeeGKCjNHP2mSSSKlpbB0qZmXTkiAcafA2JPAUd/A3rVfkMRGFJoK13DST5xETHwsu1Z8SN/oNUSGO6iuj6ci5gIGjD6BQ/uKqd71OUmRe6lxJFLXYzwDR4+Go/th16tmigHM5zDZ15vxHV4PZflmPjtuAPQ+A2LSoGK9SQyOanOEn3Iy9L3A/LMoWQaVW0zySDwBek2EsAg4tAbKV5s+8ZkmVnRqm7921dVm3wsKzEqk0aPhtNPMP0OfNVS6x7XdJNvkMZA6wRy+t2HHdlj+pflnk5ZmXpPMzJbPafeZsWVfQ9FbUHPATI8M/JH55xdqxZ+ZzxDqysx4Mq82r017dIMPY4Oe6JVS5wM/AIoBrbV+qPVzMjN668IV/wjquBqF9DR44K0P32fqhf4vV7v596cDMOePgbnm+oi6+wHYHP2oZTGt2nc7CvW+h7IEQt7r75N7bQhf9xAn+ry8PHJzcy2J1SlW3Sil4oC/AXdorWcCY5RSHufQlx6q9Cnu/MW+11fvSJ+lX/vWx9fnA7y9+EOPtgUfZzTVrvF3O70cSzhU8HefxxWqfbd6Ox0ZVzD6dNZ9D8bfVt7rvu97MMY1f77vq3Y60icvz2OmxfJtBPvD2NOBQq114yl9XwDf8zfo/I868KJ3oM/SfB//sHx8flsWfjKgqXaNv9vp5VxCRsQyn8cQqn23ejsdGVew+gR6Gx0ZU7D+toKxDV/7BCvRB2MbQZ26UUr9BLhaa/199+NfAGdrrX/a6nm1QPPzq0uAlktZWkoCfF2sFow+HdlGL469r1ZsR/Y9sNvoSB/Z98BuoyN9gvXz8nX/W2+jF9D4abhLa+2xNjjYJRCKgeaDSHS3taC19ly+IIQQokOCPXXzJZCpVNOZNpOAhUEegxBCdCuhWHVzAXAlZjqmwduqGyGEENbpVOvo27P0sitRSqUDDwNjtdbj3W0xwCxgLzAUeExrvTV0o7SeUmowZr9XAxlAmdb6D0qpnsBjwA7Mvt+vte5y57ErpcKA+cBXQBQwGLgBiKV77H8sZt8/1Frf3R1+5xsppVYAjfVTnFrr84Lye6+17hQ3IA7YBkS7H88Dzgv1uAK8z1cCU4D8Zm33Afe6vz4RWBrqcQZgv8cDVzR7vBEYh1l6e5W7bQrwWqjHGqD9DwNmNHv8DnBtN9r/PwP/BGa5H3f53/lm+z7TS1vAX/fOVOsmIEsvOzOt9VzgSKvm72E+y0BrvR4Yq1TXuhK31vprrXXzkodhQDXN9p0u/PprrV1a64cBlFIRmHc1W+gG+6+Uug6zbzubNXf53/lmTlRK/VYpNVMp1fj6Bvx170wXHulNy6RX6W7rbtr6Ofh2FplNKKWmAh9orTcrpZrveyWQopSK0Fp7XtqrC1BKXQTcASzQWud39f1XSo0CRmqt71dKNS8U351+5x/XWq9USoUDnyuljtBy/wPyunemI/p2Lb3sBrrNz0EpdQ5wDibZQct9TwTKu0qS80Zr/YHW+mIgWyl1C11//6cCtUqp+4DJwASl1DS60e+81nql+94JLMX8/gf8de9MR/RNSy/d0zeTgOdDPKZQWIiZxlqqlDoRWKu17nJHNu63rWcAtwN9lVKZfLfve+jCS2/dR7bZWuvG/dsJDKKL77/W+pHGr90fwCZorZ92f90dfudHAJO01o2FvIYC/yMIr3tnW3XTrZZeKqXOAn4GXAzMwXxIBWYFwn5gCPCo7mIrEJRS44DPgHx3UzzwHPAu8DhQiFmJcp/umqtOBgNPYlYdRQIjgd8A9XSP/f8hcCtmxdFzwNt08d95AKVUP8z+rsYcuUcCdwLJBPh171SJXgghhPU60xy9EEKIAJBEL4QQXZwkeiGE6OIk0QshRBcniV4IIbo4SfRC+Ml9lmOnZ5dxCutJohcBp5RaqpSapZR6WSl12P31LKXUKwHaXrJS6vpmj4crpd4I0LYmYtZCh5xS6hal1K5jPCVDKfWEu76O6EZkHb0IOKXUz7XWLyulRmPqumQ1bw/A9rKAV7TWZzdrU9riX3alVDLwHnCG+5T2kFNK7Wr8+bbx/R8Ap2itZwRvVCLU5D+7CLi2krk7+T8GnKa1PlspdRWQp7VOVkqdjjlbeBVQAVwH3AU8CLyJObPwFOAarfWuVqFzgSyl1EzgfWAC5qg7Syn1c+BPmLOQx2Cut/kycBHmlPTLtNaVSqkTgN8C64ERwCNa6x2ttnMlsLIxySulHsL8TdUBUVrrGW3FUUqNBO4BNmFK876ptV6glMoFhrn3Oc097kuBp7ztt1IqG3gGWIOp5457LMOB+zEloEcDf3SfbboIeE4p9YDW2uXtdRFdUKjrM8ut+9wwCWdXq7Ys4NNmj3c1+3om8IT76zGYU8ZfAW5yt90D3OVlOy1ieon7Ke5rHWBOv7/R/fUzwA/dX38JTHR/fTbwlpftPAXc0+zxfkx1Rpr19RrH3T7B/XU6pjTtSGBds3hzgFz31173G/h/wNXur4c07icwDXgBU2YgG+jbLG5x88dy6/o3maMXnd0mAK31Oq11g7utsQ5KCS2rHvpiu/u+otnX5c3ijQEudFdaPAeo8hIjGmheZfAnwKNKqeXAwOPEGYO50A5a6wPaFDgbDexqFm8bMLbZY2/7fQJQ4P66+TuOv2MS+lLgIaCh2fcaMFezEt2ETN2IUDuCmY5orGiY1ur73ubVjzfX7gSUO+ZJWutvOjCutcD/tNbr3Bezn+rlOXuAns0e99BaT3XXlV8LvHGMOGsxBawOKaX6Y6Zj1mOOvhsNxUxdNfK23xsxUz2rMRUwG52KuSTf75VST2KK581WSikgAdh33J+A6DIk0YugcF8nNBdIUkrdoLV+CUBrXaaU+kYp9SjmiPSwUupXwMfAmZgr8mzQ5sIcEzBHwtcppbZgLruWopQaorXe1mxz+zF1z2cDG90rY5KUUj8BSoFM4Hql1LvN4u1rtr1FwI3AXUqpncAA4F9eduttzHRPo+vdF9SIBZ51t7UV50bgXvd+ZAB/0lrvVUo9q5R6GjiMqWb50rH2GzP//6xSaizm3UmSUupazOcEs5VSOzD/PBtLfo/FTGs1XrdUdAOy6kYIPyilHgS+0S0vjdgpud8x/R34vfb8AFt0YZLohfCTUmqM1npdqMdxPO4pohqt9aFQj0UElyR6IYTo4mTVjRBCdHGS6IUQoouTRC+EEF2cJHohhOjiJNELIUQX9/8BuEkY8CK5Ro0AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "starttime = cur.execute('''SELECT starttime FROM games WHERE gameID={0:d}'''.format(gameID)).fetchall()[0][0]\n", "st = datetime.strptime(starttime, timefmt)\n", "turns = cur.execute('''SELECT time,playerID,turnNum FROM turns WHERE gameID={0:d} ORDER BY time'''.format(gameID)).fetchall()\n", "playerdt = {}\n", "for playerID in playerIDs:\n", " playerdt[playerID[0]] = []\n", "fig, ax = plt.subplots(1, 1,\n", " squeeze=False)\n", "\n", "for i, turn in enumerate(turns):\n", " tt = datetime.strptime(turn[0], timefmt)\n", " if i > 0:\n", " prevt = datetime.strptime(turns[i-1][0], timefmt)\n", " playerdt[turn[1]].append((tt-prevt).total_seconds())\n", " else:\n", " playerdt[turn[1]].append((tt-st).total_seconds())\n", " \n", "maxdt = np.max([np.max(playerdt[x]) for x in playerdt.keys()])\n", "for i, playerID in enumerate(playerIDs):\n", " ax[0][0].hist(playerdt[playerID[0]],\n", " bins=np.arange(0, maxdt+10, 5),\n", " color=colors[i],\n", " label=players[playerID[0]],\n", " alpha=0.3)\n", " ax[0][0].scatter(playerdt[playerID[0]],\n", " 0.5 + np.zeros(len(playerdt[playerID[0]])),\n", " facecolor='',\n", " marker='o',\n", " edgecolor=colors[i])\n", " ax[0][0].axvline(np.mean(playerdt[playerID[0]]),\n", " ls='--',\n", " color=colors[i])\n", " ax[0][0].axvline(np.median(playerdt[playerID[0]]),\n", " ls=':',\n", " color=colors[i])\n", " print(\"Turn time for \" + players[playerID[0]] + \": median={0:1.0f}s, mean={1:1.0f}s\".format(np.median(playerdt[playerID[0]]),\n", " np.mean(playerdt[playerID[0]])))\n", "\n", "ax[0][0].legend(loc='best')\n", "ax[0][0].set_xlabel('Turn time (seconds)')\n", "ax[0][0].set_ylabel('N turns')\n", "ax[0][0].set_xlim([0, maxdt+10])\n", "ylims = ax[0][0].get_ylim()\n", "ax[0][0].set_ylim([0, ylims[1]])\n", "ax[0][0].minorticks_on()\n", "ax[0][0].tick_params(axis='y', which='minor', left=False, right=False)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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nMmsWbOorKykR48ezJgxg6eeeoqGhgbuueceRowYQX19Pe+99x5btmzhxz/+Mdu2bWP9+vXs3r2bXbt2ceeddzJjxow2rz9q1ChmzJjBoEGDePfddxkyZAjnnHNOm9ceMGAAjz32GJs2beKzn/1s6/u88sorrFy5km3btvHrX/+aL3zhC4wfP565c+dSUVHBli1bWt/3hBNOaH29CRMmdPoXSMb7xfUJXMOHD9dJkyYRi8VsnN+YiAhzAtfDDz/MGWecwbJly3j11Ve59dZbQ4kjSKn7u76+nvr6en70ox9tUdXhHS3vfMdvM3eNiZ4wO/5p06YxcuRIXnzxRW666SbS3cGvGGQ7c9eGeowxReWXv/xl2CE4z5K7xhhTYqzjN8aYEuN8x28zd40xJnNWltkYEworyxwsZ8syi0iFiDSIyNLE454icpuIzBWRO0XkuKBiMcY4xucS0plU58zXqlWrGDx4MOeffz7z58/n8ssv5/bbb8+onk7YghzqWQRsTHk8C3hdVb8D3Azc0eFaxpjiVoAS0plU58zX9OnTWzv+hQsXsmLFCrZt28asWbMK8n5+CuRyThG5EPgdMBY4ItE8FbgWQFU3icg4ETlKVXcHEZMxxhFdlZD2aebxtGnTOPnkk9m+fTsTJkzgggsuoL6+nquuuorp06eze/dunnvuOf7rv/6LwYMH09jYyNy5cxk9ejRbtmzhm9/8JuPHj0/7PvPmzaN3797ceOONAMyePZtjjz2Wbdu2MWXKFM455xx2797NrFmzGD58ONu3b+fss89mypQpvmxnpgre8YvI8cAoVb1WRFKLX/cDUisO7U60ten4m5qaqK09NExVV1eXTFwYY4pBACWkL774Ys455xwOHjzIqFGjuOCCC4jFYqxevZpBgwbxzW9+kyVLlrB69Wq+9a1vMXv2bGKxGOeffz6vvfYa06ZNa1M/pzO9evWiqqqKN998k7vuuovhw4cze/Zs9u7dy9ChQznttNP47ne/y7Bhw5g7dy4tLS2MHDmSV199le7d8++O4/F4sjInQN/OlgvijH8asEdErgEmAj1EZBbwNnBkynJHJdraqK6uxpK7xhSxyprEME8H7T44cOAAL774Is899xwVFRU0NTW1ef6447z0YnV1dWs9/oaGBvr168frr7+OqtKvXz8+/vjj1iJqnfnoo49obm7mmGOO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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 1, squeeze=False)\n", "turns = np.array(turns,\n", " dtype=[('Date', 'S20'),\n", " ('playerID', float),\n", " ('turnNum', float)])\n", "for i, playerID in enumerate(playerIDs):\n", " playerturns = turns[turns['playerID']==playerID[0]]\n", " lastturn = np.max(playerturns['turnNum'])\n", " ax[0][0].scatter(playerturns['turnNum'],\n", " playerdt[playerID[0]],\n", " label=players[playerID[0]])\n", " ax[0][0].set_ylabel(r't$_{\\rm turn}$')\n", " ax[0][0].set_xlabel('Turn Number')\n", "\n", "ax[0][0].set_xlim([0, np.max(turns['turnNum'])+1])\n", "ax[0][0].legend(loc='best')\n", "ax[0][0].minorticks_on()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Closing\n", "\n", "Let's cleanly close the database." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "conn.close()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.1" } }, "nbformat": 4, "nbformat_minor": 2 }