{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Lesson 23: 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", " 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", " 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", " // 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", " 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", " 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", " 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", "\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() {\n", " const el = document.getElementById(\"1002\");\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(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", " \n", " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n", " const css_urls = [];\n", " \n", "\n", " const 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 (let 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", " const cell = $(document.getElementById(\"1002\")).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 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\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() {\n const el = document.getElementById(\"1002\");\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(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 \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const 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 (let 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 const cell = $(document.getElementById(\"1002\")).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 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.23709656, 0.95933636, 0.71928912, 0.99192717, 0.86348479,\n", " 0.35528646, 0.14223835, 0.9889348 , 0.98321084, 0.26443901])" ] }, "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", " const docs_json = {\"f47ab473-debd-4142-85ac-0e52d8ace26c\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1012\"}],\"center\":[{\"id\":\"1015\"},{\"id\":\"1019\"}],\"frame_height\":275,\"frame_width\":375,\"left\":[{\"id\":\"1016\"}],\"renderers\":[{\"id\":\"1039\"},{\"id\":\"1045\"}],\"title\":{\"id\":\"1047\"},\"toolbar\":{\"id\":\"1027\"},\"toolbar_location\":\"above\",\"x_range\":{\"id\":\"1004\"},\"x_scale\":{\"id\":\"1008\"},\"y_range\":{\"id\":\"1006\"},\"y_scale\":{\"id\":\"1010\"}},\"id\":\"1003\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b3\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"#1f77b3\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b3\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"__ECDF\"}},\"id\":\"1038\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1054\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1034\"},\"glyph\":{\"id\":\"1036\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1038\"},\"nonselection_glyph\":{\"id\":\"1037\"},\"view\":{\"id\":\"1040\"}},\"id\":\"1039\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1041\"},\"glyph\":{\"id\":\"1042\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1044\"},\"nonselection_glyph\":{\"id\":\"1043\"},\"view\":{\"id\":\"1046\"}},\"id\":\"1045\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1012\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1015\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"x\":[0,1],\"y\":[0,1]},\"selected\":{\"id\":\"1058\"},\"selection_policy\":{\"id\":\"1057\"}},\"id\":\"1041\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1051\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b3\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"#1f77b3\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b3\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"__ECDF\"}},\"id\":\"1037\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1053\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1055\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1056\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1008\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1041\"}},\"id\":\"1046\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b3\"},\"hatch_color\":{\"value\":\"#1f77b3\"},\"line_color\":{\"value\":\"#1f77b3\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"__ECDF\"}},\"id\":\"1036\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{\"__ECDF\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"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\",\"order\":\"little\",\"shape\":[1000]}},\"selected\":{\"id\":\"1056\"},\"selection_policy\":{\"id\":\"1055\"}},\"id\":\"1034\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1034\"}},\"id\":\"1040\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1013\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1004\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis\":{\"id\":\"1016\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1019\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1057\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1026\"}},\"id\":\"1022\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1023\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1058\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1010\",\"type\":\"LinearScale\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1026\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis_label\":\"ECDF\",\"coordinates\":null,\"formatter\":{\"id\":\"1050\"},\"group\":null,\"major_label_policy\":{\"id\":\"1051\"},\"ticker\":{\"id\":\"1017\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1047\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1043\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1020\"},{\"id\":\"1021\"},{\"id\":\"1022\"},{\"id\":\"1023\"},{\"id\":\"1024\"},{\"id\":\"1025\"}]},\"id\":\"1027\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"x\",\"coordinates\":null,\"formatter\":{\"id\":\"1053\"},\"group\":null,\"major_label_policy\":{\"id\":\"1054\"},\"ticker\":{\"id\":\"1013\"}},\"id\":\"1012\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1042\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1044\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1006\",\"type\":\"DataRange1d\"}],\"root_ids\":[\"1003\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n", " const render_items = [{\"docid\":\"f47ab473-debd-4142-85ac-0e52d8ace26c\",\"root_ids\":[\"1003\"],\"roots\":{\"1003\":\"a6173aba-a704-4bc9-9cd6-ff03da17c65d\"}}];\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", " 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": "1003" } }, "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 False True True True True True False True True True\n", " True False False False True False False True]\n", "\n", "There were 13 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", "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.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": [ "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": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.15611741, 0.55145422, 0.62460066, 0.66880145, 0.76751957,\n", " 0.6096622 , 0.62798359, 0.06204101, 0.68672077, 0.77944418,\n", " 0.97294838, 0.50955991, 0.78487589, 0.16892321, 0.34470479,\n", " 0.64785548, 0.01584066, 0.58388327, 0.52010477, 0.16652411])" ] }, "execution_count": 6, "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": 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", "rg = np.random.default_rng(seed=3252)\n", "\n", "# Generate random numbers\n", "rg.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", "rg = np.random.default_rng(seed=3252)\n", "\n", "# Generate 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": 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", "rg = np.random.default_rng(seed=3253)\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. 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", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " const docs_json = {\"24de0847-eab6-455e-832d-d8866a57dce4\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1134\"}],\"center\":[{\"id\":\"1137\"},{\"id\":\"1141\"}],\"frame_height\":275,\"frame_width\":375,\"left\":[{\"id\":\"1138\"}],\"renderers\":[{\"id\":\"1160\"},{\"id\":\"1166\"}],\"title\":{\"id\":\"1181\"},\"toolbar\":{\"id\":\"1149\"},\"toolbar_location\":\"above\",\"x_range\":{\"id\":\"1127\"},\"x_scale\":{\"id\":\"1130\"},\"y_range\":{\"id\":\"1125\"},\"y_scale\":{\"id\":\"1132\"}},\"id\":\"1126\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"overlay\":{\"id\":\"1148\"}},\"id\":\"1144\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1147\",\"type\":\"HelpTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1142\"},{\"id\":\"1143\"},{\"id\":\"1144\"},{\"id\":\"1145\"},{\"id\":\"1146\"},{\"id\":\"1147\"}]},\"id\":\"1149\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1145\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1146\",\"type\":\"ResetTool\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[298]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[298]}},\"selected\":{\"id\":\"1192\"},\"selection_policy\":{\"id\":\"1191\"}},\"id\":\"1162\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1148\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1162\"},\"glyph\":{\"id\":\"1163\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1165\"},\"nonselection_glyph\":{\"id\":\"1164\"},\"view\":{\"id\":\"1167\"}},\"id\":\"1166\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1132\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1162\"}},\"id\":\"1167\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1185\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1181\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"#1f77b3\",\"hatch_alpha\":0.2,\"hatch_color\":\"#1f77b3\",\"line_alpha\":0.2,\"line_color\":\"#1f77b3\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1165\",\"type\":\"Patch\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b3\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1159\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1184\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis_label\":\"x\",\"coordinates\":null,\"formatter\":{\"id\":\"1187\"},\"group\":null,\"major_label_policy\":{\"id\":\"1188\"},\"ticker\":{\"id\":\"1135\"}},\"id\":\"1134\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b3\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1158\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1189\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"#1f77b3\",\"hatch_alpha\":0.1,\"hatch_color\":\"#1f77b3\",\"line_alpha\":0.1,\"line_color\":\"#1f77b3\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1164\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1135\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1139\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1190\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1138\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1141\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1191\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1188\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1192\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[296]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[296]}},\"selected\":{\"id\":\"1190\"},\"selection_policy\":{\"id\":\"1189\"}},\"id\":\"1156\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#1f77b3\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1157\",\"type\":\"Line\"},{\"attributes\":{\"start\":0},\"id\":\"1125\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":0.3,\"fill_color\":\"#1f77b3\",\"hatch_color\":\"#1f77b3\",\"line_alpha\":0,\"line_color\":\"#1f77b3\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1163\",\"type\":\"Patch\"},{\"attributes\":{},\"id\":\"1130\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1142\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1187\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1156\"}},\"id\":\"1161\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1156\"},\"glyph\":{\"id\":\"1157\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1159\"},\"nonselection_glyph\":{\"id\":\"1158\"},\"view\":{\"id\":\"1161\"}},\"id\":\"1160\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1127\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"approximate PDF\",\"coordinates\":null,\"formatter\":{\"id\":\"1184\"},\"group\":null,\"major_label_policy\":{\"id\":\"1185\"},\"ticker\":{\"id\":\"1139\"}},\"id\":\"1138\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1134\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1137\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1143\",\"type\":\"WheelZoomTool\"}],\"root_ids\":[\"1126\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n", " const render_items = [{\"docid\":\"24de0847-eab6-455e-832d-d8866a57dce4\",\"root_ids\":[\"1126\"],\"roots\":{\"1126\":\"c015d6f6-677e-4a41-af76-84d2cc06763a\"}}];\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", " 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": "1126" } }, "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 = 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", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " const docs_json = {\"6a396b90-b84b-43bd-a585-abc980cbe10a\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1268\"}],\"center\":[{\"id\":\"1271\"},{\"id\":\"1275\"}],\"frame_height\":275,\"frame_width\":375,\"left\":[{\"id\":\"1272\"}],\"renderers\":[{\"id\":\"1295\"},{\"id\":\"1301\"}],\"title\":{\"id\":\"1329\"},\"toolbar\":{\"id\":\"1283\"},\"toolbar_location\":\"above\",\"x_range\":{\"id\":\"1260\"},\"x_scale\":{\"id\":\"1264\"},\"y_range\":{\"id\":\"1262\"},\"y_scale\":{\"id\":\"1266\"}},\"id\":\"1259\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1340\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1290\"}},\"id\":\"1296\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1335\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1333\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1281\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1332\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1277\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1282\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis_label\":\"ECDF\",\"coordinates\":null,\"formatter\":{\"id\":\"1332\"},\"group\":null,\"major_label_policy\":{\"id\":\"1333\"},\"ticker\":{\"id\":\"1273\"}},\"id\":\"1272\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1338\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1337\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1276\"},{\"id\":\"1277\"},{\"id\":\"1278\"},{\"id\":\"1279\"},{\"id\":\"1280\"},{\"id\":\"1281\"}]},\"id\":\"1283\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1262\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1298\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1280\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1329\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1276\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[400]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[400]}},\"selected\":{\"id\":\"1340\"},\"selection_policy\":{\"id\":\"1339\"}},\"id\":\"1297\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"1282\"}},\"id\":\"1278\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1279\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1300\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1290\"},\"glyph\":{\"id\":\"1292\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1294\"},\"nonselection_glyph\":{\"id\":\"1293\"},\"view\":{\"id\":\"1296\"}},\"id\":\"1295\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"__ECDF\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"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\",\"order\":\"little\",\"shape\":[1000]}},\"selected\":{\"id\":\"1338\"},\"selection_policy\":{\"id\":\"1337\"}},\"id\":\"1290\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b3\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"#1f77b3\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b3\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"__ECDF\"}},\"id\":\"1293\",\"type\":\"Circle\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1299\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1266\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1264\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b3\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"#1f77b3\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b3\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"__ECDF\"}},\"id\":\"1294\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1297\"}},\"id\":\"1302\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1336\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b3\"},\"hatch_color\":{\"value\":\"#1f77b3\"},\"line_color\":{\"value\":\"#1f77b3\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"__ECDF\"}},\"id\":\"1292\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1297\"},\"glyph\":{\"id\":\"1298\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1300\"},\"nonselection_glyph\":{\"id\":\"1299\"},\"view\":{\"id\":\"1302\"}},\"id\":\"1301\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"x\",\"coordinates\":null,\"formatter\":{\"id\":\"1335\"},\"group\":null,\"major_label_policy\":{\"id\":\"1336\"},\"ticker\":{\"id\":\"1269\"}},\"id\":\"1268\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1260\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1273\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1268\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1271\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1269\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1272\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1275\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1339\",\"type\":\"UnionRenderers\"}],\"root_ids\":[\"1259\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n", " const render_items = [{\"docid\":\"6a396b90-b84b-43bd-a585-abc980cbe10a\",\"root_ids\":[\"1259\"],\"roots\":{\"1259\":\"d0bfe588-e872-49bc-b55f-d52a7bf3c51e\"}}];\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", " 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": "1259" } }, "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 `rg.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", "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](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 `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 52 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": 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": [ "rg = np.random.default_rng(seed=3252)\n", "np.sort(rg.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": [ "rg.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 `rg.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(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": 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": [ "rg.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.9.12\n", "IPython version : 8.3.0\n", "\n", "numpy : 1.21.5\n", "scipy : 1.7.3\n", "pandas : 1.4.2\n", "bokeh : 2.4.2\n", "iqplot : 0.2.4\n", "jupyterlab: 3.3.2\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.9.12" } }, "nbformat": 4, "nbformat_minor": 4 }