{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" }, "colab": { "name": "2021-06-12-vowpalwabbit-changing-context-part2.ipynb", "provenance": [], "collapsed_sections": [] } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "RnXUndQf1Zqt" }, "source": [ "# Contextual bandit with changing context part 2\n", "> Customizing the context and changing it midway to see how fast the agent can adapt to the new context and start recommending better products as per the context\n", "\n", "- toc: true\n", "- badges: true\n", "- comments: true\n", "- categories: [contextual bandit]\n", "- image: " ] }, { "cell_type": "code", "metadata": { "id": "NDf-kJiZ1WfJ" }, "source": [ "mapping_users = {\n", " 'Alex':'usera',\n", " 'Ben':'userb',\n", " 'Cindy': 'userc'\n", "}\n", " \n", "mapping_context1 = {\n", " 'Morning':'ctx11',\n", " 'Evening':'ctx12',\n", "}\n", "\n", "mapping_context2 = {\n", " 'Summer':'ctx21',\n", " 'Winter':'ctx22'\n", "}\n", "\n", "mapping_items = {\n", " 'Politics':'item1',\n", " 'Economics':'item2',\n", " 'Technology':'item3',\n", " 'Movies':'item4',\n", " 'Business':'item5',\n", " 'History':'item6'\n", "}\n", "\n", "# {v:k for k,v in mappings.items()}" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ywUBRGWp1WfO" }, "source": [ "from vowpalwabbit import pyvw\n", "import random\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "from itertools import product" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "bLp9p35a1WfT" }, "source": [ "users = list(mapping_users.values())\n", "items = list(mapping_items.values())\n", "context1 = list(mapping_context1.values())\n", "context2 = list(mapping_context2.values())" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "bJPAR-pJ1WfW" }, "source": [ "context = pd.DataFrame(list(product(users, context1, context2, items)), columns=['users', 'context1', 'context2', 'items'])\n", "context['reward'] = np.random.choice([0,1],len(context))\n", "context['cost'] = context['reward']*-1\n", "contextdf = context.copy()" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "EklmWXvw1WfY", "outputId": "13a9bf54-8780-40ac-b8ee-6a1f7a7b8d63" }, "source": [ "contextdf" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
userscontext1context2itemsrewardcost
0useractx11ctx21item11-1
1useractx11ctx21item21-1
2useractx11ctx21item31-1
3useractx11ctx21item400
4useractx11ctx21item500
.....................
67usercctx12ctx22item200
68usercctx12ctx22item300
69usercctx12ctx22item41-1
70usercctx12ctx22item51-1
71usercctx12ctx22item600
\n", "

72 rows × 6 columns

\n", "
" ], "text/plain": [ " users context1 context2 items reward cost\n", "0 usera ctx11 ctx21 item1 1 -1\n", "1 usera ctx11 ctx21 item2 1 -1\n", "2 usera ctx11 ctx21 item3 1 -1\n", "3 usera ctx11 ctx21 item4 0 0\n", "4 usera ctx11 ctx21 item5 0 0\n", ".. ... ... ... ... ... ...\n", "67 userc ctx12 ctx22 item2 0 0\n", "68 userc ctx12 ctx22 item3 0 0\n", "69 userc ctx12 ctx22 item4 1 -1\n", "70 userc ctx12 ctx22 item5 1 -1\n", "71 userc ctx12 ctx22 item6 0 0\n", "\n", "[72 rows x 6 columns]" ] }, "metadata": { "tags": [] }, "execution_count": 56 } ] }, { "cell_type": "code", "metadata": { "id": "FAOCxBU31Wfb" }, "source": [ "import numpy as np\n", "import scipy\n", "import scipy.stats as stats\n", "from vowpalwabbit import pyvw\n", "import random\n", "import pandas as pd\n", "from itertools import product" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ojr3s0vC1Wfc" }, "source": [ "# This function modifies (context, action, cost, probability) to VW friendly format\n", "def to_vw_example_format(context, actions, cb_label=None):\n", " if cb_label is not None:\n", " chosen_action, cost, prob = cb_label\n", " example_string = \"\"\n", " example_string += \"shared |User users={} context1={} context2={}\\n\".format(context[\"user\"], context[\"context1\"], context[\"context2\"])\n", " for action in actions:\n", " if cb_label is not None and action == chosen_action:\n", " example_string += \"0:{}:{} \".format(cost, prob)\n", " example_string += \"|Action items={} \\n\".format(action)\n", " #Strip the last newline\n", " return example_string[:-1]\n", "def sample_custom_pmf(pmf):\n", " total = sum(pmf)\n", " scale = 1 / total\n", " pmf = [x * scale for x in pmf]\n", " draw = random.random()\n", " sum_prob = 0.0\n", " for index, prob in enumerate(pmf):\n", " sum_prob += prob\n", " if(sum_prob > draw):\n", " return index, prob\n", "def get_action(vw, context, actions):\n", " vw_text_example = to_vw_example_format(context, actions)\n", " pmf = vw.predict(vw_text_example)\n", " chosen_action_index, prob = sample_custom_pmf(pmf)\n", " return actions[chosen_action_index], prob\n", "def choose_user(users):\n", " return random.choice(users)\n", "def choose_context1(context1):\n", " return random.choice(context1)\n", "def choose_context2(context2):\n", " return random.choice(context2)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "S2WXd8Xd1Wff" }, "source": [ "class VWCSimulation():\n", " def __init__(self, vw, ictxt, n=100000):\n", " self.vw = vw\n", " self.users = ictxt['users'].unique().tolist()\n", " self.contexts1 = ictxt['context1'].unique().tolist()\n", " self.contexts2 = ictxt['context2'].unique().tolist()\n", " self.actions = ictxt['items'].unique().tolist()\n", " self.contextdf = ictxt.copy()\n", " self.contextdf['cost'] = self.contextdf['reward']*-1\n", " \n", " def get_cost(self, context, action):\n", " return self.contextdf.loc[(self.contextdf['users']==context['user']) & \\\n", " (self.contextdf.context1==context['context1']) & \\\n", " (self.contextdf.context2==context['context2']) & \\\n", " (self.contextdf['items']==action), \\\n", " 'cost'].values[0]\n", " \n", " def update_context(self, new_ctxt):\n", " self.contextdf = new_ctxt.copy()\n", " self.contextdf['cost'] = self.contextdf['reward']*-1\n", " \n", " def step(self):\n", " user = choose_user(self.users)\n", " context1 = choose_context1(self.contexts1)\n", " context2 = choose_context2(self.contexts2)\n", " context = {'user': user, 'context1': context1, 'context2': context2}\n", " action, prob = get_action(self.vw, context, self.actions)\n", " cost = self.get_cost(context, action)\n", " vw_format = self.vw.parse(to_vw_example_format(context, self.actions, (action, cost, prob)), pyvw.vw.lContextualBandit)\n", " self.vw.learn(vw_format)\n", " self.vw.finish_example(vw_format)\n", " return (context['user'], context['context1'], context['context2'], action, cost, prob)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "z_33SgaP1Wfi", "outputId": "bc8f39ed-e666-40d8-f69d-58960bbba94c" }, "source": [ "context = pd.DataFrame(list(product(users, context1, context2, items)), columns=['users', 'context1', 'context2', 'items'])\n", "context['reward'] = np.random.choice([0,1],len(context),p=[0.8,0.2])\n", "contextdf = context.copy()\n", "contextdf.reward.value_counts()" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0 61\n", "1 11\n", "Name: reward, dtype: int64" ] }, "metadata": { "tags": [] }, "execution_count": 136 } ] }, { "cell_type": "code", "metadata": { "id": "hLYqC-B21Wfj" }, "source": [ "vw = pyvw.vw(\"--cb_explore_adf -q UA --quiet --epsilon 0.2\")\n", "vws = VWCSimulation(vw, contextdf)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "iN7_K3-l1Wfl", "outputId": "382ec01f-22ba-45c2-ba2a-d181ac41db11" }, "source": [ "vws.step()" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "('usera', 'ctx11', 'ctx22', 'item4', 0, 0.16666666666666666)" ] }, "metadata": { "tags": [] }, "execution_count": 138 } ] }, { "cell_type": "code", "metadata": { "id": "GnEvCkub1Wfm" }, "source": [ "_temp = []\n", "for i in range(5000):\n", " _temp.append(vws.step())" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "IykFBA931Wfn" }, "source": [ "x = pd.DataFrame.from_records(_temp, columns=['user','context1','context2','item','cost','prob'])" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "-36YdGnH1Wfn", "outputId": "3adfdb67-ec48-4a0e-bfd9-861dd5be98d2" }, "source": [ "xx = x.copy()\n", "xx['ccost'] = xx['cost'].cumsum()\n", "xx = xx.fillna(0)\n", "xx = xx.rename_axis('iter').reset_index()\n", "xx['ctr'] = -1*xx['ccost']/xx['iter']\n", "xx.sample(10)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
iterusercontext1context2itemcostprobccostctr
31993199useractx11ctx22item5-10.833333-17810.556736
700700userbctx11ctx22item4-10.833333-3430.490000
36603660useractx12ctx22item500.833333-20350.556011
41234123usercctx12ctx22item5-10.833333-23020.558331
44484448userbctx11ctx22item4-10.833333-24800.557554
485485useractx11ctx21item2-10.833333-2190.451546
32803280userbctx11ctx21item100.033333-18220.555488
16791679userbctx12ctx21item6-10.833333-9010.536629
34893489usercctx11ctx21item3-10.833333-19320.553740
103103useractx11ctx22item200.833333-240.233010
\n", "
" ], "text/plain": [ " iter user context1 context2 item cost prob ccost ctr\n", "3199 3199 usera ctx11 ctx22 item5 -1 0.833333 -1781 0.556736\n", "700 700 userb ctx11 ctx22 item4 -1 0.833333 -343 0.490000\n", "3660 3660 usera ctx12 ctx22 item5 0 0.833333 -2035 0.556011\n", "4123 4123 userc ctx12 ctx22 item5 -1 0.833333 -2302 0.558331\n", "4448 4448 userb ctx11 ctx22 item4 -1 0.833333 -2480 0.557554\n", "485 485 usera ctx11 ctx21 item2 -1 0.833333 -219 0.451546\n", "3280 3280 userb ctx11 ctx21 item1 0 0.033333 -1822 0.555488\n", "1679 1679 userb ctx12 ctx21 item6 -1 0.833333 -901 0.536629\n", "3489 3489 userc ctx11 ctx21 item3 -1 0.833333 -1932 0.553740\n", "103 103 usera ctx11 ctx22 item2 0 0.833333 -24 0.233010" ] }, "metadata": { "tags": [] }, "execution_count": 141 } ] }, { "cell_type": "code", "metadata": { "id": "X1Aa6gjX1Wfo", "outputId": "5b62b160-8a68-4b61-f1f2-28f524737614" }, "source": [ "xx['ccost'].plot()" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 142 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "id": "L4MXTt071Wfo", "outputId": "4d5ae04a-a638-4b3a-8f98-eef32ede93f4" }, "source": [ "xx['ctr'].plot()" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 143 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "id": "M6WRP_0P1Wfp" }, "source": [ "tempdf1 = xx.copy()" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ukACuqoc1Wfq", "outputId": "f6941465-fc4c-40ff-8a7c-84f8e104366e" }, "source": [ "context = pd.DataFrame(list(product(users, context1, context2, items)), columns=['users', 'context1', 'context2', 'items'])\n", "context['reward'] = 0\n", "X = context.copy()\n", "X.loc[(X['users']=='usera')&(X['items']=='item1'),'reward']=1\n", "X.loc[(X['users']=='userb')&(X['items']=='item2'),'reward']=1\n", "X.loc[(X['users']=='userc')&(X['items']=='item3'),'reward']=1\n", "X.reward.value_counts()" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0 60\n", "1 12\n", "Name: reward, dtype: int64" ] }, "metadata": { "tags": [] }, "execution_count": 145 } ] }, { "cell_type": "code", "metadata": { "id": "NwVd7J4C1Wfq" }, "source": [ "vws.update_context(X)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "nqs6J8sy1Wfr" }, "source": [ "_temp = []\n", "for i in range(5000):\n", " _temp.append(vws.step())" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "JV3H9J4N1Wfr", "outputId": "5f675cad-76e7-42eb-b769-bd2b896cca7f" }, "source": [ "x = pd.DataFrame.from_records(_temp, columns=['user','context1','context2','item','cost','prob'])\n", "xx = x.copy()\n", "xx['ccost'] = xx['cost'].cumsum()\n", "xx = xx.fillna(0)\n", "xx = xx.rename_axis('iter').reset_index()\n", "xx['ctr'] = -1*xx['ccost']/xx['iter']\n", "xx.sample(10)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
iterusercontext1context2itemcostprobccostctr
354354usercctx12ctx21item200.833333-880.248588
33623362userbctx11ctx22item2-10.833333-24810.737954
485485useractx11ctx22item1-10.833333-1710.352577
33833383userbctx11ctx22item300.033333-24990.738693
28032803usercctx12ctx21item3-10.833333-20020.714235
34103410userbctx12ctx21item300.033333-25210.739296
267267useractx12ctx21item400.033333-540.202247
38483848userbctx12ctx21item2-10.833333-28880.750520
5454userbctx12ctx21item600.833333-130.240741
14471447usercctx11ctx21item500.033333-8910.615757
\n", "
" ], "text/plain": [ " iter user context1 context2 item cost prob ccost ctr\n", "354 354 userc ctx12 ctx21 item2 0 0.833333 -88 0.248588\n", "3362 3362 userb ctx11 ctx22 item2 -1 0.833333 -2481 0.737954\n", "485 485 usera ctx11 ctx22 item1 -1 0.833333 -171 0.352577\n", "3383 3383 userb ctx11 ctx22 item3 0 0.033333 -2499 0.738693\n", "2803 2803 userc ctx12 ctx21 item3 -1 0.833333 -2002 0.714235\n", "3410 3410 userb ctx12 ctx21 item3 0 0.033333 -2521 0.739296\n", "267 267 usera ctx12 ctx21 item4 0 0.033333 -54 0.202247\n", "3848 3848 userb ctx12 ctx21 item2 -1 0.833333 -2888 0.750520\n", "54 54 userb ctx12 ctx21 item6 0 0.833333 -13 0.240741\n", "1447 1447 userc ctx11 ctx21 item5 0 0.033333 -891 0.615757" ] }, "metadata": { "tags": [] }, "execution_count": 148 } ] }, { "cell_type": "code", "metadata": { "id": "6-2NfwBF1Wfs", "outputId": "5b89213a-e4f0-48a2-af31-cf79277a650a" }, "source": [ "tempdf2 = tempdf1.append(xx, ignore_index=True)\n", "tempdf2.sample(10)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
iterusercontext1context2itemcostprobccostctr
88373837useractx12ctx22item1-10.833333-28790.750326
82103210usercctx11ctx21item200.033333-23480.731464
32803280userbctx11ctx21item100.033333-18220.555488
10291029usercctx12ctx21item100.033333-5310.516035
41834183usercctx12ctx22item200.033333-23280.556538
27152715usercctx11ctx22item4-10.833333-14670.540331
63001300useractx12ctx21item1-10.833333-7760.596923
71112111useractx12ctx21item1-10.833333-14270.675983
40084008useractx11ctx22item5-10.833333-22390.558633
22362236usercctx12ctx21item2-10.833333-12030.538014
\n", "
" ], "text/plain": [ " iter user context1 context2 item cost prob ccost ctr\n", "8837 3837 usera ctx12 ctx22 item1 -1 0.833333 -2879 0.750326\n", "8210 3210 userc ctx11 ctx21 item2 0 0.033333 -2348 0.731464\n", "3280 3280 userb ctx11 ctx21 item1 0 0.033333 -1822 0.555488\n", "1029 1029 userc ctx12 ctx21 item1 0 0.033333 -531 0.516035\n", "4183 4183 userc ctx12 ctx22 item2 0 0.033333 -2328 0.556538\n", "2715 2715 userc ctx11 ctx22 item4 -1 0.833333 -1467 0.540331\n", "6300 1300 usera ctx12 ctx21 item1 -1 0.833333 -776 0.596923\n", "7111 2111 usera ctx12 ctx21 item1 -1 0.833333 -1427 0.675983\n", "4008 4008 usera ctx11 ctx22 item5 -1 0.833333 -2239 0.558633\n", "2236 2236 userc ctx12 ctx21 item2 -1 0.833333 -1203 0.538014" ] }, "metadata": { "tags": [] }, "execution_count": 149 } ] }, { "cell_type": "code", "metadata": { "id": "28SHrzVq1Wfs", "outputId": "16959443-416f-4fbe-f0e7-e331e324fc93" }, "source": [ "tempdf2['ccost'].plot()" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 150 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "id": "2Nq8ZhSr1Wft", "outputId": "a9f12adf-13da-416b-e51c-dc66bdac8c59" }, "source": [ "tempdf2['ctr'].plot()" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 151 }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAggElEQVR4nO3deXyV5Z338c8v+0IgIQkICRBAXBBXUHFpxR2xlW4zoz4utXaQqm2nM/NSbPtoW6dTO12m49OF2tZabetuq7VYbbVW+yhKXEBQQGQNW0KArGQ5yTV/nJNwEk6Sk3By7tz3+b5fr7y4t3PO74Lky5V7uS5zziEiIv6X5nUBIiKSGAp0EZGAUKCLiASEAl1EJCAU6CIiAZHh1QeXlJS4iooKrz5eRMSX3njjjT3OudJY+zwL9IqKCiorK736eBERXzKzLX3t0ykXEZGAUKCLiASEAl1EJCAU6CIiAaFAFxEJiAED3czuNbNqM1vdx34zs7vNbIOZrTKzUxJfpoiIDCSeHvp9wPx+9l8CzIh8LQJ+cvhliYjIYA0Y6M65l4C9/RyyELjfhS0HCs1sQqIKFEmmugPtfP+5dazeXud1KSKDlohz6GXAtqj1qsi2Q5jZIjOrNLPKmpqaBHy0SGI1tLRz9wsbeHdnvdeliAxaIgLdYmyLOWuGc+4e59wc59yc0tKYT66KiMgQJSLQq4BJUevlwI4EvK+IiAxCIgL9KeCayN0uc4E659zOBLyviIgMwoCDc5nZg8A8oMTMqoA7gEwA59xSYBmwANgANAPXDVexIkmjqXbFhwYMdOfcFQPsd8BNCatIxENmsS4JifiDnhQVEQkIBbqISEAo0EVEAkKBLhKD01VR8SEFukgUXRIVP1Ogi4gEhAJdRCQgFOgiIgGhQBeJwemaqPiQAl0kih4UFT9ToIuIBIQCXUQkIBToIiIBoUAXiUHXRMWPFOgiUUzPioqPKdBFRAJCgS4iEhAKdBGRgFCgi8SgJ0XFjxToIlH0pKj4mQJdRCQgFOgiIgGhQBcRCQgFukgMmlNU/EiBLhJF10TFzxToIiIBoUAXEQkIBbqISEAo0EVi0JOi4kcKdJFouioqPqZAFxEJiLgC3czmm9k6M9tgZkti7B9jZn8ws5VmtsbMrkt8qSIi0p8BA93M0oEfAZcAM4ErzGxmr8NuAt51zp0IzAO+Z2ZZCa5VRET6EU8P/TRgg3Nuo3OuDXgIWNjrGAcUmJkBo4C9QCihlYokka6Jih/FE+hlwLao9arItmg/BI4FdgDvAF90znX2fiMzW2RmlWZWWVNTM8SSRYaP5hQVP4sn0GN9h/fuwFwMvA1MBE4Cfmhmow95kXP3OOfmOOfmlJaWDrJUERHpTzyBXgVMilovJ9wTj3Yd8IQL2wBsAo5JTIkiIhKPeAJ9BTDDzKZGLnReDjzV65itwPkAZjYeOBrYmMhCRUSkfxkDHeCcC5nZzcCzQDpwr3NujZktjuxfCtwJ3Gdm7xA+RXOrc27PMNYtMrz0qKgkWFuok617m2nv6GR66SiyMhL/GNCAgQ7gnFsGLOu1bWnU8g7gosSWJpJ8mlNUhuJAWweba5toC3VSd6CdnXUHeG9nA1tqm9h/oJ3t+w6wp7GVzkg/4eq5U7jzY7MSXkdcgS4ikopaQx1srW1md30rbR0dhDrCU5/sqmvh7W37qdyyl911rbR1HHJTH3lZ6ZQX5ZKfncHcacWUF+UyrXQUzjlmlY0ZlnoV6CKSslzk1Fpja4j1uxvZXd/CzroWttQ28UFNI29v3U9TW0fM147Nz2LutLFcNDOXgpwMppbkk52RRmFeFqUF2VQU55Oeltxf+RToIhJotY2tbK5toqElRE5mOh/UNFK5eR/vVzdQte8AbaFO2kKdhDoPXjcZlZ1BeVEuHz+ljOMmjmHCmBwKcjLITE/DORg3OpvxBTmkJTmwB6JAF4lBl0T9wznHnsY29jW30RbqpKk1xNvb9vP3DXtYuW0/9S2HPrQ+Nj+L4yaO5viyMWSlp5GXncEJZWMoK8plYmEuJaOyPWjJ4VOgi0QZWf0tiaUt1Mk72/fzx1W7WL29jq17m9lV33LIcdNK8rn0hIlMHptHRXEeOVnpOOeYVjKKKcV5WACvgCvQRWRE277/AH9avYs3tuxl5bY6tu8/AEBWehrHlY1mdkURx5eNYVxBNtkZ6TgcJ5YXUl6UG8jQ7o8CXURGlI5Oxwtrq3lpfQ2vbqxlQ3UjACWjsjh5chEfOWECMyeO5rxjxlGQk+lxtSOLAl1EPNXS3sHyjbWs3l7HuzvreWFtNS3tneRkpnFqxVj+YXY5F8wcz7SS/JTrcQ+WAl0kBj0oOnyccyzfuJdXP9jDkyt3sKW2uXtfQXYGC46fwLlHj+PCmePJyUz3sFL/UaCLRFEPcHg45/jb+hrue2UzL647OHT2CeVj+PSZFZxaMZYzpxdTkJNBRrpmxhwqBbqIDJvd9S188aG3WL5xb/e2qSX5LD5nGucePY5xo3M8rC54FOgikhB7m9r4yu/e4Y0t+6huaD1k/7lHl/K1y45jSnG+B9WlBgW6iByWt7bu46u/X82aHfWH7JtVNpqbz53BxceN1+msJFCgi8TgdFW0X9UNLdz0mzdZsXlf97ZJY3P50IxSTp5UyEdPnKgLmh5QoItEUR+yf39/fw/PvbuL+1/d0r3t3KNL+ebHj2diYa6HlQko0EVkANX1LVz43y9Rd6C9x/Y7PjqTj5440bfjngSRAl1EDrGrroXPP9jzlAqET6t89ISJfOnCo8jU7YUjjgJdRIDwI/e/Xr6FO55a02N7cX4WDy6ay1HjCzyqTOKlQBeJIZUuiTrneGD5Fm5/smeQ3/Dhadx03pGM1ngpvqFAF4mSKnfWvb+7gU/8+BUaWnuOFX7eMeO4/SMzqSjRveJ+pEAXSRGdnY4vPvw2f1i545B9V82dzJJLjmVUtiLBz/SvJ5IC2js6+eRPXmFVVR0A6WnGly6YwY3zjhxx06jJ0CnQRQKss9PxrWfe42cvbwJg9pQiHrj+NPKy9KMfRPpXFYkhCA+K1jW3c+I3nutev/L0yfznx4/3sCIZbgp0kSgWkGdF/7a+hmvvfR2AiuI8Hl18JqUFegAo6BToIgHSGupg3ndeZGddeNLkW+YfzY3zjvS4KkkWBbpIQDjnuOR/Xu4O8ydvOosTJxV6W5QklQJdJAa/nUJ3zvFPP13OxpomLjtxIndfcbLXJYkHFOgi0Xx4Cn3znibmffdFAMqLcvnvfzrJ03rEOwp0EZ+qbWxl9n/8pXu9rDCXF/99Hum6rzxlxTVcmpnNN7N1ZrbBzJb0ccw8M3vbzNaY2d8SW6aIRGtuC/UI83uuns3/X3KeJlhOcQP20M0sHfgRcCFQBawws6ecc+9GHVMI/BiY75zbambjhqlekZS3dlc983/wcvf6ytsvYkyeBtCS+HropwEbnHMbnXNtwEPAwl7HXAk84ZzbCuCcq05smSLJNVKnoOvsdN1hfmpFEZvvulRhLt3iCfQyYFvUelVkW7SjgCIze9HM3jCza2K9kZktMrNKM6usqakZWsUiw2ikj7Z4UuTJz6vmTubRxWd6XI2MNPEEeqxv8d7dlwxgNnApcDHwf83sqENe5Nw9zrk5zrk5paWlgy5WJJU9u2YX9S3h4W7vXDjL42pkJIrnLpcqYFLUejnQe/zNKmCPc64JaDKzl4ATgfUJqVIkxbWFOrnhgTcAWPGVC7CR/quEeCKeHvoKYIaZTTWzLOBy4KlexzwJfMjMMswsDzgdeC+xpYqkrq/9ITyb0C3zj9aYLNKnAXvozrmQmd0MPAukA/c659aY2eLI/qXOuffM7E/AKqAT+LlzbvVwFi6SKv66rprfvrYVgM+dM93jamQki+vBIufcMmBZr21Le61/B/hO4koTSb6RdiKjvqWd6365AoCnP3+2TrVIv/QUgsgI9sCrWwD47NlTmVU2xuNqZKTTo/8yJM65IfcWm9tCNLaG6OyEcQXZtIQ62FjTxL7mNhpaQqSnGelmZGaksaehleb2DsoLcznqiALKCnP7rWl/czvb9jVTXd9Ka6iTDucYlZ3O7vpWnIPsjDTMoDAvk7ZQJydNKqKxNcSexlZqG9vYXNsEwAc1TUNqWyI1tob4zrPrGD86m69+ZKbX5YgPKNAlLs45ahpb+ervVvPcu7uB8LyUZ04vpjg/i1llY5hakk92RjolBVlkpKWxff8B9jS0smP/ATbtaSI9zdhV38LL7+/pft/czHQOtHfEXUdBTgZnTS9hYmEuBTkZdDrHBzWNrN/dyL6mNmqb2hLS3vW7GxLyPkO1ff8BzrrrBQC+vOBYT2sR/1CgS58erdzG3S+8T35WBmt3HRpwRXlZ1Da28fqmvfz+7UNnku8tKz2NycV5XH7qJCYX5+Ec7Nh/gOL8LKYU51MSuXsjI8040NZBXnY6RXlZ5GWl8/7uRtbtbmDNjjpe37SP2nd3dU8Td8ToHKaPy2fWxNGUF+UxsTCXiuI8Rudm0hrqoKElRHlRHtkZaTS2hmhp7+BAWwetHZ28U1XH+NHZjB+dw5jcTLIz0llw98vMP+6IhP5dDoZzrjvMC/MyWXhS7+f4RGJToAuNrSGuvff17l54qMN1T5IAUJSXyXnHjGN0TgaFeVncOG8640bn9HiPjTWNvLuznk4H+5rayMtKZ2x+FqOyM5hams+4gpzeHzsoU4rzuWDm+O515xyNrSFGZWcc1oXCc4/uOexQY2toyO+VKJ/4ySsAnD51LA/fcIbH1YifKNCTbF9TG9mZaeRmpmNm7G9uY1R2Bhnpaazb1cD40dkU5mX1+x6dnY60NKOmoZXbnljFrLIxnDy5iOml+bSGOplWks+63Q08sqKKxtZ2CnIymTutmDSDbzz9Lltqm+Oq9YJjx/O1y2ZSVpg7YGhOKx3FtNJRcf89HC4zoyAneGOY1DS08tbW/QA8+M9zvS1GfEeBnkQvrN3NZ+6rjOvYqSX5TC8dRU1DC3lZGby6sbbPY//y3sBjof3i75v63f/lBccwa+IYyovyaOvo5MhxyQtnOejUb4aHxH1o0VzSNK65DJICPQn+7ZGVPP5m1aBes2lPE5v2DHynxbETRrN9XzNHjMlhX3M7GWnGzroW0tOMGz48jZkTR1Pb2MbaXfVkZ6Rz/dlTmTQ2r/sulcO5W0US6/VNe7uX504r9rAS8SsF+jAKdXRy6+Pv9AjzpVfNZv6sI2hoaeeVD2q58Njxh/TEQh2d3PXMWtbuauDaMys4cdIYCrLDF/gK87JwzlHb1EbJqKE/At4V4grz2JwHs4r+409fBeDvt56b9M+WYFCgD8KBtg7+sGoHnzylnPQ0o6W9g5zMdACq61u4/9Ut/PSlDzjvmHGs393Yo4f94r/Po6wol8zIjDIFOZlc3MedFBnpaTHvO87NCn+WmR1WmEvfvPrv7Zt/7J4vhvKiPI+qEL9ToA/Csbf/CYBbHlvV73HPrtndY/2xxWdQUZI/bHWJ//3s5fA1jpW3X+RxJeJnCvQ43fLYykG/5tXbzmPCmL6fbBQB2FAdvsf/ytMna/YhOSwK9DhULPlj9/LjnzuTRyu38dCKbdz/mdO46TdvsvDkidx07pEKbxm06voWLvj+SwB8+swKb4sR31Og96O6oYXTvvl89/qdH5vF7ClFzJ5SxF2fPAGAd75+sVflyTBKxpSizjlO+8+D319HjS8Y/g+VQFOg99LS3kGaGQ0t7T3C/OVbzmXSWF2sCrpk3vSz7J1d3cub77o0eR8sgaVAJzy911FffabP/fphk0QLdXRy02/fBGCNfsuTBEnpQH9q5Q6+8OBb/R7z+5vOSlI1kkq+8fTB2xTzs1P6x1ASKGW/k7btbT4kzH9x7RzW727kM2dXkJ2R7lFlEnSb9zRxf2TiCvXOJZFSNtA/9F9/7bG+8KSJnH/seM4/dnwfr5BUMpzXROd990UATp5cqN65JFRKfjdV7Ts42uCmby2gpb2TnEzNxidgw/ysaOXmg+O1/O5Gnc6TxEq5QG/v6OTsb4d75ydPLsTMuh+pFxlun1oaHq/lywuO8bgSCaKU6pa2hTqZ8ZWDd7NovGlJpg9qGruX//lD0zysRIIqpQL9yp8t717+6dWzuwfWEkmG87/3NwDuuXq2RrmUYZEygd7Z6ajcsg+AUyYX9jnSoQgk/knRzs6Db3iRvvdkmKRMoD/2xsExyZ/QxSjpw3B1nP/yXngEzi+cd+TwfIAIKXBRtLq+hR+/+AH3vbIZgOf/7RxvC5KUtOiBNwC4XufOZRgFPtCjBz8CmJ7EiYxFAB56fWv38phcDY8rwyfQp1z+9eG3e6wvv+18bwqRlLbkiXcA+P4/nuhxJRJ0gQ70J97a3mP9iDE5HlUifpOoOUVb2ju6lz9xSnlC3lOkL4E+5VKUl0lpQTZfv2wWJaOyvC5HUtDdz78PwPf+Qb1zGX6BDfTq+hb2Nbezr7mdM6YXe12OpKgfv/gBABdojCBJgrhOuZjZfDNbZ2YbzGxJP8edamYdZvapxJU4NE+t3AHA+ceM87gSSVXb9x/oXtZcoZIMAwa6maUDPwIuAWYCV5jZzD6O+zbwbKKLHIpvPbMWgC+cP8PjSiRV/eXd8L3ni8+Z7nElkiri6aGfBmxwzm10zrUBDwELYxz3eeBxoDqB9Q3J1tpmOiJP5p04qdDbYsSXEvGk6B1PrQHgXy886vDfTCQO8QR6GbAtar0qsq2bmZUBHweW9vdGZrbIzCrNrLKmpmawtcbtD6t2DNt7S7Al6knRO55c3b2clRHom8lkBInnOy3Wt3jv/ssPgFudcx0xjj34Iufucc7Ncc7NKS0tjbPEwesadKvyqxcM22eI9OdXkRmJdMpPkimeu1yqgElR6+VA7y7wHOChyAhyJcACMws5536fiCIH687IfI3F+bpVUZJvY9QwuTrdIskUT6CvAGaY2VRgO3A5cGX0Ac65qV3LZnYf8LRXYR79IIeGKBUvrKzaD8DPr5njbSGScgY85eKcCwE3E7575T3gEefcGjNbbGaLh7vAwVoRNcWXyFB977l1Q3pdqKOTLz28EoCzZ5QksiSRAcX1YJFzbhmwrNe2mBdAnXOfPvyyhua6X77OX9eFL7be9YnjvSpDfKxrTtHOId7l8ufIrYqAJlCRpAvU5feuMAe4cKaezJPk+9xv3gTgj1842+NKJBUFKtCjFY/K9roESTHR12+OmzjGw0okVQUu0CuK89h816VelyEp6Mm3w6N7Xnn6ZI8rkVQVmECva24H4JQpRR5XIqnq1sfD455fdfoUjyuRVBWYQF/86/AUX0+8uX2AI0X6log7XWdOHH34byIyBIEJ9Fc31gJw33WnelyJpKLG1pDXJYgEJ9C7zDtaw+VK8nWNrHj1XJ1uEe8EItDbOzq9LkFS3L9E5q/V2C3ipUAE+iOV2wY+SGSY1B1o717WVIfipUAEeqgjMRP6igzlmuiuuhYAFn14msYPEk8FItCzI+NNa95G8cKOuvBUcxcfd4THlUiq832gVze0sOSJ8P2/mlldvNDVQ58wJsfjSiTV+T7Qv/nH97qXR+XENdaYSELtjEwGXVqg4SbEW74P9CffPjjXRnqazl9K8t39wgYAMtN9/+MkPuf778CxkVmJ9ECRJMJgL2p2DHWcXZFh4PtA39vUBuiBIvFG14QqJRrdU0YA3we6yHBxbuDed0NL+JH/H1558nCXIzIgBbpIH7ZHLnb257k1uwCYVpI/3OWIDEiBLtKHbXsHDvRH36gCdMpFRoZABPqU4jyvS5CAiL4ketUvXov7dWm6w0pGAN8HemFeJuccVep1GRJAA93B0jXlXHG+xm+RkcH3gb6/ub37TheRZOo6x375aZM8rkQkzNeBvr85HORPr9rpcSWSinZEAv2s6SUeVyIS5utAX7urAYAllxzjcSUSVNFD4/b2/54PPyE6OjczWeWI9MuXgb6rroX/+cv7XH7PcgCq61s9rkiCoveDovX9BPqR40cBcJzmEJURwpejWV358+VsrGnqXtcQGjJcui58xrKnoZXCvEyNgS4jhi8DPTrMAUZl61deGR7t/Uye8lxkHlGRkSIQfdsbzpnmdQkSUC2h2D30eIYFEEm2QAR6Tma61yVIQDW3xg70259cA8AJ5WOSWY5IvwIR6CKJ0vt8+Jtb98U87oHlWwC446PHDXtNIvGKK9DNbL6ZrTOzDWa2JMb+/2NmqyJfr5iZ5oKTQPj+n9cfsu2Rym3dy7OnFCWzHJF+DRjoZpYO/Ai4BJgJXGFmM3sdtgk4xzl3AnAncE+iC+3Lrz5zWrI+SgSAWx5b5XUJIjHF00M/DdjgnNvonGsDHgIWRh/gnHvFOdf1u+lyoDyxZfZN47hIMm2obuxefnTxGR5WInKoeAK9DNgWtV4V2daX64FnYu0ws0VmVmlmlTU1NfFXGWVf1Lgt15wxZUjvITKQK0+fHHN7dX1L9/KpFWOTVY5IXOK5Dz3WUxMx79kys3MJB/rZsfY75+4hcjpmzpw5Q7rvK/o2sm8snDWUtxDp1/r/uISMNOO3r209ZF9bRycAj9yg3rmMPPH00KuA6OHkyoEdvQ8ysxOAnwMLnXO1iSnvUGl6Kk+GWVZGGmlpxsdOmkhmes/vt32RAeHG5uthNhl54gn0FcAMM5tqZlnA5cBT0QeY2WTgCeBq59yhtwUkkAJdkqW+JUR7h2NrbXP3ti89vBLQgFwyMg14ysU5FzKzm4FngXTgXufcGjNbHNm/FLgdKAZ+HLmPN+ScmzMcBadrZhhJkhfWVgNw/a9WcPQRBdw6/+ConqNzFOgy8sQ1lotzbhmwrNe2pVHLnwU+m9jSRLy14PgjWPbOLt6vbuT96sYeo3rq6WQZiXz3pKjG0JBk+fplPS+6r9sdHn//yws0/r6MTL4LdJFk6T1XaNdkF6uq6rwoR2RAvgt09c8lWdL6uF7zkRMmJLkSkfj4L9CV6JJEN86bfsi2udOKPahEZGD+C3T10SWJbpl/DJvvupS1d87v3laYl9XPK0S847tAV56LF7ruasnP0t0tMnL5cgo6ES+8/uXz9RyEjGi+C3R10MUr40bneF2CSL98d8pFF0VFRGLzX6Crjy4iEpP/Al15LiISk+8CvcsXzp/hdQkiIiOK7wK9q4NeVqgLVCIi0fwX6JFzLhZzIiURkdTlw0CPLCjPRUR68F2gd1Gei4j05NtAFxGRnnwX6F2nXExzi4qI9OC/QKfroqiIiETzX6B399C9rUNEZKTxXaB3UaCLiPTku0DXk/8iIrH5L9D1YJGISEz+C/TInzrlIiLSk/8CXedcRERi8l2gd9F96CIiPfkw0NVFFxGJxXeB3n0furdliIiMOP4L9MifOuMiItKT7wK9i25bFBHpyXeBrrtcRERiiyvQzWy+ma0zsw1mtiTGfjOzuyP7V5nZKYkvNax7cC510EVEehgw0M0sHfgRcAkwE7jCzGb2OuwSYEbkaxHwkwTX2U0XRUVEYounh34asME5t9E51wY8BCzsdcxC4H4XthwoNLMJCa4VgNc21gLqoYuI9BZPoJcB26LWqyLbBnsMZrbIzCrNrLKmpmawtQJwfHkhnzi5jNlTxg7p9SIiQZURxzGx+sK9L03GcwzOuXuAewDmzJkzpMubs6cUMXtK0VBeKiISaPH00KuASVHr5cCOIRwjIiLDKJ5AXwHMMLOpZpYFXA481euYp4BrIne7zAXqnHM7E1yriIj0Y8BTLs65kJndDDwLpAP3OufWmNniyP6lwDJgAbABaAauG76SRUQklnjOoeOcW0Y4tKO3LY1adsBNiS1NREQGw3dPioqISGwKdBGRgFCgi4gEhAJdRCQgzHk0fKGZ1QBbhvjyEmBPAsvxA7U5NajNqeFw2jzFOVcaa4dngX44zKzSOTfH6zqSSW1ODWpzahiuNuuUi4hIQCjQRUQCwq+Bfo/XBXhAbU4NanNqGJY2+/IcuoiIHMqvPXQREelFgS4iEhC+C/SBJqz2CzObZGZ/NbP3zGyNmX0xsn2smf3ZzN6P/FkU9ZrbIu1eZ2YXR22fbWbvRPbdbTayJ+gzs3Qze8vMno6sB7rNZlZoZo+Z2drIv/cZKdDmL0W+r1eb2YNmlhO0NpvZvWZWbWaro7YlrI1mlm1mD0e2v2ZmFQMW5ZzzzRfh4Xs/AKYBWcBKYKbXdQ2xLROAUyLLBcB6wpNw/xewJLJ9CfDtyPLMSHuzgamRv4f0yL7XgTMIzxz1DHCJ1+0boO3/CvwWeDqyHug2A78CPhtZzgIKg9xmwtNPbgJyI+uPAJ8OWpuBDwOnAKujtiWsjcCNwNLI8uXAwwPW5PVfyiD/As8Ano1avw24zeu6EtS2J4ELgXXAhMi2CcC6WG0lPD79GZFj1kZtvwL4qdft6aed5cDzwHkcDPTAthkYHQk367U9yG3ummN4LOEhup8GLgpim4GKXoGesDZ2HRNZziD8ZKn1V4/fTrnENRm130R+lToZeA0Y7yKzPUX+HBc5rK+2l0WWe28fqX4A3AJ0Rm0LcpunATXALyOnmX5uZvkEuM3Oue3Ad4GtwE7CM5g9R4DbHCWRbex+jXMuBNQBxf19uN8CPa7JqP3EzEYBjwP/4pyr7+/QGNtcP9tHHDP7CFDtnHsj3pfE2OarNhPuWZ0C/MQ5dzLQRPhX8b74vs2R88YLCZ9amAjkm9lV/b0kxjZftTkOQ2njoNvvt0AP1GTUZpZJOMx/45x7IrJ5t5lNiOyfAFRHtvfV9qrIcu/tI9FZwGVmthl4CDjPzH5NsNtcBVQ5516LrD9GOOCD3OYLgE3OuRrnXDvwBHAmwW5zl0S2sfs1ZpYBjAH29vfhfgv0eCas9oXIlexfAO85574ftesp4NrI8rWEz613bb88cuV7KjADeD3ya12Dmc2NvOc1Ua8ZUZxztznnyp1zFYT/7V5wzl1FsNu8C9hmZkdHNp0PvEuA20z4VMtcM8uL1Ho+8B7BbnOXRLYx+r0+Rfjnpf/fULy+qDCEixALCN8R8gHwFa/rOYx2nE3416dVwNuRrwWEz5E9D7wf+XNs1Gu+Emn3OqKu9gNzgNWRfT9kgAsnI+ELmMfBi6KBbjNwElAZ+bf+PVCUAm3+OrA2Uu8DhO/uCFSbgQcJXyNoJ9ybvj6RbQRygEeBDYTvhJk2UE169F9EJCD8dspFRET6oEAXEQkIBbqISEAo0EVEAkKBLiISEAp0EZGAUKCLiATE/wIjY7ShLNWIwgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] } ] }