From e06652eb14503dee1905920584606368fed34ace Mon Sep 17 00:00:00 2001 From: martinlarsalbert Date: Wed, 21 Apr 2021 22:22:16 +0200 Subject: [PATCH 1/5] will add a preprocessor here --- jupyter_to_medium/_publish_to_medium.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/jupyter_to_medium/_publish_to_medium.py b/jupyter_to_medium/_publish_to_medium.py index 8ebb0a1..7fe252d 100644 --- a/jupyter_to_medium/_publish_to_medium.py +++ b/jupyter_to_medium/_publish_to_medium.py @@ -114,6 +114,9 @@ def get_pub_id(self): f'Here is the publication data returned from Medium\n\n{data}') def create_markdown(self): + + # Adding a preprocessor here... + mp = MarkdownPreprocessor() mp.preprocess(self.nb, self.resources) From 4aae5872efe904c267137ca9218e671a590bbedd Mon Sep 17 00:00:00 2001 From: martinlarsalbert Date: Fri, 30 Apr 2021 15:37:26 +0200 Subject: [PATCH 2/5] Added the tag removal, which seems to be working --- tests/test_create_markdown.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/test_create_markdown.py diff --git a/tests/test_create_markdown.py b/tests/test_create_markdown.py new file mode 100644 index 0000000..e69de29 From c443084dd00517f920be59a12ca614142b1f15dd Mon Sep 17 00:00:00 2001 From: martinlarsalbert Date: Fri, 30 Apr 2021 15:48:11 +0200 Subject: [PATCH 3/5] Added "Removing pieces of cells using cell tags" into the readme. --- README.md | 4 ++++ jupyter_to_medium/_publish_to_medium.py | 25 +++++++++++++++++---- tests/notebooks/Test Medium Blog Post.ipynb | 2 +- tests/test_create_markdown.py | 14 ++++++++++++ 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6daa881..6b439da 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,10 @@ If successful, a message will be printed with the URL to your post. Additionall Currently, this package only works for the "classic" Jupyter Notebook and is not available in Jupyter Lab. If you have experience making Jupyter Lab extensions, please let me know. +## Removing pieces of cells using cell tags +You can remove pieces of cells using [cell tags](https://nbconvert.readthedocs.io/en/latest/removing_cells.html#removing-pieces-of-cells-using-cell-tags). You can use the tags: ```remove_cell```, ```remove_output```, ```remove_input```. + + ## Troubleshooting If your post is unsuccessful, a message with the error will be printed to the screen with information that might help you solve the issue. diff --git a/jupyter_to_medium/_publish_to_medium.py b/jupyter_to_medium/_publish_to_medium.py index 7fe252d..6fd15b4 100644 --- a/jupyter_to_medium/_publish_to_medium.py +++ b/jupyter_to_medium/_publish_to_medium.py @@ -5,9 +5,11 @@ import requests import nbformat from nbconvert.exporters import MarkdownExporter +from nbconvert.preprocessors import TagRemovePreprocessor from ._preprocesors import MarkdownPreprocessor, NoExecuteDataFramePreprocessor from ._screenshot import Screenshot +from traitlets.config import Config class Publish: @@ -20,9 +22,10 @@ class Publish: IMAGE_TYPES = {'png', 'gif', 'jpeg', 'jpg', 'tiff'} - def __init__(self, filename, integration_token, pub_name, title, tags, - publish_status, notify_followers, license, canonical_url, - chrome_path, save_markdown, table_conversion): + def __init__(self, filename:str, integration_token=None, pub_name=None, title=None, + tags=None, publish_status='draft', notify_followers=False, + license='all-rights-reserved', canonical_url=None, chrome_path=None, + save_markdown=False, table_conversion='chrome'): self.filename = Path(filename) self.img_data_json = self.filename.stem + '_image_data.json' self.integration_token = self.get_integration_token(integration_token) @@ -114,6 +117,13 @@ def get_pub_id(self): f'Here is the publication data returned from Medium\n\n{data}') def create_markdown(self): + """[summary] + + Returns: + md : str + markdown + image_data_dict : dict + """ # Adding a preprocessor here... @@ -127,7 +137,14 @@ def create_markdown(self): # MarkdownExporter deep copies resources and fails when matplotlib # must remove converter key to not error self.resources.pop('converter') - me = MarkdownExporter() + + # Configure our tag removal + c = Config() + c.TagRemovePreprocessor.remove_cell_tags.add("remove_cell") + c.TagRemovePreprocessor.remove_all_outputs_tags.add('remove_output') + c.TagRemovePreprocessor.remove_input_tags.add('remove_input',) + me = MarkdownExporter(config=c) + md, self.resources = me.from_notebook_node(self.nb, self.resources) image_data_dict = {**self.resources['image_data_dict'], **self.resources['outputs']} diff --git a/tests/notebooks/Test Medium Blog Post.ipynb b/tests/notebooks/Test Medium Blog Post.ipynb index 42150bf..7ebdc56 100644 --- a/tests/notebooks/Test Medium Blog Post.ipynb +++ b/tests/notebooks/Test Medium Blog Post.ipynb @@ -3613,7 +3613,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.3" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/tests/test_create_markdown.py b/tests/test_create_markdown.py index e69de29..86d115c 100644 --- a/tests/test_create_markdown.py +++ b/tests/test_create_markdown.py @@ -0,0 +1,14 @@ +import pytest +import os.path +from jupyter_to_medium._publish_to_medium import Publish + +@pytest.fixture +def file_name(): + path = os.path.dirname(__file__) + yield os.path.join(path,'notebooks','Test Medium Blog Post.ipynb') + + +def test_create_markdown(file_name): + publish = Publish(filename=file_name) + md, image_data_dict = publish.create_markdown() + a = 1 \ No newline at end of file From 4291f5794ad34db60b3849b04f521da4df26805e Mon Sep 17 00:00:00 2001 From: martinlarsalbert Date: Fri, 30 Apr 2021 17:29:40 +0200 Subject: [PATCH 4/5] Changed so that that the code is removed by default, but that this behaviour can be supressed with cell tag "show". --- tests/notebooks/y-is-normal.ipynb | 586 ++++++++++++++++++++++++++++++ 1 file changed, 586 insertions(+) create mode 100644 tests/notebooks/y-is-normal.ipynb diff --git a/tests/notebooks/y-is-normal.ipynb b/tests/notebooks/y-is-normal.ipynb new file mode 100644 index 0000000..ca2d1bf --- /dev/null +++ b/tests/notebooks/y-is-normal.ipynb @@ -0,0 +1,586 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", + "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5", + "execution": { + "iopub.execute_input": "2021-04-19T20:12:44.559518Z", + "iopub.status.busy": "2021-04-19T20:12:44.555667Z", + "iopub.status.idle": "2021-04-19T20:12:45.913070Z", + "shell.execute_reply": "2021-04-19T20:12:45.913613Z" + }, + "tags": [ + "show" + ] + }, + "outputs": [], + "source": [ + "# This Python 3 environment comes with many helpful analytics libraries installed\n", + "# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n", + "# For example, here's several helpful packages to load\n", + "\n", + "import numpy as np # linear algebra\n", + "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import sympy as sp" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [], + "source": [ + "def display(eq:sp.Eq, size=20):\n", + " \"\"\"\n", + " Use matplotlib to render LaTeX equations to figure within notebook.\n", + " \n", + " ----------\n", + " eq : str or sympy.Eq\n", + " LaTeX equation to render\n", + " \n", + " size : int\n", + " size of the equation\n", + " \"\"\"\n", + " \n", + " if isinstance(eq, str):\n", + " eq_latex = eq\n", + " else:\n", + " eq_latex = sp.latex(eq)\n", + "\n", + " fig,ax=plt.subplots()\n", + " fig.set_size_inches(0.01, 0.01)\n", + " ax.axis(\"off\")\n", + " plt.title(r'$' + eq_latex + r'$' , size=size);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Is $Y$ normal?\n", + "In linear regression, notation such as the below equation can be somewhat puzzeling, if you are a beginner, like me:" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "eq = r'Y \\sim \\mathcal{N}(\\alpha+\\beta \\cdot x,\\epsilon)'\n", + "display(eq)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What does this mean?\n", + "\n", + "Does it mean that $ Y $ is now also normal distributed?" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "eq = r'Y \\sim \\mathcal{N}(\\mu,\\,\\sigma^{2})\\ '\n", + "display(eq)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook explores this a bit, in order to get a more clear understanding." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lets consider a simple linear line:" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": { + "execution": { + "iopub.execute_input": "2021-04-19T20:12:45.919624Z", + "iopub.status.busy": "2021-04-19T20:12:45.918984Z", + "iopub.status.idle": "2021-04-19T20:12:46.221481Z", + "shell.execute_reply": "2021-04-19T20:12:46.220920Z" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHMAAAAlCAYAAABxlNYMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEjElEQVR4nO2ZbYgVZRTHf//MLQ16s6ACLVZB6UMKYfbBTYOECiLKDJLKC0YkBW5aQfW5F3shsxdbCNoIwbRiqy/rLpUraKFmq7FRkLagVLsWCtZupdvpw3OWHcd7787cvfcuO80fhpn7nDkv8/zPnPM8c2Vm5MgGzhrvAHJUDzmZGUJOZoaQk5kh5GRmCDmZGUJOZoaQk5kh5GTWCJLOkfSkpG8lDfrRLWllzXzmX4CqD0kNQCdwA9ANbAemAPcA5wM3m9m2avs9u9oGcwCwmkBkC7DK/I2RtAPYBCwEqk5mXmZjkFSQZJIWj8HMQ8AAsNZOL32n/Pz7GGyXRCIyJa3xB1xbQj5b0t+eeXWDpMmSmr0XDUo6IukVSQ2Spkrqk7SpzjFdCTQCn5nZnzHx3X7+PKbT4fO7NDYuSa0ue35U52Y26gEsAAzYWkLeQci6a5LYq8YBXAzs9rg+BdYBPf77MWANcBKYldJuwW0srjCupa7/dGRMhNJrQGcRnbnAEPAdMCky/rLrtCTxnbRn7gMGndTTIGkZsATYYGYHShmQ1AxcmNAfQLeZtZWRvw/MB1ab2Qb38SJwBLgFuBpoNbMfU/isBq7189eSbgSWA03AbGA/cG9cwcz2S3oPWAHcB7RKeoqQkFuAVYk8p8i4LkKWXB4ZOw84DPQBF4yi3+v6SY/WMrZu8nt24CvyiOx7l/0FTK/gzSowtjdzm+tfAmyOPdNm4IoSetMJL8xPwCN+fzvQkNh3iiCfdQd3RsbW+Vihkgev9ADejccSkXW77NUEdqqWYBGbvwG9fj0JmAYsAj5wGwfK6D4X8bUTmJpmXtJsTXb6eQHwkaQ5wKPAlz659cQiQj9sLyEfICTfaFjPmaV/HnA74Zl6Y7LucsZ88TONsK/EzIYIK9cuoEtSNzBXUqOZHSpi4mjkeqWZDYz6BBGkIXMXIWOu99+vEzLvYfO0Kodq9UxJU4AZwMH4w0pqBOYAu8ysbzQHZra+iP0CgcxWM9ueIl4Y6Zd7S8iP+flEEb/LgZeAX4HLCAumZL1yGCnLWw/wB6GpG/BmCt1eqlDSCKtYA34oIvvYZR1jKOEFKuyZwDOuu6RE3P9QpMwCtw7LgEsJff8kMDuV/5TBtniwJwgl4aJKJ20Mky33P0RkK+RZPJwIu8eJzHbXfZvIwgxoALa6bEVMZyGhLRzCF5fAXX5vWy3JvD8yYQ/Um8hIHK95DP3AG8CHwL9AG/CFy94C5teZzKOR+dkLvABsBA762Dux++cBx4FfgJkx2R7XaaoVmU3DmU9sS1BnMs8l9JfDXo76CRvsycB1jGxPzih3tSKT0MeN8AFlC2FVe4qwAOoElsXun0Xoj8co8rGFke3XV7Ui8xMvb6kzPusHcIdP/uPjFUPiD+2+2roN2Ghme5Lq/Y8wvJLdN14BlN2aSJpBWLnOJPTLHuCJOsQ1ETFM5jfjFUDZP6clPUhYwR4n1P1mM/u5PqFNLEjqBwbM7Kpxi6EcmTkmFvI/pzOEnMwMISczQ8jJzBByMjOEnMwMISczQ8jJzBD+A0w3EGTApypLAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x,y,alpha,beta = sp.symbols('x y alpha beta')\n", + "eq = sp.Eq(y,\n", + " alpha + beta*x)\n", + "display(eq)" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "execution": { + "iopub.execute_input": "2021-04-19T20:12:46.227645Z", + "iopub.status.busy": "2021-04-19T20:12:46.226993Z", + "iopub.status.idle": "2021-04-19T20:12:46.241845Z", + "shell.execute_reply": "2021-04-19T20:12:46.241247Z" + }, + "tags": [ + "remove_cell" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "## Converting sympy expression to python method:\n", + "lambda_eq = sp.lambdify([x,alpha,beta],eq.rhs)\n", + "lambda_eq" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a graph showing this line for 5 values of $x$:" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "execution": { + "iopub.execute_input": "2021-04-19T20:12:46.249335Z", + "iopub.status.busy": "2021-04-19T20:12:46.248053Z", + "iopub.status.idle": "2021-04-19T20:12:46.256318Z", + "shell.execute_reply": "2021-04-19T20:12:46.255734Z" + }, + "tags": [ + "remove_cell" + ] + }, + "outputs": [], + "source": [ + "N_x = 5\n", + "N_epsilon = 1000\n", + "N = N_x*N_epsilon\n", + "\n", + "\n", + "xs = np.linspace(0,1, int(N_x))\n", + "x_ = np.tile(xs,N_epsilon)\n", + "\n", + "df = pd.DataFrame(index=x_)\n", + "df['x'] = x_\n", + "df['alpha'] = 10\n", + "df['beta'] = 60\n", + "df['y'] = lambda_eq(x=df['x'], alpha=df['alpha'], beta=df['beta'])" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": { + "execution": { + "iopub.execute_input": "2021-04-19T20:12:46.285476Z", + "iopub.status.busy": "2021-04-19T20:12:46.284796Z", + "iopub.status.idle": "2021-04-19T20:12:46.540464Z", + "shell.execute_reply": "2021-04-19T20:12:46.541055Z" + }, + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEGCAYAAABiq/5QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAm70lEQVR4nO3deXxU9b3/8dc3GwkQCITFkABhh5BEUbRudcMKRWSvv+5abeltb1u1vUBwt6Js7a3dbi1ar7a3rVrCVjfc9xWKJmxhRxK2sIQ168zn98eMFjVIgJw5mZn38/HgkZkzZ3LehyTvnJyZ+YwzM0REJH4k+B1AREQiS8UvIhJnVPwiInFGxS8iEmdU/CIicSbJ7wBN0alTJ8vNzfU7hohIVFm2bNluM+v86eVRUfy5ubksXbrU7xgiIlHFObelseU61SMiEmdU/CIicUbFLyISZ6LiHH9j6uvrKS8vp6amxu8ox5SamkpOTg7Jycl+RxER+VjUFn95eTnp6enk5ubinPM7zmeYGXv27KG8vJxevXr5HUdE5GOenepxzg1wzr1/1L8DzrkbnXMdnXPPOefWhT92OJnPX1NTQ2ZmZossfQDnHJmZmS36LxIRaZkWLq/ggpkv0qvoSS6Y+SILl1c06+f3rPjNrMzMzjCzM4CzgCPAAqAIeMHM+gEvhK+flJZa+h9p6flEpOVZuLyCafNLqaiqxoCKqmqmzS9t1vKP1IO7w4ANZrYFGAM8El7+CDA2QhlERFq8OUvKqK4PfGJZdX2AOUvKmm0bkSr+rwJ/D1/uambbw5d3AF0bu4NzbpJzbqlzbmllZWUkMoqI+G5bVfUJLT8Znj+465xLAUYD0z59m5mZc67Rd4Ixs7nAXIChQ4ee8rvFLFxewZwlZWyrqqZbRhqThw9g7JDsU/20IiLNIhg0/u+dRl9oC0C3jLRm21YkntXzZeBfZrYzfH2ncy7LzLY757KAXV4H+Oic2Ud/Pn10zgw46fK//fbb6dixIzfeeCMAt9xyC126dOGGG25olswiEj82VB6iqLiE9zbvAyDBQfCow9205EQmDx/QbNuLRPF/jX+f5gFYDFwDzAx/XHSqG8gtevKE71NdH+DGx97nxsfeP+Y6m2deeczbrrvuOsaPH8+NN95IMBjk0Ucf5d133z3hHCISv+oDQR54bSP3Pb+OuoYgndq24u4xg6ltCHp6hsLT4nfOtQG+BHz/qMUzgcedc9cDW4CrvczgldzcXDIzM1m+fDk7d+5kyJAhZGZm+h1LRKLEior9TC0uYeW2AwBMPCuHW68cREbrFODkz0Y0hafFb2aHgcxPLdtD6Fk+zebzjswBLpj5IhWNPDCSnZHGG0WXnfR2v/vd7/Lwww+zY8cOrrvuupP+PCISP2rqA/z2xXXc/8pGAkEjOyONGeMLuKj/Z6YneyYuZvVMHj6AtOTETyxrjnNm48aN45lnnuG9995j+PDhp/S5RCT2Ld28l5G/eY3fv7SBoBnXnp/LszddFNHShyge2XAiPvqTqbnPmaWkpHDppZeSkZFBYmLi8e8gInHpcG0Dc5aU8chbmzGDPp3bMGtCIUNzO/qSJy6KH0Ll39znzILBIG+//Tb/+Mc/mvXzikjseHVt5cevxE1McPzgkj786LK+pCb7d7AYN8Xf3FatWsWoUaMYN24c/fr18zuOiLQwVUfqmP7kauYtKwdgcLd2zJ5YyOBu7X1OpuI/aXl5eWzcuNHvGCLSAj1dup3bFq1k96FaUpISuOny/nzvi71ISmwZD6tGdfGbWYsehGZ2yi84FpEosutADbcvWskzK3cAcHZuB2ZOKKRP57Y+J/ukqC3+1NRU9uzZ02JHM380jz81NdXvKCLiMTNj3rJy7n5iFQdqGmiTkkjRlwfyjS/0JCGh5fVT1BZ/Tk4O5eXltOQBbh+9A5eIxK6te49w84JSXlu3G4CL+3fm3vEFZDfjbJ3mFrXFn5ycrHe2EhHfBIPGn9/azOwlZRypC5DROpnbR+Uxbkh2izwLcbSoLX4REb+s33WQqcWlLNsSGqp2ZWEWd141mM7prXxO1jQqfhGRJqoPBPnjKxv4zQvrqQsE6Zzeiulj8xk++DS/o50QFb+ISBOsqNjP5HklrN4eGqr2/4Z25+aRg2jfOtnnZCdOxS8i8jlq6gPc9/w6HngtNFSte8c0Zowr5MJ+nfyOdtJU/CIix/Dupr0UFZewcfdhnIPrLujFfw3vT+uU6K7O6E4vIuKBQ7UNzHp6DX95O/RWiP26tGXWxELO7NHB52TNQ8UvInKUl8p2ccv8UrbtryEpwfHDS/rwn5f1pVVS7EzgVfGLiAD7Dtdx9xOrmL+8AoCC7PbMnljIoKx2Pidrfip+EYlrZsaTpdu5Y9FK9hyuo1VSAj+7oj/XXdByhqo1NxW/iMStnQdquG3hCp5dtROAL/TqyKwJheR2auNzMm+p+EUk7pgZjy/dyvQnV3OwpoG2rZKYNnIgXzu7R4scqtbcVPwiElc+3HOEaQtKeGP9HgAuG9iFe8blk9W+5Q5Va24qfhGJC4Gg8fCbm/nFkjKq6wN0aJ3MnaMHM/r0bi1+qFpzU/GLSMxbt/MgU4pLWP5hFQBXnd6NO6/KI7NtdAxVa24qfhGJWXUNQe5/ZQO/fXEd9QGja7tWTB9bwJfyuvodzVeeFr9zLgN4EMgHDLgOKAMeA3KBzcDVZrbPyxwiEn8+2FrF1OIS1uw4CMDXzunBtJEDaZcafUPVmpvXR/y/Bp4xs4nOuRSgNXAz8IKZzXTOFQFFwFSPc4hInKiuC3Df82t54LWNBA16ZrZmxvgCzu8TvUPVmptnxe+caw9cBFwLYGZ1QJ1zbgxwSXi1R4CXUfGLSDN4e+MeiopL2LznCAkOvvfFXvz0SwNIS4mdcQvNwcsj/l5AJfC/zrnTgWXADUBXM9seXmcH0OjJNufcJGASQI8ePTyMKSLR7mBNPTOfXsNf3/kQgAFd05k1sZAzumf4G6yF8rL4k4AzgR+b2TvOuV8TOq3zMTMz55w1dmczmwvMBRg6dGij64iIvLhmJ7csWMH2/TUkJzr+89K+/PCSvqQkxea4hebgZfGXA+Vm9k74+jxCxb/TOZdlZtudc1nALg8ziEiM2nOolp8/sYpF728D4PTuGcyeUMiA09J9TtbyeVb8ZrbDObfVOTfAzMqAYcCq8L9rgJnhj4u8yiAiscfM+GfJdu5cvJK9h+tITU7gv64YwHcu6EViHIxbaA5eP6vnx8Bfw8/o2Qh8B0gAHnfOXQ9sAa72OIOIxIgd+2u4dWEpz68OnSg4r3cmMycU0DMztoeqNTdPi9/M3geGNnLTMC+3KyKxxcx49L2t3Pvkag7WNpDeKolbrhzE/zu7e9yNW2gOeuWuiLRoW/Ycpqi4lLc2hoaqXT6oK9PH5nNa+1Sfk0UvFb+ItEiBoPHQ65v45XNl1NQHyWyTwp2jBzOqMEtH+adIxS8iLU7ZjoNMmfcBH5TvB2DckGxuG5VHxzYpPieLDSp+EWkx6hqC/P6l9fzPy+upDxhZ7VO5Z1w+lw2M76FqzU3FLyItwvtbq5gy7wPW7jwEwDfP7cHUEQNJ11C1ZqfiFxFfVdcF+OWzZTz0xiaCBrmZrZk5oZBze2f6HS1mqfhFxDdvbthNUXEpH+4NDVX7/sW9ueny/qQma6ial1T8IhJxB2rqmfHUav7+7lYABp6WzuyJhRTmZPgbLE6o+EXEcwuXVzBnSRnbqqrp0CaFhkCAAzUBUhIT+PFlffmPS/qQnKihapGi4hcRTy1cXsG0+aVU1wcA2Hu4DoCeHdN48Jqz6ddVQ9UiTb9iRcRTc5as+bj0j1YfNJW+T1T8IuKZbVXVVFTVNHrb9mMsF+/pVI+INLtg0Pjbux8y8+k1x1ynW0ZaBBPJ0VT8ItKsNu0+TFFxCe9s2gtAQXY71u08RE1D8ON10pITmTx8gF8R456KX0SaRUMgyJ9e38R/P7eW2oYgndqm8PMx+Xw5/zQWvb/t42f1dMtIY/LwAYwdku135Lil4heRU7Zq2wGmFpdQWhEaqjb+zGxuuzKPDuGhamOHZKvoWxAVv4ictNqGAL97cT1/eHkDDUEjOyONe8blc8mALn5Hk8+h4heRk7Jsyz6mFpewfldoqNo15/Vk8oiBtG2lWmnp9BUSkRNypK6BOUvKePjNzZhB785tmDWhkLNzO/odTZpIxS8iTfb6ut0UzS+hfF81iQmO71/cm58M66ehalFGxS8ix7X/SD33PLWKx5eWA5CX1Y7ZEwvJz27vczI5GSp+Eflcz6zYwW2LVlB5sJaUpARuGNaPSRf11lC1KKbiF5FGVR6s5c7FK3mydDsAZ/XswKwJhfTt0tbnZHKqVPwi8glmxvx/VfDzJ1axv7qe1imJTB0xkG+d25OEBOd3PGkGnha/c24zcBAIAA1mNtQ51xF4DMgFNgNXm9k+L3OISNNUVFVz8/xSXllbCcBF/Ttz77h8cjq09jmZNKdIHPFfama7j7peBLxgZjOdc0Xh61MjkENEjiEYNP7vnS3MenoNh+sCtE9L5rZReUw4MxvndJQfa/w41TMGuCR8+RHgZVT8Ir7ZUHmIouIS3tsc+sN7ZMFp3Dl6MF3SU31OJl7xuvgNeNY5Z8AfzWwu0NXMtodv3wF0beyOzrlJwCSAHj16eBxTJP7UB4I88NpG7nt+HXUNQTq1bcX0sYMZkZ/ldzTxmNfFf6GZVTjnugDPOec+MZzbzCz8S+Ezwr8k5gIMHTq00XVE5OSsqNjP1OISVm47AMBXzsrh1ivzaN862edkEgmeFr+ZVYQ/7nLOLQDOAXY657LMbLtzLgvY5WUGEfm3mvoAv31xHfe/spFA0MjpkMa94wq4qH9nv6NJBHlW/M65NkCCmR0MX74C+DmwGLgGmBn+uMirDCLyb0s372VKcQkbKw/jHFx7fi6Thw+gjYaqxR0vv+JdgQXhZwQkAX8zs2ecc+8Bjzvnrge2AFd7mEEk7h2uDQ1Ve+St0FC1Pp3bMHtiIWf11FC1eOVZ8ZvZRuD0RpbvAYZ5tV0R+bdX1lZy8/xSKqqqSUpw/MclffjRZX01VC3O6W88kRhUdaSOu59YTfG/QkPV8rPbMWtCIYO7aaiaqPhFYs7Tpdu5bdFKdh8KDVW76fL+fO+LvUjSUDUJU/GLxIhdB2q4fdFKnlm5A4Bzcjsyc0IBvTtrqJp8kopfJMqZGfOWlXP3E6s4UNNAm5REikYO4hvn9NBQNWmUil8kim3de4SbF5Ty2rrQOKxLBnTmnnEFZGek+ZxMWjIVv0gUCgSNP7+1mTlLyjhSFyCjdTJ3XJXH2DM0VE2OT8UvEmXW7zrI1OJSlm0JDVW7sjCLu0YPplPbVj4nk2ih4heJEvWBIH98ZQO/eWE9dYEgXdJbcffYfIYPPs3vaBJlVPwiUWBFxX4mzyth9fbQULWvnt2daSMH0T5NQ9XkxKn4RVqwmvoA9z2/jgdeCw1V694xjZnjC7mgbye/o0kUU/GLtFDvbtpLUXEJG3eHhqpdf2EvfnZFf1qn6MdWTo2+g0RamIM19cx+poy/vL0FgH5d2jJrYiFn9ujgczKJFSp+kRbkpbJd3DK/lG37a0hKcPzw0r7856V9aJWkoWrSfFT8Ii3AvsN13P3EKuYvrwCgMKc9syYUMiirnc/JJBap+EV8ZGY8WbqdOxatZM/hOlolJfCzK/pz3QUaqibeUfGL+GTngRpuW7iCZ1ftBOALvToya0IhuZ3a+JxMYp2KXyTCzIzHl25l+pOrOVjTQNtWSdw8chBfPbu7hqpJRKj4RSLowz1HKJpfwpsb9gBw2cAu3DMun6z2GqomkaPiF4mAQNB4+M3N/GJJGdX1ATq2SeGOq/IYfXo3DVWTiFPxi3hs7c6DTJlXwvtbqwAYfXo37rgqj0wNVROfqPhFPFLXEOT+Vzbw2xfXUR8wTmuXyvSx+Vye19XvaBLnVPwiHvhgaxVTi0tYs+MgAF//Qg+KvjyQdqkaqib+U/GLNKPqugC/en4tD762kaBBz8zWzBhfwPl9NFRNWg4Vv0gzeWvDHqbNL2HzniMkOJh0UW9uurw/aSkatyAti+fF75xLBJYCFWY2yjnXC3gUyASWAd8yszqvc4g0p4XLK5izpIxtVdWc1j6V3E6teWvDXgAGdE1n1sRCzuie4W9IkWOIxGvCbwBWH3V9FvArM+sL7AOuj0AGkWazcHkF0+aXUlFVjQHb99fw1oa9JDi46fL+/PPHF6r0pUU7bvE7537snDupebDOuRzgSuDB8HUHXAbMC6/yCDD2ZD63iF/mhJ+L/2md2rbihsv7kZKkGTvSsjXlO7Qr8J5z7nHn3Ah3Yq82uQ+YAgTD1zOBKjNrCF8vB7Ibu6NzbpJzbqlzbmllZeUJbFLEO2ZGRVV1o7dVHqyNcBqRk3Pc4jezW4F+wJ+Aa4F1zrl7nXN9Pu9+zrlRwC4zW3YywcxsrpkNNbOhnTt3PplPIdKstu+v5nt/XnrM27tlaOyCRIcmPbhrZuac2wHsABqADsA859xzZjblGHe7ABjtnBsJpALtgF8DGc65pPBRfw5Qcao7IeKlYNB49L2tzHhqNQdrG2iV6AgC9QH7eJ205EQmDx/gX0iRE9CUc/w3OOeWAbOBN4ACM/sBcBYw4Vj3M7NpZpZjZrnAV4EXzewbwEvAxPBq1wCLTm0XRLyzefdhvv7g29y8oJSDtQ1cPqgrr0y5jDkTTyc7Iw0HZGekMWN8AWOHNHrWUqTFacoRf0dgvJltOXqhmQXDp3NO1FTgUefcdGA5oVNIIi1KIGg89PomfvlcGTX1QTLbpHDXmMFcWZCFc46xQ7JV9BK1jlv8ZnbH59y2+li3fWq9l4GXw5c3Auc0LZ5I5JXtOMiUeR/wQfl+AMYNyeb2UXl0aJPiczKR5qFX7oqE1TUE+f1L6/mfl9dTHzCy2qdy77gCLh3Yxe9oIs1KxS8CLP9wH1OLS1i78xAA3zy3B1NHDCRdQ9UkBqn4Ja4dqWvgl8+u5aE3NmEGvTq1Yeb4Ar7QO9PvaCKeUfFL3Hpz/W6K5pfy4d7wULWLQ0PVUpM1VE1im4pf4s7+6npmPLWaR9/bCsDA09KZPbGQwpwMf4OJRIiKX+LKc6t2cuvCUnYeqCUlMYGfDOvL9y/uQ3Ki5utI/FDxS1zYfaiWOxev5ImS7QCc2SOD2RML6dsl3edkIpGn4peYZmYsen8bd/1zJfuO1JOWnMiUEQP49nm5JCacyLxBkdih4peYta2qmlsWlPJSWWi664V9OzFjfAHdO7b2OZmIv1T8EnOCQeOv737IrKfXcKi2gXapSdw6Ko+vnJXDiU0VF4lNKn6JKZt2H2ZqcQnvbgq9DeLwwV25e0w+Xdql+pxMpOVQ8UtMaAgEefD1TfzqubXUNgTp1LYVd48ZzJcLsvyOJtLiqPgl6q3adoCpxSWUVoSGqk04M4fbRg0io7WGqok0RsUvUau2IcDvXlzPH17eQEPQyM5I497xBVzcX+/YJvJ5VPwSlZZtCQ1VW78rNFTtmvN6MnnEQNq20re0yPHop0SiyuHaBn7xbBkPv7kZM+jduQ2zJhRydm5Hv6OJRA0Vv0SN19ZVMm1+KeX7qklMcHz/4t78ZFg/DVUTOUEqfmnx9h+p556nVvH40nIA8rLaMXtiIfnZ7X1OJhKdVPzSoj2zYge3LVpB5cFaUpISuGFYPyZd1FtD1UROgYpfWqTKg6Ghak+WhoaqDe3ZgZkTCunbpa3PyUSin4pfWhQzY/6/Kvj5E6vYX11P65REpo4YyLfO7UmChqqJNAsVv7QY5fuOcPOCFby6NjRU7aL+nbl3XD45HTRUTaQ5qfjFd8Gg8X/vbGHW02s4XBegfVoyt4/KY/yZ2RqqJuIBFb/4akPlIYqKS3hv8z4ARhacxl2j8+mc3srnZCKxy7Pid86lAq8CrcLbmWdmdzjnegGPApnAMuBbZlbnVQ5pmeoDQR54bSP3Pb+OuoYgndNDQ9VG5GuomojXvDzirwUuM7NDzrlk4HXn3NPAT4Ffmdmjzrn7geuBP3iYQ1qYFRX7mVpcwsptBwD4ylk53HplHu1bJ/ucTCQ+eFb8ZmbAofDV5PA/Ay4Dvh5e/ghwJyr+uFBTH+A3L6zjj69uJBA0cjqkMWN8AV/sp6FqIpHk6Tl+51wiodM5fYHfAxuAKjNrCK9SDmQf476TgEkAPXr08DKmRMDSzXuZUlzCxsrDOAfXnp/L5OEDaKOhaiIR5+lPnZkFgDOccxnAAmDgCdx3LjAXYOjQoeZJQPHcodoG5jyzhj+/vQUz6NO5DbMnFnJWTw1VE/FLRA63zKzKOfcScB6Q4ZxLCh/15wAVkcggkffK2kpunl9KRVU1SQmOH1zahx9d1pdWSRqqJuInL5/V0xmoD5d+GvAlYBbwEjCR0DN7rgEWeZVB/FF1pI67n1hN8b9CQ9UKstsza0Ihed3a+ZxMRMDbI/4s4JHwef4E4HEze8I5twp41Dk3HVgO/MnDDBJhT5du57ZFK9l9qJZWSQnc9KX+fPfCXiRpqJpIi+Hls3pKgCGNLN8InOPVdsUfuw7UcPuilTyzcgcA5+R2ZOaEAnp31lA1kZZGT6mQU2Jm/GNZOdOfWMWBmgbapCRSNHIQ3zinh4aqibRQKn45aVv3HuHmBaW8tm43AJcM6Mw94wrIzkjzOZmIfB4Vv5ywQND481ubmbOkjCN1ATq0TuaOqwYz5oxuGqomEgVU/HJC1u86yNTiUpZtCQ1VG1WYxZ2jB9OprYaqiUQLFb80SX0gyB9f2cBvXlhPXSBIl/RWTB+bzxWDT/M7moicIBW/HFdp+X4mz/uANTsOAvDVs7szbeQg2qdpqJpINFLxyzHV1Ae47/l1PPBaaKha945pzBxfyAV9O/kdTUROgYpfAFi4vII5S8rYVlVNt4w0xg3pxpOlO9i0+zAJDr57YS9+ekV/WqfoW0Yk2umnWFi4vIJp80uprg8AUFFVze9e2gBAvy5tmT2xkCE9OvgZUUSakYpfmLOk7OPSP1p6ahJP/ORCDVUTiTEaoCJsq6pudPmhmgaVvkgM0hF/HDMznizdjnNgjbzjQTe9AlckJqn449TOAzXcunAFz63aCUCCg+BR5Z+WnMjk4QN8SiciXlLxxxkz4/GlW5n+5GoO1jSQ3iqJaSMHkZaUwC+eW/vxs3omDx/A2CGNviumiEQ5FX8c+XDPEYrml/Dmhj0ADBvYhenj8slqHzqlM+6sHD/jiUiEqPjjQCBo/O8bm/jls2uprg/QsU0Kd1yVx+jTNVRNJB6p+GPc2p0HmTKvhPe3VgEw5oxu3D4qj0wNVROJWyr+GFXXEOQPL2/gdy+toz5gnNYulelj87k8r6vf0UTEZyr+GPTB1iqmFpd8PFTt61/oQdGXB9IuVUPVRETFH1Oq6wL86vm1PPjaRoIGPTNbM3N8Ief1yfQ7moi0ICr+GPHWhj0UzS9hy54jJDiYdFFvbrq8P2kpeuWtiHySij/KHaipZ8ZTa/j7ux8CMPC0dGZNKOT07hn+BhORFkvFH8VeWL2TWxasYMeBGpITHT+6tB8/uKQPKUkawSQix6bij0J7DtVy1z9XsfiDbQCc0T2D2RML6d813edkIhINPCt+51x34M9AV8CAuWb2a+dcR+AxIBfYDFxtZvu8yhFLzIzFH2zjrn+uYu/hOlKTE/ivKwbwnQt6kZigF2KJSNN4ecTfAPzMzP7lnEsHljnnngOuBV4ws5nOuSKgCJjqYY6YsH1/NbcuWMELa3YBcH6fTGaOL6RHZmufk4lItPGs+M1sO7A9fPmgc241kA2MAS4Jr/YI8DIq/mMKBo1H39vKjKdWc7C2gfTUJG69chBXD+2ucQsiclIico7fOZcLDAHeAbqGfykA7CB0Kqix+0wCJgH06NEjAilbns27D1M0v4S3N+4F4Et5XZk+Np+u7VJ9TiYi0czz4nfOtQWKgRvN7MDRR6lmZs65Rt4CBMxsLjAXYOjQoY2uE6saAkEeCg9Vq20IktkmhbvGDObKgiwd5YvIKfO0+J1zyYRK/69mNj+8eKdzLsvMtjvnsoBdXmaINmt2HGDqvBI+KN8PwLgh2dw+Ko8ObVJ8TiYiscLLZ/U44E/AajP776NuWgxcA8wMf1zkVYZoUtsQ4PcvbeB/XlpPQ9DIap/KveMKuHRgF7+jiUiM8fKI/wLgW0Cpc+798LKbCRX+486564EtwNUeZogKyz/cx9TiEtbuPATAN8/twdQRA0nXUDUR8YCXz+p5HTjWCelhXm03mhypa+CXz67loTc2YQa9OrVh5vgCvtBbQ9VExDt65a5P3li/m6L5JWzdW01iguN7F/Xmxsv7kZqsoWoi4i0Vf4Ttr65nxlOrefS9rQAMymrH7AmFFOS09zmZiMQLFX8EPbtyB7cuXMGug7WkJCbwk2F9+f7FfUhO1FA1EYkcFX8E7D5Uy52LV/JESeh1a2f2CA1V69tFQ9VEJPJU/B4yMxa+X8Fd/1xF1ZF60pITmTJiAN8+L1dD1UTENyp+j1RUVXPLglJeLqsE4MK+nZgxvoDuHTVUTUT8peJvZsGg8dd3P2TmU6s5XBegXWoSt47K4ytn5Wjcgoi0CCr+ZrSx8hBFxaW8uzk0VG344K7cPSafLhqqJiItiIq/GTQEgjz4+iZ+9VxoqFqntq24e8xgvlyQ5Xc0EZHPUPGfolXbDjCl+ANWVBwAYMKZOdw2ahAZrTVUTURaJhX/SaqpD/C7F9dz/ysbaAga2Rlp3Du+gIv7d/Y7mojI51Lxn4RlW/YyZV4JGyoPA3DNeT2ZPGIgbVvpv1NEWj411Qk4XNvAnCVlPPLWZsygd+c2zJpQyNm5Hf2OJiLSZCr+JnptXSXT5pdSvi80VO37F/fmJ8M0VE1Eoo+K/zj2H6ln+pOr+MeycgDystoxe2Ih+dkaqiYi0UnF/zmeWbGd2xatpPJgLSlJCdwwrB+TLuqtoWoiEtVU/I3YdbCGOxat5OkVOwAY2rMDMycU0rdLW5+TiYicOhX/UcyM4n9VcPcTq9hfXU/rlESmjhjIt87tSYKGqolIjFDxh5XvO8LNC1bw6trQULWL+nfm3nH55HTQUDURiS1xX/zBoPGXt7cw65k1HKkL0D4tmdtH5TH+zGwNVRORmBTXxb9+1yGKiktYumUfACMLTuOu0fl0Tm/lczIREe/EZfHXB4LMfXUjv35+HXWBIJ3TQ0PVRuRrqJqIxL64K/4VFfuZMq+EVdtDQ9W+clYOt16ZR/vWyT4nExGJjLgp/pr6AL9+YR1zX91IIGjkdEhjxvgCvthPQ9VEJL54VvzOuYeAUcAuM8sPL+sIPAbkApuBq81snxfbX7i8gjlLythWVU1m2xQcUHmoDufg2vNzmTx8AG00VE1E4pCXL0F9GBjxqWVFwAtm1g94IXy92S1cXsG0+aVUVFVjwO5DdVQeqqNLegrz/uM87hw9WKUvInHLs+I3s1eBvZ9aPAZ4JHz5EWCsF9ues6SM6vrAZ5YnJSRwVk9N0hSR+BbpoTNdzWx7+PIOoOuxVnTOTXLOLXXOLa2srDyhjWyrqm50+fb9NSf0eUREYpFv08bMzAD7nNvnmtlQMxvaufOJPQDbLSPthJaLiMSTSBf/TudcFkD44y4vNjJ5+ADSPjUnPy05kcnDB3ixORGRqBLp4l8MXBO+fA2wyIuNjB2SzYzxBWRnpOGA7IzQUzfHDsn2YnMiIlHFy6dz/h24BOjknCsH7gBmAo87564HtgBXe7X9sUOyVfQiIo3wrPjN7GvHuGmYV9sUEZHj01tJiYjEGRW/iEicUfGLiMQZFb+ISJxxoddRtWzOuUpCzwI6GZ2A3c0YJxpon+OD9jn2ner+9jSzz7wCNiqK/1Q455aa2VC/c0SS9jk+aJ9jn1f7q1M9IiJxRsUvIhJn4qH45/odwAfa5/igfY59nuxvzJ/jFxGRT4qHI34RETmKil9EJM7ETPE750Y458qcc+udc595L1/nXCvn3GPh299xzuX6ELNZNWGff+qcW+WcK3HOveCc6+lHzuZ0vH0+ar0JzjlzzkX1U/+asr/OuavDX+eVzrm/RTpjc2vC93UP59xLzrnl4e/tkX7kbE7OuYecc7uccyuOcbtzzv0m/H9S4pw785Q2aGZR/w9IBDYAvYEU4AMg71Pr/BC4P3z5q8BjfueOwD5fCrQOX/5BPOxzeL104FXgbWCo37k9/hr3A5YDHcLXu/idOwL7PBf4QfhyHrDZ79zNsN8XAWcCK45x+0jgacAB5wLvnMr2YuWI/xxgvZltNLM64FFCb+x+tKPf6H0eMMw55yKYsbkdd5/N7CUzOxK++jaQE+GMza0pX2eAu4FZQLS/yXJT9vd7wO/NbB+AmXnyrnYR1JR9NqBd+HJ7YFsE83nCzF4F9n7OKmOAP1vI20DGR+9meDJipfizga1HXS8PL2t0HTNrAPYDmRFJ542m7PPRrid0xBDNjrvP4T+Bu5vZk5EM5pGmfI37A/2dc2845952zo2IWDpvNGWf7wS+GX6Dp6eAH0cmmq9O9Of9c3n2RizScjjnvgkMBS72O4uXnHMJwH8D1/ocJZKSCJ3uuYTQX3SvOucKzKzKz1Ae+xrwsJn90jl3HvAX51y+mQX9DhYtYuWIvwLoftT1nPCyRtdxziUR+hNxT0TSeaMp+4xz7nLgFmC0mdVGKJtXjrfP6UA+8LJzbjOhc6GLo/gB3qZ8jcuBxWZWb2abgLWEfhFEq6bs8/XA4wBm9haQSmiYWSxr0s97U8VK8b8H9HPO9XLOpRB68Hbxp9Y5+o3eJwIvWvhRkyh13H12zg0B/kio9KP93C8cZ5/NbL+ZdTKzXDPLJfS4xmgzW+pP3FPWlO/rhYSO9nHOdSJ06mdjBDM2t6bs84eE38LVOTeIUPFXRjRl5C0Gvh1+ds+5wH4z236ynywmTvWYWYNz7kfAEkLPCnjIzFY6534OLDWzxcCfCP1JuJ7Qgyhf9S/xqWviPs8B2gL/CD+O/aGZjfYt9Clq4j7HjCbu7xLgCufcKiAATDazqP1Lton7/DPgAefcTYQe6L02yg/icM79ndAv8E7hxy7uAJIBzOx+Qo9ljATWA0eA75zS9qL8/0tERE5QrJzqERGRJlLxi4jEGRW/iEicUfGLiMQZFb+ISJxR8YuIxBkVv4hInFHxi5wE59zZ4bnoqc65NuFZ+Pl+5xJpCr2AS+QkOeemExoXkAaUm9kMnyOJNImKX+QkhWfJvEdo7v/5ZhbwOZJIk+hUj8jJyyQ0Cymd0JG/SFTQEb/ISXLOLSb0DlG9gCwz+5HPkUSaJCamc4pEmnPu20C9mf3NOZcIvOmcu8zMXvQ7m8jx6IhfRCTO6By/iEicUfGLiMQZFb+ISJxR8YuIxBkVv4hInFHxi4jEGRW/iEic+f8e5t0hE+X4SgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig,ax=plt.subplots()\n", + "df.groupby(by='x').first().plot(y='y', style='o-', lw=2, ax=ax, zorder=2)\n", + "ax.set_ylabel('y')\n", + "ax.set_xlabel('x');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's pretend that this line represents something that we can measure from a physical experiment. We assume that the measuring error is normal distributed $ \\epsilon \\sim \\mathcal{N}(0,\\,\\sigma^{2})\\ $ so that the measured values of $y$ is expressed as:" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "execution": { + "iopub.execute_input": "2021-04-19T20:12:46.551468Z", + "iopub.status.busy": "2021-04-19T20:12:46.550773Z", + "iopub.status.idle": "2021-04-19T20:12:46.554549Z", + "shell.execute_reply": "2021-04-19T20:12:46.555090Z" + }, + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "epsilon = sp.symbols('epsilon')\n", + "eq_probabalitic = sp.Eq(eq.lhs,\n", + " eq.rhs + epsilon)\n", + "\n", + "display(eq_probabalitic)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We measure $y$ 1000 times for each of the 5 values of $x$. This means that we will get 1000 values of the measuring error $\\epsilon \\sim \\mathcal{N}(0,2^{2})\\ $ for each $x$." + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "execution": { + "iopub.execute_input": "2021-04-19T20:12:46.561079Z", + "iopub.status.busy": "2021-04-19T20:12:46.560428Z", + "iopub.status.idle": "2021-04-19T20:12:46.568784Z", + "shell.execute_reply": "2021-04-19T20:12:46.568176Z" + }, + "tags": [ + "remove_input" + ] + }, + "outputs": [], + "source": [ + "np.random.seed(42)\n", + "df['epsilon'] = df.groupby('x')['y'].transform(lambda x: np.random.normal(loc=0, scale = 2.0, size=N_epsilon))" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "execution": { + "iopub.execute_input": "2021-04-19T20:12:46.575951Z", + "iopub.status.busy": "2021-04-19T20:12:46.575272Z", + "iopub.status.idle": "2021-04-19T20:12:46.578967Z", + "shell.execute_reply": "2021-04-19T20:12:46.578184Z" + }, + "tags": [ + "remove_cell" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "## Converting sympy expression to python method:\n", + "lambda_eq_probabalitic = sp.lambdify([x,alpha,beta,epsilon],eq_probabalitic.rhs)\n", + "lambda_eq_probabalitic" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": { + "execution": { + "iopub.execute_input": "2021-04-19T20:12:46.585010Z", + "iopub.status.busy": "2021-04-19T20:12:46.584363Z", + "iopub.status.idle": "2021-04-19T20:12:46.586554Z", + "shell.execute_reply": "2021-04-19T20:12:46.587080Z" + }, + "tags": [ + "remove_cell" + ] + }, + "outputs": [], + "source": [ + "df['y_measure'] = lambda_eq_probabalitic(x=df['x'], alpha=df['alpha'], beta=df['beta'], epsilon=df['epsilon'])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The measured values of $y$ is shown in the graph below:" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": { + "execution": { + "iopub.execute_input": "2021-04-19T20:12:46.612037Z", + "iopub.status.busy": "2021-04-19T20:12:46.608455Z", + "iopub.status.idle": "2021-04-19T20:12:46.808745Z", + "shell.execute_reply": "2021-04-19T20:12:46.808200Z" + }, + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig,ax=plt.subplots()\n", + "df.plot(y='y', style='-', lw=2, ax=ax, zorder=2)\n", + "df.plot(y='y_measure', style='.', alpha=0.05, ax=ax, zorder=1)\n", + "ax.set_ylabel('y')\n", + "ax.set_xlabel('x');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The measured $y$ has values distributed around the true values of $y$. These distributions becomes even more visible if we create histograms of the measured $y$:" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "execution": { + "iopub.execute_input": "2021-04-19T20:12:46.834217Z", + "iopub.status.busy": "2021-04-19T20:12:46.833551Z", + "iopub.status.idle": "2021-04-19T20:12:47.339164Z", + "shell.execute_reply": "2021-04-19T20:12:47.338560Z" + }, + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig,ax=plt.subplots()\n", + "for the_x, group in df.groupby(by='x'):\n", + " group.hist(column='y_measure', bins=20, ax=ax, label='x=%0.2f' % the_x)\n", + " \n", + "ax.set_xlabel('y_measure')\n", + "ax.legend();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So it is very clear from the above graph that the measured $y$ is not normal distributed but the measurement error $\\epsilon$ (being the deviation from the idealized line) is:" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": { + "execution": { + "iopub.execute_input": "2021-04-19T20:12:47.354670Z", + "iopub.status.busy": "2021-04-19T20:12:47.345298Z", + "iopub.status.idle": "2021-04-19T20:12:47.867725Z", + "shell.execute_reply": "2021-04-19T20:12:47.867170Z" + }, + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax_epsilon = sns.histplot(data=df, x=\"epsilon\", stat=\"density\", bins=20, kde=True);\n", + "#ax_epsilon.set_xlim(ax_y.get_xlim());\n", + "ax_epsilon.set_xlabel('Measure error: $\\epsilon$');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The histogram of the idealized $y$ looks like this, by the way:" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "execution": { + "iopub.execute_input": "2021-04-19T20:12:47.894773Z", + "iopub.status.busy": "2021-04-19T20:12:47.873214Z", + "iopub.status.idle": "2021-04-19T20:12:48.102707Z", + "shell.execute_reply": "2021-04-19T20:12:48.103291Z" + }, + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax_y = sns.histplot(data=df, x=\"y\", stat=\"density\", bins=20, kde=True);" + ] + } + ], + "metadata": { + "celltoolbar": "Tags", + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 095f9f6b7dba394870475fdd6c9ad77b314a12fe Mon Sep 17 00:00:00 2001 From: martinlarsalbert Date: Fri, 30 Apr 2021 17:56:39 +0200 Subject: [PATCH 5/5] rewrote the notebook. --- README.md | 5 +- jupyter_to_medium/_preprocesors.py | 11 + jupyter_to_medium/_publish_to_medium.py | 6 +- tests/notebooks/latex_to_medium.ipynb | 151 ++++++ tests/notebooks/y-is-normal.ipynb | 586 ------------------------ tests/test_create_markdown.py | 2 +- 6 files changed, 172 insertions(+), 589 deletions(-) create mode 100644 tests/notebooks/latex_to_medium.ipynb delete mode 100644 tests/notebooks/y-is-normal.ipynb diff --git a/README.md b/README.md index 6b439da..0237070 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,10 @@ If successful, a message will be printed with the URL to your post. Additionall Currently, this package only works for the "classic" Jupyter Notebook and is not available in Jupyter Lab. If you have experience making Jupyter Lab extensions, please let me know. -## Removing pieces of cells using cell tags +## Removing cells +The code cells are removed by default. A cell tag ```show``` can supress this behaviour for a specific cell where the code should be included in the medium post. + +### Removing pieces of cells using cell tags You can remove pieces of cells using [cell tags](https://nbconvert.readthedocs.io/en/latest/removing_cells.html#removing-pieces-of-cells-using-cell-tags). You can use the tags: ```remove_cell```, ```remove_output```, ```remove_input```. diff --git a/jupyter_to_medium/_preprocesors.py b/jupyter_to_medium/_preprocesors.py index e055576..284ceba 100644 --- a/jupyter_to_medium/_preprocesors.py +++ b/jupyter_to_medium/_preprocesors.py @@ -150,3 +150,14 @@ def preprocess_cell(self, cell, resources, index): # TODO: Necessary when images from IPython.display module used pass return cell, resources + +# Remove code cells if a cell tag 'show' has not been defined. +class RemoveCodeCellPreprocessor(Preprocessor): + + def preprocess_cell(self, cell, resources, cell_index): + if cell['cell_type'] == 'code': + tags=cell['metadata'].get('tags',[]) + if not 'show' in tags: + cell['source'] = '' # remove the code it cell tag is not == 'show' + + return cell, resources diff --git a/jupyter_to_medium/_publish_to_medium.py b/jupyter_to_medium/_publish_to_medium.py index 6fd15b4..156d404 100644 --- a/jupyter_to_medium/_publish_to_medium.py +++ b/jupyter_to_medium/_publish_to_medium.py @@ -7,7 +7,7 @@ from nbconvert.exporters import MarkdownExporter from nbconvert.preprocessors import TagRemovePreprocessor -from ._preprocesors import MarkdownPreprocessor, NoExecuteDataFramePreprocessor +from ._preprocesors import MarkdownPreprocessor, NoExecuteDataFramePreprocessor, RemoveCodeCellPreprocessor from ._screenshot import Screenshot from traitlets.config import Config @@ -133,6 +133,9 @@ def create_markdown(self): no_ex_pp = NoExecuteDataFramePreprocessor() no_ex_pp.preprocess(self.nb, self.resources) + remove_code_cells_preprocess = RemoveCodeCellPreprocessor() + remove_code_cells_preprocess.preprocess(self.nb, self.resources) + # MarkdownExporter converts images to base64 bytes automatically # MarkdownExporter deep copies resources and fails when matplotlib # must remove converter key to not error @@ -143,6 +146,7 @@ def create_markdown(self): c.TagRemovePreprocessor.remove_cell_tags.add("remove_cell") c.TagRemovePreprocessor.remove_all_outputs_tags.add('remove_output') c.TagRemovePreprocessor.remove_input_tags.add('remove_input',) + me = MarkdownExporter(config=c) md, self.resources = me.from_notebook_node(self.nb, self.resources) diff --git a/tests/notebooks/latex_to_medium.ipynb b/tests/notebooks/latex_to_medium.ipynb new file mode 100644 index 0000000..d9dd57a --- /dev/null +++ b/tests/notebooks/latex_to_medium.ipynb @@ -0,0 +1,151 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# LaTeX to medium\n", + "As being a dedicated user of jupyter notebooks in my research I was very pleased to hear about the \n", + "[jupyter_to_medium](https://github.com/dexplo/jupyter_to_medium) package, also introduced in this [post](https://medium.com/dunder-data/jupyter-to-medium-initial-post-ecd140d339f0).\n", + "I tried this package and was very impressed by how easy my work in jupyter could be converted into a medium post. One pretty essential part missing however, was the LaTeX equations from my notebooks...\n", + "\n", + "This was a known issue, but someone proposed that matplotlib could be used to render the equations into images stored in the notebooks, which would be converted to medium. Here is my attempt to do so..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I wrote a simple method that uses matplotlib to render the equations:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [ + "show" + ] + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import sympy as sp\n", + "\n", + "def display(eq:sp.Eq, size=20):\n", + " \"\"\"\n", + " Use matplotlib to render LaTeX equations to figure within notebook.\n", + " \n", + " ----------\n", + " eq : str or sympy.Eq\n", + " LaTeX equation to render\n", + " \n", + " size : int\n", + " size of the equation\n", + " \"\"\"\n", + " \n", + " if isinstance(eq, str):\n", + " eq_latex = eq\n", + " else:\n", + " eq_latex = sp.latex(eq)\n", + "\n", + " fig,ax=plt.subplots()\n", + " fig.set_size_inches(0.01, 0.01)\n", + " ax.axis(\"off\")\n", + " plt.title(r'$' + eq_latex + r'$' , size=size);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As I'm also a big fan of the SymPy package, this method accepts equations both as pure LaTeX string or a SymPy expression. So it is either possible to write the LaTeX:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "tags": [ + "show" + ] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG4AAAAmCAYAAAAlUK76AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEC0lEQVR4nO2ZW4iVVRTHf/+p1MopS4qCsTERQRHNGekhCrxAFyIYfAi6v/QcQk8G2XmpwIlsHgqihyYioQdpyC5oUj0IBpadphtJ2dWsvJTjFMk4rR72PnCavsv+xnPmzIb9h813OP+19177+++11158MjMS4kNXpx1ImB6ScJEiCRcpknCRIgkXKZJwkSIJ10FI2iLpgKQxScck7ZK0MqRvEq6zWAc8B9wAbADOAnslXV7WUakAnz2QNB84BQyY2a4i20oRJ2mPJCtpj56L87MNkmqShmdoum6cJr+XGZ5fceB+XDg/XmCzs+KYsw6Ses3s+xxuEXDEzP5pw9RDQB3YX2ppZkENWAIYcDC0T4wNuBY4DTwDXArUgGFgHrAVGANubMO8TwM/A0tC7KsclWv980CFPm2FpPX+eH5KUp+kEUknJZ2S9Jqkq7zdCkk7JP3muTckXZM1ppl9CyzHHVtfABuBVcBnwHXA9Wa2L8C3dZJelfSTpDOSjkraLWkgw3Y7cBewwcwOBy2+wo7Yhou4BzsdFU0+Pex9eh34C3dMDwKf+v/fAu4Axr3NIG7jGfB+wPibcKnBgIcCfRIuWg04hovWJ4EdwHFg2xT7IeAXYHmVtQffKiW9C6wHXgR+yDEbNLM/c/pvBhYETeZQN7OREp9eAe4GfgVuNrNR/3+397Eb9/I2mdl+z80BvgZ6gIvM7O+McXtwR+RtwGHgYtyxWQceMbOvCnx6AtiC20QPNL8Pf2tcaD5/SnoWuA8YwEV3A+NmNl609tCdLeAP3C7KaydKxviupP/UNhzg15fe9tYM7mPP3ZvBveO5hRlcI8cN8f8c9xgFOQ7oAyZxUT0nwP+8tddK+wYKt8wPuK/Vx910Gy4KJoFvcviTwAngggzuEDBWMHZv0+9a8yYCFgFdOf1e9u9pY7vXH3o5aVxM6oH2M4HVuJpn71RC0mLgMlwem5jCzQeWUrAWyykFPPej5ZcCt+BqsPdKfD9nhNZxDeE+me5Ebchxff75UQbXX8CtwR39B0OcMLNaiJ2kecAVOL/bUeP9BzMmHLAZ6K1g/xIwUsA3hPswg+sv4Nb4Z5BwFSD/vLLF42YjIJd04ZL1WeDCTue2Jr/qwBkyLgHAbvIvH8OeW9kGnxplyJ0Z3DLgvFbNVVoOSFoBfI67TW0vMH3BzI5U3jnTgKS5uM00amZrM/jjuCv14gxuFJfjus1sssV+3Y6rFwW8jXtvC3BR3mNmV7dssoBddD/lV/dJ4JIZjLZ+P+/zGVyv53ZmcHOBCeCDNvp2E/Am7lY7ARwF9gD3tHKe9FknUqQPqZEiCRcpknCRIgkXKZJwkSIJFymScJEiCRcpknCRIgkXKZJwkSIJFymScJHiX90O/2mX01elAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "eq = r'E = m*c^2'\n", + "display(eq)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "tags": [ + "show" + ] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAF0AAAAmCAYAAACmlJfBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAADe0lEQVR4nO2Z24sURxTGf5+Jl5B18UKCAVEJ6oMIshdEREUNMYII+xQQb3+CvuZBEMGnBI0PCiKKJhBQkCyaENQFfRAironrihcWFRFF0KzGjYGIWY8PVYPD2jNdszvbpUx9UDQ93+lzvv66OFXdIzMjoViMiS2gEZFMj4BkegQk0yMgmR4ByfQIaBjTJX0jqVvSgKTHkk5Kmh9DS8OYDiwH9gGLgZXA/0CXpClFC1GjvhxJagKeAR1mdrLI2jXNdEmnJVnO2DZaYuuMibj7f1p04ZpmuqR+oBnYWSXsmJldH6mw0YakY8AcoN3MBous/WFooKTPgSnAZTPbPmqKCoCkXcASYEnRhkNt7aXdH7tHQ8hIIGm5pKOS7kt6IemhpFOSOjJidwPrgJVmdieDX+Hb5HeSWiV1Snoi6ZmknyVN83HzJP0k6ZHnfpE0I0Tve226HL4HzuJ2JF3ALn/ehtuplMfv4Y3hNyukbfXHucB5YBA4CNwDOoBDktYCF4Em4AjQB6wBfgjRHdxeeGP6YknTK8R8a2b/ZhGStgKTaqjXY2adOTE7gS3AcWBzeW2/O5ladr4X2Igz7mlpxgLPzex5Wc6S6QuBRWbW66/fgTN+FdACfGlmv3tuHHALWCZpgpn9V1W1meUOQMDfgFUZ/Tk57uZcP3QczsnXipuF3cC4gHuoVGf7kLgb/vfVGTkue25DBnfGc1NztQSaPtcnPB8SX8QAfvSavqhjzo/9g7xdgX8C9ANjM7g+YCCkTmhPL7WWnsD4IvAVbo99to45F+DWua6hhKRZwGTgnJm9HMI1AbMJ9Ce0p5dMvxIY/xbq2dMlTQA+8TGvhqspA6V+/kcG11aFa8G14D9DihRmOrAVmFlD/BGgswInf/x0BHqyUDL9UgbXVoVr8ccg00P63BjgH9wHoo9i9/IyXVdxPf3rCmvQB8PI2QO8IGNhBk5RYaEEDntufkid3M8AkuYB14ABYHeV0ANm9iDoSdcBktYAJ3Cz/jecxkm4WTfdzD6rMd943OTqNbP2DP4v3PZyVgbXi+vpEy3kDTfg6W8if3s3CDRHmO1LgV9xu4qXwEPgNLB+GLna/L3sz+Bmeu54Bjfe174QWqthP+3GRCP9ifHOIJkeAcn0CEimR0AyPQKS6RGQTI+AZHoEJNMjIJkeAcn0CEimR0AyPQJeA9tcMksNMo7bAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "E,m,c = sp.symbols('E m c')\n", + "eq2 = sp.Eq(E,m*c**2)\n", + "display(eq2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conclusions\n", + "Eventhough this requires that you rewrite your notebooks using the display method, I think that this is still much more convenient than having to create these LaTeX equations as images in some other (more manual way). I will now definatelly used the [jupyter_to_medium](https://github.com/dexplo/jupyter_to_medium) package for my next post. " + ] + } + ], + "metadata": { + "celltoolbar": "Tags", + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/tests/notebooks/y-is-normal.ipynb b/tests/notebooks/y-is-normal.ipynb deleted file mode 100644 index ca2d1bf..0000000 --- a/tests/notebooks/y-is-normal.ipynb +++ /dev/null @@ -1,586 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", - "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5", - "execution": { - "iopub.execute_input": "2021-04-19T20:12:44.559518Z", - "iopub.status.busy": "2021-04-19T20:12:44.555667Z", - "iopub.status.idle": "2021-04-19T20:12:45.913070Z", - "shell.execute_reply": "2021-04-19T20:12:45.913613Z" - }, - "tags": [ - "show" - ] - }, - "outputs": [], - "source": [ - "# This Python 3 environment comes with many helpful analytics libraries installed\n", - "# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n", - "# For example, here's several helpful packages to load\n", - "\n", - "import numpy as np # linear algebra\n", - "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n", - "import matplotlib.pyplot as plt\n", - "import seaborn as sns\n", - "import sympy as sp" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": {}, - "outputs": [], - "source": [ - "def display(eq:sp.Eq, size=20):\n", - " \"\"\"\n", - " Use matplotlib to render LaTeX equations to figure within notebook.\n", - " \n", - " ----------\n", - " eq : str or sympy.Eq\n", - " LaTeX equation to render\n", - " \n", - " size : int\n", - " size of the equation\n", - " \"\"\"\n", - " \n", - " if isinstance(eq, str):\n", - " eq_latex = eq\n", - " else:\n", - " eq_latex = sp.latex(eq)\n", - "\n", - " fig,ax=plt.subplots()\n", - " fig.set_size_inches(0.01, 0.01)\n", - " ax.axis(\"off\")\n", - " plt.title(r'$' + eq_latex + r'$' , size=size);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Is $Y$ normal?\n", - "In linear regression, notation such as the below equation can be somewhat puzzeling, if you are a beginner, like me:" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "eq = r'Y \\sim \\mathcal{N}(\\alpha+\\beta \\cdot x,\\epsilon)'\n", - "display(eq)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What does this mean?\n", - "\n", - "Does it mean that $ Y $ is now also normal distributed?" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "eq = r'Y \\sim \\mathcal{N}(\\mu,\\,\\sigma^{2})\\ '\n", - "display(eq)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This notebook explores this a bit, in order to get a more clear understanding." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Lets consider a simple linear line:" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": { - "execution": { - "iopub.execute_input": "2021-04-19T20:12:45.919624Z", - "iopub.status.busy": "2021-04-19T20:12:45.918984Z", - "iopub.status.idle": "2021-04-19T20:12:46.221481Z", - "shell.execute_reply": "2021-04-19T20:12:46.220920Z" - } - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHMAAAAlCAYAAABxlNYMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEjElEQVR4nO2ZbYgVZRTHf//MLQ16s6ACLVZB6UMKYfbBTYOECiLKDJLKC0YkBW5aQfW5F3shsxdbCNoIwbRiqy/rLpUraKFmq7FRkLagVLsWCtZupdvpw3OWHcd7787cvfcuO80fhpn7nDkv8/zPnPM8c2Vm5MgGzhrvAHJUDzmZGUJOZoaQk5kh5GRmCDmZGUJOZoaQk5kh5GTWCJLOkfSkpG8lDfrRLWllzXzmX4CqD0kNQCdwA9ANbAemAPcA5wM3m9m2avs9u9oGcwCwmkBkC7DK/I2RtAPYBCwEqk5mXmZjkFSQZJIWj8HMQ8AAsNZOL32n/Pz7GGyXRCIyJa3xB1xbQj5b0t+eeXWDpMmSmr0XDUo6IukVSQ2Spkrqk7SpzjFdCTQCn5nZnzHx3X7+PKbT4fO7NDYuSa0ue35U52Y26gEsAAzYWkLeQci6a5LYq8YBXAzs9rg+BdYBPf77MWANcBKYldJuwW0srjCupa7/dGRMhNJrQGcRnbnAEPAdMCky/rLrtCTxnbRn7gMGndTTIGkZsATYYGYHShmQ1AxcmNAfQLeZtZWRvw/MB1ab2Qb38SJwBLgFuBpoNbMfU/isBq7189eSbgSWA03AbGA/cG9cwcz2S3oPWAHcB7RKeoqQkFuAVYk8p8i4LkKWXB4ZOw84DPQBF4yi3+v6SY/WMrZu8nt24CvyiOx7l/0FTK/gzSowtjdzm+tfAmyOPdNm4IoSetMJL8xPwCN+fzvQkNh3iiCfdQd3RsbW+Vihkgev9ADejccSkXW77NUEdqqWYBGbvwG9fj0JmAYsAj5wGwfK6D4X8bUTmJpmXtJsTXb6eQHwkaQ5wKPAlz659cQiQj9sLyEfICTfaFjPmaV/HnA74Zl6Y7LucsZ88TONsK/EzIYIK9cuoEtSNzBXUqOZHSpi4mjkeqWZDYz6BBGkIXMXIWOu99+vEzLvYfO0Kodq9UxJU4AZwMH4w0pqBOYAu8ysbzQHZra+iP0CgcxWM9ueIl4Y6Zd7S8iP+flEEb/LgZeAX4HLCAumZL1yGCnLWw/wB6GpG/BmCt1eqlDSCKtYA34oIvvYZR1jKOEFKuyZwDOuu6RE3P9QpMwCtw7LgEsJff8kMDuV/5TBtniwJwgl4aJKJ20Mky33P0RkK+RZPJwIu8eJzHbXfZvIwgxoALa6bEVMZyGhLRzCF5fAXX5vWy3JvD8yYQ/Um8hIHK95DP3AG8CHwL9AG/CFy94C5teZzKOR+dkLvABsBA762Dux++cBx4FfgJkx2R7XaaoVmU3DmU9sS1BnMs8l9JfDXo76CRvsycB1jGxPzih3tSKT0MeN8AFlC2FVe4qwAOoElsXun0Xoj8co8rGFke3XV7Ui8xMvb6kzPusHcIdP/uPjFUPiD+2+2roN2Ghme5Lq/Y8wvJLdN14BlN2aSJpBWLnOJPTLHuCJOsQ1ETFM5jfjFUDZP6clPUhYwR4n1P1mM/u5PqFNLEjqBwbM7Kpxi6EcmTkmFvI/pzOEnMwMISczQ8jJzBByMjOEnMwMISczQ8jJzBD+A0w3EGTApypLAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "x,y,alpha,beta = sp.symbols('x y alpha beta')\n", - "eq = sp.Eq(y,\n", - " alpha + beta*x)\n", - "display(eq)" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "metadata": { - "execution": { - "iopub.execute_input": "2021-04-19T20:12:46.227645Z", - "iopub.status.busy": "2021-04-19T20:12:46.226993Z", - "iopub.status.idle": "2021-04-19T20:12:46.241845Z", - "shell.execute_reply": "2021-04-19T20:12:46.241247Z" - }, - "tags": [ - "remove_cell" - ] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "## Converting sympy expression to python method:\n", - "lambda_eq = sp.lambdify([x,alpha,beta],eq.rhs)\n", - "lambda_eq" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here is a graph showing this line for 5 values of $x$:" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": { - "execution": { - "iopub.execute_input": "2021-04-19T20:12:46.249335Z", - "iopub.status.busy": "2021-04-19T20:12:46.248053Z", - "iopub.status.idle": "2021-04-19T20:12:46.256318Z", - "shell.execute_reply": "2021-04-19T20:12:46.255734Z" - }, - "tags": [ - "remove_cell" - ] - }, - "outputs": [], - "source": [ - "N_x = 5\n", - "N_epsilon = 1000\n", - "N = N_x*N_epsilon\n", - "\n", - "\n", - "xs = np.linspace(0,1, int(N_x))\n", - "x_ = np.tile(xs,N_epsilon)\n", - "\n", - "df = pd.DataFrame(index=x_)\n", - "df['x'] = x_\n", - "df['alpha'] = 10\n", - "df['beta'] = 60\n", - "df['y'] = lambda_eq(x=df['x'], alpha=df['alpha'], beta=df['beta'])" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "metadata": { - "execution": { - "iopub.execute_input": "2021-04-19T20:12:46.285476Z", - "iopub.status.busy": "2021-04-19T20:12:46.284796Z", - "iopub.status.idle": "2021-04-19T20:12:46.540464Z", - "shell.execute_reply": "2021-04-19T20:12:46.541055Z" - }, - "tags": [ - "remove_input" - ] - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig,ax=plt.subplots()\n", - "df.groupby(by='x').first().plot(y='y', style='o-', lw=2, ax=ax, zorder=2)\n", - "ax.set_ylabel('y')\n", - "ax.set_xlabel('x');" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's pretend that this line represents something that we can measure from a physical experiment. We assume that the measuring error is normal distributed $ \\epsilon \\sim \\mathcal{N}(0,\\,\\sigma^{2})\\ $ so that the measured values of $y$ is expressed as:" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": { - "execution": { - "iopub.execute_input": "2021-04-19T20:12:46.551468Z", - "iopub.status.busy": "2021-04-19T20:12:46.550773Z", - "iopub.status.idle": "2021-04-19T20:12:46.554549Z", - "shell.execute_reply": "2021-04-19T20:12:46.555090Z" - }, - "tags": [ - "remove_input" - ] - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "epsilon = sp.symbols('epsilon')\n", - "eq_probabalitic = sp.Eq(eq.lhs,\n", - " eq.rhs + epsilon)\n", - "\n", - "display(eq_probabalitic)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We measure $y$ 1000 times for each of the 5 values of $x$. This means that we will get 1000 values of the measuring error $\\epsilon \\sim \\mathcal{N}(0,2^{2})\\ $ for each $x$." - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "metadata": { - "execution": { - "iopub.execute_input": "2021-04-19T20:12:46.561079Z", - "iopub.status.busy": "2021-04-19T20:12:46.560428Z", - "iopub.status.idle": "2021-04-19T20:12:46.568784Z", - "shell.execute_reply": "2021-04-19T20:12:46.568176Z" - }, - "tags": [ - "remove_input" - ] - }, - "outputs": [], - "source": [ - "np.random.seed(42)\n", - "df['epsilon'] = df.groupby('x')['y'].transform(lambda x: np.random.normal(loc=0, scale = 2.0, size=N_epsilon))" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": { - "execution": { - "iopub.execute_input": "2021-04-19T20:12:46.575951Z", - "iopub.status.busy": "2021-04-19T20:12:46.575272Z", - "iopub.status.idle": "2021-04-19T20:12:46.578967Z", - "shell.execute_reply": "2021-04-19T20:12:46.578184Z" - }, - "tags": [ - "remove_cell" - ] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "## Converting sympy expression to python method:\n", - "lambda_eq_probabalitic = sp.lambdify([x,alpha,beta,epsilon],eq_probabalitic.rhs)\n", - "lambda_eq_probabalitic" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": { - "execution": { - "iopub.execute_input": "2021-04-19T20:12:46.585010Z", - "iopub.status.busy": "2021-04-19T20:12:46.584363Z", - "iopub.status.idle": "2021-04-19T20:12:46.586554Z", - "shell.execute_reply": "2021-04-19T20:12:46.587080Z" - }, - "tags": [ - "remove_cell" - ] - }, - "outputs": [], - "source": [ - "df['y_measure'] = lambda_eq_probabalitic(x=df['x'], alpha=df['alpha'], beta=df['beta'], epsilon=df['epsilon'])\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The measured values of $y$ is shown in the graph below:" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "metadata": { - "execution": { - "iopub.execute_input": "2021-04-19T20:12:46.612037Z", - "iopub.status.busy": "2021-04-19T20:12:46.608455Z", - "iopub.status.idle": "2021-04-19T20:12:46.808745Z", - "shell.execute_reply": "2021-04-19T20:12:46.808200Z" - }, - "tags": [ - "remove_input" - ] - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig,ax=plt.subplots()\n", - "df.plot(y='y', style='-', lw=2, ax=ax, zorder=2)\n", - "df.plot(y='y_measure', style='.', alpha=0.05, ax=ax, zorder=1)\n", - "ax.set_ylabel('y')\n", - "ax.set_xlabel('x');" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The measured $y$ has values distributed around the true values of $y$. These distributions becomes even more visible if we create histograms of the measured $y$:" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "metadata": { - "execution": { - "iopub.execute_input": "2021-04-19T20:12:46.834217Z", - "iopub.status.busy": "2021-04-19T20:12:46.833551Z", - "iopub.status.idle": "2021-04-19T20:12:47.339164Z", - "shell.execute_reply": "2021-04-19T20:12:47.338560Z" - }, - "tags": [ - "remove_input" - ] - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEWCAYAAACdaNcBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAqTElEQVR4nO3de3QV9bn/8fdjAqIJgtxSGmjxVuVmQSJSPT0nIB4EW9CCFrQFb6VSi5d6fgWVY1HxeFu96PLCotE2WhQ92Ir1nCLeUttjAUWpIaCFCtVQlIggBAFJeH5/7EnchFz2NXtn8nmtlZWZ73xn5tmz4dmT7555xtwdEREJl8MyHYCIiKSekruISAgpuYuIhJCSu4hICCm5i4iEkJK7iEgIKbmLiISQkruISAgpuYtkmJnlZjoGCR8ld8lqZvb/zOypBm33mtk9zaxTZmbzzOxVM6s2s9+bWXczW2hmO83sNTPrF9X/JDN73sw+NrN3zOyCqGXnmNmbwXrvm9ncqGWdzOw3ZrbNzHYE2y0Ilm0ys9FRfeea2W+C6X5m5mZ2mZm9B7wUtF9qZuvMbLuZPWdmX076AEq7peQu2e43wNlm1hXqz3InA4+0sN5k4LtAIXAc8BfgV0A3YB3wk2B7ecDzwGNAr2C9B8xsQLCd3cBUoCtwDjDDzM4Nlk0DugB9ge7AFcCeOF7bvwH9gTFmNgG4AfgW0BP4E/B4HNsSOYiSu2Q1d98CvAKcHzSdDXzk7qtaWPVX7v53d/8E+APwd3d/wd1rgP8Ghgb9vgFscvdfuXuNu78JPFW3P3cvc/dydz/g7m8RSbj/Fqy7n0hSP97da919lbvvjOPlzXX33e6+h8gHw+3uvi6I8b+AITp7l0QpuUtbUAp8J5j+DvBoDOt8GDW9p5H5/GD6y8BpwbDKDjPbAVwEfAHAzE4zs5fNrMrMPiGShHsE6z4KPAcsMrN/mtldZtYhjtf1ftT0l4F7omL4GDAif3mIxE3JXdqCp4GTzWwQkTPthSnc9vvAH929a9RPvrvPCJY/BjwD9HX3LsB8IkkXd9/v7je7+wDg9CC2qcF6u4Ejo/bzhUb2HV2S9X3g+w3iOMLdX03ZK5V2Rcldsp677wUWE0m0K939vRRu/lngK2b2XTPrEPycamb9g+WdgY/dfa+ZDQcurFvRzEaa2WAzywF2EhmmORAsXg1MDrZXBExqIY75wPVmNjDYdhczO7+FdUSapOQubUUpMJjYhmRi5u67gH8n8kXqP4EPgDuBw4MuPwBuMbNdwE3Ak1Grf4HIh85OIl/S/jEqvv8k8kXuduBmIh9MzcXxu2C/i8xsJ7AGGJvky5N2zPSwDmkLzOxLwNvAF+L80lKkXdKZu2Q9MzsM+BGwSIldJDa6M06yWnAd+ofAP4hcBlnXXt3EKmPd/U+tEZtINtOwjIhICLU4LGNmD5vZVjNb06B9ppm9bWYVZnZXVPv1ZrYhuI17TDqCFhGR5sUyLPNr4D6ibvc2s5HABOCr7r7PzHoF7QOIXHUwEPgi8IKZfcXda5vbQY8ePbxnz57k5eUl9ipa0e7du7M+zrYQIyjOVFOcqdUW4ly1atVH7t6z0YXu3uIP0A9YEzX/JDC6kX7XA9dHzT8HfK2l7Q8bNsxffvllbwvaQpxtIUZ3xZlqijO12kKcwOveRF5N9GqZrwBfN7MVZvZHMzs1aC/k4FuqK9Ht0yIirS7Rq2VyiVTXGwGcCjxpZsfGswEzmw5MBygoKKC6upqysrIEw2k9bSHOthAjKM5UU5yp1VbibEqiyb0S+G3wZ8FKMztApJjSZiLlT+v0CdoO4e4LgAUARUVFnp+fT3FxcYLhtJ6ysrKsj7MtxAiKM9UUZ2q1lTibkmhyfxoYCbxsZl8BOgIfESmw9JiZ/YzIF6onACsT2cH+/fuprKxk7969CYaYHl26dGHdunWZDoNOnTrRp08fOnSIpwihiLQXLSZ3M3scKAZ6mFklkYccPAw8HFwe+RkwLTiLrzCzJ4G1QA1wpbdwpUxTKisr6dy5M/369cPMEtlEWuzatYvOnTtnNAZ3Z9u2bVRWVnLMMcdkNBYRyU4tJnd3n9LEou801ujutwG3JRMUwN69e7MusWcLM6N79+5UVVVlOhQRyVJZXVtGib1pOjYi0pysTu4iIpKYNlM4rN/s/0np9jbdcU5Kt1dn48aNTJ48mW3btjFs2DAeffRROnbseEi/22+/nYceeoicnBzuvfdexoyJVGpYunQpV199NbW1tVx++eXMnj07LXGKSLjpzD0Ob1Xu4NPPanmrckeTfWbNmsW1117Lhg0bOProo3nooYcO6bN27VoWLVpERUUFS5cu5Qc/+AG1tbXU1tZy5ZVX8oc//IG1a9fy+OOPs3bt2jS+IhEJKyX3Jrz22mucfPLJ7N27l927dzNw4EDWv918onV3XnrpJSZNijxRbdq0aTz99NOH9FuyZAmTJ0/m8MMP55hjjuH4449n5cqVrFy5kuOPP55jjz2Wjh07MnnyZJYsWZKOlyciIddmhmVa26mnnsr48eOZM2cOe/bs4Tvf+Q5f7NOXM4u/Ts0B6NQh56D+jz32GL169aJr167k5kYOa58+fdi8+dB7uDZv3syIESPq56P79e3b96D2FStWpOPliUjIKbk346abbuLUU0+lU6dO3HvvvVRs2cWLZX/iwz1wcp+uh/T/6KOPWj9IEZFGKLk3Y9u2bVRXV7N///7I8Ez1Ls4cO67JM/f+/fuzY8cOampqyM3NpbKyksLCQ+umFRYW8v77n9dXi+7XVLuISDyU3Jvx/e9/n1tvvZWNGzcya9Ysps+e1+yZO8DIkSNZvHgxkydPprS0lAkTJhzSZ/z48Vx44YX86Ec/4p///Cfr169n+PDhuDvr169n48aNFBYWsmjRIh577LE0v0oRCaM2k9zTdeliUx555BE6dOjAhRdeSG1tLaeffjpf/b9XGD/6X5td784772Ty5MnMmTOHoUOHctlllwHwzDPP8Prrr3PLLbcwcOBALrjgAgYMGEBubi73338/OTmRvwTuu+8+xowZQ21tLZdeeikDBw5M+2sVkfBpM8m9tU2dOpWpU6cCkJOTw4oVK5q9BLLOsccey8qVh9ZKGz9+POPHj6+fv/HGG7nxxhsP6Tdu3DjGjRuXeOAiIuhSSBGRUFJyFxEJISV3EZEQUnIXEQkhJXcRkRBSchcRCaG2cynk3C4p3t4nqd1eIJaSv88//zyzZ8/ms88+o2PHjtx9992MGjUKgOLiYrZs2cIRRxwBwLJly+jVq1daYhWR8GrxzN3MHjazrcHzUhsuu87M3Mx6BPNmZvea2QYze8vMTklH0NkslpK/PXr04Pe//z3l5eWUlpby3e9+96DlCxcuZPXq1axevVqJXUQSEsuwzK+Bsxs2mllf4N+B96KaxwInBD/TgQeTDzEz0lnyd+jQoXzxi18EYODAgezZs4d9+/al/DWISPsVywOyXzGzfo0s+jnwYyC64PgE4BF3d2C5mXU1s97uviUl0baidJb8jfbUU09xyimncPjhh9e3XXLJJeTk5DBx4kTmzJmj56WKSNwSGnM3swnAZnf/a4PEUwi8HzVfGbS1ueQO6S/5W1FRwaxZs1i2bFl928KFCyksLGTXrl1MnDiRRx99tL4MgohIrOJO7mZ2JHADkSGZhJnZdCJDNxQUFFBdXU1ZWVn98i5durBr1676+c7J7KwR0dtuygcffMDOnTvZt28fVVVV5NXsZ3TxOBw4rMHZ9EMPPcSJJ57I9u3b2b59O7m5ubzzzjsUFBQ0uq/NmzczYcIE5s+fT69ever7HHXUUfXT3/rWt/jzn//Meeed12h8e/fuPeiY1Wl4LLNVtse5dltkGK5nTs+sjrNOth/POoqzdSRy5n4ccAxQd9beB3jDzIYDm4G+UX37BG2HcPcFwAKAoqIiz8/Pp7i4uH75unXr6Nw51Sn9c7Fs+6KLLuK2225j48aNzJs3j+mz5/FCCyV/R40axXPPPcfkyZNZvHgxEydOPGRfO3bs4Nvf/jZ33XUXZ511Vn17TU0NO3bsoEePHuzfv58XXniB0aNHNxlrp06dGDp06CHtZWVlBx3LbJXtcc4snQnAjPwZnF98foajaVm2H886irN1xJ3c3b0cqL+Ew8w2AUXu/pGZPQP80MwWAacBn6RsvD1Nly42JZ0lf++77z42bNjALbfcwi233AJELnnMy8tjzJgx7N+/n9raWkaPHs33vve9tL9WEQmfFpO7mT0OFAM9zKwS+Im7H3p9X8T/AuOADcCnwCUpirPVpbPk75w5c5gzZ06j669atSrxoEVEArFcLTOlheX9oqYduDL5sEREJBkqPyAiEkJK7iIiIaTkLiISQm2ncFgriv7itKlLHmPpIyKSKUru0rK6ipytfDmqZId1J/Wvn+7/9roMRiLxaDPJfXDp4JRur3xaeUq3VyeWkr+bNm2if//+nHjiiQCMGDGC+fPnA5FLIS+++GL27NnDuHHjuOeee1RbRkTipjH3FIul5C/AcccdV1/Wty6xA8yYMYNf/vKXrF+/nvXr17N06dLWCl1EQkTJvQlrVr/BpLPOSEvJ36Zs2bKFnTt3MmLECMyMqVOnxrW+JG9w6eD6n2T6iGRamxmWaW2DhpxC8Vljmyz5G61Th5y4S/5u3LiRoUOHctRRRzFv3jy+/vWvs3nzZvr06VPfJ5aSwSIijVFyb8b3r/kxl553VqMlf6PVXS0Ta8nf3r17895779G9e3dWrVrFueeeS0VFRYqjF5H2TMm9GTu2f0x1dTX79++PDM9U7+LMseOaPHPv378/O3bsoKamhtzcXCorKyksLDxku4cffnj9wzmGDRvGcccdx9/+9jcKCwuprKys79fU+iIiLVFyb8ats6/l1ltvZePGjcyaNYvps+c1e+YOMHLkSBYvXszkyZMpLS1lwoQJh2y3qqqKbt26kZOTw7vvvsv69es59thj6datG0cddRTLly/ntNNO45FHHmHmzJlpfpUiEkZtJrmn69LFpvx+8SJy01Ty95VXXuGmm26iQ4cOHHbYYcyfP59u3boB8MADD9RfCjl27FjGjh2b9tcqIuHTZpJ7a/vmpMl8c9JkIPUlfydOnMjEiRMbXb+oqIg1a9YkHriICLoUUkQklJTcRUQC91/xEvdf8VKmw0gJJXcRkRBSchcRCaEWk7uZPWxmW81sTVTb3Wb2tpm9ZWa/M7OuUcuuN7MNZvaOmY1JU9wiItKMWM7cfw2c3aDteWCQu58M/A24HsDMBgCTgYHBOg+YWU7KohURaQX3X/ESVe/tatPj77E8IPsVM+vXoG1Z1OxyYFIwPQFY5O77gI1mtgEYDvwl2UCja0qnQrrqUsdS8nfhwoXcfffd9fNvvfUWb7zxBkOGDKG4uJgtW7ZwxBFHALBs2TJ69eqVllhFJLzM3VvuFEnuz7r7oEaW/R54wt1/Y2b3Acvd/TfBsoeAP7j74kbWmw5MBygoKBhWUlJCfn5+/fIuXbpw/PHH189Xnjo8zpfWvD6vHXotep1PP6utnz6yY85B7R0Og/0Nyg9E95k2bRrf/OY3mTRpEtdccw2DBg3i8ssvb3JfFRUVTJkyhbfeeguAcePGMW/ePE455ZQWX8OGDRv45JNDH6BRXV190LFM2pbVkd+9h6Rum6QhzhRYu+3Qyp89c3rSs2vPRvsM6D6gVeKKRbqO596oukedBg5MenvZ+L7XqXpvV/10bt4BanYfRs8vdc5gRM0bOXLkKncvamxZUjcxmdmNQA2wMN513X0BsACgqKjI8/PzKS4url++bt06OndO30FtbtsbK3ewZvUbzP1/M3nrzVXU1tYyfPhwbrnnl/zL0AGHlh/oHtmWu/PKK6/w5JNPkpuby+WXX87cuXO59tprm9zXM888w4UXXlgfT05ODnl5eTG99k6dOjF06NBD2svKyg46lkmbG5RQmJLaJzGlPM4UmFl6aLmHGfkzOL/4/Eb7lE9s3Tunm5Ou47nuihn106n4izcb3/c60cMwvU7fzdZX8zh/anHmAkpCwsndzC4GvgGc6Z+f/m8G+kZ16xO0tTnpLvlb54knnmDJkiUHtV1yySXk5OQwceJE5syZoycxZQHVbm+/ohP+lfNHZTCS+CSU3M3sbODHwL+5+6dRi54BHjOznwFfBE4Amh7/yHLfv+bHXPiNUXQ8vBOPPH0LOTk5KSn5W2fFihUceeSRDBr0+WjXwoULKSwsZNeuXUycOJFHH32UqVOnJvtSRKSdaTG5m9njQDHQw8wqgZ8QuTrmcOD54Kxyubtf4e4VZvYksJbIcM2V7l7b+Jaz347tH/Pp7t3U1NSwb99e/MCBlJT8rbNo0SKmTJlyUFtd/86dO3PhhReycuXK7EnudQ/KBj0sWyTLxXK1zJRGmht/MGik/23AbckElS1unX0tV/7HDWx+/x/84r/mcsO8u1NS8hfgwIEDPPnkk/zpT3+qb6upqWHHjh306NGD/fv38+yzzzJ69Oh0vDQRCbk2UxUyXZcuNqWu5O+4886ntraWqeeOYUWKSv4CvPLKK/Tt25djjz22ft19+/YxZswY9u/fT21tLaNHj+Z73/te+l6kiIRWm0nura1hyd+Fv38hpvViKfkLUFxczPLlyw/qk5eXx6pVq5KIWkQkQrVlRERCSGfu0rjoL09FpM1RcheRRqW65Ee2asv1Y5qjYRkRkRBSchcRCSEldxGREGozY+6pHhdLV42I++67j1/84hf8/e9/p6qqih49ejTar7S0lHnz5gEwZ84cpk2bBsCqVau4+OKL2bNnD+PGjeOee+5RbRkRiZvO3FPsjDPO4IUXXuDLX/5yk30+/vhjbr75ZlasWMHKlSu5+eab2b59OwAzZszgl7/8JevXr2f9+vUsXbq0tUKPz9wun/+ISNZRcm/CmtVvMOmsM9i3dy+ffrqb8878GuvfPrTWd0NDhw6lX79+zfZ57rnnOOuss+jWrRtHH300Z511FkuXLmXLli3s3LmTESNGYGZMnTqVp59+OjUvSETalTYzLNPa6kr+3nf3bezbu4dvnHd+iyV/BwyI7cENmzdvpm/fzysj15UG3rx5M3369DmkXUQkXkruzYgu+TvrljtbLPkrbZNqtX+uvVzb3h4ouTcj3pK/sZ65FxYWUlZWVj9fWVlJcXExhYWFVFZWHtTeXMlgEZGmKLk3I5GSv7EYM2YMN9xwQ/2XqMuWLeP222+nW7duHHXUUSxfvpzTTjuNRx55hJkzD33sm4hIS9pMcm/tx1slWvL33nvv5a677uKDDz7g5JNPZty4cZSUlPD6668zf/58SkpK6NatG//5n//JqaeeCsBNN91Et27dAHjggQfqL4UcO3YsY8eOTftrFZHwaTPJvbUlWvL3qquu4qqrrjqkvaioiJKSkvr5Sy+9lEsvvbTRfmvWrEkwahGRCF0KKSISQi0mdzN72My2mtmaqLZuZva8ma0Pfh8dtJuZ3WtmG8zsLTM7JZ3Bi4hI42I5c/81cHaDttnAi+5+AvBiMA8wFjgh+JkOPJhMcO6ezOqhpmMjIs1pMbm7+yvAxw2aJwClwXQpcG5U+yMesRzoama9EwmsU6dObNu2TUmsEe7Otm3b6NSpU6ZDEZEsZbEkTzPrBzzr7oOC+R3u3jWYNmC7u3c1s2eBO9z9z8GyF4FZ7v56I9ucTuTsnoKCgmElJSXk5+dHLycvL4+cnJwkX2L8Pqs90OSyHIPaBoesY07rf3VRW1vL7t27G/3wq66uPuhYJmTL6tj79h6S0C5SEmcKrN3WfFmJnjk9qaqtanTZgO6x3dvQGlJxPPdWVDS7vNPAgUltH7Lnfa9T9d6uRttz8w5Qs7vx/9s9v9Q5nSHFbOTIkavcvaixZUlfLePubmZxn167+wJgAUBRUZHn5+dTXFycbDgp0W/2/zS57LrBNfy0/ODDtumOc9IdUlzKysqSP5ZzJ8Ted8onCe0iJXGmwMzS5u8lmJE/gwerGx9hLJ9Yno6QEpKK47nuihnNLu//9rqktg/Z877XaaribK/Td7P11bxGl50/tTiNEaVGoqecH9YNtwS/twbtm4G+Uf36BG0iItKKEk3uzwDTgulpwJKo9qnBVTMjgE/cfUuSMYqISJxaHJYxs8eBYqCHmVUCPwHuAJ40s8uAfwAXBN3/FxgHbAA+BS5JQ8wiItKCFpO7u09pYtGZjfR14MpkgxIRkeToDlURkRBSchcRCSEVDgs0d/lju6Jnokoz6h7mkYpLIiW9dOYuIhJCSu4iIiGkYZkUiB7Syba7VUWkfdKZu4hICCm5i4iEkJK7iEgIKbmLtFPrTupff2mjhI+Su4hICCm5i4iEkC6FFGnnNDQTTkruIkkYXDq4frp8WvY8lUla1tQTmMJCwzIiIiGk5C4iEkJK7iIiIaTkLiISQkkldzO71swqzGyNmT1uZp3M7BgzW2FmG8zsCTPrmKpgRUQkNgkndzMrBK4Citx9EJADTAbuBH7u7scD24HLUhGoiIjELtlhmVzgCDPLBY4EtgCjgMXB8lLg3CT3ISIicTJ3T3xls6uB24A9wDLgamB5cNaOmfUF/hCc2TdcdzowHaCgoGBYSUkJ+fn5CceSrPLNn8TUr+AI+HBP08sHF2b+MXXV1dWJH8stq+Nfp/eQhHaVVJwptHbb2maX98zpSVVtVYvbGdB9QKpCSki8x3NvRUXC++o0cGDC62bL+1713q5ml+fmHaBmd+Pnvz2/1DkdIcVt5MiRq9y9qLFlCd/EZGZHAxOAY4AdwH8DZ8e6vrsvABYAFBUVeX5+PsXFxYmGk7SLY3yG6nWDa/hpedOHbdNFxSmKKHFlZWWJH8u5E+JfZ0psH4wNJRVnCs0sndns8hn5M3iw+sEWt1M+MbM3McV7PNddMSPhfSXzDNVsed9buomp1+m72fpqXqPLzp9anIaIUiuZYZnRwEZ3r3L3/cBvgTOArsEwDUAfYHOSMUq2m9tFD9YWyTLJJPf3gBFmdqSZGXAmsBZ4GZgU9JkGLEkuRBERiVfCyd3dVxD54vQNoDzY1gJgFvAjM9sAdAceSkGcIiISh6QKh7n7T4CfNGh+FxiezHZFRCQ5ukNVRCSEVPJX2qXoUr0iYaQzdxGREFJyFxEJIQ3LiEjcoh/Nl8wNTW1V9A1QV84flcFImqYzdxGRENKZu+juUpEQ0pm7iEgIKbmLiISQkruISAhpzF1SJ3rsfm5iZYBFJDV05i4iEkJK7iIiIaRhGZF2JPrmIwk3JXcRSUpbulu1pUfrhYmGZUREQkjJXUQkhJTcRURCKKkxdzPrCpQAgwAHLgXeAZ4A+gGbgAvcfXsy+0mXfrP/J9MhiIikRbJn7vcAS939JOCrwDpgNvCiu58AvBjMi4hIK0o4uZtZF+BfgYcA3P0zd98BTABKg26lwLnJhSgiIvEyd09sRbMhwAJgLZGz9lXA1cBmd+8a9DFge918g/WnA9MBCgoKhpWUlJCfn59QLIkq3xz/LfIFR8CHe2LrO7gwM6V0q6ur4zuWW1anPojeQ1rsEnecKbR229qY+/bM6UlVbVWL/QZ0H5BMSEmL5XjurahIawydBg5ssU8m3/eq93bF3Dc37wA1u1s+/+35pc7JhJSUkSNHrnL3osaWJTPmngucAsx09xVmdg8NhmDc3c2s0U8Pd19A5MOBoqIiz8/Pp7i4OIlw4ndxAmPu1w2u4aflsR22TRcVx739VCgrK4vvWM6dkPogprT8wRl3nCk0s3RmzH1n5M/gweoHW+xXPrE8mZCSFsvxXHfFjLTGEMt17pl83+O5zr3X6bvZ+mpei/3On1qcRETpk8yYeyVQ6e4rgvnFRJL9h2bWGyD4vTW5EEVEJF4JJ3d3/wB438xODJrOJDJE8wwwLWibBixJKkIREYlbsuUHZgILzawj8C5wCZEPjCfN7DLgH8AFSe5DRETilFRyd/fVQGOD+Wcms10REUmO7lAVEQkhJXcRkRBSchcRCSEldxGRENLDOkRSZHDp4Prp8mmZvaFJRGfuIiIhpOQuIhJCSu4iIiGk5C4iEkJK7iIiIaSrZaTdiL6aRdqPeMr8honO3EVEQkhn7iIiSYj+y+DK+aMyGMnBlNzbs7mZeQygiKSfhmVEREJIyV1EJIQ0LJNG/aIewL3pjnMyGImItDc6c5f0mNtFY/oiGZR0cjezHDN708yeDeaPMbMVZrbBzJ4Inq8qIiKtKBVn7lcD66Lm7wR+7u7HA9uBy1KwDxERiUNSyd3M+gDnACXBvAGjgMVBl1Lg3GT2ISIi8TN3T3xls8XA7UBn4D+Ai4HlwVk7ZtYX+IO7D2pk3enAdICCgoJhJSUl5OfnJxxLIso3fxL3OgVHwId74t/X4MLWG3+urq6O7VhuWZ32WOg9pMlFMceZImu3rU1ovZ45PamqrYprnQHdByS0r2TEcjz3VlSkNYZOAwe22Ke13/eq93YltF5u3gFqdsd3/tvzS50T2leiRo4cucrdixpblvDVMmb2DWCru68ys+J413f3BcACgKKiIs/Pz6e4OO7NJOXiqKtZYnXd4Bp+Wh7/Ydt0UXHc6ySqrKwstmM5d0LaY2FK0x+gMceZIjNLZya03oz8GTxY/WBc65RPbP0nMcVyPNddMSOtMfR/e12LfVr7fU+0tkyv03ez9dW8uNY5f2pxQvtKh2QuhTwDGG9m44BOwFHAPUBXM8t19xqgD7A5+TBFRCQeCY+5u/v17t7H3fsBk4GX3P0i4GVgUtBtGrAk6ShFRCQu6biJaRawyMzmAW8CD6VhHyJZTQ/LlkxLSXJ39zKgLJh+Fxieiu2KiEhidIeqiEgIqbaMSDuw7qT+rbqfWK6akfRqd8m9XwKXP4qItDXtLrm3eyrmJdIuaMxdRCSElNxFREJIyV1EJISU3EVEQkjJXUQkhJTcRURCSJdCioRUa924JNlJyb2VRN88temOczIYiYi0BxqWEREJIZ25S3pF3xE7N/7HGopIYpTcRSTlosf7VUQsMzQsIyISQkruIiIhpGEZCb3oR96JpNP9V7wEwJXzR2U4kiTO3M2sr5m9bGZrzazCzK4O2ruZ2fNmtj74fXTqwhURkVgkMyxTA1zn7gOAEcCVZjYAmA286O4nAC8G8yIi0ooSHpZx9y3AlmB6l5mtAwqBCUBx0K2UyIOzZyUVpYhIDOqGRQTM3ZPfiFk/4BVgEPCeu3cN2g3YXjffYJ3pwHSAgoKCYSUlJeTn5ycdS0vKNyd3rXXBEfDhnuRiGFyY3qchVVdXN30st6xO676b1XvIQbPNxplCa7etTWr9njk9qaqtSnj9Ad0HJLX/WDU8nnsrKlplvy3pNHDgQfPpfN+r3tuVsm3l5h2gZndigxs9v9Q5ZXE0Z+TIkavcvaixZUl/oWpm+cBTwDXuvjOSzyPc3c2s0U8Pd18ALAAoKiry/Px8iouLkw2nRRcn+QzV6wbX8NPy5A7bpouKk1q/JWVlZQcfy2x5tN6Ugz9YD4kzTWaWzkxq/Rn5M3iw+sGE1y+fWJ7U/mPV8Hiuu2JGq+y3JQ2vc0/n+57KM/dep+9m66t5Ca17/tTilMWRqKQuhTSzDkQS+0J3/23Q/KGZ9Q6W9wa2JheiiIjEK5mrZQx4CFjn7j+LWvQMMC2YngYsSTw8CZW5XbLnrwiRkEtmfOEM4LtAuZmtDtpuAO4AnjSzy4B/ABckFWEK9EtyKEYkGXXX2ZdPa53hmWwr9VsXj8oQtK5krpb5M2BNLD4z0e2KiEjyVH5ARCSElNxFREJIyV1EJIRUOExCScXCpL3TmbuISAgpuYuIhJCGZTIg+rr7TXeck8FIRCSsdOYuIhJCSu4iIiGkYRkRkRSLrk6ZqUfuKblnmMbfRSQdNCwjra+uOmQmHxwSMutO6s/eioqsKxqWTvdf8ZKevNQMJXcRkRDSsExYRNdJP/FmmDshc7GItKJsP3vP1Ph7aJO7ari3P9leciA6vtaq7S7tV2iTu4iET7afpWcTjbmLiIRQqM7cNRTTBkV/VzD3k7hXz/ahmKY0FXc8wzVt7cqYunj3zvwhFBdnNpgMa41x+LQldzM7G7gHyAFK3P2OdO1LQqIu0SeQ5KVtiv6Aag/PWG3NYaW0JHczywHuB84CKoHXzOwZd1+b6n2F6Wy9qRuadKNT+xTmL2Db2l8dbVG6xtyHAxvc/V13/wxYBOjaPBGRVmLunvqNmk0Cznb3y4P57wKnufsPo/pMB6YHsycC24CPUh5M6vUg++NsCzGC4kw1xZlabSHOL7t7z8YWZOwLVXdfACyomzez1929KFPxxKotxNkWYgTFmWqKM7XaSpxNSdewzGagb9R8n6BNRERaQbqS+2vACWZ2jJl1BCYDz6RpXyIi0kBahmXcvcbMfgg8R+RSyIfdvaKF1Ra0sDxbtIU420KMoDhTTXGmVluJs1Fp+UJVREQyS+UHRERCSMldRCSEMp7czexsM3vHzDaY2exMx1PHzB42s61mtiaqrZuZPW9m64PfR2cyxiCmvmb2spmtNbMKM7s6G2M1s05mttLM/hrEeXPQfoyZrQje/yeCL+AzysxyzOxNM3s2i2PcZGblZrbazF4P2rLqPQ9i6mpmi83sbTNbZ2Zfy7Y4zezE4DjW/ew0s2uyLc54ZTS5R5UpGAsMAKaY2YBMxhTl18DZDdpmAy+6+wnAi8F8ptUA17n7AGAEcGVwDLMt1n3AKHf/KjAEONvMRgB3Aj939+OB7cBlmQux3tVAdKGTbIwRYKS7D4m6Fjvb3nOI1Jda6u4nAV8lclyzKk53fyc4jkOAYcCnwO/Isjjj5u4Z+wG+BjwXNX89cH0mY2oQXz9gTdT8O0DvYLo38E6mY2wk5iVEavpkbazAkcAbwGlE7gDMbezfQ4Zi60PkP/Io4FnAsi3GII5NQI8GbVn1ngNdgI0EF25ka5wNYvt34P+yPc5YfjI9LFMIvB81Xxm0ZasCd98STH8AFGQymIbMrB8wFFhBFsYaDHesBrYCzwN/B3a4e03QJRve/18APwYOBPPdyb4YARxYZmarglIekH3v+TFAFfCrYJirxMzyyL44o00GHg+msznOFmU6ubdZHvk4z5rrSM0sH3gKuMbdd0Yvy5ZY3b3WI3/69iFSXO6kzEZ0MDP7BrDV3VdlOpYY/Iu7n0JkSPNKM/vX6IVZ8p7nAqcAD7r7UGA3DYY2siROAILvUsYD/91wWTbFGatMJ/e2VqbgQzPrDRD83prheAAwsw5EEvtCd/9t0JyVsQK4+w7gZSJDHF3NrO5muky//2cA481sE5FKpqOIjBlnU4wAuPvm4PdWIuPDw8m+97wSqHT3FcH8YiLJPtvirDMWeMPdPwzmszXOmGQ6ube1MgXPANOC6WlExrczyswMeAhY5+4/i1qUVbGaWU8z6xpMH0Hke4F1RJL8pKBbRuN09+vdvY+79yPyb/Eld7+ILIoRwMzyzKxz3TSRceI1ZNl77u4fAO+b2YlB05nAWrIszihT+HxIBrI3zthketAfGAf8jcj4642ZjicqrseBLcB+ImcglxEZf30RWA+8AHTLgjj/hcifi28Bq4OfcdkWK3Ay8GYQ5xrgpqD9WGAlsIHIn8OHZ/qYBnEVA89mY4xBPH8Nfirq/t9k23sexDQEeD14358Gjs7SOPOIlB3vEtWWdXHG86PyAyIiIZTpYRkREUkDJXcRkRBSchcRCSEldxGREFJyFxEJISV3kVYWdUOUSNoouUubZGa3mNk1UfO31ZU7btCv2Mz+aGZLzOxdM7vDzC4Kyg+Xm9lxQb+eZvaUmb0W/JwRtA83s78EtVFerbshx8wGBttYbWZvmdkJZtbPDi4R/R9mNjeYLjOzXwTlea82s2FBXKvM7Lm6OyFFUkVnENJWPQz8FviFmR1G5I7S4U30/SrQH/gYeBcocffhwYfBTOAaImUGfu7ufzazLxF5/m9/4G3g6x55LvBo4L+AicAVwD3uvjC4uzqHlgtLdXT3oqBcxB+BCe5eZWbfBm4DLk3oSIg0Qsld2iR332Rm28xsKJGk+qa7b2ui+2seVPczs78Dy4L2cmBkMD0aGBCp5gDAUUExti5AqZmdQORO4A7B8r8AN5pZH+C37r4+at2mPBH8PhEYBDwfrJND5G5okZRRcpe2rAS4GPgCkTP5puyLmj4QNX+Az/8PHAaMcPe90Sua2X3Ay+5+XlBSuQzA3R8zsxXAOcD/mtn3iZTRiB7q7NQgjt11mwUq3P1rLbw+kYRpzF3ast8ReVrWqUSGUZKxjMgQDQBmNiSY7MLnVSAvjlp+LPCuu99LpKDUycCHQC8z625mhwPfaGJf7wA9zexrwbY6mNnAJOMXOYiSu7RZ7v4ZkYqNT7p7bZKbuwooCr4cXUtkTB3gLuB2M3uTg//SvQBYEzx8ZBDwiLvvB24hUmTseSLj9U3FPQm408z+SqTY2+lJxi9yEBUOkzYr+CL1DeB8d1+f6XhEsonO3KVNCh4CvoHIA4yV2EUa0Jm7hIKZDQYebdC8z91Py0Q8Ipmm5C4iEkIalhERCSEldxGREFJyFxEJISV3EZEQUnIXEQmh/w8J1a0qTezbsgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig,ax=plt.subplots()\n", - "for the_x, group in df.groupby(by='x'):\n", - " group.hist(column='y_measure', bins=20, ax=ax, label='x=%0.2f' % the_x)\n", - " \n", - "ax.set_xlabel('y_measure')\n", - "ax.legend();" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So it is very clear from the above graph that the measured $y$ is not normal distributed but the measurement error $\\epsilon$ (being the deviation from the idealized line) is:" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "metadata": { - "execution": { - "iopub.execute_input": "2021-04-19T20:12:47.354670Z", - "iopub.status.busy": "2021-04-19T20:12:47.345298Z", - "iopub.status.idle": "2021-04-19T20:12:47.867725Z", - "shell.execute_reply": "2021-04-19T20:12:47.867170Z" - }, - "tags": [ - "remove_input" - ] - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "ax_epsilon = sns.histplot(data=df, x=\"epsilon\", stat=\"density\", bins=20, kde=True);\n", - "#ax_epsilon.set_xlim(ax_y.get_xlim());\n", - "ax_epsilon.set_xlabel('Measure error: $\\epsilon$');" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The histogram of the idealized $y$ looks like this, by the way:" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "metadata": { - "execution": { - "iopub.execute_input": "2021-04-19T20:12:47.894773Z", - "iopub.status.busy": "2021-04-19T20:12:47.873214Z", - "iopub.status.idle": "2021-04-19T20:12:48.102707Z", - "shell.execute_reply": "2021-04-19T20:12:48.103291Z" - }, - "tags": [ - "remove_input" - ] - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "ax_y = sns.histplot(data=df, x=\"y\", stat=\"density\", bins=20, kde=True);" - ] - } - ], - "metadata": { - "celltoolbar": "Tags", - "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.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/tests/test_create_markdown.py b/tests/test_create_markdown.py index 86d115c..370247b 100644 --- a/tests/test_create_markdown.py +++ b/tests/test_create_markdown.py @@ -5,7 +5,7 @@ @pytest.fixture def file_name(): path = os.path.dirname(__file__) - yield os.path.join(path,'notebooks','Test Medium Blog Post.ipynb') + yield os.path.join(path,'notebooks','latex_to_medium.ipynb') def test_create_markdown(file_name):