{ "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": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEBCAYAAABxK3LCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3Xd4VFX6wPHvC4JUCVVQhNAE/KGA\nRFdEKaJrwYgoNoqiCO5ii4oKLrLoqquCin2NCCjKiisWgqKAioIiRaooJVQRAqH3/v7+OHeSIaTM\nJDOZmeT9PE+ezLl35p53JpN77j33nPeKqmKMMab4KRHpAIwxxkSGNQDGGFNMWQNgjDHFlDUAxhhT\nTFkDYIwxxZQ1AMYYU0ydFOkAglGhQgVt0qRJjut37txJpUqV8rW+IK8FSE9Pp3r16hGpuyCxhbvu\nWI2tIH/PohxbOP8PYjm2SO4/AoktNTV1i6qeWIGqxsxPuXLlNDd9+vTJ9/qCvFZVtVWrVhGruyCx\nhbvuWI2tIH/PcK+PZGzh/D8o6PpIxhbJ/Ude6/v06aPAXM1mn1qkuoASExPzvb4grw1EOOsuSGzh\nrttiC8/6SNUdzv+Dgq6PZGyR3H/ktT63daIxNBO4fPnyunfv3kiHka2EhATmzp0b6TCyZbEFL1rj\nAostv4pzbCLyi6omZF0eU2cA1apVi3QIOerbt2+kQ8iRxRa8aI0LLLb8sthOFFNnAAkJCRqtLbjJ\nn9mz4ZFH4NAh+Otf3bIDB9zP8OGQkACzZkHJksFv+5FH3PanTQtpyCGVlgaDBsHChTBnTubycePg\n88+hRQu3/NZbwXcmn5oK/fvDSSfBxx9HJm4TW3I6A4ipUUA7d+6kb9++JCYmFrhPzUSH88+H9u1h\nzx4YMsQtO3AApk51j+fMAZH8bbtfP9cARLMZM6BzZ1iw4Pjl+/fDs89CnTowfz7ceGNmAzBrFlx1\nFUyeXPjxmtiSkpJCSkoKQLZDhGKqC6hSpUokJyfbzr8IO3IEBgyAq6+GCROgXj1YswZmznRHw3ff\nDQ88AK1bg+9k8Oef4eab4fnnoVs3WLcu9zqWLYPbboPnnoOePWH5crf8ySfd0fiTT0LXrm7Zhg1w\n551u2336wI8/uuU33QTnnQePPQYXX+zOVpYscUfqQ4dC796walXe77drV6hY8cTlvXq5nT+4I/6z\nzspc1707lC6d97aNSUxMJDk5GWBndutj6gzAFF3ffQdJSaCaecR/zTXw4ovucevWcO21cPAg/Pvf\n8L//wbvvui6i8uXdsnr14JNP4NVX3U44J5MmQZkyriH580/3+OuvXUPy5ZfuOe+8434/9BBcf73b\nUW/aBK1awR9/uMajTRt44gl3xrJxo2tUXngBLrzQdTs99BB8+il89hmMGuW6dIKxf787K5o2DT74\nILjXmqJhyRJ3NhwXB126wCmnhHb71gCYqNChAwwb5hqAFStyft6ZZ7rf1avD7t3ucdmy8NprUK0a\nrF7trifkpk8f171y8cXQuLFrZBYtgoYNM5/Tu7f7vWgRPPywe3zqqbBzJ2zZ4soNG0KpUu6nYkX3\n3MmT4Ycf3M67QgX3vE6dXKMQrLJlXUOTmuo+n1WrXF2m6FN1ByjjxrkDn7Q0d93nk0/c9zZUYqoL\nyBR9Ipk7+ZzWZ/Xww9C8OQwcmNl1k5tZs1w306xZbqf+3nvu9StXZj5n5EjXkPgvT0tzR2K+wWhZ\nY2neHK67zm37scfcjh/g2DHXtRUMX2MIULu2a3T27w9uGyZ2TZwIU6bA0qXw5pvuTPKDD1xX5+HD\nIawou9lh0fpToUIrHTXKzW47dEi1XTvVMWNcee9eV/7wQ1fescOVx4935fR0V54wwZU3bnTlSZNc\ned06V54yxZVXrnTladNceelSV/7xR1devNiVZ8925fnzXXn+fFeePduVFy925R9/dOWlS1152jRX\nXrnSladMceV161x50iRX3rjRlSdMcOX0dFceP96Vd+xw5Q8/dOW9e115zBhXPnTIlUeNcmWf5GTV\njh0zy6+/rnrFFZnl4cNVExMzy0OHql53XWb53/9WvemmzPKTT6p2755Zfvxx1V69MssDBqj6T1Z8\n6CHVfv1U58xR7dBBtVYt1auuylzfr59qly6q8fGqjz6qesMNqnXquBg2bFBt1Ei1Zk33+o8/Vq1R\nw22nd2/Vli1VL7tMtW1b9/ovv3SvGzrUbft//3Pbuvpq1dtuU121yr33Tp1cnEOGqJ55pvuM/vzT\nvY/4eNWLLlKdMcN9pnXqqFarpvrOO5nfvRdecPUPGuTez1NPZX72Vatm/92bNs19jqVLu3r27XPf\nifh41c6d3efcubN7v77v3ssvu7rr11d97jn77uX3u+dz//3ux6dfP/ccnz593DZ8evVydfh07+5i\n8LnpJhejj/93T9W9t+HDM8tXXOE+A5+OHVX/8hfV//zHldu104z9XqtWqs2bB7/fI4eZwNYFZCIq\nIQG+/db1/2dVv7475QXo29dd4P33v125TRs44wz3+oQEd4TUuDE8/rhbf/PN7qLxgAGuPGJE5na7\ndnVH/R07wv33Zy6/6io3cghg+nT3+7TTXP99+/buwmybNu4IrF49d3G4Rw/Yt8899/TT4cEHXTfR\n9OnQtKlbfvXVMHp09u+/XTv3PtPS3MXdsmXd8rp1XRdAu3buovVdd2W+5pJL3OcydKi7EJ11BJGJ\nfceOZX+hv3Tp0J4B2DwAY4yJMuPGuW7A6dPdIAVwXZaJiW6Um29ZoIrETGDfPABvXKsxxhRJXbtC\no0bQsqUbCfa3v7kz1HfeCW7nn5KS4ptlnO08ADsDMMaYKKQK33/vRpbFxbku0Nq187etIjET2Bhj\nigsRd+2pffvw1RFTXUDGGGNCxxoAY4wppqwLyETWltmw4BE4dghqeulAjx2Aoweg1XD4KgH+OgtK\n5CMd6PxHYOtsuHRaSEMOqf1psGgQbF8IV/ilA/3tObeubE3Y9guc/SRUagJb58DS4VClJexaBlXP\nh4Z9Ihe/iWnWAJjIqnY+1GgPR/bAOUPcsqMHIM1LB3p5AdKBNurnGoBolj4DTu8M27MM5j+8B859\n0b33teNg/sPQPgX2b4TG97vP7dhhGF8DaneBMtF7rwwTvWKqAbB00MXAsSOwYIA7+l8/AX65DzpO\nczu+OX+H6m2gRGnY8jMkvApVE9zjpcOhyrluR9riWShfJ+c6di2DJc9ApbNgx6/Q7HE45UxY/KQ7\nEylRGnYsgos/hn0bYPFgqHgm7F4B9Xu5GGbcBHtWQc3LIH06nHG9e/zbcxB3NuxaCs3+ARXq5/5+\n63SFTdNOXN78X5mP9RiU8hIL1b7m+OeVOAlKWIIgk7280kFHPL1DMD953TjZxKiF/1T98lzVufer\nzrnP/faZ0k519+rM58335uSv/Uh1zj3u8fZFqrtXucfrxqvO6+8e717tXp/V7y+pzuqreuSge92+\nDap/fqX67ZWZz0kd4X7PuFl17f/c431pqp+crnrsmNv2J6epHj2kemiX6s5lql9doLrZy9eQ9p3q\n99d6MX2qOu2anN9/2neqk3L4bh85qPrt5aq7UrN5Hy+6H1N07Utz3/UNk1WPHs73ZrBUECaqndoB\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1,1,\n", " squeeze=False)\n", "colors = ['blue', 'orange']\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}'''.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[i])\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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\n8tLMyNeqqKiIHj16JLA1JO4h0dXywNYvF8X+Ed9bv359pZddsWKFNWvWzFasWFGlNsyZM8cGDRpU\n6jzDhg2rUp2uXbva2rVrw8M33XST7du3r0LrOHToUPj3Vq1alZh2+HB51pEsDn9t4v0aRHsPU8pD\nonXZokgUPXv2ZMGCBQwePJgFCxZUuq/ySH7tbbGoqCjcwdfcuXMZPXo0zz77LLfccgs5OTnUr1+f\n2bNnH9HuLVu2cNttt9G5c2caNGjAxIkTmTFjBhdddBGXXnop55xzDhs2bGDIkCH07t2bOXPmkJWV\nxZ133klubi7bt2/nmmuu4Y033mDjxo0sWbKEBg0a8MknnzB58mQ6derEZ599xr333kvr1q2PaO/G\njRvp06cPX3/9NccddxwzZswA4MEHH+TAgQMcOnSI2rVrM27cuHDtm266iYKCAtauXct1111X4rXa\ntm0bI0aMYNeuXTH/3v/4xz+4/fbbueSSSygqKmLNmjX87W9/K9HPT5XESnqvfxK5h77ihYne15aE\nq8oeerGq7qkX76GvX7/eOnXqFB5/44032lNPPWVmwT30QCBgZmZTpkyxqVOnmpnZli1brGXLlnbw\n4EE7ePCg/fKXv4xaY8eOHTZq1ChLTU21U045xaZPnx6eNmzYMJs1a5aZmd122202duxYMzObNm1a\niTo9evQILxNtDz0vL8/MzPr27Ws5OTlHtGHFihU2bNiw8HCdOnVs165dZmbWoUMH2759+xHLXHzx\nxfbcc8+ZmdnGjRvDdX/44QdbunRpeNsyMjLCy/To0cPeeustMzMbMGBAeNtGjBhhL774opmZnXnm\nmfbee++F23XhhRdGbW/37t3Dw3369LElS5bY66+/bn379i0x/o033gjXfvXVV83MbPXq1TFfKzMr\n8+89c+ZMMzN7+OGHw3+HaCq6h550x9CzV65j8I26c0/KJ3JPvSrHuZOtt8Vf/OIXNGzYEAg++2DP\nnj2sXLmSPn360KdPHz7//HM++eQT0tPTw9tZzMzIzs7mwQcfJBAIUFhYWGLdZW1Pbm4ub775JpMm\nTWLFihXUr18/ahsja7Zt25ZPPvmE3NzcI8ZH/p2Kb8OPfDhPNGX9vU855ZQSr028JFWgF4f5gpmj\nE90UqUHiEerJ1ttitPm7devG66+/zuuvv07r1q3p0KEDeXl5AHz++efh+WbNmsXXX3/NH/7wB+68\n884Kt79z585cdNFFjBkzhnvuuYe+fftGnS+yZl5eHh06dKBz585s3rw5PL6sv1O01woq//euqqQ5\nhh4Z5nqSkVRUVY6p+723xT179jBv3jxyc3N5//33Wb9+Pbt372bhwoU0adKE/Px8Zs+ezQMPPFCi\n3ZMnT+bWW29l3bp1/OpXvwqH3AUXXMCLL77IXXfdRZMmTcLratCgAfn5+cydO5f+/ftH3bbf/va3\nPP300zzyyCOkpaXx5ZdfcsUVV0T9u9StW5dJkyaxefNm2rZtS9++fXHOsWrVKrKysjAzunXrxvnn\nn8/SpUvJz8/nz3/+M6NHjyYlJQWgxGtVvN0zZ87kxhtvrPDfu/hbUJXEOhbj9U91HkNf8cJEa9ak\nQfDYua5ySRrxOIZeWcXHgB999FG75ZZbEtaOo1leXp4VFhaamVl+fr716tWr2moffsz/aKWrXA6j\nPXNJBPW2WLb8/Hzuu+8+Tj/9dDZt2sS0adOqpW7kN4p3332Xs88+u1rqVgdfB7rCXBJFvS2WrXfv\n3vTu3bva655wwgklnufqJ74+KaowF5Fk4utAV5iLSDLxdaArzEUkmfg60EVEkolnJ0Wdc+2Ay4Gf\ngB7AeDP7wKt6ImUq7aHhlVHGg8aXL1/OjBkzyMvLY9KkSfTv3z++9YEXXniBu+++m7POOov09HS2\nb99Ox44dyczMLNHfiiQHT/bQnXO1gGnAA2Y2GbgW2FL6UiL+ct5554W7z/UizAEuueQSUlNTGTJk\nCPfffz+PP/44+fn5jBw50pN6cnTzag/914ADbnXOHQ/sAP7iUS2RGmHgwIH8+te/pqCggO7duzN0\n6NBwj4jRet/76quvyMrKomPHjmzatIkbbriBrl27llln3LhxNG7cmIceegiAUaNG0bp1a/Lz87ng\nggsYMGAARUVFjBw5kvT0dAoKCujfvz8XXHCB1y+BeMyrQG8FdAMuN7Pdzrn/AfYDc4tnKCwsLNHB\nTWZmJpmZmR41RyTxrr76agYMGMDPP/9M+/btGTp0KP369WPhwoW0atWKG264gSlTprBw4ULuvPNO\nRo0aRb9+/RgyZAhbt25l4MCBR/QZEs3xxx9Po0aN+Oabb5gzZw7p6emMGjWKffv20aZNG8455xwe\nfvhh2rZtS1ZWFj/99BOnnnoqmzdv5thjfX1rSo0VCAQIBALFg81izefVX68I+MzMdoeG3wV6EhHo\nKSkp5OTkeFRe5Ohy8OBB1q9fz5o1a6hXr94RPQhG9r63detWINhrYPPmzfniiy8wM5o3b86hQ4fC\nHULF8uOPP7Jr1y5OPPFEcnNzufbaawGoU6cOjRs3ZtOmTeTm5tK0aVMmTZoEBDuT+v7772nevHmc\nt1ziIXKH1zm3PdZ8XgX6/wFNnXO1zOxngnvseR7VEjnqvfrqqyxdupTly5cDHPG4tmi973Xu3Jle\nvXrRv39/zIyTTjqpzDAHmDhxItdddx0nnHBCid4D9+3bx86dO0lPT6dz5860aNEi/GCKefPm0bRp\n06pupiSYJ4FuZt8750YD051zhUAK8EAZi4n4knOObt268eijj3LrrbfSsmVLfvjhB2bPnk3Hjh1j\n9r43depUxo0bx7p16/j2228599xzj1j3woULyc/P5/nnn+ejjz5i27ZttGvXLvxko6ysLO644w4m\nTJjAF198weOPP06jRo3Iysri7rvvZsKECezevTvc77rUbM5C/ShXt4yMDPP8kEtpl6mVccmZ1Hyf\nfvpp+IEE1e2tt96id+/eTJ8+nc2bNyflA5Sl6qK9h51zH5pZ1Cds6AyIiAfU26IkggJdxAPqbVES\nQbf+i4j4hAJdRMQnFOgiIj6RlIGevXJdopsgIhJ3SRfoxY+lE6mM7OxsUlJSyM7OLnPe5cuXhzvn\nWrRokSfteeGFF8Kdc9133338/ve/58knn+Tnn3+u8rqLioro0aNHHFpZs7z88svhu3UBrrnmmnJ1\nuXA0SKpAj3zGqEhFZWdnM3jwYBYsWEDPnj3LnL+m97bYoEGDcv3H5TeHB/rs2bM5/fTTE9egCkia\nyxb1wGipioqGeTQ1rbfFZ555hhEjRrBr165S23m4ESNGcODAAU466SRee+010tPTmTFjBlOmTGH/\n/v3Url2bvXv3MmXKFDZu3Mg111xDWloajRs3ZvXq1dx+++2sXLmS1atXk5WVRd++fTl48CAjR46k\nefPm7N69my5dunDllVdGbe8999zDnj17WLt2LX/6059IS0vjvffe469//Stt27bls88+Y8KECfzw\nww9cc801nHjiiaSlpbFgwQKef/55/vnPfzJ37lxWrVrFf//3fzNixAiuvvpqrr76aj799FMeeeQR\nTjnlFD777DPuuusuWrRoweWXX06tWrU47bTTWLVqFUOGDOH666+v1PukSswsIT9du3Y1z325yOzL\nRbbihYnWrEkDW/HCxPA48b/169fHZT0rVqywZs2a2YoVKyq87Jw5c2zQoEFmZvbyyy+bmdnBgwct\nPT09PM+wYcNs5syZZmb28MMP29SpU83M7LLLLrP58+ebmdmWLVusS5cuUWv06NHDFi9eXGJc8+bN\nbcOGDTZmzBibMmWKmZnt3bvXTjrpJPv+++9tzJgxNnHiRDMz+/HHH+3kk0+2AwcOHLHuVq1aldnO\nSEuWLLE+ffqEh7t37x5+3Yq338ysX79+9vHHH4dfoyuuuMLMzF566SU7++yzzcxszZo19rvf/c7M\nzGbOnGnXX3+9mZkdOnTI2rVrZ999913U9m7cuNHMzJ577jm7+OKL7dChQ3bSSSfZtm3bwuMvv/zy\ncO3BgwebmdmmTZts586dNmzYsBJ/6/vuu8/mzJljZmZnnnmmrV692szMVq1aZd26dTOz4HvkzDPP\nNDOzbdu2WceOHY9oW2VEew8DORYjV32/h649c6mKeOyZg396W4zWzosvvph//etfDBw4kN27d5Oe\nnh6ev3Xr1uHf9+/fz913302TJk346quvSrwGbdq0AaBRo0bh3xs3bsyePXvCr8U333wTbm/Hjh35\n9ttvo7a3uGbbtm355JNP2L59O0VFRaSkpITHr127Njx/8a31xXVLk5ubW2L9keuJfG2K213dfB3o\nCnOpiniFOfint8Vo7XzxxRfDvy9ZsiS8jQCff/45ALt27eLKK6+kqKiI2rVrk5ubW2atSJ07d6ZO\nnTqMGTMGCN6JG+1wT3HNtm3bkpeXR4cOHWjWrBkNGzZk27ZtNG/enI0bN9KlS5eY21SrVi3MjE2b\nNtGiRYsj2rF582aaNGlS5noSwdeBrjCXyopnmNfU3hbnz5/P7t27mTlzJmeccUbMdrZt2za8TN++\nfXnttde4/vrradOmDXXq1ME5R8OGDbnkkku46qqryMjIYP369cybN4/27duH15WXl8e8efPIzc1l\nzZo1LFq0iPz8fJYuXcq1117L3Xffzfjx49m/fz/16tVj4MCBUV/vt956izlz5vDRRx/x2GOP4Zzj\nueeeIysrizZt2rBhwwamTp3Kd999F669bNkyevXqBUDv3r2ZNWsWhw4dIisri7fffpt169Zx/vnn\n8/TTT/Pwww+Tnp7Ohg0bmDVrFvv27Qu3Oycnh48//pjdu3ezcOFCBg0aVKX3TkX5urfF7AUPxQ5z\n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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "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[i])\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[i] + ' 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='off', right='off')\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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\njRpF586d2XvvvRkxYgTz589n8eLFPPDAAwwcOJBEIsGGDRtYvnw59913H6tXr+a5556jvr6eTZs2\nMXv2bEaMaDil06BBgxgxYgS9evVi/fr19O7dm3PPPbfBuQ866CBefPFFlixZwoknnrjjOsuWLePu\nu+9m9erVPPnkk3z961/nmGOOYezYsXTo0IHly5fvuO6RRx6543wnnXRSky1rIiJtXfEvq6PRhdJK\nb7/9NoMGDcrLtZ999llOP/10pk+fzooVK7j99tvzEkec0pV3IS2r01rNqb80ulCkbdCyOiIFaObM\nmTz33HMsXbqUKVOm5DscyYHmTOEgIsWtkKZwEJFG5s5tvHKLFDtN4SBSOgppCgcRERGRkqEkS0RE\nRCQCBZlkJfs0JOLuFSoisUokEslZ39P2ZxARKWYF2SdLfRpESkOm/gwiIsWsIJMskbzK9bQgGaYC\nef7555kxYwbLli1j8uTJTS4S3RqPPPIIY8aM4cQTT6R///6sXbuWww8/nOrq6t2uLygiIi1XkI8L\nRUrJsGHD+MY3vsGhhx4aSYIFcN5551FRUcEFF1zAxIkTmTlzJqtXr2bUqFGRXK+UqbuDSOnI1OVB\nLVkiBWb48OEce+yx1NbWctJJJ3HhhReSSCS48sorOe+886ivr2fhwoX86le/oqKigg8++ICxY8dy\n+OGHs3z5ci699NIGS/E0Zfz48XTt2pUbb7wRgNGjR9OnTx9Wr17NmWeeybnnnkt9fT2jRo2if//+\n1NbWcs4553DmmWdGXQRFTd0dREpHpi4PSrJECszFF1/Mueeey7Zt2xg0aBAXXnghVVVVzJkzh169\nenHppZdyyy23MGfOHK6++mpGjx5NVVUVF1xwAatWrWL48OEsWrQo43X23XdfunTpwkcffcS9995L\n//79GT16NJ9//jl9+/bl5JNP5uabb6Zfv36MHTuWzz77jEMOOYQVK1aw556qOkREMlFNKVJAtm7d\nytKlS1m4cCEdOnSgrq6uwfsDBgwAoKysjFWrVgGwePFievbsyfvvv4+707NnT7Zv375jAeem/O1v\nf2Pjxo0ceOCBLF68mEsuuQSAffbZh65du7J8+XIWL15M9+7dmTx5MhAsYL1+/Xp69uyZ499cRKTt\nUZIlUkCeeOIJnnnmGZ5//nmAXdYyNLNdPjNkyBBOO+00zjnnHNydgw8+OGOCBXDDDTfwve99j44d\n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\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "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[i])\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='off', top='off')\n", "ax[0][1].tick_params(axis='x', which='minor', bottom='off', top='off')\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": "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\n9/8BuEkY8CK5Ro0AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "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 FROM turns WHERE gameID={0:d}'''.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[i],\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[i] + \": 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='off', right='off')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Closing\n", "\n", "Let's cleanly close the database." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "conn.close()" ] } ], "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.6.4" } }, "nbformat": 4, "nbformat_minor": 2 }