{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Solution to a problem posted at\n", "\n", "https://www.reddit.com/r/statistics/comments/4csjee/finding_pab_given_two_sets_of_data/\n", "\n", "\n", "Copyright 2016 Allen Downey\n", "\n", "MIT License: http://opensource.org/licenses/MIT" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function, division\n", "\n", "from numpy.random import choice\n", "from collections import Counter\n", "from collections import defaultdict" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Roll six 6-sided dice:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([2, 1, 2, 1, 1, 1])" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "def roll(die):\n", " return choice(die, 6)\n", "\n", "die = [1,2,3,4,5,6]\n", "roll(die)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Count how many times each outcome occurs and score accordingly:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def compute_score(outcome):\n", " counts = Counter(outcome)\n", " dd = defaultdict(list)\n", " [dd[v].append(k) for k, v in counts.items()]\n", " return len(dd[max(dd)])\n", "\n", "compute_score([1,1,1,1,1,1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run many times and accumulate scores:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "n = 100000\n", "scores = [compute_score(roll(die)) for _ in range(n)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Print the percentages of each score:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 59.178\n", "2 35.384\n", "3 3.867\n", "6 1.571\n" ] } ], "source": [ "for score, freq in sorted(Counter(scores).items()):\n", " print(score, 100*freq/n)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or even better, just enumerate the possibilities." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from itertools import product\n", "die = [1,2,3,4,5,6]\n", "counts = Counter(compute_score(list(outcome)) for outcome in product(*[die]*6))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 59.2335390947\n", "2 35.3652263374\n", "3 3.85802469136\n", "6 1.54320987654\n" ] } ], "source": [ "n = sum(counts.values())\n", "for score, freq in sorted(counts.items()):\n", " print(score, 100*freq/n)" ] }, { "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.5.1" } }, "nbformat": 4, "nbformat_minor": 0 }