{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Random number generation\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var 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", " var JS_MIME_TYPE = 'application/javascript';\n", " var HTML_MIME_TYPE = 'text/html';\n", " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", " var CLASS_NAME = 'output_bokeh rendered_html';\n", "\n", " /**\n", " * Render data to the DOM node\n", " */\n", " function render(props, node) {\n", " var 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", " var cell = handle.cell;\n", "\n", " var id = cell.output_area._bokeh_element_id;\n", " var server_id = cell.output_area._bokeh_server_id;\n", " // Clean up Bokeh references\n", " if (id != null && id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", "\n", " if (server_id !== undefined) {\n", " // Clean up Bokeh references\n", " var cmd = \"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, {\n", " iopub: {\n", " output: function(msg) {\n", " var id = msg.content.text.trim();\n", " if (id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", " }\n", " }\n", " });\n", " // Destroy server and session\n", " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", " cell.notebook.kernel.execute(cmd);\n", " }\n", " }\n", "\n", " /**\n", " * Handle when a new output is added\n", " */\n", " function handleAddOutput(event, handle) {\n", " var output_area = handle.output_area;\n", " var output = handle.output;\n", "\n", " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", " return\n", " }\n", "\n", " var 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", " var bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " var script_attrs = bk_div.children[0].attributes;\n", " for (var i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\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", " var 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", " var 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", " var events = require('base/js/events');\n", " var 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", "\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", " var 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() {\n", " var el = document.getElementById(\"1001\");\n", " if (el != null) {\n", " el.textContent = \"BokehJS is loading...\";\n", " }\n", " if (root.Bokeh !== undefined) {\n", " if (el != null) {\n", " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", " }\n", " } else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(display_loaded, 100)\n", " }\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() {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " for (var i = 0; i < css_urls.length; i++) {\n", " var url = css_urls[i];\n", " const element = document.createElement(\"link\");\n", " element.onload = on_load;\n", " element.onerror = on_error;\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 (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " var element = document.createElement('script');\n", " element.onload = on_load;\n", " element.onerror = on_error;\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", " };var element = document.getElementById(\"1001\");\n", " if (element == null) {\n", " console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n", " return false;\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", " \n", " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n", " var css_urls = [];\n", " \n", "\n", " var inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " function(Bokeh) {\n", " \n", " \n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " \n", " if (root.Bokeh !== undefined || force === true) {\n", " \n", " for (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }\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", " var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n", " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", " }\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": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var 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\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 var 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() {\n var el = document.getElementById(\"1001\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\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() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\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 (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\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 };var element = document.getElementById(\"1001\");\n if (element == null) {\n console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n return false;\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 \n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n var css_urls = [];\n \n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\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 var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\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 bokeh_catplot\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." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Uniform random numbers\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.87938393, 0.61456692, 0.95837087, 0.4733083 , 0.58606474,\n", " 0.96187976, 0.57389685, 0.09470241, 0.31754902, 0.93380466])" ] }, "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", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"287ac31e-7fc0-4184-9447-b0fc7a3396c4\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1011\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1015\",\"type\":\"Grid\"},{\"id\":\"1020\",\"type\":\"Grid\"},{\"id\":\"1047\",\"type\":\"Legend\"}],\"left\":[{\"id\":\"1016\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":400,\"renderers\":[{\"id\":\"1038\",\"type\":\"GlyphRenderer\"},{\"id\":\"1052\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1040\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1027\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"1003\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1007\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1005\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1009\",\"type\":\"LinearScale\"}},\"id\":\"1002\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1040\",\"type\":\"Title\"},{\"attributes\":{\"axis_label\":\"ECDF\",\"formatter\":{\"id\":\"1043\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1017\",\"type\":\"BasicTicker\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1007\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1061\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"PanTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1049\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1050\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1051\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1053\",\"type\":\"CDSView\"}},\"id\":\"1052\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"items\":[{\"id\":\"1048\",\"type\":\"LegendItem\"}],\"visible\":false},\"id\":\"1047\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"1060\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"__ECDF\"}},\"id\":\"1037\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1062\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_color\":{\"value\":null},\"line_color\":{\"value\":\"#1f77b3\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"__ECDF\"}},\"id\":\"1036\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1022\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1034\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1036\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1037\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"1039\",\"type\":\"CDSView\"}},\"id\":\"1038\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1034\",\"type\":\"ColumnDataSource\"}},\"id\":\"1039\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1049\",\"type\":\"ColumnDataSource\"}},\"id\":\"1053\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1046\",\"type\":\"BoxAnnotation\"}},\"id\":\"1023\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":[0,1],\"y\":[0,1]},\"selected\":{\"id\":\"1063\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1062\",\"type\":\"UnionRenderers\"}},\"id\":\"1049\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"SaveTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1046\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1043\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1051\",\"type\":\"Line\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1017\",\"type\":\"BasicTicker\"}},\"id\":\"1020\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1026\",\"type\":\"HelpTool\"},{\"attributes\":{\"label\":{\"value\":\" \"},\"renderers\":[{\"id\":\"1038\",\"type\":\"GlyphRenderer\"}]},\"id\":\"1048\",\"type\":\"LegendItem\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1021\",\"type\":\"PanTool\"},{\"id\":\"1022\",\"type\":\"WheelZoomTool\"},{\"id\":\"1023\",\"type\":\"BoxZoomTool\"},{\"id\":\"1024\",\"type\":\"SaveTool\"},{\"id\":\"1025\",\"type\":\"ResetTool\"},{\"id\":\"1026\",\"type\":\"HelpTool\"}]},\"id\":\"1027\",\"type\":\"Toolbar\"},{\"attributes\":{\"callback\":null},\"id\":\"1003\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1009\",\"type\":\"LinearScale\"},{\"attributes\":{\"ticker\":{\"id\":\"1012\",\"type\":\"BasicTicker\"}},\"id\":\"1015\",\"type\":\"Grid\"},{\"attributes\":{\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1050\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1063\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null},\"id\":\"1005\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1012\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null,\"data\":{\"__ECDF\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"__dummy_cat\":[\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \"],\"__label\":[\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999],\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":{\"id\":\"1061\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1060\",\"type\":\"UnionRenderers\"}},\"id\":\"1034\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"x\",\"formatter\":{\"id\":\"1045\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1012\",\"type\":\"BasicTicker\"}},\"id\":\"1011\",\"type\":\"LinearAxis\"}],\"root_ids\":[\"1002\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", " var render_items = [{\"docid\":\"287ac31e-7fc0-4184-9447-b0fc7a3396c4\",\"roots\":{\"1002\":\"77232052-56eb-49e9-849e-667c34763adb\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var 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": "1002" } }, "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 = bokeh_catplot.ecdf(\n", " data=pd.DataFrame({'x': x}),\n", " cats=None,\n", " val='x',\n", " marker_kwargs={\"fill_color\": None},\n", ")\n", "\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 False True True True True True False True False\n", " True True True True True True True True]\n", "\n", "There were 17 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": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'1.17.3'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.__version__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choice of generator\n", "\n", "As of version 1.17.3 of Numpy, the algorithm under the hood of calls to functions like `np.random.uniform()` is 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, 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": 6, "metadata": {}, "outputs": [], "source": [ "rg = 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": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.5351479 , 0.44219466, 0.97943926, 0.94794349, 0.61056253,\n", " 0.85422811, 0.27851737, 0.77775786, 0.04561791, 0.24315346,\n", " 0.74588798, 0.78569151, 0.92040422, 0.39134613, 0.84275624,\n", " 0.48391714, 0.7303692 , 0.10866624, 0.57093531, 0.18766498])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rg.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": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.80694358, 0.90787751, 0.4933583 , 0.14769467, 0.92505042,\n", " 0.1154289 , 0.20256464, 0.7653687 , 0.91003849, 0.2468516 ])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Instantiate generator with a seed\n", "rg = np.random.default_rng(seed=361542)\n", "\n", "# Draw random numbers\n", "rg.uniform(size=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we reinstantiate with the same seed, we get the same sequence of random numbers." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.80694358, 0.90787751, 0.4933583 , 0.14769467, 0.92505042,\n", " 0.1154289 , 0.20256464, 0.7653687 , 0.91003849, 0.2468516 ])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Re-seed the RNG\n", "rg = np.random.default_rng(seed=361542)\n", "\n", "# Draw random numbers\n", "rg.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": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.89007843, 0.01960156, 0.02130794, 0.05211164, 0.85670377,\n", " 0.86049237, 0.28151592, 0.93972737, 0.35176586, 0.71495538])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rg = np.random.default_rng(seed=361541)\n", "rg.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 besides Uniform. For example, say we wanted to draw random samples from a Normal distribution with mean μ and standard deviation σ." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"0c949fe2-e984-435d-b85d-7b13d44f6a85\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1140\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1144\",\"type\":\"Grid\"},{\"id\":\"1149\",\"type\":\"Grid\"},{\"id\":\"1175\",\"type\":\"Legend\"}],\"left\":[{\"id\":\"1145\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":400,\"renderers\":[{\"id\":\"1166\",\"type\":\"GlyphRenderer\"},{\"id\":\"1180\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1168\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1156\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"1133\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1136\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1131\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1138\",\"type\":\"LinearScale\"}},\"id\":\"1132\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"#1f77b4\",\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1179\",\"type\":\"Patch\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1150\",\"type\":\"PanTool\"},{\"id\":\"1151\",\"type\":\"WheelZoomTool\"},{\"id\":\"1152\",\"type\":\"BoxZoomTool\"},{\"id\":\"1153\",\"type\":\"SaveTool\"},{\"id\":\"1154\",\"type\":\"ResetTool\"},{\"id\":\"1155\",\"type\":\"HelpTool\"}]},\"id\":\"1156\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_color\":\"#1f77b3\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1164\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"start\":0},\"id\":\"1131\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data_source\":{\"id\":\"1163\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1164\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1165\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1167\",\"type\":\"CDSView\"}},\"id\":\"1166\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1150\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1136\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1138\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1151\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1211\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1189\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1174\",\"type\":\"BoxAnnotation\"}},\"id\":\"1152\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1177\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1178\",\"type\":\"Patch\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1179\",\"type\":\"Patch\"},\"selection_glyph\":null,\"view\":{\"id\":\"1181\",\"type\":\"CDSView\"}},\"id\":\"1180\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null},\"id\":\"1133\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1153\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1154\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1210\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1155\",\"type\":\"HelpTool\"},{\"attributes\":{\"axis_label\":\"x\",\"formatter\":{\"id\":\"1173\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1141\",\"type\":\"BasicTicker\"}},\"id\":\"1140\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"#1f77b3\",\"line_alpha\":0,\"line_color\":\"#1f77b3\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1178\",\"type\":\"Patch\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1165\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[322]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[322]}},\"selected\":{\"id\":\"1211\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1210\",\"type\":\"UnionRenderers\"}},\"id\":\"1177\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1146\",\"type\":\"BasicTicker\"}},\"id\":\"1149\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1141\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1174\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"ticker\":{\"id\":\"1141\",\"type\":\"BasicTicker\"}},\"id\":\"1144\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"93Pz7PXzFkD3c/Ps9fMWQPYO/s56LxdA9g7+znovF0D1qQix/2oXQPWpCLH/ahdA9EQTk4SmF0D0RBOThKYXQPPfHXUJ4hdA898ddQniF0DyeihXjh0YQPJ6KFeOHRhA8hUzORNZGEDyFTM5E1kYQPGwPRuYlBhA8bA9G5iUGEDwS0j9HNAYQPBLSP0c0BhA7+ZS36ELGUDv5lLfoQsZQO6BXcEmRxlA7oFdwSZHGUDtHGijq4IZQO0caKOrghlA7LdyhTC+GUDst3KFML4ZQOtSfWe1+RlA61J9Z7X5GUDq7YdJOjUaQOrth0k6NRpA6YiSK79wGkDpiJIrv3AaQOgjnQ1ErBpA6COdDUSsGkDovqfvyOcaQOi+p+/I5xpA51my0U0jG0DnWbLRTSMbQOb0vLPSXhtA5vS8s9JeG0Dlj8eVV5obQOWPx5VXmhtA5CrSd9zVG0DkKtJ33NUbQOPF3FlhERxA48XcWWERHEDiYOc75kwcQOJg5zvmTBxA4fvxHWuIHEDh+/Eda4gcQOCW/P/vwxxA4Jb8/+/DHEDgMQfidP8cQOAxB+J0/xxA3swRxPk6HUDezBHE+TodQN5nHKZ+dh1A3mccpn52HUDdAieIA7IdQN0CJ4gDsh1A3J0xaojtHUDcnTFqiO0dQNs4PEwNKR5A2zg8TA0pHkDa00YukmQeQNrTRi6SZB5A2W5REBegHkDZblEQF6AeQNgJXPKb2x5A2Alc8pvbHkDYpGbUIBcfQNikZtQgFx9A1j9xtqVSH0DWP3G2pVIfQNbae5gqjh9A1tp7mCqOH0DUdYZ6r8kfQNR1hnqvyR9AaohILpoCIEBqiEgumgIgQOrVTZ9cICBA6tVNn1wgIEBpI1MQHz4gQGkjUxAfPiBA6HBYgeFbIEDocFiB4VsgQGi+XfKjeSBAaL5d8qN5IEDoC2NjZpcgQOgLY2NmlyBAZ1lo1Ci1IEBnWWjUKLUgQOembUXr0iBA56ZtRevSIEBm9HK2rfAgQGb0crat8CBA5kF4J3AOIUDmQXgncA4hQGWPfZgyLCFAZY99mDIsIUDl3IIJ9UkhQOXcggn1SSFAZCqIerdnIUBkKoh6t2chQOR3jet5hSFA5HeN63mFIUBkxZJcPKMhQGTFklw8oyFA4xKYzf7AIUDjEpjN/sAhQGJgnT7B3iFAYmCdPsHeIUDiraKvg/whQOKtoq+D/CFAYvunIEYaIkBi+6cgRhoiQOFIrZEIOCJA4UitkQg4IkBhlrICy1UiQGGWsgLLVSJA4OO3c41zIkDg47dzjXMiQGAxveRPkSJAYDG95E+RIkDgfsJVEq8iQOB+wlUSryJAX8zHxtTMIkBfzMfG1MwiQN4ZzTeX6iJA3hnNN5fqIkBeZ9KoWQgjQF5n0qhZCCNA3rTXGRwmI0DetNcZHCYjQF0C3YreQyNAXQLdit5DI0DdT+L7oGEjQN1P4vugYSNAXJ3nbGN/I0BcnedsY38jQNzq7N0lnSNA3Ors3SWdI0BcOPJO6LojQFw48k7ouiNA24X3v6rYI0Dbhfe/qtgjQFrT/DBt9iNAWtP8MG32I0DaIAKiLxQkQNogAqIvFCRAWm4HE/IxJEBabgcT8jEkQNm7DIS0TyRA2bsMhLRPJEBYCRL1dm0kQFgJEvV2bSRA2FYXZjmLJEDYVhdmOYskQFikHNf7qCRAWKQc1/uoJEDY8SFIvsYkQNjxIUi+xiRAVz8nuYDkJEBXPye5gOQkQNaMLCpDAiVA1owsKkMCJUBW2jGbBSAlQFbaMZsFICVA1ic3DMg9JUDWJzcMyD0lQFV1PH2KWyVAVXU8fYpbJUDUwkHuTHklQNTCQe5MeSVAVBBHXw+XJUBUEEdfD5clQNRdTNDRtCVA1F1M0NG0JUBTq1FBlNIlQFOrUUGU0iVA0vhWslbwJUDS+FayVvAlQFJGXCMZDiZAUkZcIxkOJkDSk2GU2ysmQNKTYZTbKyZAUuFmBZ5JJkBS4WYFnkkmQNEubHZgZyZA0S5sdmBnJkBQfHHnIoUmQFB8cecihSZA0Ml2WOWiJkDQyXZY5aImQFAXfMmnwCZAUBd8yafAJkDPZIE6at4mQM9kgTpq3iZATrKGqyz8JkBOsoarLPwmQM7/ixzvGSdAzv+LHO8ZJ0BOTZGNsTcnQE5NkY2xNydAzpqW/nNVJ0DOmpb+c1UnQE3om282cydATeibbzZzJ0DMNaHg+JAnQMw1oeD4kCdATIOmUbuuJ0BMg6ZRu64nQMzQq8J9zCdAzNCrwn3MJ0BLHrEzQOonQEsesTNA6idAymu2pAIIKEDKa7akAggoQEq5uxXFJShASrm7FcUlKEDKBsGGh0MoQMoGwYaHQyhASVTG90lhKEBJVMb3SWEoQMihy2gMfyhAyKHLaAx/KEBI79DZzpwoQEjv0NnOnChAyDzWSpG6KEDIPNZKkbooQEiK27tT2ChASIrbu1PYKEDH1+AsFvYoQMfX4CwW9ihARiXmndgTKUBGJead2BMpQMZy6w6bMSlAxnLrDpsxKUBGwPB/XU8pQEbA8H9dTylAxQ328B9tKUDFDfbwH20pQERb+2HiiilARFv7YeKKKUDEqADTpKgpQMSoANOkqClARPYFRGfGKUBE9gVEZ8YpQMRDC7Up5ClAxEMLtSnkKUBDkRAm7AEqQEORECbsASpAwt4Vl64fKkDC3hWXrh8qQEIsGwhxPSpAQiwbCHE9KkDCeSB5M1sqQMJ5IHkzWypAQccl6vV4KkBBxyXq9XgqQMAUK1u4lipAwBQrW7iWKkBAYjDMerQqQEBiMMx6tCpAwK81PT3SKkDArzU9PdIqQD/9Oq7/7ypAP/06rv/vKkC/SkAfwg0rQL9KQB/CDStAPphFkIQrK0A+mEWQhCsrQL7lSgFHSStAvuVKAUdJK0A+M1ByCWcrQD4zUHIJZytAvIBV48uEK0C8gFXjy4QrQDzOWlSOoitAPM5aVI6iK0C8G2DFUMArQLwbYMVQwCtAPGllNhPeK0A8aWU2E94rQLy2aqfV+ytAvLZqp9X7K0A6BHAYmBksQDoEcBiYGSxAulF1iVo3LEC6UXWJWjcsQDqfevocVSxAOp96+hxVLEC67H9r33IsQLrsf2vfcixAODqF3KGQLEA4OoXcoZAsQLiHik1krixAuIeKTWSuLEA41Y++JswsQDjVj74mzCxAuCKVL+npLEC4IpUv6eksQDhwmqCrBy1AOHCaoKsHLUC2vZ8RbiUtQLa9nxFuJS1ANgulgjBDLUA2C6WCMEMtQLZYqvPyYC1Atliq8/JgLUA2pq9ktX4tQDamr2S1fi1AtPO01XecLUC087TVd5wtQDRBukY6ui1ANEG6Rjq6LUC0jr+3/NctQLSOv7f81y1ANNzEKL/1LUA03MQov/UtQA==\",\"dtype\":\"float64\",\"shape\":[320]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[320]}},\"selected\":{\"id\":\"1189\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1188\",\"type\":\"UnionRenderers\"}},\"id\":\"1163\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1163\",\"type\":\"ColumnDataSource\"}},\"id\":\"1167\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1146\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1171\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis_label\":\"approximate PDF\",\"formatter\":{\"id\":\"1171\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1146\",\"type\":\"BasicTicker\"}},\"id\":\"1145\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1177\",\"type\":\"ColumnDataSource\"}},\"id\":\"1181\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1188\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1173\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"items\":[{\"id\":\"1176\",\"type\":\"LegendItem\"}],\"visible\":false},\"id\":\"1175\",\"type\":\"Legend\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1168\",\"type\":\"Title\"},{\"attributes\":{\"label\":{\"value\":\" \"},\"renderers\":[{\"id\":\"1166\",\"type\":\"GlyphRenderer\"},{\"id\":\"1180\",\"type\":\"GlyphRenderer\"}]},\"id\":\"1176\",\"type\":\"LegendItem\"}],\"root_ids\":[\"1132\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", " var render_items = [{\"docid\":\"0c949fe2-e984-435d-b85d-7b13d44f6a85\",\"roots\":{\"1132\":\"3e5d99b4-7c55-4b9c-aade-71a00fc68533\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var 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": "1132" } }, "output_type": "display_data" } ], "source": [ "# Set parameters\n", "mu = 10\n", "sigma = 1\n", "\n", "# Draw 100000 random samples\n", "x = rg.normal(mu, sigma, size=100000)\n", "\n", "# Plot the histogram\n", "p = bokeh_catplot.histogram(\n", " data=pd.DataFrame(data={'x': x}),\n", " cats=None,\n", " val='x',\n", " density=True,\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": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"518eaebb-479d-4d9e-bc61-b86e23126f75\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1288\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1292\",\"type\":\"Grid\"},{\"id\":\"1297\",\"type\":\"Grid\"},{\"id\":\"1324\",\"type\":\"Legend\"}],\"left\":[{\"id\":\"1293\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"plot_width\":400,\"renderers\":[{\"id\":\"1315\",\"type\":\"GlyphRenderer\"},{\"id\":\"1329\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1317\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1304\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"1280\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1284\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1282\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1286\",\"type\":\"LinearScale\"}},\"id\":\"1279\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"ticker\":{\"id\":\"1289\",\"type\":\"BasicTicker\"}},\"id\":\"1292\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1311\",\"type\":\"ColumnDataSource\"}},\"id\":\"1316\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1286\",\"type\":\"LinearScale\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1317\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1294\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null},\"id\":\"1280\",\"type\":\"DataRange1d\"},{\"attributes\":{\"items\":[{\"id\":\"1325\",\"type\":\"LegendItem\"}],\"visible\":false},\"id\":\"1324\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"1289\",\"type\":\"BasicTicker\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1298\",\"type\":\"PanTool\"},{\"id\":\"1299\",\"type\":\"WheelZoomTool\"},{\"id\":\"1300\",\"type\":\"BoxZoomTool\"},{\"id\":\"1301\",\"type\":\"SaveTool\"},{\"id\":\"1302\",\"type\":\"ResetTool\"},{\"id\":\"1303\",\"type\":\"HelpTool\"}]},\"id\":\"1304\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1322\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1284\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_color\":{\"value\":null},\"line_color\":{\"value\":\"#1f77b3\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"__ECDF\"}},\"id\":\"1313\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1298\",\"type\":\"PanTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1323\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1328\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1326\",\"type\":\"ColumnDataSource\"}},\"id\":\"1330\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1320\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1360\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1361\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1323\",\"type\":\"BoxAnnotation\"}},\"id\":\"1300\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"label\":{\"value\":\" \"},\"renderers\":[{\"id\":\"1315\",\"type\":\"GlyphRenderer\"}]},\"id\":\"1325\",\"type\":\"LegendItem\"},{\"attributes\":{\"callback\":null},\"id\":\"1282\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"__ECDF\"}},\"id\":\"1314\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"1311\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1313\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1314\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"1316\",\"type\":\"CDSView\"}},\"id\":\"1315\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"ECDF\",\"formatter\":{\"id\":\"1320\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1294\",\"type\":\"BasicTicker\"}},\"id\":\"1293\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[400]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[400]}},\"selected\":{\"id\":\"1362\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1361\",\"type\":\"UnionRenderers\"}},\"id\":\"1326\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1303\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1362\",\"type\":\"Selection\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1294\",\"type\":\"BasicTicker\"}},\"id\":\"1297\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1302\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1359\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null,\"data\":{\"__ECDF\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"__dummy_cat\":[\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \"],\"__label\":[\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999],\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":{\"id\":\"1360\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1359\",\"type\":\"UnionRenderers\"}},\"id\":\"1311\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1299\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1326\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1327\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1328\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1330\",\"type\":\"CDSView\"}},\"id\":\"1329\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"x\",\"formatter\":{\"id\":\"1322\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1289\",\"type\":\"BasicTicker\"}},\"id\":\"1288\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1301\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1327\",\"type\":\"Line\"}],\"root_ids\":[\"1279\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", " var render_items = [{\"docid\":\"518eaebb-479d-4d9e-bc61-b86e23126f75\",\"roots\":{\"1279\":\"cf8c9a04-d6fc-49ea-b3de-e1d871a5f491\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var 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": "1279" } }, "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 = bokeh_catplot.ecdf(\n", " data=pd.DataFrame({'x': x[:1000]}),\n", " cats=None,\n", " val='x',\n", " marker_kwargs={\"fill_color\": None},\n", ")\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 `rg.binomial()`." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Draw how many coin flips land heads in 10 files\n", "rg.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](https://docs.scipy.org/doc/numpy/reference/random/generator.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 `rg.choice()` function does this. You equivalently could do this using `rg.integers()`, where the integers represent indices in the array, *except* `rg.choice()` has a great keyword argument, `replace`, which allows random draws with or without replacement. For example, say you had 50 samples that you wanted to send to a facility for analysis, but you can only afford to send 20. If we used `rg.integers()`, we might have a problem." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([12, 31, 47, 26, 3, 5, 46, 49, 26, 38, 24, 17, 46, 26, 6, 17, 35,\n", " 4, 13, 29])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rg = np.random.default_rng(seed=126969234)\n", "rg.integers(0, 51, size=20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sample 17 was selected twice and sample 26 was selected thrice. This is not unexpected. We can use `rg.choice()` instead." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([27, 34, 0, 46, 2, 48, 35, 50, 40, 12, 28, 19, 37, 38, 11, 23, 45,\n", " 15, 29, 32])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rg.choice(np.arange(51), 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 `rg.choice()` function to generate random DNA sequences." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'CTTGTAAAGGATCTGCCCCGTGTCCCGCGCTAGGTCCGCACTCAAAGTATCTATGAACCGTCCAACCGAG'" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "''.join(rg.choice(list('ATGC'), replace=True, size=70))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Shuffling an array\n", "\n", "Similarly, the `rg.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": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 4, 1, 43, 46, 11, 21, 44, 18, 13, 49, 32, 47, 2, 28, 40, 52, 17,\n", " 29, 27, 0, 14, 48, 37, 31, 20, 30, 36, 3, 45, 24, 50, 9, 22, 25,\n", " 5, 12, 42, 19, 16, 39, 7, 34, 35, 10, 33, 41, 51, 26, 6, 8, 15,\n", " 38, 23])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rg.permutation(np.arange(53))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## When do we need RNG?\n", "\n", "Answer: VERY OFTEN! We will use random number generator extensively for the rest of the course as we explore probability distributions and perform hacker stats calculations.\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." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Computing environment" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPython 3.7.5\n", "IPython 7.1.1\n", "\n", "numpy 1.17.3\n", "scipy 1.3.1\n", "pandas 0.24.2\n", "bokeh 1.4.0\n", "bokeh_catplot 0.1.6\n", "jupyterlab 1.1.4\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -v -p numpy,scipy,pandas,bokeh,bokeh_catplot,jupyterlab" ] } ], "metadata": { "anaconda-cloud": {}, "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.5" } }, "nbformat": 4, "nbformat_minor": 4 }