{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Lesson 25: Random number generation\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", "
\n", " \n", " Loading BokehJS ...\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "'use strict';\n", "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " const force = true;\n", "\n", " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n", " root._bokeh_onload_callbacks = [];\n", " root._bokeh_is_loading = undefined;\n", " }\n", "\n", "const JS_MIME_TYPE = 'application/javascript';\n", " const HTML_MIME_TYPE = 'text/html';\n", " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", " const CLASS_NAME = 'output_bokeh rendered_html';\n", "\n", " /**\n", " * Render data to the DOM node\n", " */\n", " function render(props, node) {\n", " const script = document.createElement(\"script\");\n", " node.appendChild(script);\n", " }\n", "\n", " /**\n", " * Handle when an output is cleared or removed\n", " */\n", " function handleClearOutput(event, handle) {\n", " function drop(id) {\n", " const view = Bokeh.index.get_by_id(id)\n", " if (view != null) {\n", " view.model.document.clear()\n", " Bokeh.index.delete(view)\n", " }\n", " }\n", "\n", " const cell = handle.cell;\n", "\n", " const id = cell.output_area._bokeh_element_id;\n", " const server_id = cell.output_area._bokeh_server_id;\n", "\n", " // Clean up Bokeh references\n", " if (id != null) {\n", " drop(id)\n", " }\n", "\n", " if (server_id !== undefined) {\n", " // Clean up Bokeh references\n", " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", " cell.notebook.kernel.execute(cmd_clean, {\n", " iopub: {\n", " output: function(msg) {\n", " const id = msg.content.text.trim()\n", " drop(id)\n", " }\n", " }\n", " });\n", " // Destroy server and session\n", " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", " cell.notebook.kernel.execute(cmd_destroy);\n", " }\n", " }\n", "\n", " /**\n", " * Handle when a new output is added\n", " */\n", " function handleAddOutput(event, handle) {\n", " const output_area = handle.output_area;\n", " const output = handle.output;\n", "\n", " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n", " return\n", " }\n", "\n", " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", "\n", " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", " // store reference to embed id on output_area\n", " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " }\n", " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " const bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " const script_attrs = bk_div.children[0].attributes;\n", " for (let i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", " }\n", "\n", " function register_renderer(events, OutputArea) {\n", "\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " const toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[toinsert.length - 1]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " /* Handle when an output is cleared or removed */\n", " events.on('clear_output.CodeCell', handleClearOutput);\n", " events.on('delete.Cell', handleClearOutput);\n", "\n", " /* Handle when a new output is added */\n", " events.on('output_added.OutputArea', handleAddOutput);\n", "\n", " /**\n", " * Register the mime type and append_mime function with output_area\n", " */\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " /* Is output safe? */\n", " safe: true,\n", " /* Index of renderer in `output_area.display_order` */\n", " index: 0\n", " });\n", " }\n", "\n", " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", " if (root.Jupyter !== undefined) {\n", " const events = require('base/js/events');\n", " const OutputArea = require('notebook/js/outputarea').OutputArea;\n", "\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\n", " }\n", " }\n", " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", " root._bokeh_timeout = Date.now() + 5000;\n", " root._bokeh_failed_load = false;\n", " }\n", "\n", " const NB_LOAD_WARNING = {'data': {'text/html':\n", " \"
\\n\"+\n", " \"

\\n\"+\n", " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", " \"

\\n\"+\n", " \"\\n\"+\n", " \"\\n\"+\n", " \"from bokeh.resources import INLINE\\n\"+\n", " \"output_notebook(resources=INLINE)\\n\"+\n", " \"\\n\"+\n", " \"
\"}};\n", "\n", " function display_loaded(error = null) {\n", " const el = document.getElementById(\"ab87453d-6611-45f0-aeae-4d1cd8374766\");\n", " if (el != null) {\n", " const html = (() => {\n", " if (typeof root.Bokeh === \"undefined\") {\n", " if (error == null) {\n", " return \"BokehJS is loading ...\";\n", " } else {\n", " return \"BokehJS failed to load.\";\n", " }\n", " } else {\n", " const prefix = `BokehJS ${root.Bokeh.version}`;\n", " if (error == null) {\n", " return `${prefix} successfully loaded.`;\n", " } else {\n", " return `${prefix} encountered errors while loading and may not function as expected.`;\n", " }\n", " }\n", " })();\n", " el.innerHTML = html;\n", "\n", " if (error != null) {\n", " const wrapper = document.createElement(\"div\");\n", " wrapper.style.overflow = \"auto\";\n", " wrapper.style.height = \"5em\";\n", " wrapper.style.resize = \"vertical\";\n", " const content = document.createElement(\"div\");\n", " content.style.fontFamily = \"monospace\";\n", " content.style.whiteSpace = \"pre-wrap\";\n", " content.style.backgroundColor = \"rgb(255, 221, 221)\";\n", " content.textContent = error.stack ?? error.toString();\n", " wrapper.append(content);\n", " el.append(wrapper);\n", " }\n", " } else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(() => display_loaded(error), 100);\n", " }\n", " }\n", "\n", " function run_callbacks() {\n", " try {\n", " root._bokeh_onload_callbacks.forEach(function(callback) {\n", " if (callback != null)\n", " callback();\n", " });\n", " } finally {\n", " delete root._bokeh_onload_callbacks\n", " }\n", " console.debug(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(css_urls, js_urls, callback) {\n", " if (css_urls == null) css_urls = [];\n", " if (js_urls == null) js_urls = [];\n", "\n", " root._bokeh_onload_callbacks.push(callback);\n", " if (root._bokeh_is_loading > 0) {\n", " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " root._bokeh_is_loading = css_urls.length + js_urls.length;\n", "\n", " function on_load() {\n", " root._bokeh_is_loading--;\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", " run_callbacks()\n", " }\n", " }\n", "\n", " function on_error(url) {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " for (let i = 0; i < css_urls.length; i++) {\n", " const url = css_urls[i];\n", " const element = document.createElement(\"link\");\n", " element.onload = on_load;\n", " element.onerror = on_error.bind(null, url);\n", " element.rel = \"stylesheet\";\n", " element.type = \"text/css\";\n", " element.href = url;\n", " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", " document.body.appendChild(element);\n", " }\n", "\n", " for (let i = 0; i < js_urls.length; i++) {\n", " const url = js_urls[i];\n", " const element = document.createElement('script');\n", " element.onload = on_load;\n", " element.onerror = on_error.bind(null, url);\n", " element.async = false;\n", " element.src = url;\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " };\n", "\n", " function inject_raw_css(css) {\n", " const element = document.createElement(\"style\");\n", " element.appendChild(document.createTextNode(css));\n", " document.body.appendChild(element);\n", " }\n", "\n", " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.4.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.4.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.4.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.4.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.4.0.min.js\"];\n", " const css_urls = [];\n", "\n", " const inline_js = [ function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", "function(Bokeh) {\n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " if (root.Bokeh !== undefined || force === true) {\n", " try {\n", " for (let i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }\n", "\n", " } catch (error) {display_loaded(error);throw error;\n", " }if (force === true) {\n", " display_loaded();\n", " }} else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!root._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " root._bokeh_failed_load = true;\n", " } else if (force !== true) {\n", " const cell = $(document.getElementById(\"ab87453d-6611-45f0-aeae-4d1cd8374766\")).parents('.cell').data().cell;\n", " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", " }\n", " }\n", "\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(css_urls, js_urls, function() {\n", " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(window));" ], "application/vnd.bokehjs_load.v0+json": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(\"ab87453d-6611-45f0-aeae-4d1cd8374766\");\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.4.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.4.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.4.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.4.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.4.0.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {display_loaded(error);throw error;\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"ab87453d-6611-45f0-aeae-4d1cd8374766\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "import scipy.stats\n", "\n", "import iqplot\n", "\n", "import bokeh.io\n", "import bokeh.plotting\n", "\n", "bokeh.io.output_notebook()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Random number generation** (RNG) is the process by which a string of random numbers may be drawn. Of course, the numbers are not completely random for several reasons.\n", "\n", "1. They are drawn from a probability distribution. The most common one is the uniform distribution on the domain $0 \\le x < 1$, i.e., random numbers between zero and one. (\"Completely random\" does not make sense because of the infinite magnitude of numbers.) \n", "2. In most computer applications, including the ones we'll use in bootcamp, the random numbers are actually pseudorandom. They depend entirely on an input **seed** and are then generated by a deterministic algorithm from that seed.\n", "\n", "This is a bit academic. Let's jump right in generating random numbers. Much of the random number generation functionality you will need is in the `np.random` module. Let's start by generating random numbers from a Uniform distribution." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.90216093, 0.23288743, 0.32570368, 0.69448876, 0.85816011,\n", " 0.82681583, 0.07555072, 0.53569945, 0.83129189, 0.0379437 ])" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.uniform(low=0, high=1, size=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The function `uniform()` in the `np.random` module generates random numbers on the interval \\[`low`, `high`) from a Uniform distribution. The `size` kwarg is how many random numbers you wish to generate, and is a kwarg in all of Numpy's random number generators. The random numbers are returned as a NumPy array.\n", "\n", "We can check to make sure it is appropriately drawing random numbers out of the uniform distribution by plotting the cumulative distribution function, just like we did last time. We'll generate 1,000 random numbers and plot them along with the CDF of a Uniform distribution." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " const docs_json = {\"b6690c3a-d0aa-4059-b497-5cd1fa1dde99\":{\"version\":\"3.4.0\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1001\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1002\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1003\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1010\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1011\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1008\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1039\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1033\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1034\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1035\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[2000],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[2000],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1040\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1041\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1036\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b3\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1037\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b3\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1038\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b3\",\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1048\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1042\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1043\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1044\"},\"data\":{\"type\":\"map\"}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1049\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1050\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Ray\",\"id\":\"p1045\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":0.00048549289266097695},\"y\":{\"type\":\"value\",\"value\":0},\"angle\":{\"type\":\"value\",\"value\":3.141592653589793},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b3\"},\"line_width\":{\"type\":\"value\",\"value\":2}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Ray\",\"id\":\"p1046\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":0.00048549289266097695},\"y\":{\"type\":\"value\",\"value\":0},\"angle\":{\"type\":\"value\",\"value\":3.141592653589793},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"line_width\":{\"type\":\"value\",\"value\":2}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Ray\",\"id\":\"p1047\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":0.00048549289266097695},\"y\":{\"type\":\"value\",\"value\":0},\"angle\":{\"type\":\"value\",\"value\":3.141592653589793},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"line_width\":{\"type\":\"value\",\"value\":2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1057\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1051\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1052\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1053\"},\"data\":{\"type\":\"map\"}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1058\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1059\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Ray\",\"id\":\"p1054\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":0.9998586870382858},\"y\":{\"type\":\"value\",\"value\":1},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b3\"},\"line_width\":{\"type\":\"value\",\"value\":2}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Ray\",\"id\":\"p1055\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":0.9998586870382858},\"y\":{\"type\":\"value\",\"value\":1},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"line_width\":{\"type\":\"value\",\"value\":2}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Ray\",\"id\":\"p1056\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":0.9998586870382858},\"y\":{\"type\":\"value\",\"value\":1},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"line_width\":{\"type\":\"value\",\"value\":2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1066\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1060\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1061\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1062\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1]],[\"y\",[0,1]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1067\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1068\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1063\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1064\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1065\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.2,\"line_width\":2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1009\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1022\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1023\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1024\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1025\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1030\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1031\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1032\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1017\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1018\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1019\"},\"axis_label\":\"ECDF\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1020\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1012\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1013\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1014\"},\"axis_label\":\"x\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1015\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1016\",\"attributes\":{\"axis\":{\"id\":\"p1012\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1021\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1017\"}}}],\"frame_width\":375,\"frame_height\":275}}]}};\n", " const render_items = [{\"docid\":\"b6690c3a-d0aa-4059-b497-5cd1fa1dde99\",\"roots\":{\"p1001\":\"d06bf4dd-2922-40c8-8e79-8ec63529e7d2\"},\"root_ids\":[\"p1001\"]}];\n", " void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " let attempts = 0;\n", " const timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "p1001" } }, "output_type": "display_data" } ], "source": [ "# Generate random numbers\n", "x = np.random.uniform(low=0, high=1, size=1000)\n", "\n", "# Plot the ECDF of randomly generated numbers\n", "p = iqplot.ecdf(x)\n", "\n", "# Overlay the theoretical CDF\n", "p.line(\n", " x=[0, 1],\n", " y=[0, 1],\n", " line_width=2,\n", " line_color=\"orange\",\n", ")\n", "\n", "bokeh.io.show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, it looks like our random number generator is doing a good job.\n", "\n", "Generating random numbers on the uniform interval is one of the most commonly used RNG techniques. In fact, many of the other contexts of RNG are derived from draws from the uniform distribution. For example, you can simulate flipping a biased (unfair) coin." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ True True True True True True True False False False True True\n", " True True True True True True False True]\n", "\n", "There were 16 heads.\n" ] } ], "source": [ "# Generate 20 random numbers on uniform interval\n", "x = np.random.uniform(low=0, high=1, size=20)\n", "\n", "# Make the coin flips (< 0.7 means we have a 70% chance of heads)\n", "heads = x < 0.7\n", "\n", "# Show which were heads, and count the number of heads\n", "print(heads)\n", "print(\"\\nThere were\", np.sum(heads), \"heads.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choice of generator\n", "\n", "Until version 1.17.3 of Numpy, the algorithm under the hood of calls to functions like `np.random.uniform()` was the [Mersenne Twister Algorithm](https://en.wikipedia.org/wiki/Mersenne_Twister) for generating random numbers. It is a very widely used and reliable method for generating random numbers. However, starting with version 1.17.4, the `numpy.random` module offers random number generators with better statistical performance, including the [PCG64 generator](http://www.pcg-random.org). Going forward, the preferred approach to doing random number generation is to first instantiate a generator of your choice, and then use its methods to generate numbers out of probability distributions.\n", "\n", "Let's set up a PCG64 generator, which is Numpy's default." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "rng = np.random.default_rng()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have the generator, we can use it to draw numbers out of distributions. The syntax is the same as before, except `rg` replaces `np.random`." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.14663799, 0.38498282, 0.45554942, 0.97398763, 0.83317913,\n", " 0.74626835, 0.64010841, 0.9656553 , 0.94760093, 0.25959627,\n", " 0.91390263, 0.78576782, 0.72786194, 0.45892498, 0.21277094,\n", " 0.98267713, 0.31657219, 0.04076349, 0.04484067, 0.78795204])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rng.uniform(low=0, high=1, size=20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Seeding random number generators\n", "\n", "Now, just to demonstrate that random number generation is deterministic, we will explicitly **seed** the random number generator (which is usually seeded with a number representing the date/time to avoid repeats) to show that we get the same random numbers." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.18866535, 0.04418857, 0.02961285, 0.22083971, 0.43341773,\n", " 0.13166813, 0.42112164, 0.43507845, 0.61380912, 0.30627603])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Instantiate generator with a seed\n", "rng = np.random.default_rng(seed=3252)\n", "\n", "# Generate random numbers\n", "rng.uniform(size=10)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.18866535, 0.04418857, 0.02961285, 0.22083971, 0.43341773,\n", " 0.13166813, 0.42112164, 0.43507845, 0.61380912, 0.30627603])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Re-seed the RNG\n", "rng = np.random.default_rng(seed=3252)\n", "\n", "# Generate random numbers\n", "rng.uniform(size=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The random number sequence is exactly the same. If we choose a different seed, we get totally different random numbers." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.31390226, 0.73012457, 0.05800998, 0.01557021, 0.29825701,\n", " 0.10106784, 0.06329107, 0.58614237, 0.52023168, 0.52779988])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Fit one more fan in the 3252\n", "rng = np.random.default_rng(seed=3253)\n", "rng.uniform(size=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you are writing tests, it is often useful to seed the random number generator to get reproducible results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Drawing random numbers out of other distributions\n", "\n", "We can also draw random numbers from other probability distributions. For example, say we wanted to draw random samples from a Normal distribution with mean μ and standard deviation σ. (We already saw this example when we were looking at histograms, but we repeat it here.)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " const docs_json = {\"4b6d784f-75d0-41d6-b8ec-8e4fe6e4bc5f\":{\"version\":\"3.4.0\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1072\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1074\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1071\",\"attributes\":{\"start\":0}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1081\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1082\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1079\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1110\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1104\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1105\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1106\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"TPxU0rnzF0BM/FTSufMXQIkhKXg/LxhAiSEpeD8vGEDFRv0dxWoYQMVG/R3FahhAAmzRw0qmGEACbNHDSqYYQD+RpWnQ4RhAP5GladDhGEB8tnkPVh0ZQHy2eQ9WHRlAuNtNtdtYGUC4202121gZQPUAIlthlBlA9QAiW2GUGUAyJvYA588ZQDIm9gDnzxlAb0vKpmwLGkBvS8qmbAsaQKtwnkzyRhpAq3CeTPJGGkDolXLyd4IaQOiVcvJ3ghpAJbtGmP29GkAlu0aY/b0aQGLgGj6D+RpAYuAaPoP5GkCeBe/jCDUbQJ4F7+MINRtA2yrDiY5wG0DbKsOJjnAbQBhQly8UrBtAGFCXLxSsG0BUdWvVmecbQFR1a9WZ5xtAkZo/ex8jHECRmj97HyMcQM6/EyGlXhxAzr8TIaVeHEAL5efGKpocQAvl58YqmhxASAq8bLDVHEBICrxssNUcQIQvkBI2ER1AhC+QEjYRHUDBVGS4u0wdQMFUZLi7TB1A/nk4XkGIHUD+eTheQYgdQDqfDATHwx1AOp8MBMfDHUB3xOCpTP8dQHfE4KlM/x1AtOm0T9I6HkC06bRP0joeQPAOifVXdh5A8A6J9Vd2HkAtNF2b3bEeQC00XZvdsR5AalkxQWPtHkBqWTFBY+0eQKd+BefoKB9Ap34F5+goH0Dko9mMbmQfQOSj2YxuZB9AIMmtMvSfH0Agya0y9J8fQF3ugdh52x9AXe6B2HnbH0DNCSu/fwsgQM0JK79/CyBAaxwVkkIpIEBrHBWSQikgQAov/2QFRyBACi//ZAVHIECoQek3yGQgQKhB6TfIZCBARlTTCouCIEBGVNMKi4IgQOVmvd1NoCBA5Wa93U2gIECDeaewEL4gQIN5p7AQviBAIoyRg9PbIEAijJGD09sgQMCee1aW+SBAwJ57Vpb5IEBesWUpWRchQF6xZSlZFyFA/MNP/Bs1IUD8w0/8GzUhQJvWOc/eUiFAm9Y5z95SIUA56SOioXAhQDnpI6KhcCFA2PsNdWSOIUDY+w11ZI4hQHYO+EcnrCFAdg74RyesIUAUIeIa6skhQBQh4hrqySFAszPM7aznIUCzM8ztrOchQFFGtsBvBSJAUUa2wG8FIkDwWKCTMiMiQPBYoJMyIyJAjmuKZvVAIkCOa4pm9UAiQCx+dDm4XiJALH50ObheIkDKkF4Me3wiQMqQXgx7fCJAaaNI3z2aIkBpo0jfPZoiQAe2MrIAuCJAB7YysgC4IkCmyByFw9UiQKbIHIXD1SJARNsGWIbzIkBE2wZYhvMiQOLt8CpJESNA4u3wKkkRI0CBANv9Cy8jQIEA2/0LLyNAHxPF0M5MI0AfE8XQzkwjQL4lr6ORaiNAviWvo5FqI0BcOJl2VIgjQFw4mXZUiCNA+kqDSRemI0D6SoNJF6YjQJhdbRzawyNAmF1tHNrDI0A3cFfvnOEjQDdwV++c4SNA1oJBwl//I0DWgkHCX/8jQHSVK5UiHSRAdJUrlSIdJEASqBVo5TokQBKoFWjlOiRAsLr/OqhYJECwuv86qFgkQE/N6Q1rdiRAT83pDWt2JEDt39PgLZQkQO3f0+AtlCRAjPK9s/CxJECM8r2z8LEkQCoFqIazzyRAKgWohrPPJEDIF5JZdu0kQMgXkll27SRAZip8LDkLJUBmKnwsOQslQAU9Zv/7KCVABT1m//soJUCkT1DSvkYlQKRPUNK+RiVAQmI6pYFkJUBCYjqlgWQlQOB0JHhEgiVA4HQkeESCJUB+hw5LB6AlQH6HDksHoCVAHZr4Hcq9JUAdmvgdyr0lQLus4vCM2yVAu6zi8IzbJUBav8zDT/klQFq/zMNP+SVA+NG2lhIXJkD40baWEhcmQJbkoGnVNCZAluSgadU0JkA094o8mFImQDT3ijyYUiZA0wl1D1twJkDTCXUPW3AmQHIcX+IdjiZAchxf4h2OJkAQL0m14KsmQBAvSbXgqyZArkEziKPJJkCuQTOIo8kmQExUHVtm5yZATFQdW2bnJkDrZgcuKQUnQOtmBy4pBSdAiXnxAOwiJ0CJefEA7CInQCiM29OuQCdAKIzb065AJ0DGnsWmcV4nQMaexaZxXidAZLGveTR8J0Bksa95NHwnQALEmUz3mSdAAsSZTPeZJ0Ch1oMfurcnQKHWgx+6tydAQOlt8nzVJ0BA6W3yfNUnQN77V8U/8ydA3vtXxT/zJ0B8DkKYAhEoQHwOQpgCEShAGiEsa8UuKEAaISxrxS4oQLkzFj6ITChAuTMWPohMKEBYRgARS2ooQFhGABFLaihA9ljq4w2IKED2WOrjDYgoQJRr1LbQpShAlGvUttClKEAyfr6Jk8MoQDJ+vomTwyhA0ZCoXFbhKEDRkKhcVuEoQG+jki8Z/yhAb6OSLxn/KEAOtnwC3BwpQA62fALcHClArMhm1Z46KUCsyGbVnjopQErbUKhhWClASttQqGFYKUDo7Tp7JHYpQOjtOnskdilAhwAlTueTKUCHACVO55MpQCYTDyGqsSlAJhMPIaqxKUDEJfnzbM8pQMQl+fNszylAYjjjxi/tKUBiOOPGL+0pQABLzZnyCipAAEvNmfIKKkCfXbdstSgqQJ9dt2y1KCpAPXChP3hGKkA9cKE/eEYqQNyCixI7ZCpA3IKLEjtkKkB6lXXl/YEqQHqVdeX9gSpAGKhfuMCfKkAYqF+4wJ8qQLa6SYuDvSpAtrpJi4O9KkBVzTNeRtsqQFXNM15G2ypA9N8dMQn5KkD03x0xCfkqQJLyBwTMFitAkvIHBMwWK0AwBfLWjjQrQDAF8taONCtAzhfcqVFSK0DOF9ypUVIrQG0qxnwUcCtAbSrGfBRwK0ALPbBP140rQAs9sE/XjStAqk+aIpqrK0CqT5oimqsrQEhihPVcyStASGKE9VzJK0DmdG7IH+crQOZ0bsgf5ytAhYdYm+IELECFh1ib4gQsQCOaQm6lIixAI5pCbqUiLEDBrCxBaEAsQMGsLEFoQCxAYL8WFCteLEBgvxYUK14sQP7RAOfteyxA/tEA5+17LECd5Oq5sJksQJ3k6rmwmSxAO/fUjHO3LEA799SMc7csQNkJv1821SxA2Qm/XzbVLEB4HKky+fIsQHgcqTL58ixAFi+TBbwQLUAWL5MFvBAtQA==\"},\"shape\":[296],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[296],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1111\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1112\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1107\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b3\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1108\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b3\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1109\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b3\",\"line_alpha\":0.2,\"line_width\":2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1080\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1093\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1094\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1095\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1096\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1101\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1102\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1103\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1088\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1089\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1090\"},\"axis_label\":\"approximate PDF\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1091\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1083\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1084\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1085\"},\"axis_label\":\"x\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1086\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1087\",\"attributes\":{\"axis\":{\"id\":\"p1083\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1092\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1088\"}}}],\"frame_width\":375,\"frame_height\":275}}]}};\n", " const render_items = [{\"docid\":\"4b6d784f-75d0-41d6-b8ec-8e4fe6e4bc5f\",\"roots\":{\"p1072\":\"e1a57a5d-335e-46a8-9e40-17ae0717255f\"},\"root_ids\":[\"p1072\"]}];\n", " void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " let attempts = 0;\n", " const timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "p1072" } }, "output_type": "display_data" } ], "source": [ "# Set parameters\n", "mu = 10\n", "sigma = 1\n", "\n", "# Draw 100000 random samples\n", "x = rng.normal(mu, sigma, size=100000)\n", "\n", "# Plot the histogram\n", "p = iqplot.histogram(\n", " x,\n", " density=True,\n", " rug=False,\n", " y_axis_label=\"approximate PDF\",\n", ")\n", "\n", "bokeh.io.show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It looks Normal, but, again, comparing the resulting ECDF is a better way to look at this. We'll check out the ECDF with 1000 samples so as not to choke the browser. I will also make use of the theoretical CDF for the Normal distribution available from the `scipy.stats` module." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " const docs_json = {\"737b66e5-61e2-4b51-ad42-e230ae6d730a\":{\"version\":\"3.4.0\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1115\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1116\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1117\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1124\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1125\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1122\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1153\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1147\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1148\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1149\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[2000],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[2000],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1154\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1155\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1150\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b3\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1151\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b3\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1152\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b3\",\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1162\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1156\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1157\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1158\"},\"data\":{\"type\":\"map\"}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1163\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1164\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Ray\",\"id\":\"p1159\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":6.715254567062564},\"y\":{\"type\":\"value\",\"value\":0},\"angle\":{\"type\":\"value\",\"value\":3.141592653589793},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b3\"},\"line_width\":{\"type\":\"value\",\"value\":2}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Ray\",\"id\":\"p1160\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":6.715254567062564},\"y\":{\"type\":\"value\",\"value\":0},\"angle\":{\"type\":\"value\",\"value\":3.141592653589793},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"line_width\":{\"type\":\"value\",\"value\":2}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Ray\",\"id\":\"p1161\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":6.715254567062564},\"y\":{\"type\":\"value\",\"value\":0},\"angle\":{\"type\":\"value\",\"value\":3.141592653589793},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"line_width\":{\"type\":\"value\",\"value\":2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1171\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1165\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1166\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1167\"},\"data\":{\"type\":\"map\"}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1172\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1173\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Ray\",\"id\":\"p1168\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":13.097396348417853},\"y\":{\"type\":\"value\",\"value\":1},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b3\"},\"line_width\":{\"type\":\"value\",\"value\":2}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Ray\",\"id\":\"p1169\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":13.097396348417853},\"y\":{\"type\":\"value\",\"value\":1},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"line_width\":{\"type\":\"value\",\"value\":2}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Ray\",\"id\":\"p1170\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":13.097396348417853},\"y\":{\"type\":\"value\",\"value\":1},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b3\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"line_width\":{\"type\":\"value\",\"value\":2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1180\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1174\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1175\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1176\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[400],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[400],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1181\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1182\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1177\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1178\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1179\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.2,\"line_width\":2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1123\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1136\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1137\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1138\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1139\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1144\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1145\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1146\"}]}},\"toolbar_location\":\"above\",\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1131\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1132\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1133\"},\"axis_label\":\"ECDF\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1134\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1126\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1127\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1128\"},\"axis_label\":\"x\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1129\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1130\",\"attributes\":{\"axis\":{\"id\":\"p1126\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1135\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1131\"}}}],\"frame_width\":375,\"frame_height\":275}}]}};\n", " const render_items = [{\"docid\":\"737b66e5-61e2-4b51-ad42-e230ae6d730a\",\"roots\":{\"p1115\":\"c6bb3215-b221-4f2a-a98c-0251e83ef6b9\"},\"root_ids\":[\"p1115\"]}];\n", " void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " let attempts = 0;\n", " const timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "p1115" } }, "output_type": "display_data" } ], "source": [ "# Compute theoretical CDF\n", "x_theor = np.linspace(6, 14, 400)\n", "y_theor = scipy.stats.norm.cdf(x_theor, mu, sigma)\n", "\n", "# Plot the ECDF of randomly generated numbers\n", "p = iqplot.ecdf(x[:1000])\n", "\n", "p.line(\n", " x=x_theor,\n", " y=y_theor,\n", " line_width=2,\n", " line_color=\"orange\",\n", ")\n", "\n", "bokeh.io.show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Yup, right on!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Selections from discrete distributions\n", "\n", "The random numbers we have generated so far from from continuous probability distributions. We can also draw random numbers from discrete distributions. We already showed how we can do this for \"coin flips,\" but we can do it for other distributions as well. Say we wanted to draw from a Binomial distribution. We can use `rng.binomial()`." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "7" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw how many coin flips land heads in 10 files\n", "rng.binomial(10, 0.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are other discrete distributions we can draw from, such as Binomial, Geometric, Poisson, etc., and [the documentation](http://docs.scipy.org/doc/numpy/reference/routines.random.html) describes how to use them." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choosing elements from an array\n", "\n", "It is often useful to randomly choose elements from an existing array. The `rng.choice()` function does this. You equivalently could do this using `rng.integers()`, where the integers represent indices in the array, *except* `rng.choice()` has a great keyword argument, `replace`, which allows random draws with or without replacement. For example, say you had 52 samples that you wanted to send to a facility for analysis, but you can only afford to send 20. If we used `rng.integers()`, we might have a problem." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1, 2, 2, 6, 7, 9, 11, 11, 11, 13, 15, 18, 21, 22, 22, 24, 31,\n", " 34, 37, 39])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rng = np.random.default_rng(seed=3252)\n", "np.sort(rng.integers(0, 52, size=20))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Samples 2, 11, and 22 we each selected twice!" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 5, 38, 44, 12, 49, 10, 47, 46, 40, 23, 18, 1, 13, 21, 42, 28, 29,\n", " 37, 26, 32])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rng.choice(np.arange(52), size=20, replace=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, because we chose `replace=False`, we do not get any repeats." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generating random sequences\n", "\n", "Because it works with selecting characters as well as numbers, we can use the `rng.choice()` function to generate random DNA sequences." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'CAGGAGTCGCTGGGATAACAATTGTGACCTATGTAACTCAGCGAAGAGACTCGGGCCCGACCCACTAAAG'" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "''.join(rng.choice(list('ATGC'), replace=True, size=70))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Shuffling an array\n", "\n", "Similarly, the `rng.permutation()` function is useful. It takes the entries in an array and shuffles them! Let's shuffle a deck of cards." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([51, 36, 30, 35, 2, 9, 19, 40, 42, 32, 21, 45, 43, 26, 16, 27, 0,\n", " 25, 41, 33, 24, 47, 10, 11, 5, 14, 23, 17, 29, 12, 13, 28, 48, 22,\n", " 8, 46, 7, 49, 44, 31, 6, 34, 50, 1, 18, 20, 15, 39, 4, 38, 3,\n", " 37])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rng.permutation(np.arange(52))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## When do we need RNG?\n", "\n", "Answer: VERY OFTEN! We will see many examples in the next lessons and in the exercises. \n", "\n", "In many ways, probability is the language of biology. Molecular processes have energetics that are comparable to the thermal energy, which means they are always influenced by random thermal forces. The processes of the central dogma, including DNA replication, are no exceptions. This gives rise to random mutations, which are central to understanding how evolution works. If we want to understand them, it is often useful to use random number generators to model the processes.\n", "\n", "RNG also comes up A LOT in data analysis, which we will see in the lessons on hacker stats." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Computing environment" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python implementation: CPython\n", "Python version : 3.11.9\n", "IPython version : 8.20.0\n", "\n", "numpy : 1.26.4\n", "scipy : 1.13.0\n", "pandas : 2.2.1\n", "bokeh : 3.4.0\n", "iqplot : 0.3.6\n", "jupyterlab: 4.0.13\n", "\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -v -p numpy,scipy,pandas,bokeh,iqplot,jupyterlab" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.9" } }, "nbformat": 4, "nbformat_minor": 4 }