Skip to content

Instantly share code, notes, and snippets.

@JWDobken
Last active June 6, 2019 06:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JWDobken/40437948c1dc7093fa6d28986b00679f to your computer and use it in GitHub Desktop.
Save JWDobken/40437948c1dc7093fa6d28986b00679f to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import random\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def get_unique_vals_from_set(M, n):\n",
" \"\"\"Return n unique items from set M.\"\"\"\n",
" while True:\n",
" vals = set(random.choices(list(M), k=n))\n",
" if len(vals) == n:\n",
" return vals\n",
"\n",
"def get_draws_from_set(M, n, draws):\n",
" \"\"\"Return k draws from set M.\"\"\"\n",
" remain, current = list(), set()\n",
" for it in range(draws):\n",
" current = current | get_unique_vals_from_set(M, n)\n",
" remain.append(len(M - current))\n",
" return remain"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Probability all cards have been drawn (m=10, n=4, simulations=100000)')"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"m = 10 # number of cards in the set\n",
"n = 4 # number of cards per draw\n",
"draws = 15 # total number of draws\n",
"simulations = 100000 # number of simulations\n",
"\n",
"M = set(['C'+str(i) for i in range(m)])\n",
"df = pd.DataFrame([get_draws_from_set(M, n, draws) for _ in range(simulations)])\n",
"\n",
"dfcount = df[df == 0].count()\n",
"dfcount.index += 1\n",
"ax = dfcount.apply(lambda k: k/simulations).plot(figsize=(10, 5), grid=True, xticks=dfcount.index)\n",
"ax.set_xlabel(\"number of draws\")\n",
"ax.set_ylabel(\"Probability all cards have been drawn\")\n",
"ax.set_title(\"Probability all cards have been drawn (m={}, n={}, simulations={})\".format(m, n, simulations))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"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
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment