Created
February 17, 2016 23:36
-
-
Save robclewley/a27990d7780bd4312540 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"import SnakesLadders as SL\n", | |
"from pprint import PrettyPrinter\n", | |
"import pandas as pd\n", | |
"import numpy as np\n", | |
"import scipy as sp\n", | |
"from scipy import stats # sub-package\n", | |
"from matplotlib import pyplot as plt\n", | |
"%matplotlib inline\n", | |
"\n", | |
"pp = PrettyPrinter(16) # 16 is the column width of the output" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"game = SL.GameFSM(16)\n", | |
"\n", | |
"# Make ladders\n", | |
"game.all_states[2].link = 10\n", | |
"game.all_states[8].link = 14\n", | |
"\n", | |
"# Make snakes\n", | |
"game.all_states[11].link = 4\n", | |
"game.all_states[15].links = 6\n", | |
"\n", | |
"game.make_state_kinds()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"GameFSM(position: 0/16)" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"game" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[ {'die': 4, 'end': 4, 'kind': 'B', 'start': 0},\n", | |
" {'die': 4, 'end': 14, 'kind': 'L', 'start': 4},\n", | |
" {'die': 3, 'end': 16, 'kind': 'B', 'start': 14}]\n", | |
"3\n", | |
"(0, 1)\n" | |
] | |
} | |
], | |
"source": [ | |
"game.run()\n", | |
"pp.pprint(game.records)\n", | |
"print(SL.count_moves(game.records))\n", | |
"print(SL.count_snakes_and_ladders(game.records))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"GameFSM(position: 16/16)" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"game" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Find average number of moves in 10000 games (variable `num_runs`)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"5.6127\n" | |
] | |
} | |
], | |
"source": [ | |
"tot_moves = 0\n", | |
"all_moves = []\n", | |
"num_runs = 10000\n", | |
"for i in range(num_runs):\n", | |
" game.run()\n", | |
" moves = SL.count_moves(game.records)\n", | |
" tot_moves += moves\n", | |
" all_moves.append(moves)\n", | |
"print(tot_moves/num_runs)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"19" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"max(all_moves)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"df = pd.DataFrame({'moves': all_moves})" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>moves</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>count</th>\n", | |
" <td>10000.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>mean</th>\n", | |
" <td>5.612700</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>std</th>\n", | |
" <td>2.240714</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>min</th>\n", | |
" <td>3.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25%</th>\n", | |
" <td>4.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>50%</th>\n", | |
" <td>5.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>75%</th>\n", | |
" <td>7.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>max</th>\n", | |
" <td>19.000000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" moves\n", | |
"count 10000.000000\n", | |
"mean 5.612700\n", | |
"std 2.240714\n", | |
"min 3.000000\n", | |
"25% 4.000000\n", | |
"50% 5.000000\n", | |
"75% 7.000000\n", | |
"max 19.000000" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df.describe()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>moves</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>8</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>9</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>17</th>\n", | |
" <td>9</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>18</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>19</th>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>20</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>21</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>22</th>\n", | |
" <td>8</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>23</th>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>24</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25</th>\n", | |
" <td>10</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>26</th>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>27</th>\n", | |
" <td>7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>28</th>\n", | |
" <td>7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>29</th>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9970</th>\n", | |
" <td>8</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9971</th>\n", | |
" <td>12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9972</th>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9973</th>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9974</th>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9975</th>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9976</th>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9977</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9978</th>\n", | |
" <td>7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9979</th>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9980</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9981</th>\n", | |
" <td>10</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9982</th>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9983</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9984</th>\n", | |
" <td>15</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9985</th>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9986</th>\n", | |
" <td>7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9987</th>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9988</th>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9989</th>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9990</th>\n", | |
" <td>12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9991</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9992</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9993</th>\n", | |
" <td>7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9994</th>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9995</th>\n", | |
" <td>8</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9996</th>\n", | |
" <td>12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9997</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9998</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9999</th>\n", | |
" <td>10</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>10000 rows × 1 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" moves\n", | |
"0 7\n", | |
"1 5\n", | |
"2 6\n", | |
"3 4\n", | |
"4 8\n", | |
"5 6\n", | |
"6 6\n", | |
"7 4\n", | |
"8 6\n", | |
"9 9\n", | |
"10 5\n", | |
"11 4\n", | |
"12 6\n", | |
"13 6\n", | |
"14 7\n", | |
"15 3\n", | |
"16 6\n", | |
"17 9\n", | |
"18 4\n", | |
"19 3\n", | |
"20 4\n", | |
"21 4\n", | |
"22 8\n", | |
"23 3\n", | |
"24 4\n", | |
"25 10\n", | |
"26 5\n", | |
"27 7\n", | |
"28 7\n", | |
"29 3\n", | |
"... ...\n", | |
"9970 8\n", | |
"9971 12\n", | |
"9972 5\n", | |
"9973 3\n", | |
"9974 5\n", | |
"9975 6\n", | |
"9976 6\n", | |
"9977 4\n", | |
"9978 7\n", | |
"9979 5\n", | |
"9980 4\n", | |
"9981 10\n", | |
"9982 6\n", | |
"9983 4\n", | |
"9984 15\n", | |
"9985 5\n", | |
"9986 7\n", | |
"9987 6\n", | |
"9988 5\n", | |
"9989 3\n", | |
"9990 12\n", | |
"9991 4\n", | |
"9992 4\n", | |
"9993 7\n", | |
"9994 5\n", | |
"9995 8\n", | |
"9996 12\n", | |
"9997 4\n", | |
"9998 4\n", | |
"9999 10\n", | |
"\n", | |
"[10000 rows x 1 columns]" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"pandas.core.series.Series" | |
] | |
}, | |
"execution_count": 11, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"type(df['moves'].value_counts())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"move_counts = df['moves'].value_counts()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"2384" | |
] | |
}, | |
"execution_count": 13, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"max(move_counts)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**We want as many bins as there are integers between the lowest and highest number of moves found in the data!**\n", | |
"`keys` is the method of the pd.Series object that pulls out those numbers. This approach is more robust than simply taking `len(move_counts)` in case some # moves are not represented." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([[<matplotlib.axes._subplots.AxesSubplot object at 0x0842F110>]], dtype=object)" | |
] | |
}, | |
"execution_count": 14, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\nD41LHrgrvCBMAAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x83ec550>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"df.hist(bins=max(move_counts.keys())-min(move_counts.keys()))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x8562270>]" | |
] | |
}, | |
"execution_count": 15, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\nQmCC\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x83ec4b0>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"xs = np.linspace(min(move_counts.keys()), max(move_counts.keys()))\n", | |
"plt.plot(xs, max(move_counts)*stats.norm.pdf(xs, df.mean(), df.std())/stats.norm.pdf(df.mean(), df.mean(), df.std()))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"moves 5.6127\n", | |
"dtype: float64" | |
] | |
}, | |
"execution_count": 16, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df.mean()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**We want to transpose our data records:**\n", | |
"\n", | |
"{'die': 4, 'end': 4, 'kind': 'B', 'start': 0},\n", | |
"{'die': 3, 'end': 7, 'kind': 'B', 'start': 4}]\n", | |
"\n", | |
"**mapping to**\n", | |
"\n", | |
"{'die': [4, 3],\n", | |
" 'end': [4, 7],\n", | |
" 'kind': ['B', 'B'],\n", | |
" 'start': [0, 4]}\n", | |
" \n", | |
" I.e., convert list of dicts to dict of lists, and make that into a Pandas dataframe" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"def convert_records(records):\n", | |
" \"\"\"\n", | |
" records is a list of dicts\n", | |
" \"\"\"\n", | |
" d = {'die': [],\n", | |
" 'start': [],\n", | |
" 'end': [],\n", | |
" 'kind': []\n", | |
" }\n", | |
" for recdict in records:\n", | |
" for k in ('die', 'start', 'end', 'kind'):\n", | |
" d[k].append(recdict[k])\n", | |
" return pd.DataFrame(d)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": true | |
}, | |
"outputs": [], | |
"source": [ | |
"moves_df = convert_records(game.records)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Note that this is just one individual game's records!" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"moves_df.to_csv('moves.csv')" | |
] | |
} | |
], | |
"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.5.1" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Author
robclewley
commented
Feb 29, 2016
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment