{ "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": {}, "outputs": [], "source": [ "prop_cycle = plt.rcParams['axes.prop_cycle']\n", "colors = prop_cycle.by_key()['color']" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "DBFILE = 'CarcassonneScore-sample.db'" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "timefmt = \"%Y-%m-%dT%H:%M:%S\"" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "conn = sqlite3.connect(DBFILE)\n", "cur = conn.cursor()" ] }, { "cell_type": "code", "execution_count": 7, "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": 8, "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": 9, "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": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEBCAYAAABxK3LCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xd8VFXawPHfAwRCCzUQemhSpEpwQVAWO2IEdtUoiA2N3ReVVbEg+KqvrqzL2jABwa6oWIjYAEXBDTX0IhB6D6EklBAIz/vHnZkESJkkM5kMeb6fTz6Zc+7MPU9mMvfce+4poqoYY4wpe8oFOgBjjDGBYRWAMcaUUVYBGGNMGWUVgDHGlFFWARhjTBllFYAxxpRRFQIdQGFUq1ZN27Ztm+f2Q4cOUaNGjSJtL85rAVJSUggPDw9I2cWJzd9lB2tsxfk8z+XY/Pk9CObYAnn88Ca2DRs27FPVswtQ1aD5qVKliubn7rvvLvL24rxWVbVbt24BK7s4sfm77GCNrTifp7+3BzI2f34Pirs9kLEF8vhR0Pa7775bgUWayzH1nGoCio6OLvL24rzWG/4suzix+btsi80/2wNVtj+/B8XdHsjYAnn8KGh7fttEg2gkcNWqVfXIkSOBDiNXUVFRLFq0KNBh5MpiK7zSGhdYbEVVlmMTkcWqGnVmflBdAdStWzfQIeQpNjY20CHkyWIrvNIaF1hsRWWxnS2orgCioqK0tNbgpmiWbjvI/32/hhNZp7i4tXOP6vjJUxw/mcVz0ecT/cZcvnmgF+XLSaH3/X/fr2HptoNMuaenr8P2mb3pGfzrp3Ws2Z3GtAd7e/ITlu1kxuo9tG8YxvLtB/lb18Zc3r4+AJv3HeHF79dQoZww/pZugQrdBJG8rgCCqhfQoUOHiI2NJTo6uthtaqZ06NKkJj1a1OFo5kkeueI8ADJOZPHHhn0ATHuwFyKFP/gD3NKjGUu3HfRZrP6waPMBrmhfn9W70k7LzziRxRP92tKoZmVW7jjEg58keSqApdsO0rdNPeasTwlEyCaIJCQkkJCQAJBrF6GgqgBq1KhBfHx8oMMwfnQy6xSv/LiW56LPZ8bqPYyetorPYnuwN/04z3yzkqhmtQgpX44l2w4w5rrz6dS4JklbDzBp7iY6NKrB6p1pngNnXpJTDvPWrxtoXa866/ak89ClrWgRXo3/zFzPiaxThJQvx9rdaYy/pRt70jJ47ed1NA+vyuZ9R7i+W2OiImvzwCdJbNt/lN6t6rJw836u7tCAi1vX5Z3ZybSJqE5yymEe7NuapnWq5Pv3XtOxAYnJqWfl3xDVxPN4S+pRWtWr7kkP7NqILxZtK8K7a8oa98nyhAkTDuW2PagqAHPuStyYypiEVaiC+4T/ivb1mThnIwDdmtXiyvb1ycw6xRNXt2X68l1MXbydTo1rUqVieZ64ui1Nalfhx5W7eP+/m3nqmnZ5ljX7zxQqVSjPsN7N2ZOWQaUK5fhtXQpLth3gvTsuBGDKwq0AvDB9Df06RHBNxwakpB8n+o25JI68lCevbsv17/yXR644j+MnT7E3LYPHvljGM/3b0a1ZbRKTU3lh+mrib43ip1W7+WLRdibedtYVeL4yTmTx75nrmLdxP/+J6VKEd9UEu3V70pm7fh9hlUO46vz6VA8N8en+rQIwpULPFnV4un97VJVN+/Lu6dW8blUAaletyOHjWQCEVijP+//dTK2qFdl+4CiZJ/O/r3XzhU0YPzuZG+ISaVm3Ks9c2561u9KIrFPV85yY7k0BWLsrjXsuaQFAePVKpGecYP+RTACa1alKSPlyhJQvR7Xwaqzdlc7v6/Yxf9N+Mk6comol5+t1adt6dGtWq9DvSWhIeUb2a8fmfUe4ecI8fn+8LyHlg6rfhikiVeX571bz3fJdXNm+Pinpx3np+zW8c0s3Lmxe22fl2H+TKVVEhBbh1fLenkveS9+voV2DMB7o24p+HRoUWMbSrQe5768t+faBXtStXomvkrbTrkEYW1KzK57PF24j8+QpV/5RwLlhG1Y5hNpVK+YaS7sG1bm6QwT3/7UVD/RtSd+29QA4pUrWqcJ1toj/PRl3B42IGqHsP5JJxomsQu3DBK9Za/Yyd/0+Zj3WhxcHdST+1ijGxXThoU+TOJF1ymflBFUFsDHliKft80TWKWLiEvl6yXYAjmVmEROXSMKynQCkZZwgJi6RH1fuAmD/kUxi4hKZuXoP4HyZY+ISmf3nXgB2HjxGTFwic9c7Nx+3ph4lJi6ReRud9tnklMPExCWyeMt+AP7cnU5MXCLLXDcZV+08RExcIqt2Ok1ty7YdJCYukT93pwOweMt+YuISSU45DMC8janExCWy1XVwmbt+HzFxiew8eAyA2X/uJSYukb3pGQDMXL2HmLhEz9nnjyt3EROXSFrGCcDpNRITl8ixTOcg8fWS7cTEJXr+Wb5YtI2YuETPe/npgq0MmTjPk/4wcTO3TVrgSU+au4m73l/oScf/nsy9Hy72pN+evYEHP0nypF+ftZ7hny3xpF/7+U9GfLHMk37lx7WM/Gq5J/3i9NU8+81Klm8/yIJN+/l26U5un5xd/rPfrOSeDxex4+AxPp6/lQc+XswXi7cxa81e9qZlMPKr5fy+LoXl2w8yqGsjXvp+DTfHz2P68l2s3Z3GLRPn8dgXS9lx8Bi//rmXez9cTPzvyQAcPHaCK177jWHvLST1cCZXnR/Bu3M3IeLEOW7mOt75bQNTk7bzdP92/PrnXnq/8gsPfJzEGzd35eQpJSYukfV7D/P5wm2e/71+HRrw3h+bGfvzn1z8yq9sdVUo05bu5Opxv+f6vzdvYyofz9/C2t1pjPh8GRknstiaepQPErcQ++Fi3p69gYc+XULDGqGs2+P8L03+YxMvfb+GVTvTeOe3ZPvfK+L/ntuYhFWMSVh12v/ei9NXe9Ijv1rOKz+u9aRHfLGM137+05Me/tkSXp+13pN+8JMk3p69wZPO+b8HcNf7C5k0d5MnfdukBXyYuNmTHjJxHm/+up7be0USFhpCTFwiXyzaxiXnhVO/eiWue3NuoY97ebEmIBNQnRrX5NPYHqd9Ad2a1q5C3FCn3XzkV8sZ0KURT1ztzAUVFVmbhjVC6dS4Jp0a1+SnVbtpEV6Nhy9rDThfwvYNw7j/r60AmLIg+6bpNR0b8FXSdi5qWZc7ezf35PdtU4+hPSMBWLjZqejrh4Uy9obOxMQlem4An8g6RZPaVbjpwiYM6trYc+CLqBHK3Ze0IC3jBAs37adVPedK5rJ29fly8fZc//4eLerQtHYVUtKPM7BrI0JDygPQqGZlhvVuTo8WdUhOOcxTX63wvOailnX5ceVunrqmHZ2b1PQc+M2545SSa3NfhfLlyMzy3ZWgjQMwxphSJmHZTibM2cjn9/T0nBQs2XqAu95fxB9PXurJ85aNAzDGmCBxTccGzFi9h/6vz+HaTg1JOXyc71fsYuz1nQt18C9oHIBdARhjTCmkqszbuJ8561MIqxzCgC4NaVAj7/Et+TknrgCMMaasEBF6tqxDz5Z1/FZGUPUCMsYY4ztWARhjTBllTUAmsLYvhhmjICsTWl7q5J3MgJPHod/LENcH7v4FyhWu1wMAPz8LO5Lgjum+jdmX0vfAL/8Le1ZC7Ozs/Ln/hsN7oVo92LkU+j4N4efBjsUwbzxEdILU9dCoG3S7PUDBm2BnFYAJrMbdILI3ZB6GviOdvBMZsHG28zh2dvbkQIXV/S7Ycb8PgvSjrYnQtj/sXnF6fuYRuOol529fORVmPAuDpzgVxl/uc963rBPwaktoGw1V/ddObM5dQVUBWDfQMiDrJMwc7Zz9r/0efngCbv8ODu+B7x6Fpn+B8hVh+0Lo909odAFsWwjz3oYGnZ0D6eWjoWaTvMvYtx7m/AvC28DeNXDJ41C3Fcx+xbkSKV/ROSOP+RDSdsGvL0KdVrA/GboMgaY94Ivb4cBmaNHXOYi3uw5a9oW546B+e9i3Di4eAbWb5x0HwPkDYdOcs/MvfSb7sSpUdM1T1Paa059XrgKUD6qvsSlBNh20CQ6b58APTwKKZ5adttdA4lvO4yYXOmfKWcedA/yqr2HZp04FULEKXP4c1IqE1dNgQRxc+ULeZa2fARUqQY8HIH0nVAiFDTOdSuWWL53nJH3g/P75aefgfv5Ap0kmrg88uhouHwOTroK+TzlNVul74Jt74coXnUpq0xz4+Rm46WNY8x0s/Rhu/rTw78vJTFj6CfQfe/a2BfFw8WMQmut325wLDu+FLX84n3HkJYWu7G06aBMcIi+Gq150znZTk/N+Xh1nageq1IXjztw2VAiFBROgSm04sMVpGslPt9ucNvbJV0Od1k5Ty55VULtF9nMuuNX5vWcVXPSw87haPTieBkdd8/fXbgHlQ5yfStWd5yb/4nxhT2Zkn7WfdxU0+Uvh3g9wDv7TH4HLnj09NoDlX0DmUejzj8Lv1wSHueNg7mvQrJdzBXwkBW7+DOqf77MirBeQKV1EnOaYvJ9wdtaMUVC/g3M23H5AwWVsXwS9H3FuLlcLd64k6neAA9kTdJH0oXMAzpmfvsc5E6vibm8/I5b6HaBdNFz8qBNL6yudfD0Fp04WHFdOJ47Bd8Oh54PQsCus/jZ72+L3nYNBn384lc6+DXnvxwSnTXNg0btw/3znyvHuX6DvMzDlFjhVRmcDZd96WPKx8zjrBEzuD8umOOnMo0565VQnnXHISa+e5qSPpDrpP39w0ul7nPT6mU760HYnnfyrk96/yUlvnptd9uT+sHW+k96z2knvcM1SuGu5k97lmnVwx2Invcc1q+DW+U56n2vWwM1znfR+18El+Vcnfcg1adj6mU463ZlBkj9/cNJHXGefq6c56QzXld3KqU4605nhkWVTnLT7bHjJx07abfF78P512ekFE+Cjv2en542HT27KTv/xuvPP5zbnNfjijuz0b/+EqXdnp395Eb7JcQN25miY9nB2+qenYfpjTi+dLX/Aii/hoxuyt09/DD4bAoe2wqJJ8PltTjPKuh8gfTck/A8kz3Re3+lG5ybpe9c6TUN7VsIHA+Hre53Xr5/hxP7H686+jx2At/4Cn8Q472e7a517CO44Z78Mf4yDZZ84TUnrZ8C4TvDFbXD9JOdgPrk/pKxxKgr3/17762D+O/DLC87z3Z/tii9h/EW5/+9tnuv8fXtXw9f3OQf+/ZvgtfNh468wfQTE93Xey63zYe10+GkkzP4/iLsEpt7lvH/2v5ed9vZ/z+2HJ13Njy7TH3Oe4zbtYWcfbt/c75ThNvVuJwa3L+5wYnTL+b8Hzt82b3x2+qO/O++B2/vXOT3DejwAYQ2c927Jx87/eYXKEN+n8Me9PPilCUhEIoAXgM6q2t2V9wQQAewGugGjVHWta9stQFcgC0hW1Th/xGVKoUYXODd5c34B3WpFOm3o4HwJO17vtP+DcyM2rJHz+kYXOO3sdVtDn8ed7V/cAREdnbNxgKT3s/d7/kBY9hm06AM97svOb30lXOg6kGz5r/M7rAEMfNv5EnUZ7JSbdQJqNXOaiTrHZB/4whrCRQ85X8Itic5NZoDzrnba8XMT2dv5Ow/vdb7gIa6h/vXaOb2iIns7B+6E4U5+2/4wbCZ8/w+48nmnG+iu5bD884LfaxM8TmZA5TMWERKByjXhmO/WufbLXEAicj1wHHjOPf+EiPwvzkFfRSQGuEVVo0WkMfAd0NW1bSEwWFXXn7lfmwvIGFMmJH0Iy6fArd9mj4HZtx4mXg6PrHTuORVCXnMB+aUJSFW/BNLPyHtWs2ubcoDrDh5XAYtzbEsE+vkjLmOMCQqdYkDKOc2aiyY7XZTf6+90lCjkwT8/Jd4LSEQqArcBD7iy6nF6ZZHmyjtLSkoKUVHZlVhsbCyxsbF+itQYYwKkQkW4ZSqs+sbpWRZaA4Z8CQ06eb2L+Pj4nN3m6+b2HL9NBy0ifwXG5rzscB38xwNvq+piV94w4CJVHeZKvw5sUNXXz9ynNQEZY0zhlWgTUB4BVAbigNdUdbGIuG/7/wR0E/GM9+8J/FBScRljTFnlr15AfYChQAMReQb4F/Ax0AFo7jrWVwWmqup2ERkL/FtEsoCJud0ANsYY41t+qQBU9TfgtzOy/5bP8z8CPvJHLMYYY3IXXAPBjDHG+IxVAMYYU0ZZBWCMMaVUxtHDrJ3/M5vXLEJ9OAeQW1DNBmrrARhjyoqF37xFq6UvU75CfUJPHmR9hVpUu+UjGka28XofBa0H4LdxAP5g4wCMMWXBuqTfqDXtNg7f+AXN23fnVFYWCz4ZQ/jmBFo8vRgpV7jGm4CPAzDGGOOdA3MnktxiKM3bdwegXPny/GXIaCqeymD90lxWkCsiqwCMMaaUCTl+gAp1mp6WJ+XKcbBifY4d2uuzcqwCMMaYUiaz8UWUX/XVaTd+9+7YRLPj62jW8WKflRNUN4GNMaYs6BT9ADv//SVLXhtIua6DyTy4i4Yr32Fji2H0qBvhs3KsAjDGmFKmSrUaRPzPLPZNG0fVBXFUCKnO/ktepEff631ajlUAxhhTClULq0WPW8b4tYygugfgHgfg6tdqjDEmHwkJCe41U2wcgDHGBI30PfDHOEj+1VkQpustzo9n5nzv2TgAY4wJFkf3w6QryTyZxdLur7Cp/X3oondhxrM+LcbuARhjTGmT9D6bqnRk4OLLOa9+CPsO16Ru+cf5bPG9lO/5IFT3TU8gqwCMMaaUObB+HvF7zuebB3rRvG5VVJX3/7uZJb+2pNuuZYiPKgBrAjLGmFJm9eFqXN84neZ1qwIgItzWowlNsrax9mh1n5VjFYAxxpQyM6teQ4edXzo3gFUh8wgyYxSpIQ3YXbmVz8qxJiBjjCllWrSP4q2Mx3hk+mPIiaOQeZRjjS/i3syHSWhSy2flBFUFYOsBGGPKgusvaMxNi7uyJmw8g9uWY09GCG/M28+wy5tTo0qI1/ux9QCMMSYIHcvM4vNF25izfh9hlStwQ7cm9GxZp0j7ymscQFBdARhjTFlRuWJ5brsoktsuivRbGXYT2Bhjyii/XAGISATwAtBZVbu78kKBscAOoDXwsqquc227BegKZAHJqhrnj7iMMSZY7Dp0jDd/2eBpAoqJasKQvzSjXLnCTwWRF381AfUGvgW65MgbDmxV1X+KSEfgXeBiEWkMjAC6qqqKyEIR+UVV1/spNmOMKdX2H8nk+vGJRHduyKTbo9ibfpyxP/1JcsoRRl93vs/K8UsTkKp+CaSfkd0fSHRtXwF0FpEw4CpgsWbfjU4E+vkjLmOMCQafzN/CRS3r8GS/trSqV52LWtblvTsv5OslO9h16JjPyinJewD1OL1SSHPl5ZVvjDFl0oodh/hrm9MPg2GhIXRuUpM1u9J8Vk5JVgB7gZxjmMNceXnlnyUlJYWoqCjPT3x8vN+CNcaYQGlUswprd59+oD+ZdYr1e9JpVLOKV/uIj4/3HCuBurk9pyS7gU4HegJzXPcAlqlqmoj8BDwkIuJqBuoJvJHbDsLDw7FxAMaYc92QHk254Z1EujSpyaVt65F+/CSv/vgnLcOr0SbCu7mAYmNj3YvBICL7cntOoQaCiUgXYKWqnizgeX2AW4GrgfHAv1ybxgK7gFbAS2f0AorC6QW0Lq9eQDYQzBhTVvx3wz7GJKxmb3oGJ7KUS9vW438HdCjUSGC3vAaCFVgBiMhnwDicg/kVwApVvbfQEfiAVQDGmLJEVUk5fJzKIeWpHlr4A79bcVYEW6Sq84BrgD7A1iJHYYwxxmsiQr3qocU6+OfHmwqguYgMBZa6mn4q+yUSY4wxJcqbCmAm8Dfg/0TkWsB3w9CMMcYEjDcVwA5VHaSqm4BtwEY/x5Qn93TQrulNjTHG5CMhIcHdE6ho00GLyChVfT5HeqyqjvBplF6ym8DGmLJk3+HjLNi0n7DQEHq0qE2F8kUbulXo6aBF5DbgdqCZiPzVnQ1kFCkCY4wxXov7LZm3ft3Ahc1rk5J+nP1HM5lwaxRtI8J8VkZ+A8G+AWYDsYB7yG0WTj9+Y4wxfpKYnMoHiVv4+ZE+RNQIBeCrpO3c91ESsx7t47MZQfO8nlDVQ6q6RVWfdv3eoqrbgc4+KdkYY0yuvkrazrDezT0Hf4BBXRtRqUI5krYe8Fk5BU4FISIXALfhzNcjQEecUbvGGGP84EjmSWpVPb3vv4hQs0oIh4/nOxFDoXgzF9CbwGtAiis91GelG2OMOUuf88KZumAzA8r9QbmNsyG0BtuaDWTNrnSiImv7rBxvKoB5rvn9ARCRtT4r3RhjzFkGdgrn/JlDWTv9JIfP+ztZu/fQen4MEzo9RrVKV/qsHG8qgIoi8iKwDlAgGrjBZxEUgnscQHR0NNHR0YEIwRhj/K7Sqi9pH1GdaZ3f5vcN+wmrE0KdC2O4MGEQHL8DKnk3I2hCQoJ73FSRxwEswekR5HaJql7m3Z/hWzYOwBhTJnx+K7TpD51jTs9/71roNRxaX16o3RV6HEAO97kmg3PvqHWhSjbGGFM4FavBsTN6+6jC0f1QqZrPismzG6iIuDua7hSRpu4f4A6flW6MMeZsnW+GxLcgbWd23vIpcPIYNL7QZ8XkdwUwH7gQ+A3YRPYkcE2Bp3wWgTHGmNM1vxi6D+PUWz3YU+sCqmSmEpZ1EBn8GZTz3Uq+eVYAququZh5WVc/sayJyjc9KN8YYk6vXj/fn6+ONGMJ2dmlFfjrWmndONqaDD8so8B6AqiaIyOU4I4CXqur3PizfGGPMGeau38eXi7cz9bHrCK9eCYCuy3dy38eLmT2iL+X9PRWEm4g8CzwKNANGuNLGGGP85OslOxjWu7nn4A9wbaeGVK8UwuItvpsKwpvGpIqqeo2qPqyq/YAqPiu9kGw9AGNMWZBxIovqoWc30FQPrcCxE1le76eg9QC86QZ6ZmmnvC7dx2rUqEF8fHzBTzTGmCDWt209ps5PZsCpmZTfNBtCa7C16SD+3JNJ98haXu/HPWh2woQJh3Lb7k0FcFJEpuGsBNYSp3eQMcYYPxnQoTYdf76JFT+VJ+286zmVspt2i+/gvU4PUqViCU4FoaoviMiVQCdguqrO8FnpxhhjzhKyYgqtG9Xlpy5vOVNBNKhAZO+b6PJVf8i4C0JzbdEptPxWBKsLjAD2AeNU9WeflGiMMSZ/G3+lXJfB9OvUiH6dGmXnR3SCbQsLPRVEXvK7AngHWAm0Bp4EXvBFgSLyDyASp2JpDQwDKgMv4zQztQaeUtU9vijPGGOCTqXqcCTl9DxVOLLP64ngvJFfBbBeVUcDiMgrvihMRCKAkUBdVT0lIt8CfwMuBmaq6uciEg2MxdYdMMaUVV2GwNS7oV001GzqHPyT3gfNgsbdfVZMfhXAsRyPj7gfiMhwVR1XxPKOAplAGHAQqAaswjn7f9H1nD+A94u4f2OMCX7NLoJeD8M7vaHhBXB4L2Rlwk2f+HQqiDyngxaRHcAOV7KR67EAEarapMgFigwFbsFZXF6AB4BUoL6qHhSRCsAJIERVT1v7rFmzZhoeHu5Jx8bGuvu4GmPMuefYAdg637np2+QvhTr4x8fHe7rNL168eIuqRp75nPwqgMnAe7lsGqqqd3kdxen77AJ8AFygqidF5F844wxuBi5S1W0iUhvYoKpnrXtm6wEYY0zhFWU9gMdVNeXMTBFZVYw4GgH7c5zZ78KZXXQ60BPYBvRypY0xxvhRfrOBnnXwd+XvK0Z5PwLXuM78DwIdgOHAceAVETkPZ7DZiGKUYYwxxgvejAT2GVXNwmnzz83dJRmLMcaUhE/mb+XbpTsKfuKZ9BQc3gPHDtK++hGeG9gVInv7NDbf3U42xhhzlm+X7mD1rrTCvUhPwe4Vzk3gauFQNRy+vhfmjfdpbF5dAbj65ocBS4FNqnrUp1EYY8w5rH2DMKbc09P7FyycCOtmweDPwb0678GLnG6hnW+GyjV9Epc36wH8E2ew1iVARZw++8YYY/xl42/QKSb74A/OgLAGXWD7Qp8V400T0EFVvQPYqKpLgP0+K72QbD0AY0yZULkmpO86PU8V0ndDZe+ngy5oPQBvKoC67uJdv303EUUhudcDiI6ODlQIxhjjf12HQuLbkJrspFVhwQQoVx4adfN6N9HR0e7BYEVeD2CdiKwGTonI9UCc16UbY4wpvCYXQp/HYcKlUK89HNkLFUIh5qPTm4WKyZsK4BNgNk6f/RWq+qfPSjfGGJO7qDug4/WwfZEzFUTDrj49+IN3FcBnwH2q+qVPSzbGGJO/StWhZV+/7d6bCuC/QIyINAK+UdVf/RaNMcaYEuPVkpAAIhICxIvIG6rawe+RGWOM8asCKwAReRZnPYC7gRXAff4OyhhjjP950wT0IE7Pn8tUdaef48mXexxAdHS0dQU1xngUeb6dErB6VxrtG4QV7cWnspyuoKFhUD2i0C9PSEhwj5vKdRxAnusBeJ4gcpmqzsqRbqCqu/J7jb/YegDGmNzExCUW70DrZwO6NGLwX5oW7kVrv4cfHgcpB8fToFEUDHwbqtUrdPmFXg9ARDqr6jKgkYjcmmNTNHBDoSMwxhg/KvR8O6XZnlWQ8DDc+IGzPOSJDPjtZZgyFO780WfdQfMbCfyw6/cdQPMcP2et1GWMMcaHFr8HF8Y6B3+AkFC4dJQzPcTuFT4rJr8FYYa5Hj6sqisARKQq8JXPSjfGGHO29F3Q9IyrmXLloE5LZz6gBp18Uow3cwH1y/E4AnjSJyUbY4zJXeMLYe0ZK+MeSYUdi6FhF58Vk989gKZAJNBWRC5xZZcje1I4Y4wx/nDBrTDxMkgYDl0GOyuDzX4FooYV6SZwXvLrBtoVGAh0Adx3HLKA73xWeiFZN1BjTJlQuSbc+RMkvgnfj3DmAur1MHQsXP8bX3QD7a6qvluBoBisG6gxJjcxcYkA504vIB/LqxtogfcAVHWhiFQVkaaun9F+idAYY0yJ8mYqiEeBoTgLwewBGgKj/RuWMcYYf/OmF1CEqnYFJqhqL+BNP8dkjDGmBHgzF9Bh12/3UpBtilOgiLQBbgaOAX1wrib2As8CG3B6Hj2mqofz2IUxxhgf8KYCaCwi0cA2EUk2KKKgAAAXgElEQVQGVhe1MBEpD7wGRKvqKRH5ADgJfAiMUtUFIvIQ8AROhWCMMcZPvFkPINb9WEQSgXXFKK87TpfSh0SkCpAKTAb6Au6eRn8AE7EKwBhj/KqggWBnOgiMAp4qYnnNgJ7Azap6SEQ+AuoAxzS7P2oakOtIh5SUFKKisnsyxcbGEhsbm9tTjTGmTIuPjyc+Pt6drJvbc/K7ApgNbCZ7EJhbU4peAaQBa1X1kCs9F7gYqCwi4qoEwnDuCZwlPDwcGwdgjDEFy3mCLCL7cntOfhXAg6r6/ZmZInJNMWKaD9QRkfKqmoVzRbAK5yqgO7AA6AVMz3sXxhhjfCG/2UDPOvi7VM8jv0Cqul9EngDGiUgKEA48D3wCjBKRK3GuMB4tahnGGGO8481AsE1kTwAnOE00U4paoKp+DXx9RvZm4M6i7tMYY0zhedMN9CVVnQCeG8N9/BuSMcaYkuDNXEATcjzeitNEY4wxJsh50wQ0KUcyDO+mjzDGGJObRZNhxZeFe01ER+j3ss9D8aYJSID3XI/TgaU+j8JLth6AMSborfjSWdc3oqPfi/LFegCVVPV4jnQrVd3g0yi9ZOsBGGNyE1TrAUzu7/y+o+R6u+e1HoA3VwD1ROR6srt/XgJc7svgjDHGlDxv2vM/xekGusX1c9CvERljjCkR3lwBLFfVce6EiPzhx3iMMcZRiJulo1Jds8tMzrWpu3QpofZ/b3hTAcwQkTFAsisdDRRuZWJjjCmsErxZWqIiOkLH6wMdBeBdBTAcSAKau9K1/ReOMcbkENHRq5ulz7tvAt8RBDeBSxFvKoB1qvqIOyEirf0YjzHGmBLizU3gXSJyh4hcIiKXAI/7O6i8uMcBuPq1GmOMyUdCQoJ7Suhcb454cwVwM868/Ze40gFrkKtRo0bOBQ6MMcbkwz1odsKECYdy2+5NBfCIqn7nTohId59FZ4wJXkWZ0qAwzsUbwKWMN5PBfXdGVgs/xWKMCSbuXjr+Uop6y5yrSnw9AGPMOcTLXjqmdLL1AIwxpoyy9QCMMaaMsvUAjDGmjLL1AIwx5hxV0HoA3lQA9+ZcDyCQbByAMcZ4r6BxAHk254jIgyLyG1AtR943ItLAD3EaY4wpYfm15/cFblDV1Bx5TwBj/BuSMcaYkpBfBbBKVffmzFDVP4E9xS1URCqLyHIRGetKh4rImyIyUkQmich5xS3DGGNM/vK7B5CRR74v7ge8ACzJkR4ObFXVf4pIR+Bd4GIflGOMMSYP+V0B1BGRhjkzXO3/xVpyR0SGAn8Am3Jk9wcSAVR1BdBZRMKKU44xxpj85XcF8CowzTUVxG6gAdAa6FfUwkSkPdBOVZ8SkU45NtXD6WLqlubKSytqWcYYY/KXZwWgqrtFpDdwLdAKmA98rarHilHeICBDRJ4EegMVRWQ4sBeonuN5Ya6806SkpBAVFeVJx8bGuue6NsYYk0N8fHzObvN1c3tOvuMAVDUT+MpXAanqi+7HIhIKVFPVca7HPYE5rnsAy1T1rLP/8PBwFi1a5KtwjDHmnJXzBFlE9uX2HG8GgvmciPwdZ4GZiiJyM/AfYKyIPINztTEsEHEZY0xZEpAKQFWnAlPPyH4gELEYY0xZZRO7GWNMGWUVgDHGlFFWARhjTBkVVBWAezpo1/Smxhhj8pGQkODuCZTrAF5R1dzyS6WoqCi1bqDG+NCiyc7i7kWxe0WpWRM4Ji4RgCn39AxwJKWTiCxW1agz84PqCsAY42MrvnQO5EUR0RE6Xu/beEyJCkg3UGNMKVJKzuJNybMrAGOMKaOsAjDGmDLKKgBjjCmj7B6AMcGsOL14ILsnjymTguoKwMYBGHOG4vTiAevJc46zcQDGnMsm93d+l/FePDYOIH82DsAYY8xprAIwxpgyym4CGxNovpiOwZgisCsAYwLNpmMwAWJXAMaUBjYdgwkAqwCM8beCmnisGccESFA1Adk4ABOUCmrisWYc4yc2DsCYQLO++n5n4wDyl9c4AGsCMsb4xCfzt/Lt0h0BKXv1rjTaNwgLSNnBzCoAY4xPfLt0x1kH4ioVoH/LSoRXKYf4s/CulalSsTxr1qzxZymlXmhoKI0bNyYkJMSr51sFYIzxmfYNwk5rhtm0aRPVq1enTp06iPi1CijzVJXU1FS2b99O8+bNvXpNiVYAItISeAFIAhoDqar6vIjUBl4GNgKtgadUdU9JxmaM8b2MjAwiIyPt4F8CRIQ6deqQkpLi9WtK+gqgNvCZqn4LICKrRWQ6cDcwU1U/F5FoYCwwtIRjM8b4gR38S05h3+sS7QaqqgvdB/8c5R8B+gOJrrw/XGljjDF+FLBxACIyCPhJVdcC9YB016Y0oJaInHV1kpKSQlRUlOcnPj6+BCM2xgSjX375hYEDB9K+fXumTZuW63Pmzp3LBRdcwOzZs4tczpw5c7j11lsZM2YMw4cPp3///pw8edLr18+aNYsRI0Z40uPGjfM8/vjjj6lVq1ah4omPj/ccK4G6uT0nIDeBRaQv0BcY7sraC1QHDgJhwAFVPeudCw8Px8YBmFLHRvqWapdeeilbt27lu+++47rrrsv1Ob1796ZTp07FKueRRx5h0qRJnv3cf//9nDp1yuvXX3bZZVx66aWe9Lhx4xg+3DlEDhkyhKeffrpQ8cTGxroHgSEi+3J7TolXACLSH7gY+B+ggYg0A6YDPYFtQC9X2pjg4B7pm9dB3kb6AjAmYRWrd6b5dJ/tG4bxXPT5hXpNfHw869ato2bNmqSkpPDaa69Rvnx5AH7++WemTp1KUlISH3/8MZGRkcTExLB582auvvpqFi1aRFRUFGPGjDlrvxEREbz22ms888wztGrVirfffhtwRuM+8sgj3HTTTezevZt169YxfPhwZsyYwbJly/j0009p1qwZjz76KElJScyePZv4+HgOHjzI6NGj6dGjB1dffTUAcXFxzJs3j7179zJt2jRP3EVVok1AItINmAL0AH4FvgXaAE8BV4jIM8DfgBF57sSY0sg9mVteP1F3BDpCA6xZs4Y333yTsWPH8swzz5CZmcm7777r2d68eXPeeOMNBg0axNSpUwF45ZVX2LlzJ6NGjWLatGlMnDgx131/8MEHhIeHc8UVV9CmTRv+85//ABAdHU3v3r1p3rw5EydO5IILLmDJkiWMHz+eG264gS+/dK4eH374Yc++YmNjqVmzJqNHj/Yc/MG5mpk8eTIiwtKlS4v9fpToFYCqLgaq5bH57pKMxRhTsgp7pu4PK1euJDIy0pNu1aoVy5YtOy0NULduXTZv3uzJb9GihedsO69BVrVr1+bVV1/l1VdfZdGiRfz973+nZcuWXHvttQC0bNkSgJo1a3piqFWr1mnlFCRnfOnp6QU8u2BBNRmcMcYUR8eOHdm0aZMnvX79erp06eJJ59WN0pvulVdccQXuudWioqLo1KkTmZmZRY61XDnn8LxkyZJCxVEYNhLYGFMmiAht27bloYceYvjw4dSoUYOKFSty5513smDBApYvX86HH35ImzZtSEhI4MCBA2zYsIH33nuPLVu2MGvWLNLS0jh06BCTJk3izjvvPG3/7dq1484776RZs2bs37+f5s2bM2DAgNP23bBhQ37//XdWrFjBRRdd5Cln3bp1TJw4kS1btvDDDz/Qr18/unXrxsiRI6lcuTIbNmzwlNulSxfP/nr16uX1tA+5vic2G6gx+GZZxjI+22duM3KuWbOGdu3aBSokZs6cyeWXX864ceNITk7mjTfeCFgsJSW39/ycmA3UvR5AdHQ00dHRgQ7HnEsK6smTnyDq5ePPGTtL44ycb731FrNmzWL16tW88sorgQ6nxCUkJLjXT7H1AIzJUxmZsz8mLtGvB+oBXRox+C9NPelAXwGURefsFYAxpvjOnLHTlF3WC8gYY8ooqwCMMaaMsiYgExyK00vHGzZfjymD7ArABAd3Lx1/CaKePKZwvJkNtLg+//xzIiMjGTx4MM899xwPPPAA48ePJysryy/l+YpdAZjgYX3tTRF4Mxtocd144428/fbbDB482DP1w5NPPsnw4cNL9diDoKoAbByAMUHshyd9fxUX0RH6vVyolwwaNIju3buzfft2evXqxZAhQzwzdt54442kpaWRlJTEJ598QmRkJDt27GDkyJF06NCBDRs2cM8999CtW7cCyxk1ahS1atXipZdeAmDEiBG0aNGCLVu2cNVVVzFgwADS0tIYPnw4rVu3Zvv27Vx33XVcddVVRXorclPQOICgqgBq1Khhi8AYY4rl9ttvZ8CAAWRlZdGuXTuGDBlCdHQ0U6dOpVmzZtxzzz28+uqrTJ06lccee4wRI0YQHR3N4MGD2bx5M4MGDTptfp68VKlShZo1a7Jr1y4mT55M69atGTFiBMePH6dly5Zccskl/POf/6RVq1aMHDmSY8eO0bZtW5KTk6lQwTeHZvfJ8oQJEw7ltj2oKgBjTBAr5Jm6P5w8eZLVq1eTlJRE5cqVz1pA/bzzzgOcxafcs3QuX76cevXqsXXrVlSVevXqcerUKc9kbXk5evQoBw8epEGDBixfvpxhw4YBUKlSJWrVqsWGDRtYvnw5derU4eWXnfemY8eO7N+/n3r16vn4L8+dVQDGd/zZU8d66RgfmD59OjNmzOCXX34BOKt9PrfZNjt37sxll13Gddddh6rSqFGjAg/+AC+++CJ33XUX1atXp3PnziQnJwNw/PhxDhw4QOvWrencuTMRERGetQA+/PBD6tSpU9w/02tWARjfKc58OgWxXjqmmESEnj178u9//5uHHnqIxo0bc+TIESZNmkSHDh3ynA107NixjBo1ihUrVrB792769u171r6nTp3Kli1bmDJlCkuWLGHv3r20adPGs3LYyJEjefTRR3nhhRfYunUrb731FjVr1mTkyJE8/vjjvPDCCxw6dOi0dQdK5D2xuYCMz5SR+XSCWW4zdvpToOcCstlAHTYXkDGmzCnrs4EWJKgqAOsGaowpjK+//jrQIQSUTQddGvl7WoMSsic9g32Hj3vSkSc2sjmkBc/XeTWAUZn8uKeCLskmoLZt2/p8KUOTO1Vl7dq1XjcB2VQQgeDvaQ1KyL7DxzmamT3UfXNIC/6ofPYNMlN6tG8QxoAujUqsvNDQUFJTUwmmE81gpaqkpqYSGhrq9WuCqgnonHIOTGvwfC43FM8HYgMUjyl9GjduzPbt28/qb2/8IzQ0lMaNG3v9fKsAjDF+ExISQvPmzQMdhslDqWoCEpHLReRtERktIs+dub00n0WU5ikqLLbCK61xgcVWVBbb2UpNBSAiVYB3gEdUdTTQSUQuy/mcffv25bsP193uIm0vzmuh4A/Qn2UXJ7bi7js1NbVYr/dnbMXZXpzP09/bAxmbP78Hxd0eyNgCefwoaHt+20pTE1BPYIuquruV/AH0B2a5n9A0TFn1Uu88d9Dg6DFWrci7r29+24vzWoC3rjjpdWye3jKuNvR16/bz0c7EPF9b3O0Hu93uGQDky32v3pVGhfSCK4Cidtkt6LX+3m6x+Tauczk2f36evogtL6WmG6iI3AzEqOpAV/ou4K+qekuO52QAOVdYSAFyXhbUAHKd9c6L7cV5LUDdM2IpybKLE5u/yw7W2IrzeZ7LsfnzexDMsQXy+JHX9rpAOFAeOKGq1c98UWm6AtgL5AwwzJXnoare928yxhiTr1JzDwBIBJqJSCVXuhcQ3P0kjTGmFCs1TUAAInIFcD1O084JVR0T4JCMMeacVaoqgLyIyOXA33CahDTQFYOIRAAvAJ1VtbsrLxQYC+wAWgMvq+q6Eo6rpSuuJKAxkKqqz4tIbeBlYKMrtqdUdU8Jx1YOSADmAxWBlsCdQOVAx+aKr7Irtp9VdURp+DxzxDYPyHAls1T1stLwmbpiawPcDBwD+gCjcb6nzwIbgEjgMVU9XMJxReJ0INnmygoDlgOPEvjvwj9w3pd9rhiGEajvgaqW6h+gCs4/UiVXeipwWYBjuh6IBhblyHsSeNz1uCMwJwBxdQcG5EivBrrhdK+90ZUXDXwYgNjKAc/kSH8LDCkNsbnK/hfwPjC2tHyeOWIbnUtewN83nJuL04FyrnQDnJuOPwIXuvIeAv43ALHVAS7PkR4D9A70+wZEAPtzvGcB/R6UpnsAecmre2jAqOqXQPoZ2f1x7mOgqiuAziISVsJxLVTVb3NklQOO5IyNAL1/qnpKVV8AEJEKOFcof5aG2ERkqKvsTTmyA/555tBRRJ5wDZB0vz8Bf99wTjgEeEhERuIcuA4CfYGFgYxNVVNVdSaA675ilKrOJfDv21EgE+eKBKAasCpQcZWmXkB5qcfpB9s0V15pk1ecaYEIRkQGAT+p6loRyRlbGlBLRCqo6skAxHUV8AjwnaouCnRsItIeaKeqT4lIpxybStPn+YqqLhCR8sDvIpJ+RnyB+kyb4Zyg3ayqh0TkI5wz72PqOpWldHxfBwOfuh4H9H1T1TRXE9AUEdkFbMdp4QhIXMFwBVBg99BSotTEKSJ9cc7CHnFl5YwtDDgQiIM/gKr+pKpXA81F5P5SENsgIENEnsRpIrhQRIZTij5PVV3g+p0FzMH5bAP9voFzoFqrqu7+53OBDkBlyZ7/uTR8X28AprgeB/R9E5EuwD+A/qp6O859gFGBiisYKoBg6R46HedsCBHpCCxT1RI/W3Q1EVwF/A8QISI9c8ZGgN4/EWmfo/kCnOaWFoGOTVVfVNXnVfVlnAPYAlUdR+n5PNuKyLAcWa1xzhgD/pni3DSv47oyAeeKYBXwK07zUCBjAzwnQ/9V1ROurEC/b42A/TkO7ruA0EDFFSy9gEpV91AR6QPcClwNjMe5gQhOr5FdQCvgJS35XkDdgN8A96o5VYG3gGnAK8AWnN43T2rJ93xoCbyK00MpBGgHPIzTHhrQ2Fzx/R14AKeH0lvANwT483TF1dAVTxLOmWEITk+WmpSO920QcCnOd7Mpzk3f+jhntRtdeY9qCfcCyhHfp8BDqrrPla5NAN83V2X5Ok6vroM4V0zDgeOBiCsoKgBjjDG+FwxNQMYYY/zAKgBjjCmjrAIwxpgyyioAY4wpo6wCMMaYMsoqABO0RGSOiIwVkckicsj1eKyIvOen8m4Vkc0iMjZHXm8RmS0i44o7VYSINBGRqSIyutjBGuOFYJgKwpi8TFLVySLSAeirqiMAROQOfxSmqh+IyLVAtIjMV9UvVHWuiMwG3ivuQDFV3SYiCTgzRRrjd3YFYIKWqk7OK19EXnYdmBGRG0XkoOtxTxFZKiLvisi/RGSviAwVkQ0i8pKIvCki/3VNJ5ybo8BAYJxrHiEPEYkQkW/cZ/Cu/bljuENEdovIP0TkQxH5wRXXuyLy+xlXD+1dz/vANUUFIlLBFdsoV9xDXfn/EJHDIjJcRD4Wka+L9GaaMskqAHOuesf9QFU/xxl1iaom4ozyTVXVx4DLgc9wpoHYoqoPAl8Df89rx6q6BrgfmJrzwK2qu137dovPsW0ysBZIUtWhOCM/q6vqMGAJcEWO12Wq6quqeitwq+sKZxhQUVWfB0YAT4tIPVV9FWc+mZ9VdQjwYmHeJFO2WROQKavWAKjqcgDX3GXuqR5SKKAZRlW/FZGuOGsILC9Eucmu3wdzPD7A6RPPbTzj+e2BTkAD9xUBsBJnbnn3RGvuv2cRxnjJKgBzrkrHNee6OKt7hZ+xPbc5UAo7L8oYnKuFOwF3c5SnXJx5cIqiRY7HrXAO7jWB465J69xz8Gx2P0ltThdTBNYEZIKaOEs5xgI1ROROd76qpgJLReQl4BbgkIjcKyLnAZfg3MiNcu3jQpwz7KEi0gBnYZNLRKTVGWUNATqJyL2uMhQYyulrBMwE2onIE8AFODPZ9nNNaNgMuF1ELshRXs54mrnKri0iz7kmMvvItSDNu4CKsyjMS0AH19zyN7j+9mdEJMRHb6spI2wyOGOMKaPsCsAYY8ooqwCMMaaMsgrAGGPKKKsAjDGmjLIKwBhjyiirAIwxpoyyCsAYY8ooqwCMMaaM+n/cCgGy+z7HYgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1,1,\n", " squeeze=False)\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": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# JOIN the scores and turns tables to get the timesteps for a sample game" ] }, { "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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8uU8/PDDHH300axYsYLbbruN5s2bc/HFF1OrVi2OPfZYFi1aRP/+/bnmmmsq9TmpEjNLyk+XLl3McyveNFvxpi18drQ1bVTfFj47OjJO/G/ZsmUJWc/ChQutadOmtnDhwgovO3XqVDv33HPNzOy1114zM7Ndu3ZZZmZmZJ6BAwfapEmTzMzsoYcesnHjxpmZ2UUXXWQzZswwM7O1a9da586dY9bo3r27zZo1q9S4Zs2a2cqVK23YsGE2duxYMzPbtm2bHXnkkfbzzz/bsGHD7IEHHjAzs19//dWOOuoo27lz517rbtmyZbntjDZ79mzr1atXZLhbt26R1y28/WZmffr0sS+//DLyGl1yySVmZvbqq6/aSSedZGZmS5YssT//+c9mZjZp0iS75pprzMxs9+7d1rZtW/vpp59itnfVqlVmZvbCCy/YeeedZ7t377YjjzzS1q9fHxl/8cUXR2qff/75Zma2evVq27Rpkw0cOLDUe33PPffY1KlTzczshBNOsMWLF5uZ2aJFi6xr165mFvyMnHDCCWZmtn79euvQocNebauMWJ9hIN/i5Krv99C1Zy5VkYg9c/BPb4ux2nneeefx73//m379+rFlyxYyMzMj87du3Try+44dO7j99ttp3Lgx3333XanXoE2bNgA0bNgw8nujRo3YunVr5LX44YcfIu3t0KEDP/74Y8z2hmtmZGTw1VdfsWHDBkpKSkhLS4uMX7p0aWT+8K314bplKSgoKLX+6PVEvzbhdlc3Xwe6wlyqIlFhDv7pbTFWO1955ZXI77Nnz45sI8DXX38NwObNm7n00kspKSmhdu3aFBRU7EqzTp06UadOHYYNGwYE78SNdbgnXDMjI4PCwkLat29P06ZNadCgAevXr6dZs2asWrWKzp07x92mWrVqYWasXr2a5s2b79WONWvW0Lhx43LXkwy+DnSFuVRWIsO8pva2OGPGDLZs2cKkSZM4/vjj47YzIyMjskzv3r2ZM2cO11xzDW3atKFOnTo452jQoAEXXHABl112GVlZWSxbtozp06fTrl27yLoKCwuZPn06BQUFLFmyhJkzZ1JUVMTcuXO56qqruP322xk5ciQ7duygXr169OvXL+brPW/ePKZOncpnn33GY489hnOOF154gZycHNq0acPKlSsZN24cP/30U6T2/Pnz6dGjBwA9e/Zk8uTJ7N69m5ycHN59912++OILTj/9dJ555hkeeughMjMzWblyJZMnT2b79u2Rdufn5/Pll1+yZcsWcnNzOffcc6v02akoX/e2mPfcmPhhrt4WfU+9LSbHhx9+yIknnghAjx49mDp1KkcddVS11G7VqlWpK1RqOvW2GEV75pIsqdzb4j333EOPHj3YunUrffv2rbYwD3+jePLJJ7nhhhuqpeb+xteBLpIsqdzb4ty5c5NSd8CAAQwYMCAptfcXKXVjkYiInynQxdeSdY5IpKoq89lVoItv1a1bl40bNyrUpcYxMzZu3EjdunUrtJyOoYtvtWjRgnXr1u11E49ITVC3bl1atGhRoWUU6OJbBx10EOnp6cluhki18SzQnXOLgG2hwd/NrIdXtURExNs99LfMbKSH6xcRkSheBnpH59wdQD1gsZm94WEtEZGU52WgjzGzT5xztYB3nXNbzezd8MTi4mKysv5z92p2djbZ2dkeNkdEpGYKBAIEAoHwYNN481VLXy7OudHAb2Z2b3hcdfTlwso58aepLxcRqYHK6svFk+vQnXPHOOeuihqVCaz2opaIiAR5dcilBPizc+4IoD7wL+B5j2qJiAgeBbqZfQ/E7qxYREQ8kZK3/ud9XLGnpYiI1AQpF+jhx9KJiPhNSgV69DNGRUT8JmUCXQ+MFhG/S4lAV5iLSCrwfaArzEUkVfg60BXmIpJKfB3oCnMRSSW+DnSFuYikEl8HusJcRFKJrwNdRCSVKNBFRHxCgS4i4hMKdBERn1Cgi4j4hAJdRMQnFOgiIj6hQBcR8QkFuoiITyjQRUR8QoEuIuITCnQREZ/wNNCdc/WccwXOuXFe1hEREe/30EcBn3lcQ0RE8DDQnXOXAh8Aa72qUVl5HxckuwkiIgnnSaA759oD7czsH/HmKS4uJisrK/ITCAS8aMpewo+lExGpKQKBQCQrgabx5nNmlvDizrm7gFrADqAnUBv4h5lNCM+TlZVl+fn5Ca9dyso5pQZLPWP0sju8rS0i4gHn3KdmlhVr2oFeFDSzB6KK1wUOiQ7zZNADo0XE77y+yuVc4GTgBOfcxV7WKovCXERSgSd76GFmlgvkelmjPApzEUkVvr6xSGEuIqmkzEB3znWoroZ4QWEuIqmkvEMu9znnXos1wcye86A9CaUwF5FUUt4hly3AN0BR6KeE4N2fp3nbrMRQmItIKilvD324mX0H4JzrBASAR8zsEc9bJiIiFVJmoEeF+aUE98yvMLMF1dEwERGpmDID3TlXC3gUOBHobmbfhMbXM7PfvG+eiIjsq/KOob8LdAT6A7udc0c551oC93reMhERqZDyjqHvAPKACwAXNf54rxokIiKVU16gjzCz9/Yc6Zzr5lF7RESkkso85BIrzEPjP/CmOSIiUlm+vvVfRCSVKNBFRHxCgS4i4hMKdBERn1Cgi4j4hAJdRMQnFOgiIj6RkoGe93FBspsgIpJwKRfo4cfSiYj4TUoFevQzRkVE/Ka8vlwqxTl3ADAL+BioDbQBrkxml7t6YLSI+J2Xe+gfmdl9ZjYcOBg4x8NaZVKYi0gq8GQP3cx2E3zCEc65A4EWwEovapVHYS4iqcLTY+jOuTOA2cBsM8v3slYsCnMRSSWe7KGHmdnbwNvOueecczeY2ZPhacXFxWRlZUXmzc7OJjs7u+JFVs6JOTpZYT5v2U9xp/Vsf1i1tUNE/CMQCBAIBMKDTePN59VJ0fZAupm9ERq1FmgdPU9aWhr5+d7stGvPXET8JHqH1zm3Id58Xu2hbweucs4dBxwEtAMGe1SrFIW5iKQqr06KriEJV7UozEUklfnmxiKFuYikOl8EusJcRMQHga4wFxEJqvGBrjAXEQmq8YGuMBcRCarxga4wFxEJqvGBLiIiQQp0ERGfUKCLiPiEAl1ExCcU6CIiPqFAFxHxCQW6iIhPpGSg531ckOwmiIgkXMoFerjvFxERv0mpQI/uyEtExG9SJtDVK6OI+F1KBLrCXERSge8DXWEuIqnC14GuMBeRVOLbQFeYi0iq8WWgK8xFJBUd6MVKnXNtgFHAEqAFsNHM7vOi1p4U5iKSqjwJdKAx8IKZvQ7gnFvmnHvDzD71qB6gMBeR1OZJoJvZ4j1GHQD84kWtMIW5iKQ6r/bQI5xz/YC3zWxF9Pji4mKysrIiw9nZ2WRnZ1eqRsLDfOWcMid//q/N8ScecVrV64uIRAkEAgQCgfBg03jzeRrozrlTgVOBIXtOS0tLIz8/v8o1tGcuIn4XvcPrnNsQbz7PrnJxzvUGzgBuApo757p6UUdhLiIS5EmgO+e6AC8CJwALgdeBtl7UUpiLiAR5dVL0U+AQL9a9J4W5iEiQL28sEhFJRQp0ERGfUKCLiPiEAl1ExCcU6CIiPqFAFxHxCQW6iIhPpGSg531ckOwmiIgkXMoFerjvFxERv0mpQI/uyEtExG9SJtDVK6OI+F1KBLrCXERSge8DXWEuIqnC14GuMBeRVOLbQFeYi0iq8WWgK8xFJBX5LtAV5iKSqnwV6ApzEUllvgl0hbmIpDpfBLrCXETEB4GuMBcRCarxga4wFxEJ8iTQnXPNnXOTnXOLvVh/NIW5iEiQV3voJwGvA86j9UcozEVEgjwJdDN7BdjqxbpFRCS2A5NVuLi4mKysrMhwdnY22dnZsWdeOQeo+AnQz/+1Oe60zm3jLzd59odkdWpf7vpjafr9gvjt+T7+cmsLl/PiM49x4VWDSD+6XalpnXteHH/B0GsTU9sz409Lgs/nPR93WpnbKOJz85b9FHdaz/aHEQgECAQC4VFN482btEBPS0sjPz9/n+evzqtZKhvmVZF+dDsuvGpQ3FAXkdQVvcPrnNsQb74acZVLqlyaGB3qawuXJ7s5IlLDeHWVS3fgUuBw59xw51y9qqyvsmFeE0NRoS4ileXVSdF/mtlVZnakmY0ys9+qsr7K7pnX1FBUqItIZdSIQy6VPcxSk0MxOtRFRPZFjQj0yoq3p5u/dFkSW7Xvwu0XEdkXvg502DvU85cu47b7H012s/aZrnYRkX2VtMsWq1M41B+bMJ5PfzAeHnmLZ7XWFi5XCItIUvh+Dz1s42/Gpz8YXQ53NKnnXY8ENfWYvYjUfCkR6OHDLA+PvIVBQ27x9ERjTT4RKyI1m+8DPRzmY+++iaxO7T0/0ZjoSw5ryglcEUk+Xwf6nmEe5vUx7kSFek07gSsiyeXbQM/7uCBmmFeXqoZ69H9GIiL7wpeBHu77JVlhHlbZUI/3zUJE/GnpJx8kZD2+C/Tojry8CMOKHtOuaKgrzEVSz/23XJOQUPdVoHvdK2Nlj2nva6grzEVS093j/5aQUPdNoFdXmFf2mHZ5oa4wF0ldnf7ULSGh7otAr84wr0rYlhXqCnOR1JaIUK/xgV5TwjwsXqgrzEWkqqFeowO9poV5WKxQV5iLCFQt1GtsoNfUMA/TQyxEJJ7oUK+IGhnoNT3MwxTqIhJPONQrosYFenU8MLo6T1Aq1EUknk5/6lah+WtUoFdHmEP1n6BUqItIItSYQK+uMIfknKBUqItIVXkW6M65ns65J51zI51z9+w5vbi4eJ/Xlagwz31jfqWXrY56iQj1wItzKrVcZQUCgWqtl4ya2kZ/1EyFbfQk0J1zBwOTgJvNbCRwrHOuR/Q8GzZsiLv8rFmzSg1Hh/msBR+XWTt6+p6hmPvGgn2uGe2fH31aqWll1Yu3XPrR7Wj9pzPKDPWy2hp4KX6gl7VcZaeV9YGt7GvqVc3q3saypiWjprax5mzjRwvfKatkg3gTvNpD7woUmdn20PAHQO99XXjPDY3eM5+1sJxAj5pekT3dsl7cdxctqdS0spS13Mpv15e5p17eByweL/5IKluvvNfND9tYlSDwoqa2MfH1vKq5KK/MQG8Yb4Izs0o1pizOuYuBC83s7NC4DhdkAAAHgklEQVTw1cApZnZJ1DzbgN+jFisGwrvtDYAtcVZf1rTypjeNqlGR5So7zYt6yaipbdQ2ahvjq46aTYG00O8HmFm9WAsdWEYjq2I9cGjUcP3QuAgzq+tRbRGRlOTVIZePgJbOuTqh4W7AGx7VEhERPDrkAuCcOx04j+ChlJ1mdq8nhUREBPAw0Mss6lxP4ByCh2GsOsLeOVcP+Bh4x8yGVkO924BWBI+fZQJXmdlvCa7RHBgFdDKzP4bG3QE0B34EugAjzGyFh/UcMCg0SyugoZldmaB6bUL1lgAtgI1mdp9zrjEwGvia4Gt7p5n95FW9qOnDgSFm1rSqtcqr6ZzrAgwD8oH/Bsaa2UcJqnkAMIvg30NtoA1wJfAg8Cvwb6ATwW390cN6vwO3Ar8A7Qlu+11VrRdVt9TfvHOuLjAO+I7g52a0mRV6VS9q/ADg/4BDzezfiaoXk5lV6w9wMLAaqBMazgV6VEPdh4FngXHVUKs58DPBkxcArwMDPKhzHtAHyI8adz//+Y/6QmCWx/UuBS6LGj42gfX+CJwVNbyM4H9Sk4ALQuP6ANO9rBf6/ZTQZ2hDgt/DeNs4B+gXGtcPmJvAmgcAw6OGXwcGAKOixt0BPOZxvbuBk7347ITWV+pvnuB/kLeHfu8IvOdlvdC4dsADgAGHJLJerJ9k3ClapUsaK8M5d2mozlov60T5FdhB8GQwwCHAV4kuYmavAFv3GHe3hT5JBP+QErZHEKsewT/Mxs65wc65BxNcb7GZvR416gCCe3O9CZ6ngQR+fuLVc84dBlwEPJaIOvtSE/iJ/1zVkAaUfeF+xWruNrNRAM65Awl+M1hpZsP3aEdC3st49YD+QLpzbohz7n6C3yoTIs7ffORzY2ZfAJ2cc/VjLJ6QeqH7cW4Hqu1wczICvRmlQ6EkNM4Tzrn2QDsz+4dXNfZkZiXAbcCLzrlpwDqC30qqjXOuNjAQGF7evFXUEqhvZhOBacBbzrlaiS7inOsHvG3Bw0fRn6ESoFEoKBJeDygkeCgiJ5HrL6tmaBuHA5c558YRfB9f9qDeGcBsYLaZ5UeNbwj8DzDW43qtCB5ynQD8E3gpQXXi/c17kj1l1HsAuN/MdlS1xr5KRqCXe0ljgvUDtjnnhgEnAX9yzg3xsB7Ouc4EA723mV1O8Dj6CC9r7lG/NvAUcJeZrfG4XAnB44ZY8HhkfeAPiSzgnDsVOBW4OTQq+jNUH9hkZrs8qnc8sBO4FrgeqOecG+acy0xUvRg1AWYCt1nwWOx1wJuh8xUJY2Zvm1kvgnvJN4Ta0QB4ErjSzH72uF7kswO8D/y/BO0MxPub9yp7YtW7G2gEXBAaD3CLcy4rAfXi8uo69LJELmkMHXbpRvAD5AkzeyD8e+ikyCGhPQIvHQn8HBUyPwBHeVwTiJyYeZLgcbyvnHPnmlmuhyXnA61DtesDtUjsV+fewP8DbgIOd861JHgJbFfgXyT4ktg96wEHmdl1oWmtCJ7cHp2oerFqhrbxDwQ/N4T+rRNn8crUaw+km1n4dVsLtHbONQUmEPyP5LtEfXbi1eM/n52VBL/prTGz32OvZd/F+5sP/d4VeM851xFYGvo27UW9+6Pncc79FRhvHp8UTdZVLtV+SaNz7lzgLwTPsj9hZs97WKsWMBHYBmwGOhC8YuCHMheseJ3uwGVAL4J75A8DM0L1vg/N9l8WuiLFo3q1gYeAIoJXL+Sa2ZsJqteF4Ffx8OGA/wKeILj3Oiaq5jBLzFUuMeuZ2TTnXAbBPeXrgb8Cj5jZL17VJHiX4AVAAcErQP5hZq9WtV6oZhuCh1OWAAcRPHE3GHiT4E5eeM98q5n18bBeLYLHl9eExj1uZp9UtV5U3VJ/88BrBK9y+QHIAB60xF7lslfGOOfSCH67uz/087SZfZeomnu1IRmBLiIiiVdj+kMXEZGyKdBFRHxCgS4i4hMKdBERn1Cgi4j4RDKuQxfxnHPuTwQvp6wNvEPw9vndwE1mtjvG/G2Be83sonLW25lgB2R5CW+0SBUp0MWXzOwT51wewZs8RgI45/5J8Br6va6TN7OVoSdtlaczwVvW8xLVVpFEUaBLSgj19dKUYGdbTxPserclwb5TXnfODQZuAVo5564gdPMQwTsZ2wF/BuoCZwMNnXMjCfb6eD3Bv6PtQO09OrgSqVa6sUh8KxS6/0PwkEsTgt1OdCTY7/a40BO11gAdzWyTc+4bM2sVWjYP+KuZve2cewJYYGa5zrnLgVZRe/0/AKeZ2XLn3Ilm9mG1bqRIFJ0UFb/70MxGmtkgM/s7cCzBvXNCfQltIngbeCzh28KLKd2pU7SLgQedcx9STf31iMSjQy6SapYS7P+F0B56I2BVnHljfX39Pbioa0ywn/tDzayfc65ZaN0vJL7JIvtGgS6+FOqm9GSg9h69Bv4VGB96nNxRwF/MbHOoO9cGoROjGwgeX78y1J/9yUBH59wbwCfAJaFlJwKXO+eOBerhwQMwRCpCx9BFRHxCx9BFRHxCgS4i4hMKdBERn1Cgi4j4hAJdRMQnFOgiIj6hQBcR8QkFuoiIT/x/Y9SOsETok4EAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 1,\n", " squeeze=False)\n", "hatches = ['\\\\', '/', '|', '-', '+', 'x']\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": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAEBCAYAAABLzbBAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3XmcFPWd//HXRzzAlZvBi4ThFi9Qx6xXjCJG/ZnRkN2YqOuu0WTMGlFUVsUQAgYVlCAe6GZQdDXG1YS4OrpGBeMZXUVATFARBBQvhnNMIqLy+f1R1dAz9NA9M13VR72fj8c87KqurvrM154vn/rW9zB3R0RERETya4dCByAiIiJSjpRkiYiIiERASZaIiIhIBJRkiYiIiERASZaIiIhIBJRkiYiIiERgx0IHkEmnTp18l112oUuXLnTu3Hm7x9bX11NRURFTZOVBZdZyKrOWy6XMNmzYwPr161m9enWDu2//jz1GZjYIOB34FPgGMB5YBfwMWAJUApe6+1+bfrZHjx5eWVkZaXz6Pjam8mhM5bFVXGXx6quvrnb3bS5UlEnWwIEDmTt3bk7HVlVV5XysBFRmLacya7mWlJmZvR1xODkzs3bAVKDa3Teb2d3AF8A9wDh3f9nMRgKXEyRdjVRWVkb+XdH3sTGVR2Mqj63iKgszW5Fpvx4Xiog0dihgwEgzGwNUA+uBY4FXwmNeAE4uTHgiUiqKsiVLRKSAegOHA6e7+wYz+zXQHfjUty6R0QD0zPTh+vp6qqqqtmzX1NRQU1MTccgiErfa2lpqa2tTmz0yHVPySZYqr5ZTmbWcyqzlSrjMGoA33X1DuP088HWgg5lZmGh1IuijtY2KiorIH0+UcNlGQuXRmMpjqyjLIv0GysxWZzrGinHtwqqqKtfzZInL559/zsqVK9m4cWOhQyl77du3p1evXuy0006N9pvZq+5e1czHYmVm3YCXgMHu/qWZXQt8AhxN4z5ZPd19mz5Zqr9Ekqe5OqzkW7JE2mrlypV07NiRyspKzKzQ4ZQtd2fNmjWsXLmSPn36FDqcZrn7WjO7HJhmZvVABXAV8BtgnJl9E/gqcEkBwxSREhBJkmVmewATgSHufmi4rz0wBXgfGABMcvfFUVxfpCU2btyoBCsGZkb37t2pr68vdChZufuDwINNdi8Hzok/GhEpVVGNLjwKeIhghE7KKOBdd78WuAG4I6Jri7SYEqx4qJxFJEkiacly99+Z2TFNdp8MXBm+/7qZDTGzTu7eEEUMIq01e9HHeT3f8H133+77Tz31FDfddBOLFy9m0qRJnHLKKdsc8/zzz3PhhRcydepUjjnmmFbF8dxzzzFjxgz69evHunXrePvtt3nooYfYccfcqoE5c+bw2GOPMWXKFACmTZvGqFGjALj33nu54IILWLduXatiExEpR3H2yepJ0Hk0JTUEepskq0VDoN96LK9BNjLopOjOLRIaNmwY7777Lo888kjGBAvgqKOO4sADD2zTdS6++GJmzpy55Tznn38+mzdvzvnzxx13HMOGDduynZ5knXnmmfz0pz9tUTy5DH8uRRs2bKCmpobq6mqqq6u3e2y+E/pssiX8ItIydXV11NXVAWRcsSLOJGsV0DFtu6BDoEWKVW1tLYsXL6ZLly7U19czdepU2rVrB8ATTzzBrFmzmDdvHvfeey+VlZV873vfY/ny5Zx44onMnTuXqqoqJkyYsM1599hjD6ZOncrYsWPp378/t956KxBUEhdffDHf//73+eijj1i8eDGjRo3iySef5LXXXuO+++6jd+/eXHLJJcybN4+nn36a2tpa1q9fz/jx4znssMM48cQTAfjVr37FSy+9xKpVq3j44Ye3xJ1JLsOfS1Hnzp3Tk0cRKWOpm6kZM2ZsyPR+nDO+P0owwR9mdgDwmh4VijT2xhtvcMsttzBlyhTGjh3Lpk2buOOOrd0X+/Tpw80338yIESOYNWsWAJMnT+aDDz5g3LhxPPzww9x+++0Zz3333XdTUVHB8ccfz6BBg7jxxhuBoJI46qij6NOnD7fffjsHH3ww8+fP57bbbuO73/0uv/vd7wC48MILt5yrpqaGLl26MH78+C0JFgStcnfeeSdmxoIFC/JePiIipSSSJMvMvgGcBexpZmPNrANwI9DbzMYClwLnRnFtkVL25z//mfTFhfv3789rr73WaBugR48efPLJ1qfvffv2pV27drRr126bOahSunXrxvXXX8+yZcu49957mTp1Ko888siW9/v16wdAly5dtrzu2rVro+tk01x8IiJJFFXH92eAZzK89ZMoridSLg444ACWLVu2Zfvtt9/mkEMO2bLd3Oi8XEbtHX/88TzxxBOYGVVVVRx44IFs2rSp1bHusENw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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": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Turn time for John Smith: median=11s, mean=13s (std: 6.1s). min=5s, max=34s\n", "Turn time for Jane Doe: median=14s, mean=17s (std: 8.6s). min=4s, max=43s\n" ] }, { "data": { "image/png": "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\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 (std: {4:1.1f}s). min={2:1.0f}s, max={3:1.0f}s\".format(np.median(playerdt[playerID[0]]),\n", " np.mean(playerdt[playerID[0]]),\n", " np.min(playerdt[playerID[0]]),\n", " np.max(playerdt[playerID[0]]),\n", " np.std(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": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEBCAYAAAB/rs7oAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xt8VfWZ7/HPAwQJVRPkUgQcQaGAg6CCnVEYZwR9YQ8nCm2lUx2dVm06Yw+KFjrGchA4aLEwlWqt04xiW2s7ZYqlRKelitNWrVNvtMHRolhFCTpGNMFLkIC/88faO+zEJPu29l637/v14pW91749a+2Vh5Xf87uYcw4REUmOPkEHICIi5aXELyKSMEr8IiIJo8QvIpIwSvwiIgmjxC8ikjD9gg4gm8MPP9xNmDCh1+e0trZSVVUV2OPNzc0MHTq04NdHIcZy7EOpY/RjH4KOMZd9CHuM2eKLQoxR+J1+8skn9zrnun8D51yo/w0cONBl84UvfCHQx6dOnVrU6/2IodQxlmMfSh2jH/sQdIy57EPYY8wWXzliSMLvNNDsesirsWjqqampCfTxbHJ5fdhjLMc+lPr9/diHYl8f9PdcjhiSEGMUfqeBlp4eMBfykbsf+chH3Lvvvht0GL2aNm0aTzzxRNBh9Eox+kMxFi/s8UE8YjSzJ51z07p7LPRX/EOGDAk6hKxqa2uDDiErxegPxVi8sMcH8Y8x9Ff806ZNc2H/n1dEOmtvb2fXrl3s27cv6FBib8CAAYwaNYqKiopO23u74g99rx4RiZ5du3ZxxBFHMHr0aMws6HBiyznHnj172LVrF2PGjMn5daFv6mltbaW2tpaGhoagQxGRHO3bt4/Bgwcr6ZeYmTF48OBOf1k1NDSkm4F67Auqph4R8d2zzz7LxIkTgw4jMbo73pEu7opIgRrXw02TYFm197NxfdARlc2DDz7I3LlzOeGEE9i0aVO3z3n44Yc55ZRT+NWvflXw5zz00ENcfPHFLF++nIULFzJnzhwOHDiQ8+u3bNnCokWLOu6vXbu24/bdd9/NoEGDCo6tN2rjF4mjxvXQcAW0t3n3W1/x7gNMnh9cXD3YuLWJ1Zu3s7uljRHVlSyePZ65J48s+P1mzpzJyy+/zL333su5557b7XNmzJjB5MmTC/4MgKuuuop169Z1vM/ll1/OBx98kPPrZ82axcyZMzvur127loULFwJw4YUX8tWvfrWo+HqiK36RONqy4lDST2tv87aHzMatTdTds42mljYc0NTSRt0929i4tcm3z6ivr2fRokWsXLmSK6+8koMHD3Y89stf/pIFCxYwffp0XnrpJQA+85nP8Bd/8Rdcd911zJkzh+uuu67b9x0+fDjf+MY32LFjBwDf/va36d+/Pw0NDYwdO5YlS5Zw2WWXccYZZ3DPPffwj//4j5x++uns3LkTgKuvvpozzzyzI8aWlhaWLVvGL37xi47P+M53vsPnP/955syZ0ynuYijxi8RR6678tgdo9ebttLV3Tmht7QdZvXm7L+//7LPP8q1vfYs1a9awZMkS9u/fzx133NHx+JgxY7jllluYN28eGzZsAODGG29k9+7dLF26lE2bNnH77bd3+97f//73GTp0KGeffTbjx4/nm9/8JuCNup0xYwZjxozh9ttv55RTTmHr1q3cdtttnH/++fzkJz8B4Iorruh4r9raWqqrq1m2bBnnnHNOx/aZM2dy5513Ymb8/ve/9+WYKPGLxFHVqPy2B2h3S1te2/P19NNPM3r06I77Y8eO5Q9/+EOn++ANFn377bc7th933HH07duXvn37fqiPfNpRRx3F6tWrefHFF7n77rv5xje+wb333tvx+PHHHw9AdXV1x+1BgwZ1+pxseoqvGEr8InE0aylUVHbeVlHpbQ+ZEdWVeW3P14knnsiLL77Ycf/555/npJNO6rjfU5fTXLqinn322aR7Rk6bNo3Jkyezf//+gmPt08dLyVu3bs0rjnypuCsSR+kC7pYVXvNO1Sgv6YewsLt49njq7tnWqbmnsqIvi2ePL/q9zYwJEyawYMECFi5cSFVVFf379+eSSy7hscceo7Gxkbvuuovx48fT0NDAW2+9xY4dO/jud7/Lzp072bJlC3v37qW1tZV169ZxySWXdHr/iRMncskll3Dsscfy5ptvMmbMGM4777xO7z1ixAh+85vfsG3bNk4//fSOz3nuuee4/fbb2blzJz//+c/5xCc+wdSpU6mrq6OyspIdO3Z0fO5JJ53U8X7Tp0/v8S+QnI9L2Pvxjxs3zp155pnU1NT4MuufiJRevv34/ezV88ADD3DWWWexdu1aXnjhBW655ZaC3idKMo93Q0MDDQ0N/Ou//usO59y47p4f+sSv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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", "ylims = ax[0][0].get_ylim()\n", "ax[0][0].set_ylim([0, ylims[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": 16, "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 }