{ "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": 2, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import sqlite3" ] }, { "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": [ "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": [ "No expansions used.\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": {}, "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].scatter(rec['turnNum'][ig],\n", " np.cumsum(rec['points'][ig]),\n", " marker='x',\n", " c=colors[i])\n", " ax[0][0].step(rec['turnNum'][ig],\n", " np.cumsum(rec['points'][ig]),\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", " c=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": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEBCAYAAABojF4hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3Xl8U3W+//HXFwTBC1IKrSgVWhZZ\npIJSuYqOAuoP73VQ0VFQ9AeDTF0GKyhiWQYrgpZFQBSXUqAjMi6Isui4oMK4oAKyFEQpSwuiIGVr\nAQWEfu4fWQyQtEmTkzQnn+fj0Qec9HyXpKfvnpzlEyMiKKWUin7VIj0BpZRSoaGBrpRSNqGBrpRS\nNqGBrpRSNqGBrpRSNqGBrpRSNnFGpAauU6eOtG7dutLti4uLSUhI0PbaPubaR/PctX3w7b/99ts9\nIuK9AxGJyNdZZ50lwejYsaO21/Yx2T6a567tg28PrBQfuaqHXJRSyiY00JVSyiaqZ2VlRWTgnJyc\nrMGDBwfVR8eOHbW9to/J9tE8d20fXPsnnnhiZ1ZWVo637xmJUC2XtLQ0WblyZUTGVvbw+++/s2PH\nDo4cORLpqSgVcrVq1SIpKYkaNWqc9Lgx5lsRSfPWJmJXuSgVrB07dlC3bl2Sk5MxxkR6OkqFjIiw\nd+9eduzYQUpKit/tLD2GboypbYzJN8ZMtHIcFZuOHDlCgwYNNMyV7RhjaNCgQcDvPq0+KToGWG3x\nGCqGaZgru6rMtm3ZIRdjzN3Al8BFQB2rxlHKZdGi0PbXo0f53//000+ZOnUqBQUFZGdnc+ONN562\nzhdffEFGRgaTJk2iS5culZrH559/zvTp02nevDn79+9n06ZNLFiwgDPO8O/X95NPPuH9999n4kTH\nG+UpU6YwaNAgAObMmcPAgQPZv39/peamqhZLAt0Y0xZoIyLDjTEXeVunuLiYtLQ/juunp6eTnp5u\nxXQiY0eQ6ZJUQZqoiOvWrRvbt2/n3Xff9RrmAFdeeSUXXeT1V8BvgwcPZubMme5+HnjgAcrKyvxu\nf80119CtWzf3smeg9+nThxEjRgQ1P2W9nJwccnLcF7Y09LWeVXvoPYEjxphM4EqgpjFmkIhMca2Q\nkJCAXuWi7CQnJ4eCggLi4uIoLi5m0qRJVK9eHYCPPvqIefPmsWrVKubMmUNycjK9evWiqKiI66+/\nnpUrV5KWlsYTTzxxWr+NGjVi0qRJjBw5khYtWvDCCy8AsGjRIgYPHkzv3r3ZtWsXBQUFDBo0iMWL\nF7N27Vpee+01mjZtysMPP8yqVatYunQpOTk5HDhwgKysLC677DKuv/56AF5++WW+/vprdu/ezcKF\nC93zVlWD5w6vMWaPr/UsOYYuImNFZLSIZANfAMs9w1wpu/n+++95/vnnmThxIiNHjuTYsWPMmDHD\n/f2UlBSee+45evbsybx58wAYN24cP//8M6NGjWLhwoXk5uZ67fuVV14hISGB6667jlatWvHss88C\n0KNHD6688kpSUlLIzc3lkksuYfXq1bz44ovcdtttvPXWWwBkZGS4+0pPTycuLo6srCx3mIPj3cas\nWbMwxrBmzZqQvz4qPKy+yuVW4CrgMmPMHVaOpVQkrV+/nuTkZPdyixYtWLt27UnLAA0bNuTgwYPu\nx5s1a0b16tWpXr36adcbu8THxzNhwgQKCwuZM2cOkyZN4t1333V/v3nz5gDExcW5/1+/fv2TxqmI\nr/mp6GJpoIvIPBHpJiJXishrVo6lVCSlpqZSWFjoXt60aRMdOnRwL/u6YsGfKxmuu+46XDcApqWl\ncdFFF3Hs2LFKz7VaNcev/erVf1yAplcL2YPeWKRUkIwxtG7dmgcffJBBgwZRr149atasSf/+/Vm+\nfDn5+fnMnj2bVq1asWjRIvbv38/mzZvJy8tj27ZtfPLJJ5SWllJSUsLMmTPp37//Sf23adOG/v37\n07RpU/bt20dKSgo33XTTSX2fd955fPbZZ6xbt47OnTu7xykoKCA3N5dt27bx/vvv8z//8z907NiR\nYcOGUbt2bTZv3uwet0OHDu7+rrjiCp/vGFTVpbf+W0WvcrHc999/T5s2bSIy9scff8y1117LlClT\n2LJlC88991xE5qHszds2rrf+KxVi06ZN45NPPmHDhg2MGzcu0tNRCtBAV6pS3nnnnUhPQanTaD10\npZSyCQ10pZSyCQ10pZSyCQ10pZSyCT0pqmwjVNUW161byrhxt1FSUlzuelptMXCeY9tBXl4eN998\nM3FxcQB0796d2bNnk5iYGJH56B66UqdITe3CY4/NrXC9bt26cfPNN9O2bVvLqy0OGTKExx9/nClT\nptC0adOAqy1OmDDBvTxlyh9llfr06UO9evWCml8gPMe2g7y8PA4cOOBe/uCDDyIW5qB76Ep5lZra\nJeA2dq22uH37djIyMjh27BidO3emoKCAtm3bkpmZyYkTJxgyZAgNGjRg//79tGrVivT0dL788ktm\nzpxJq1at+Pbbb3nppZeYO3fuSWN37dqVe+65h8TEROLi4njjjTfo3r07kyZN4m9/+xuNGzfm0KFD\nnHvuuTzyyCN89dVX3H///fzpT3/i+PHjrFmzhkcffZQlS5awcuVKnnvuOdLS0igtLWXQoEG0bNmS\nHTt2cOONN9K9e/eTXtOpU6cyduxYMjIyOHToEBs3biQ3N5f4+HgWLFjA4sWLOf/889myZQvPPPMM\n69ev5/7776djx47ExcUxe/Zsnn/+eYqKipgyZQqtW7embdu2ZGRkMGXKFLp06cKXX37JP//5T1q0\naMEPP/zAmDFjOHz4MH/9619JTk7m3HPPZdmyZQwfPpwbbrgh4O3NKxGJyFfHjh3F1n5cGNyXqtCG\nDRtOWl64MLRf/pg1a5bceuutsmHDBklNTXU/ft9998nLL78sIiJ9+/aVnJwcERGZMGGCTJw4UURE\nCgsLJSkpSY4fPy7Hjx+X8847z+sYe/fulSFDhkhycrJccMEFMmXKFPf3+vbtK7m5uSIi8tBDD8nI\nkSNFRGTSpEknjXP11Ve72zRt2vSk/ps2bSoFBQUiInLDDTfIypUrvT7PPn36uJfbtGkj69atk5de\nekn+/ve/ux+/8MILZcOGDfLQQw/J6NGj5cSJE7J27Vo5dOjQaWM///zzct9994mIyIkTJ+T888+X\nwsJCERGZP3++e7327dtLaWmpiIg8/vjj7uc4efJkueuuu0RE5O2335aBAweKiEhmZqaMHTtWRER+\n/fVXadKkifz++++nPadatWrJwYMHRUQkOztbhgwZIvv27ZPGjRvL0aNH3Y8PGzbMPfajjz4qIiJr\n166VY8eOydVXX+2es4jj57FkyRIpKyuTxo0by+7du0VE5PXXX5c77rjD/Vr27t1bRESWL18uf/7z\nn0+bm8up27iICLBSfOSqHnJRtrFu3dKIjR0L1RabNWt20pgbNmwgPz//pMdTUlJYv349I0aMYO/e\nvXTq1Inp06e7C4J5+u6772jZsiXgKBjm+frt3LmT4cOHk52dTWlpKXv37vX7+ebn5/PDDz+QnZ3N\ns88+S2pqKvv27Ttt/ISEBOrUqeN+/t999x2bN28mPj6emjVruh/3/Dm6bsO/6KKLyq11s2fPHkpL\n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\nRESksLBQOnTo4HWMq6++WhYtWnTSY4mJibJx40bJzMyUCRMmiIjIkSNHpHHjxrJv3z7JzMyUsWPH\niojIr7/+Kk2aNJHff//9tL5r1aolBw8eFBGR7OxsGTJkiOzbt08aN24sR48edT8+bNgwWb16tVxy\nySWyd+9eOXr0qKxYscL9/JYsWSIiInv27JFGjRrJkSNHRERkxIgR8vjjj4uIyNKlS+XAgQMiIvLM\nM8/I888/737uTZo0kRMnTsj+/fuldu3acvDgQTlx4oScf/75IuL4Wbdu3VrKysrcY7peb099+/aV\n6dOni4jIzp075ZxzzpGysjLp3bu3zJ07V0REdu3aJY0bN5aysjIpLCyU8847T44dOyalpaWyceNG\nmTVrlnvOIiJLliyRvn37ioj4fL1FRM4880z382vbtq3s2bPH688zEKdu4yIiwErxkau6h65sI1J7\n5hC91RYTEhKoU6cOAC1atOA///kPmzdvJj4+npo1a7ofnzlzJk899RT3338/f/nLX6hZs6b7HYKn\nLVu2kJCQwJlnnglAs2bN2L59OwB16tRh9OjRNGzYkFWrVnHhhRe626WkpFCtWjXi4uJITEx0z8n1\nWqxfv55q1aq578qtUaMGpaWlXl+fZs2aAdCoUSMOHz5McXEx+fn5PProowCcc845lJSUsGfPHvfz\nq1GjBjVq1KBu3bosW7bM52vv6/W+9NJLOeecc6hXr577dT148GDYC6JpoCsVAtFabbG4uJhDhw5R\np04dCgoKaNu2LS1atGDfvn0cO3aMmjVrsmnTJjp06EBhYSGXXXYZAwYM4L333iMrK4uFCxdSvXp1\nRITNmzdzzjnn8Msvv3DkyBFq1arF1q1b3TXYBwwYwLPPPstVV11FTk4OP//8s9+vb2pqKrVr1yYz\nMxOAVatWUaNGDa/rbt26lW7durFz507OOussEhIS3K/TJZdcwq5du4iLi6Nhw4YcPnz4tJ+N6/ns\n27ePQ4cOnfQ9X683eP8Zh5sGulJeLP1qHV1u869AWjRXW4yPj2f69Ons3LmTjRs3MmPGDOrXr8+0\nadPIyMggKSmJoqIiJk+ezM8//8yYMWO4+OKL2b59O/feey8A1157Lbm5uZSVlTFjxgyys7Pp3bs3\nnTp14pdffiEpKQmAe+65hyeffJKuXbvy7bfful+HvLw8tm3bxpIlS9i2bRslJSXu0golJSXk5uYy\nYMAA7r33Xh5++GHq1q3L3r173e8+TlVQUMCTTz7J119/TV5eHsYYJk6cyIgRI9i0aRObN2/m9ddf\nxxhDbm4u27ZtY+bMmfTv3x+ATp068eqrr7J9+3b69+/P7Nmzyc/PZ9myZT5f79zcXEpKSpg3bx7x\n8fHuPl3H/8NFqy1aRastWk6rLQYvOTk55FeoLFu2jM6dOwMwevRomjVrxl133RXSMXzp168f/fr1\nc19yGO2qRLVFY0w1YBHwDVATaA70F5HfrBhPqXCzQ7XFF154gZKSEubMmUOfPn1C1u/rr7/Ov//9\nb8466yyKi4sZPnx4yPouzxdffOF+N9SxY0fq1q0blnGrEkv20J2BPlxExjiXFwBvisgc1zq6h14B\n3UOvUCT30JUKhyqxhy4iZYArzM8AkoCNVoyllFLKwdKTosaY7sBg4F0ROWl3vLi4mLS0P/7IpKen\nk56ebuV0wmr5iuDad0oKrv2iIN8g9IiSNwgiUiWuLlAq1DyPnuTk5JCTk+NabOirjaWBLiIfAh8a\nY14xxjwgIi+4vpeQkICtD7koy9WqVYu9e/fSoEEDDXVlKyLC3r17qVWrFnDyDq8xZo+vdladFG0L\npIjIe86HCoFmVoylYldSUhI7duw47SYepeygVq1a7ks+/WXVHvpR4B5jzMVADaANkGHRWCpG1ahR\ng5SUlEhPQ6kqw6qToluAW6zoWymllHdaPlcppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10p\npWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxC\nA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10p\npWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxCA10ppWxC\nA10ppWxCA10ppWxCA10ppWxCA10ppWyi3EA3xrQL10SUUkoF54wKvj/aGDPf2zdE5BUL5qOUUqqS\nKjrkUgIUAducX6XAGKCbtdNSSikVqIr20EeKyE8Axpj2QA4wWUQmWz4zpZRSASk30D3C/G4ce+Z/\nFZFPwzExpZRSgSk30I0x1YFngc7A1SJS5Hy8toj8Zv30lFJK+auiQy6fAceBO4EyY0wTwAB/B4b6\n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\noCullE38H/mKsfpLbfIhAAAAAElFTkSuQmCC\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.3,\n", " color=colors[i],\n", " hatch=hatches[i],\n", " label=players[i] + ' postgame portion')\n", "\n", "ax[0][0].set_yticks(np.arange(0,5))\n", "ax[0][0].set_xticks(np.arange(0, maxpts+1, 1))\n", "ax[0][0].set_xlim([0, maxpts+1])\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 per Type" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Fraction of Points per Type" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Distribution of time per turn" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# histogram of interval between turns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Closing\n", "\n", "Let's cleanly close the directory." ] }, { "cell_type": "code", "execution_count": 10, "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 }