Skip to content

Instantly share code, notes, and snippets.

@Saurabh7
Created August 18, 2017 05:32
Show Gist options
  • Save Saurabh7/944fd4c9dfac0f517861ffc656014292 to your computer and use it in GitHub Desktop.
Save Saurabh7/944fd4c9dfac0f517861ffc656014292 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<script>jQuery(function() {if (jQuery(\"body.notebook_app\").length == 0) { jQuery(\".input_area\").toggle(); jQuery(\".prompt\").toggle();}});</script>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<button onclick=\"jQuery('.input_area').toggle(); jQuery('.prompt').toggle();\">Toggle code</button>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import IPython.core.display as di\n",
"\n",
"# This line will hide code by default when the notebook is exported as HTML\n",
"di.display_html('<script>jQuery(function() {if (jQuery(\"body.notebook_app\").length == 0) { jQuery(\".input_area\").toggle(); jQuery(\".prompt\").toggle();}});</script>', raw=True)\n",
"\n",
"# This line will add a button to toggle visibility of code blocks, for use with the HTML export version\n",
"di.display_html('''<button onclick=\"jQuery('.input_area').toggle(); jQuery('.prompt').toggle();\">Toggle code</button>''', raw=True)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from IPython.display import display, HTML\n",
"from itertools import combinations, product\n",
"import pandas as pd\n",
"import json\n",
"from jarvis.brain.insights.paths.path_pipeline import PathPipeline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"goal_metric = {\"value\": \"aw_cost_per_conv\", \"base_metrics\": {\"numerator\": \"aw_cost\", \"denominator\":\"aw_conversions\"}, \"diff\": -1}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# {\n",
"# \t\"account_ids\":{\"adwords\":[221,223,222]},\n",
"# \t\"start_date\":\"2017-08-10\",\n",
"# \t\"end_date\":\"2017-08-16\",\n",
"# \t\"goal_metric\":{\"value\":\"aw_cost_per_conv\",\"name\":\"AW: Cost / conv.\",\"visible\":true,\"currency\":true,\"precision\":2,\"ratio\":true,\"diff\":-1,\"base_metrics\":{\"numerator\":\"fb_spend+aw_cost\",\"denominator\":\"ga_transactions+af_custom_column_int_9_30day\"},\"group\":\"aw\"},\n",
"# \t\"num_results\":10,\n",
"# \t\"staging\":0,\n",
"# \t\"imp_factor\":8\n",
"# }\n",
"# {\n",
"# \"account_ids\":{\"facebook\":[261,260]},\n",
"# \"start_date\":\"2017-07-01\",\n",
"# \"end_date\":\"2017-07-31\",\n",
"# \"goal_metric\":{\"value\":\"ga_fb_cpt\",\"name\":\"GA-FB: CPT\",\"visible\":true,\"ratio\":true,\"precision\":2,\"currency\":true,\"diff\":-1,\"base_metrics\":{\"numerator_channel\":\"ad\",\"numerator_metric\":\"spend\",\"denominator_channel\":\"analytics\",\"denominator_metric\":\"transactions\",\"numerator\":\"fb_spend\",\"denominator\":\"ga_transactions\"},\"ad_channel\":\"facebook\",\"group\":\"ga\"},\n",
"# \"num_results\":20,\"staging\":0,\"imp_factor\":8,\n",
"# \"filters\":[{\"operator\":\"$nin\",\"dimension\":\"custom_tags.Campaigns.metadata.name\",\"value\":[\"International_1\",\"AdWyze - DPA\"]},{\"operator\":\"$in\",\"dimension\":\"custom_tags.Sale Campaign.name\",\"value\":[\"non-sale\"]}],\n",
"# \"tag_list\":[\"Adsets\",\"Audience Types\",\"Behaviors\",\"Custom Audiences\",\"Image\",\"Interests\",\"Lookalike Types\",\"Product Category\"], \n",
"# \"num_trees\":1}"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"TIME USED 4.360836744308472\n",
"TIME USED 4.072947263717651\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/sabby/jarvis/jarvis/brain/insights/paths/path_processor.py:150: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
" new_df['prop'] = new_df[self.spend] / self.total_spend\n",
"/home/sabby/jarvis/jarvis/brain/insights/paths/path_processor.py:152: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
" new_df['score'] = abs(new_df[self.goal_metric] - self.overall_goal_metric) * new_df['prop']\n",
"/home/sabby/anaconda3/envs/jarvis1/lib/python3.5/site-packages/pandas/computation/expressions.py:62: RuntimeWarning: divide by zero encountered in true_divide\n",
" return op(a, b)\n",
"/home/sabby/jarvis/jarvis/brain/insights/paths/path_processor.py:275: RuntimeWarning: divide by zero encountered in double_scalars\n",
" new_goal_metric = new_num / new_deno\n",
"/home/sabby/anaconda3/envs/jarvis1/lib/python3.5/site-packages/pandas/computation/expressions.py:62: RuntimeWarning: invalid value encountered in true_divide\n",
" return op(a, b)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"('DPA',) -0.0794923800785\n"
]
}
],
"source": [
"account_ids = {'facebook': [260, 261]}#{'adwords': [1]} #,\n",
"date_range = {'start': '2017-07-01', 'end': '2017-07-31'}\n",
"goal_metric = {'value': 'ga_fb_cpt',\n",
" 'base_metrics': {'numerator': 'fb_spend',\n",
" 'denominator': 'ga_transactions'},\n",
" 'diff': -1}\n",
"\n",
"args = {}\n",
"args['account_ids'] = account_ids\n",
"args['dimensions'] = None\n",
"args['tag_list'] = [\"Audience Types\",\"Custom Audiences\",\"Lookalike Types\",\"Interests\",\"Behaviors\"]#[\"Adsets\",\"Audience Types\",\"Behaviors\",\"Custom Audiences\",\"Image\",\"Interests\",\"Lookalike Types\",\"Product Category\"]\n",
"# args['goal'] = None\n",
"args['num_trees'] = None\n",
"args['staging'] = None\n",
"args['filters'] = [{\"operator\":\"$in\",\"dimension\":\"custom_tags.Sale Campaign.name\",\"value\":[\"non-sale\"]}]\n",
"args['start_date'] = date_range['start']\n",
"args['end_date'] = date_range['end'] \n",
"args['goal_metric'] = goal_metric\n",
"args['num_results'] = 20\n",
"args['imp_factor'] = 8\n",
"args['spend_metric'] = None\n",
"args['goal'] = None\n",
"args['spend_diff'] = 5\n",
"path_pipeline = PathPipeline(args)\n",
"df, tag_list, spend = path_pipeline.pre_process()\n",
"data = path_pipeline.execute()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df[goal_metric['value']] = df[goal_metric['base_metrics']['numerator']] / df[goal_metric['base_metrics']['denominator']]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"path_model = path_pipeline.path_model"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"binwidth=0.01"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data1 = []\n",
"dff= df[df[goal_metric['value']] != pd.np.inf]\n",
"for idx in range(len(dff)):\n",
" data1 += [dff[goal_metric['value']].iloc[idx]]*int(dff[path_model.spend].iloc[idx])"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1294.0296307692302"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"path_model.overall_goal_metric"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = path_model.overall_goal_metric + path_model.check_threshold[1]*path_model.overall_goal_metric\n",
"b = path_model.overall_goal_metric - path_model.check_threshold[0]*path_model.overall_goal_metric"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1340.395"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1103.7768503937009"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.4747848575004693"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1 = df\n",
"df1['cpt'] = df1['fb_spend'] / df1['ga_transactions']\n",
"df1[df1.cpt > a].fb_spend.sum() / df.fb_spend.sum()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.lines.Line2D at 0x7f5667b50be0>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nbR4/Ns/N5xoF/StSpiR/t8sen02yd/vcHN1zLGl1e8U8TzIb+BxwaFX9b0+7YXl6UA1mbD7PY/C5\nYKgJb8v426iqXkryKbqN/tYCLq6q+6d5WNIKS7Iv8FHg7iR30C3vPJ3ujhVXJzmW7kvlkQBVdVOS\n9yf5Cd1lMZ9o8SVJ/hq4rR3jC20TTGkmOxW4qs3dO4CLW/xi4LIkDwLP0J1Aqar7klxNd+fGF4AT\nqsql/5pJTgIuT/Ia4GG6HL025nONiKr6UZJr6XL2C+3nhXR7upjPtcZKcgWwH7B5kkXAHOBM4Jop\nyt8nAF8H1qO7O++3V9d7k8YMmeenA+sC/9Jufju/qk4YJ08PqsEsaF0M+24/fEzmfkmSJEmSJI0C\nL12UJEmSJEnSSLDQJUmSJEmSpJFgoUuSJEmSJEkjwUKXJEmSJEmSRoKFLkmSJEmSJI0EC12SJEmS\nJEkaCRa6JEmSZrgkH0pyZ5L/SfJSkncl+csky5NsO93jkyRJmiksdEmSJM1gSXYCrgCWAicCfwLc\nD1T7N6MleXeSOUk2nu6xSJKk0bfOdA9AkiRJ49oPWBs4uap+PBZMMm0DmqT9gDOAucCz0zsUSZI0\n6lzRJUmSNLO9of1cMq2jWHlrTEVOkiSt+Sx0SZIkTSDJdkmuS7IsydIk1yd5U5JHkszra/vHSW5I\n8miSXyV5qrV/60r0uxyY054+0vbkeriv2WuTnJ/kZ20Pr/lJDljJt0qSPZJck+SJNv5FSa5Isn3v\nuJJ8Lcl7kvwgyXOt/3OTbNDTbi7daq7e8S9PckZ/v5IkSVPBSxclSZLGkWQz4FbgdcBXgQXAO4Fb\ngPUHvORE4BngH4AngDcDnwRuTbJXVT00ie4/BnwQOBw4uR33l73DAy4FXgTOBDYCjge+nWR2Vc1j\nEpIcAlzb+vhH4CFgS+Ag4HeA/+pp/vvAh1q7S4D9gZOA3YEDW5sLgI37xg9w12TGJUmStKJSNeP3\nMJUkSZo2Sc4GPgt8tKqu6omfBZwCfK+qDuiJr19Vz/cdYxfgx8BFVfWpSfY/h25V1PZVtagvPgeY\nD7yrql5s8a3pinGLqmr3SfSzPrCIrmi2Z1U9MU7b5XQb4R9eVd/oiZ8LfBo4qqquHm/8kiRJq4KX\nLkqSJI3vEOBnvUWu5ouDGvcWuZJslGRzupVMC4F9pnhsBXxprMjV+v8pcDmwayuwraiDgM2Bc8Yr\ncvVY2Fvkas6kW2V2xCT6lSRJmjIWuiRJksa3PfCT/mBVPQUs7Y8n2TPJN5P8N7AMeAr4OfBWYNYq\nGN+CAbH72s8dJnGcnegKZ3euYPv7+wOtQLZ0kv1KkiRNGffokiRJmiJJ3gj8G12B6wvAA8BzdAWk\n84ANV0G3g/ahWJk7HY69ZkX3tRjWzrssSpKkaWOhS5IkaXyPADv2B5O8Dti0L3wEXTHrkKr6fl/7\nzYFfrYLx7QbcMyAG0H+HxvEspCtS7Qn86wr2+wpJtgQ26evXDWElSdJq46WLkiRJ4/sG8IYkR/XF\nTxnQ9qX28xXfsZL8Gd3dC6dagM8keU1PX9sARwELqmrhJI51M/A08NlWsJrILkkO64udSlfYur4n\nNnaXyM0mMRZJkqSV4oouSZKk8Z0FfASYm2Qfuj2x3gG8nW7/rd4VS98Cngf+KclXgCXAvsDBwEPA\n2qtgfOsA/57kSmBj4HhgPeCkyRykqp5PchxwDXBPkovo9ibbAngf3Sb1vZvP3w1c1to9CBwAfBC4\nZeyOi818uoLc2Ukup1vVdk9V3Tv5typJkjQ+V3RJkiSNo6qeoStWfRP4BN2dBTcA9qf7LvV8T9uH\ngdl0l+6dBvwN3eWN7wYWM/WX8RVwNPBD4POtz8eA2VW1IpcfvvJgXSHrHcD3gWOBLwOfbMe8u6/5\n7cDhdAW/L7bXnQ8c2nfM/wA+R7dB/YXAFXQFMUmSpCmXKrdNkCRJmqwkm9Fd6ndBVZ0w3eNZnZIs\nB75eVcdO91gkSZJ6uaJLkiRpAknWGxAe24/q5tU8HEmSJA3hHl2SJEkT+1aSR4Hb6PbZei/wAeBW\n4IbJHizJxsD6EzT7v6paMtljD+hrFrDuBM2er6pnX21fkiRJ081ClyRJ0sRupNsL6zC6AtVi4G+B\nv6qV2wfiPOCYCdp8j26D91frn+n2CBumgEvo9uRaUcXU7zcmSZL0qrlHlyRJ0mqWZFdgqwmaLamq\nO6agrz2BWRM0e7yqFrzaviRJkqabhS5JkiRJkiSNBDejlyRJkiRJ0kiw0CVJkiRJkqSRYKFLkiRJ\nkiRJI8FClyRJkiRJkkaChS5JkiRJkiSNhP8HKmbfBYLUdvAAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f56674bd780>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from matplotlib.pyplot import hist\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.ticker as ticker\n",
"\n",
"tick_spacing = 10\n",
"\n",
"plt.figure(figsize=(20,10))\n",
"binwidth = 0.1\n",
"h = hist(dff[goal_metric['value']], weights=dff.fb_spend, bins=pd.np.linspace((min(dff[goal_metric['value']])),\n",
" (max(dff[goal_metric['value']])), 500))\n",
"plt.xlabel(goal_metric['value'], fontsize=18)\n",
"plt.ylabel('Spend', fontsize=18)\n",
"# ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))\n",
"plt.axvline(path_model.overall_goal_metric, linewidth=5, color='red')\n",
"plt.axvline(path_model.overall_goal_metric + path_model.check_threshold[1]*path_model.overall_goal_metric, linewidth=5, color='red')\n",
"plt.axvline(path_model.overall_goal_metric - path_model.check_threshold[0]*path_model.overall_goal_metric, linewidth=5, color='red')"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data_1 = {key: value for (key, value) in enumerate(data['under_valued'])}\n",
"data_2 = {key: value for (key, value) in enumerate(data['strategic_wins'])}\n",
"data_3 = {key: value for (key, value) in enumerate(data['quick_wins'])}\n",
"data_4 = {key: value for (key, value) in enumerate(data['over_valued'])}\n",
"\n",
"df_1 = pd.DataFrame().from_dict(data_1, orient='index')\n",
"df_2 = pd.DataFrame().from_dict(data_2, orient='index')\n",
"df_3 = pd.DataFrame().from_dict(data_3, orient='index')\n",
"df_4 = pd.DataFrame().from_dict(data_4, orient='index')"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/sabby/anaconda3/envs/jarvis1/lib/python3.5/site-packages/bokeh/util/deprecation.py:34: BokehDeprecationWarning: \n",
"The bokeh.charts API has moved to a separate 'bkcharts' package.\n",
"\n",
"This compatibility shim will remain until Bokeh 1.0 is released.\n",
"After that, if you want to use this API you will have to install\n",
"the bkcharts package explicitly.\n",
"\n",
" warn(message)\n"
]
}
],
"source": [
"from bokeh.charts import Scatter, output_file, show\n",
"from bokeh.io import output_notebook, push_notebook\n",
"from bokeh.plotting import figure, ColumnDataSource\n",
"from bokeh.models import HoverTool\n",
"from bokeh.models.widgets.tables import DataTable, TableColumn\n",
"from bokeh.models import Span"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <div class=\"bk-root\">\n",
" <a href=\"http://bokeh.pydata.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
" <span id=\"8be7b746-cc8f-4223-a6bc-bd7aadb71559\">Loading BokehJS ...</span>\n",
" </div>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
"(function(global) {\n",
" function now() {\n",
" return new Date();\n",
" }\n",
"\n",
" var force = true;\n",
"\n",
" if (typeof (window._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n",
" window._bokeh_onload_callbacks = [];\n",
" window._bokeh_is_loading = undefined;\n",
" }\n",
"\n",
"\n",
" \n",
" if (typeof (window._bokeh_timeout) === \"undefined\" || force === true) {\n",
" window._bokeh_timeout = Date.now() + 5000;\n",
" window._bokeh_failed_load = false;\n",
" }\n",
"\n",
" var NB_LOAD_WARNING = {'data': {'text/html':\n",
" \"<div style='background-color: #fdd'>\\n\"+\n",
" \"<p>\\n\"+\n",
" \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
" \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
" \"</p>\\n\"+\n",
" \"<ul>\\n\"+\n",
" \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
" \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
" \"</ul>\\n\"+\n",
" \"<code>\\n\"+\n",
" \"from bokeh.resources import INLINE\\n\"+\n",
" \"output_notebook(resources=INLINE)\\n\"+\n",
" \"</code>\\n\"+\n",
" \"</div>\"}};\n",
"\n",
" function display_loaded() {\n",
" if (window.Bokeh !== undefined) {\n",
" var el = document.getElementById(\"8be7b746-cc8f-4223-a6bc-bd7aadb71559\");\n",
" el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n",
" } else if (Date.now() < window._bokeh_timeout) {\n",
" setTimeout(display_loaded, 100)\n",
" }\n",
" }\n",
"\n",
" function run_callbacks() {\n",
" try {\n",
" window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
" }\n",
" finally {\n",
" delete window._bokeh_onload_callbacks\n",
" }\n",
" console.info(\"Bokeh: all callbacks have finished\");\n",
" }\n",
"\n",
" function load_libs(js_urls, callback) {\n",
" window._bokeh_onload_callbacks.push(callback);\n",
" if (window._bokeh_is_loading > 0) {\n",
" console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
" return null;\n",
" }\n",
" if (js_urls == null || js_urls.length === 0) {\n",
" run_callbacks();\n",
" return null;\n",
" }\n",
" console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
" window._bokeh_is_loading = js_urls.length;\n",
" for (var i = 0; i < js_urls.length; i++) {\n",
" var url = js_urls[i];\n",
" var s = document.createElement('script');\n",
" s.src = url;\n",
" s.async = false;\n",
" s.onreadystatechange = s.onload = function() {\n",
" window._bokeh_is_loading--;\n",
" if (window._bokeh_is_loading === 0) {\n",
" console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
" run_callbacks()\n",
" }\n",
" };\n",
" s.onerror = function() {\n",
" console.warn(\"failed to load library \" + url);\n",
" };\n",
" console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" }\n",
" };var element = document.getElementById(\"8be7b746-cc8f-4223-a6bc-bd7aadb71559\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid '8be7b746-cc8f-4223-a6bc-bd7aadb71559' but no matching script tag was found. \")\n",
" return false;\n",
" }\n",
"\n",
" var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.6.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.6.min.js\"];\n",
"\n",
" var inline_js = [\n",
" function(Bokeh) {\n",
" Bokeh.set_log_level(\"info\");\n",
" },\n",
" \n",
" function(Bokeh) {\n",
" \n",
" },\n",
" \n",
" function(Bokeh) {\n",
" \n",
" document.getElementById(\"8be7b746-cc8f-4223-a6bc-bd7aadb71559\").textContent = \"BokehJS is loading...\";\n",
" },\n",
" function(Bokeh) {\n",
" console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.6.min.css\");\n",
" Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.6.min.css\");\n",
" console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.6.min.css\");\n",
" Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.6.min.css\");\n",
" }\n",
" ];\n",
"\n",
" function run_inline_js() {\n",
" \n",
" if ((window.Bokeh !== undefined) || (force === true)) {\n",
" for (var i = 0; i < inline_js.length; i++) {\n",
" inline_js[i](window.Bokeh);\n",
" }if (force === true) {\n",
" display_loaded();\n",
" }} else if (Date.now() < window._bokeh_timeout) {\n",
" setTimeout(run_inline_js, 100);\n",
" } else if (!window._bokeh_failed_load) {\n",
" console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
" window._bokeh_failed_load = true;\n",
" } else if (force !== true) {\n",
" var cell = $(document.getElementById(\"8be7b746-cc8f-4223-a6bc-bd7aadb71559\")).parents('.cell').data().cell;\n",
" cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
" }\n",
"\n",
" }\n",
"\n",
" if (window._bokeh_is_loading === 0) {\n",
" console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
" run_inline_js();\n",
" } else {\n",
" load_libs(js_urls, function() {\n",
" console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
" run_inline_js();\n",
" });\n",
" }\n",
"}(this));"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"output_notebook()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# from sklearn.cluster import DBSCAN\n",
"\n",
"# m = DBSCAN(eps=0.1, min_samples=1).fit(scale(pd.np.array([0.33, 0.0976, 0.0483, 0.244]).reshape(-1,1)))"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# m.labels_"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# scale(pd.np.array([0.33, 0.0976, 0.0483, 0.244]).reshape(-1,1))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# from sklearn.preprocessing import scale"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# path_pipeline.path_pre_process.score_df"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"None\n"
]
}
],
"source": [
"df = path_pipeline.path_pre_process.df\n",
"df1 = df.groupby('Lookalike Types').sum()\n",
"df1['cpt'] = df1['fb_spend'] / df1['ga_transactions']\n",
"df1['prop'] = df1.fb_spend / df.fb_spend.sum()\n",
"df1[df1.prop > 0.01]\n",
"\n",
"df = path_pipeline.path_pre_process.df\n",
"df1 = df.groupby('Audience Types').sum()\n",
"df1['cpt'] = df1['fb_spend'] / df1['ga_transactions']\n",
"df1['prop'] = df1.fb_spend / df.fb_spend.sum()\n",
"df1[df1.prop > 0.01]\n",
"\n",
"df = path_pipeline.path_pre_process.df\n",
"df1 = df.groupby('Lookalike Types').sum()\n",
"df1['cpt'] = df1['fb_spend'] / df1['ga_transactions']\n",
"df1['prop'] = df1.fb_spend / df.fb_spend.sum()\n",
"df1[df1.prop > 0.01]\n",
"\n",
"df = path_pipeline.path_pre_process.df\n",
"df1 = df.groupby('Interests').sum()\n",
"df1['cpt'] = df1['fb_spend'] / df1['ga_transactions']\n",
"df1['prop'] = df1.fb_spend / df.fb_spend.sum()\n",
"df1[df1.prop > 0.01]\n",
"\n",
"df = path_pipeline.path_pre_process.df\n",
"df1 = df.groupby('Custom Audiences').sum()\n",
"df1['cpt'] = df1['fb_spend'] / df1['ga_transactions']\n",
"df1['prop'] = df1.fb_spend / df.fb_spend.sum()\n",
"df1[df1.prop > 0.01]\n",
"\n",
"print('None')"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" <div class=\"bk-root\">\n",
" <div class=\"bk-plotdiv\" id=\"58649315-0681-46a5-a6f9-86c1d9e2f73a\"></div>\n",
" </div>\n",
"<script type=\"text/javascript\">\n",
" \n",
" (function(global) {\n",
" function now() {\n",
" return new Date();\n",
" }\n",
" \n",
" var force = false;\n",
" \n",
" if (typeof (window._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n",
" window._bokeh_onload_callbacks = [];\n",
" window._bokeh_is_loading = undefined;\n",
" }\n",
" \n",
" \n",
" \n",
" if (typeof (window._bokeh_timeout) === \"undefined\" || force === true) {\n",
" window._bokeh_timeout = Date.now() + 0;\n",
" window._bokeh_failed_load = false;\n",
" }\n",
" \n",
" var NB_LOAD_WARNING = {'data': {'text/html':\n",
" \"<div style='background-color: #fdd'>\\n\"+\n",
" \"<p>\\n\"+\n",
" \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
" \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
" \"</p>\\n\"+\n",
" \"<ul>\\n\"+\n",
" \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
" \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
" \"</ul>\\n\"+\n",
" \"<code>\\n\"+\n",
" \"from bokeh.resources import INLINE\\n\"+\n",
" \"output_notebook(resources=INLINE)\\n\"+\n",
" \"</code>\\n\"+\n",
" \"</div>\"}};\n",
" \n",
" function display_loaded() {\n",
" if (window.Bokeh !== undefined) {\n",
" var el = document.getElementById(\"58649315-0681-46a5-a6f9-86c1d9e2f73a\");\n",
" el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n",
" } else if (Date.now() < window._bokeh_timeout) {\n",
" setTimeout(display_loaded, 100)\n",
" }\n",
" }if ((window.Jupyter !== undefined) && Jupyter.notebook.kernel) {\n",
" comm_manager = Jupyter.notebook.kernel.comm_manager\n",
" comm_manager.register_target(\"9f9a05fb-7280-460d-a15d-4c49c507cad0\", function () {});\n",
" }\n",
" \n",
" function run_callbacks() {\n",
" try {\n",
" window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
" }\n",
" finally {\n",
" delete window._bokeh_onload_callbacks\n",
" }\n",
" console.info(\"Bokeh: all callbacks have finished\");\n",
" }\n",
" \n",
" function load_libs(js_urls, callback) {\n",
" window._bokeh_onload_callbacks.push(callback);\n",
" if (window._bokeh_is_loading > 0) {\n",
" console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
" return null;\n",
" }\n",
" if (js_urls == null || js_urls.length === 0) {\n",
" run_callbacks();\n",
" return null;\n",
" }\n",
" console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
" window._bokeh_is_loading = js_urls.length;\n",
" for (var i = 0; i < js_urls.length; i++) {\n",
" var url = js_urls[i];\n",
" var s = document.createElement('script');\n",
" s.src = url;\n",
" s.async = false;\n",
" s.onreadystatechange = s.onload = function() {\n",
" window._bokeh_is_loading--;\n",
" if (window._bokeh_is_loading === 0) {\n",
" console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
" run_callbacks()\n",
" }\n",
" };\n",
" s.onerror = function() {\n",
" console.warn(\"failed to load library \" + url);\n",
" };\n",
" console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" }\n",
" };var element = document.getElementById(\"58649315-0681-46a5-a6f9-86c1d9e2f73a\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid '58649315-0681-46a5-a6f9-86c1d9e2f73a' but no matching script tag was found. \")\n",
" return false;\n",
" }\n",
" \n",
" var js_urls = [];\n",
" \n",
" var inline_js = [\n",
" function(Bokeh) {\n",
" (function() {\n",
" var fn = function() {\n",
" var docs_json = {\"5e9c3e60-1e4f-4027-8fe5-13c7487bbb8c\":{\"roots\":{\"references\":[{\"attributes\":{\"plot\":{\"id\":\"704b19e5-0d5f-474a-8db7-9da38fbed484\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"fb635ff3-7525-45cf-b09b-3e3494af625b\",\"type\":\"BasicTicker\"}},\"id\":\"f0ea6062-65db-44b6-88a7-bd33bb36f1d4\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"idx\",\"overall\",\"level_3\",\"size\",\"level_2\",\"numerator\",\"spend_prop\",\"index\",\"level_0\",\"level_1\",\"levels\",\"overall_spend_prop\",\"other_ga_fb_cpt\",\"denominator\",\"imp_factor\",\"precision\",\"metric\",\"recall\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAABAU0AAAAAAAAAwQAAAAAAAgE9AAAAAAABgYkAAAAAAAMBQQAAAAAAAAFNAAAAAAAAAZEA=\",\"dtype\":\"float64\",\"shape\":[7]},\"idx\":[0,1,2,3,4,5,6],\"imp_factor\":{\"__ndarray__\":\"EoPAyqFF8j9OYhBYObTwPwRWDi2yne8/wcqhRbbz7T+oxks3iUHoP4/C9Shcj+Y/zczMzMzM5D8=\",\"dtype\":\"float64\",\"shape\":[7]},\"index\":[0,1,2,3,4,5,6],\"level_0\":[\"Audience Types : Lookalike\",\"Audience Types : Interests\",\"Audience Types : Website\",\"Audience Types : Website\",\"Audience Types : Interests\",\"Audience Types : Interests\",\"Audience Types : Interests\"],\"level_1\":[\"Lookalike Types : 1-2%\",\"Interests : Education or Higher education or Hotels or Travel or University\",\"Custom Audiences : Retargeting 7 days\",\"- : -\",\"Interests : Nightclubs or Nightlife or Online shopping or Others or Parties or Shopping\",\"Interests : Action movies or Animated movies or Being Indian or Bollywood movies or BuzzFeed or Others\",\"- : -\"],\"level_2\":[\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\"],\"level_3\":[\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\"],\"levels\":[[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}},{\"Lookalike Types\":{\"name\":\"1-2%\",\"value\":\"1-2%\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}},{\"Interests\":{\"name\":\"Education or Higher education or Hotels or Travel or University\",\"value\":\"Education or Higher education or Hotels or Travel or University\"}}],[{\"Audience Types\":{\"name\":\"Website\",\"value\":\"Website\"}},{\"Custom Audiences\":{\"name\":\"Retargeting 7 days\",\"value\":\"Retargeting 7 days\"}}],[{\"Audience Types\":{\"name\":\"Website\",\"value\":\"Website\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}},{\"Interests\":{\"name\":\"Nightclubs or Nightlife or Online shopping or Others or Parties or Shopping\",\"value\":\"Nightclubs or Nightlife or Online shopping or Others or Parties or Shopping\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}},{\"Interests\":{\"name\":\"Action movies or Animated movies or Being Indian or Bollywood movies or BuzzFeed or Others\",\"value\":\"Action movies or Animated movies or Being Indian or Bollywood movies or BuzzFeed or Others\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}}]],\"metric\":{\"__ndarray__\":\"hetRuJ4RpkC4HoXrUfCfQIXrUbgeKJpApHA9CtdUlkC4HoXrUayYQHE9CtejAJVAAAAAAACjl0A=\",\"dtype\":\"float64\",\"shape\":[7]},\"numerator\":{\"__ndarray__\":\"UrgehTWNCkGkcD0KV/DfQK5H4XqAv/lAXI/C9W6lCUFSuB6FZ9T5QBSuR+HC8PhAXI/C9byLDUE=\",\"dtype\":\"float64\",\"shape\":[7]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"H4XrUbj3mUCkcD0K17aWQI/C9ShcdpNAuB6F61EClECkcD0K1+OWQIXrUbgeBZpAw/UoXI/Yk0A=\",\"dtype\":\"float64\",\"shape\":[7]},\"overall\":{\"__ndarray__\":\"MkOHVx44lEAyQ4dXHjiUQDJDh1ceOJRAMkOHVx44lEAyQ4dXHjiUQDJDh1ceOJRAMkOHVx44lEA=\",\"dtype\":\"float64\",\"shape\":[7]},\"overall_spend_prop\":{\"__ndarray__\":\"rH3D2jesJ0CsfcPaN6wnQKx9w9o3rCdArH3D2jesJ0CsfcPaN6wnQKx9w9o3rCdArH3D2jesJ0A=\",\"dtype\":\"float64\",\"shape\":[7]},\"precision\":{\"__ndarray__\":\"LbKd76fG7z+LbOf7qfHuPz0K16NwPeo/z/dT46Wb6D/LoUW28/3cP2Dl0CLb+dY/tvP91Hjp3j8=\",\"dtype\":\"float64\",\"shape\":[7]},\"recall\":{\"__ndarray__\":\"CKwcWmQ7vz8730+Nl26SP0oMAiuHFqk/WmQ730+Ntz/ZzvdT46WbPxsv3SQGgZU/TDeJQWDlsD8=\",\"dtype\":\"float64\",\"shape\":[7]},\"size\":{\"__ndarray__\":\"AAAAAAAANEC0Q6tmoUgyQBnYeuqPTTFACyvgZG1kMEDEF7EPx4wqQGDeMImKsShAc+YaDF/EJkA=\",\"dtype\":\"float64\",\"shape\":[7]},\"spend_prop\":{\"__ndarray__\":\"rkfhehSuJED2KFyPwvX4PxSuR+F6FBRAexSuR+H6I0AfhetRuB4UQHE9CtejcBNAhetRuB4FJ0A=\",\"dtype\":\"float64\",\"shape\":[7]}}},\"id\":\"9e4241f6-8f1a-4f0a-a9f4-91d9c3bcc068\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"f0b8296a-af03-44ae-9712-8be77d1b8b5d\",\"type\":\"Circle\"},{\"attributes\":{\"dimension\":\"height\",\"line_width\":{\"value\":3},\"location\":11.836363636363636,\"plot\":{\"id\":\"704b19e5-0d5f-474a-8db7-9da38fbed484\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"53ede6fa-0133-40b8-a899-80da83a2585e\",\"type\":\"Span\"},{\"attributes\":{},\"id\":\"fb635ff3-7525-45cf-b09b-3e3494af625b\",\"type\":\"BasicTicker\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"4c336d9d-8ec3-487f-9256-b4a77093aaf9\",\"type\":\"HoverTool\"}]},\"id\":\"30027f5d-c99c-4ba0-94c0-f79edd085677\",\"type\":\"Toolbar\"},{\"attributes\":{\"callback\":null},\"id\":\"49bc5a60-2566-4303-bb49-9d70bf6f8cbc\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"c5547091-a829-427a-a52a-3903a56fb208\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"7a2f71e2-47a3-4b1e-be5d-78469db2a739\",\"type\":\"ToolEvents\"},{\"attributes\":{\"axis_label\":\"Spend Proportion\",\"formatter\":{\"id\":\"abc0eebe-1cf6-44b1-93c4-dc2719fa1da2\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"704b19e5-0d5f-474a-8db7-9da38fbed484\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"fb635ff3-7525-45cf-b09b-3e3494af625b\",\"type\":\"BasicTicker\"}},\"id\":\"093c4640-d2a5-492a-aa68-6384431521fa\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"ae1fd5b0-d8e2-4624-894c-78e19ba46ef1\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"idx\",\"overall\",\"level_3\",\"size\",\"level_2\",\"numerator\",\"spend_prop\",\"index\",\"level_0\",\"level_1\",\"levels\",\"overall_spend_prop\",\"other_ga_fb_cpt\",\"denominator\",\"imp_factor\",\"precision\",\"metric\",\"recall\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAAAAbkAAAAAAAGBkQAAAAAAAwGBA\",\"dtype\":\"float64\",\"shape\":[3]},\"idx\":[0,1,2],\"imp_factor\":{\"__ndarray__\":\"vHSTGARW8D9OYhBYObTsP28Sg8DKoek/\",\"dtype\":\"float64\",\"shape\":[3]},\"index\":[0,1,2],\"level_0\":[\"Audience Types : Lookalike\",\"Audience Types : Lookalike\",\"Audience Types : Open Targeting\"],\"level_1\":[\"- : -\",\"Lookalike Types : 1%\",\"- : -\"],\"level_2\":[\"- : -\",\"- : -\",\"- : -\"],\"level_3\":[\"- : -\",\"- : -\",\"- : -\"],\"levels\":[[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}}],[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}},{\"Lookalike Types\":{\"name\":\"1%\",\"value\":\"1%\"}}],[{\"Audience Types\":{\"name\":\"Open Targeting\",\"value\":\"Open Targeting\"}}]],\"metric\":{\"__ndarray__\":\"rkfhehTMn0AfhetRuPeZQM3MzMzMgZ9A\",\"dtype\":\"float64\",\"shape\":[3]},\"numerator\":{\"__ndarray__\":\"mpmZmVfPHUFxPQrXvIgQQY/C9SjvfRBB\",\"dtype\":\"float64\",\"shape\":[3]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"7FG4HoU2kkCF61G4nhGmQGZmZmZmNJNA\",\"dtype\":\"float64\",\"shape\":[3]},\"overall\":{\"__ndarray__\":\"MkOHVx44lEAyQ4dXHjiUQDJDh1ceOJRA\",\"dtype\":\"float64\",\"shape\":[3]},\"overall_spend_prop\":{\"__ndarray__\":\"rH3D2jesJ0CsfcPaN6wnQKx9w9o3rCdA\",\"dtype\":\"float64\",\"shape\":[3]},\"precision\":{\"__ndarray__\":\"sp3vp8ZL6z+DwMqhRbbnP/hT46WbxOQ/\",\"dtype\":\"float64\",\"shape\":[3]},\"recall\":{\"__ndarray__\":\"aJHtfD81zj/Jdr6fGi+9P/LSTWIQWLk/\",\"dtype\":\"float64\",\"shape\":[3]},\"size\":{\"__ndarray__\":\"AAAAAAAANEBBqzmiLZIxQN4l3SaJYS9A\",\"dtype\":\"float64\",\"shape\":[3]},\"spend_prop\":{\"__ndarray__\":\"exSuR+E6N0DD9Shcj8IpQDMzMzMzsylA\",\"dtype\":\"float64\",\"shape\":[3]}}},\"id\":\"d47fcea4-c82f-4f1d-9135-18b0b8d2cee4\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null},\"id\":\"f6b9efbf-1c70-4d90-bd92-20797ad1ee3b\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"ae409f60-46bf-40e4-bcbd-0bd01c3f745f\",\"type\":\"Circle\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"704b19e5-0d5f-474a-8db7-9da38fbed484\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e0695cc7-b741-475a-9137-dee0c48ceab0\",\"type\":\"BasicTicker\"}},\"id\":\"a802dc05-df4e-4ca5-8479-b31ecc80b616\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"idx\",\"overall\",\"level_3\",\"size\",\"level_2\",\"numerator\",\"spend_prop\",\"index\",\"level_0\",\"level_1\",\"levels\",\"overall_spend_prop\",\"other_ga_fb_cpt\",\"denominator\",\"imp_factor\",\"precision\",\"metric\",\"recall\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAADIiEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"idx\":[0],\"imp_factor\":{\"__ndarray__\":\"Rrbz/dR47T8=\",\"dtype\":\"float64\",\"shape\":[1]},\"index\":[0],\"level_0\":[\"Audience Types : DPA\"],\"level_1\":[\"- : -\"],\"level_2\":[\"- : -\"],\"level_3\":[\"- : -\"],\"levels\":[[{\"Audience Types\":{\"name\":\"DPA\",\"value\":\"DPA\"}}]],\"metric\":{\"__ndarray__\":\"ZmZmZmZKi0A=\",\"dtype\":\"float64\",\"shape\":[1]},\"numerator\":{\"__ndarray__\":\"hetRuGEiJUE=\",\"dtype\":\"float64\",\"shape\":[1]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"XI/C9Sh8mkA=\",\"dtype\":\"float64\",\"shape\":[1]},\"overall\":{\"__ndarray__\":\"MkOHVx44lEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"overall_spend_prop\":{\"__ndarray__\":\"rH3D2jesJ0A=\",\"dtype\":\"float64\",\"shape\":[1]},\"precision\":{\"__ndarray__\":\"8KfGSzeJ6T8=\",\"dtype\":\"float64\",\"shape\":[1]},\"recall\":{\"__ndarray__\":\"1XjpJjEI1D8=\",\"dtype\":\"float64\",\"shape\":[1]},\"size\":{\"__ndarray__\":\"AAAAAAAANEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"spend_prop\":{\"__ndarray__\":\"16NwPQp3QEA=\",\"dtype\":\"float64\",\"shape\":[1]}}},\"id\":\"7f069d4a-21d2-4a81-82a0-ffd2303bf613\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"e0695cc7-b741-475a-9137-dee0c48ceab0\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"c14a62f0-b20e-4afc-ab1e-1a03723650a3\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"abc0eebe-1cf6-44b1-93c4-dc2719fa1da2\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data_source\":{\"id\":\"9e4241f6-8f1a-4f0a-a9f4-91d9c3bcc068\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"493d0b81-4d7a-4a9a-9ee8-a26b87fb49f8\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"f0b8296a-af03-44ae-9712-8be77d1b8b5d\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"d3c6ad22-ae8c-4419-a358-3dbb6cc85cc5\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"ee6fe7c2-0326-4f05-bc4e-acea40e0c1ae\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"9663943f-1fc0-4e7a-8760-d0114303c8fe\",\"type\":\"Circle\"},{\"attributes\":{\"below\":[{\"id\":\"093c4640-d2a5-492a-aa68-6384431521fa\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"87f01091-db18-4111-87ab-53017e0974c9\",\"type\":\"LinearAxis\"}],\"plot_height\":500,\"plot_width\":800,\"renderers\":[{\"id\":\"093c4640-d2a5-492a-aa68-6384431521fa\",\"type\":\"LinearAxis\"},{\"id\":\"f0ea6062-65db-44b6-88a7-bd33bb36f1d4\",\"type\":\"Grid\"},{\"id\":\"87f01091-db18-4111-87ab-53017e0974c9\",\"type\":\"LinearAxis\"},{\"id\":\"a802dc05-df4e-4ca5-8479-b31ecc80b616\",\"type\":\"Grid\"},{\"id\":\"aca0a6ef-6ee2-413e-aaca-c71d004bfe5d\",\"type\":\"GlyphRenderer\"},{\"id\":\"d3c6ad22-ae8c-4419-a358-3dbb6cc85cc5\",\"type\":\"GlyphRenderer\"},{\"id\":\"4c2f0757-24af-4f33-bd1a-df30270bd424\",\"type\":\"GlyphRenderer\"},{\"id\":\"53ede6fa-0133-40b8-a899-80da83a2585e\",\"type\":\"Span\"},{\"id\":\"dcaffbbc-13a5-4b95-81ed-2ba611358bcd\",\"type\":\"Span\"}],\"title\":{\"id\":\"7aac7859-fed5-4f6a-9567-d8e585b4fe73\",\"type\":\"Title\"},\"tool_events\":{\"id\":\"7a2f71e2-47a3-4b1e-be5d-78469db2a739\",\"type\":\"ToolEvents\"},\"toolbar\":{\"id\":\"30027f5d-c99c-4ba0-94c0-f79edd085677\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"49bc5a60-2566-4303-bb49-9d70bf6f8cbc\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"ae1fd5b0-d8e2-4624-894c-78e19ba46ef1\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"f6b9efbf-1c70-4d90-bd92-20797ad1ee3b\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"c14a62f0-b20e-4afc-ab1e-1a03723650a3\",\"type\":\"LinearScale\"}},\"id\":\"704b19e5-0d5f-474a-8db7-9da38fbed484\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null,\"plot\":{\"id\":\"704b19e5-0d5f-474a-8db7-9da38fbed484\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"tooltips\":[[\"lvl 0:\",\"@level_0\"],[\"lvl 1:\",\"@level_1\"],[\"lvl 2:\",\"@level_2\"],[\"lvl 3:\",\"@level_3\"],[\"ga_fb_cpt\",\"@metric\"],[\"Precision\",\"@precision\"],[\"Recall\",\"@recall\"],[\"mcc\",\"@imp_factor\"],[\"Spend Prop\",\"@spend_prop\"]]},\"id\":\"4c336d9d-8ec3-487f-9256-b4a77093aaf9\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_width\":{\"value\":3},\"location\":1294.0296307692302,\"plot\":{\"id\":\"704b19e5-0d5f-474a-8db7-9da38fbed484\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"dcaffbbc-13a5-4b95-81ed-2ba611358bcd\",\"type\":\"Span\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"493d0b81-4d7a-4a9a-9ee8-a26b87fb49f8\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1d5e3136-9423-4683-9189-06199efb8fd2\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis_label\":\"ga_fb_cpt\",\"formatter\":{\"id\":\"1d5e3136-9423-4683-9189-06199efb8fd2\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"704b19e5-0d5f-474a-8db7-9da38fbed484\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e0695cc7-b741-475a-9137-dee0c48ceab0\",\"type\":\"BasicTicker\"}},\"id\":\"87f01091-db18-4111-87ab-53017e0974c9\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data_source\":{\"id\":\"7f069d4a-21d2-4a81-82a0-ffd2303bf613\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ae409f60-46bf-40e4-bcbd-0bd01c3f745f\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"c5547091-a829-427a-a52a-3903a56fb208\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"aca0a6ef-6ee2-413e-aaca-c71d004bfe5d\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data_source\":{\"id\":\"d47fcea4-c82f-4f1d-9135-18b0b8d2cee4\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ee6fe7c2-0326-4f05-bc4e-acea40e0c1ae\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"9663943f-1fc0-4e7a-8760-d0114303c8fe\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"4c2f0757-24af-4f33-bd1a-df30270bd424\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"plot\":null,\"text\":\"Performance by paths.\"},\"id\":\"7aac7859-fed5-4f6a-9567-d8e585b4fe73\",\"type\":\"Title\"}],\"root_ids\":[\"704b19e5-0d5f-474a-8db7-9da38fbed484\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.6\"}};\n",
" var render_items = [{\"docid\":\"5e9c3e60-1e4f-4027-8fe5-13c7487bbb8c\",\"elementid\":\"58649315-0681-46a5-a6f9-86c1d9e2f73a\",\"modelid\":\"704b19e5-0d5f-474a-8db7-9da38fbed484\",\"notebook_comms_target\":\"9f9a05fb-7280-460d-a15d-4c49c507cad0\"}];\n",
" \n",
" Bokeh.embed.embed_items(docs_json, render_items);\n",
" };\n",
" if (document.readyState != \"loading\") fn();\n",
" else document.addEventListener(\"DOMContentLoaded\", fn);\n",
" })();\n",
" },\n",
" function(Bokeh) {\n",
" }\n",
" ];\n",
" \n",
" function run_inline_js() {\n",
" \n",
" if ((window.Bokeh !== undefined) || (force === true)) {\n",
" for (var i = 0; i < inline_js.length; i++) {\n",
" inline_js[i](window.Bokeh);\n",
" }if (force === true) {\n",
" display_loaded();\n",
" }} else if (Date.now() < window._bokeh_timeout) {\n",
" setTimeout(run_inline_js, 100);\n",
" } else if (!window._bokeh_failed_load) {\n",
" console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
" window._bokeh_failed_load = true;\n",
" } else if (force !== true) {\n",
" var cell = $(document.getElementById(\"58649315-0681-46a5-a6f9-86c1d9e2f73a\")).parents('.cell').data().cell;\n",
" cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
" }\n",
" \n",
" }\n",
" \n",
" if (window._bokeh_is_loading === 0) {\n",
" console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
" run_inline_js();\n",
" } else {\n",
" load_libs(js_urls, function() {\n",
" console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
" run_inline_js();\n",
" });\n",
" }\n",
" }(this));\n",
"</script>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Under Valued\n",
"Strategic Wins\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" <div class=\"bk-root\">\n",
" <div class=\"bk-plotdiv\" id=\"6d2ce430-6870-4592-aaab-65c6fb3d1902\"></div>\n",
" </div>\n",
"<script type=\"text/javascript\">\n",
" \n",
" (function(global) {\n",
" function now() {\n",
" return new Date();\n",
" }\n",
" \n",
" var force = false;\n",
" \n",
" if (typeof (window._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n",
" window._bokeh_onload_callbacks = [];\n",
" window._bokeh_is_loading = undefined;\n",
" }\n",
" \n",
" \n",
" \n",
" if (typeof (window._bokeh_timeout) === \"undefined\" || force === true) {\n",
" window._bokeh_timeout = Date.now() + 0;\n",
" window._bokeh_failed_load = false;\n",
" }\n",
" \n",
" var NB_LOAD_WARNING = {'data': {'text/html':\n",
" \"<div style='background-color: #fdd'>\\n\"+\n",
" \"<p>\\n\"+\n",
" \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
" \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
" \"</p>\\n\"+\n",
" \"<ul>\\n\"+\n",
" \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
" \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
" \"</ul>\\n\"+\n",
" \"<code>\\n\"+\n",
" \"from bokeh.resources import INLINE\\n\"+\n",
" \"output_notebook(resources=INLINE)\\n\"+\n",
" \"</code>\\n\"+\n",
" \"</div>\"}};\n",
" \n",
" function display_loaded() {\n",
" if (window.Bokeh !== undefined) {\n",
" var el = document.getElementById(\"6d2ce430-6870-4592-aaab-65c6fb3d1902\");\n",
" el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n",
" } else if (Date.now() < window._bokeh_timeout) {\n",
" setTimeout(display_loaded, 100)\n",
" }\n",
" }if ((window.Jupyter !== undefined) && Jupyter.notebook.kernel) {\n",
" comm_manager = Jupyter.notebook.kernel.comm_manager\n",
" comm_manager.register_target(\"2d42c6a9-588b-47c1-8429-fe1963a979ec\", function () {});\n",
" }\n",
" \n",
" function run_callbacks() {\n",
" try {\n",
" window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
" }\n",
" finally {\n",
" delete window._bokeh_onload_callbacks\n",
" }\n",
" console.info(\"Bokeh: all callbacks have finished\");\n",
" }\n",
" \n",
" function load_libs(js_urls, callback) {\n",
" window._bokeh_onload_callbacks.push(callback);\n",
" if (window._bokeh_is_loading > 0) {\n",
" console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
" return null;\n",
" }\n",
" if (js_urls == null || js_urls.length === 0) {\n",
" run_callbacks();\n",
" return null;\n",
" }\n",
" console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
" window._bokeh_is_loading = js_urls.length;\n",
" for (var i = 0; i < js_urls.length; i++) {\n",
" var url = js_urls[i];\n",
" var s = document.createElement('script');\n",
" s.src = url;\n",
" s.async = false;\n",
" s.onreadystatechange = s.onload = function() {\n",
" window._bokeh_is_loading--;\n",
" if (window._bokeh_is_loading === 0) {\n",
" console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
" run_callbacks()\n",
" }\n",
" };\n",
" s.onerror = function() {\n",
" console.warn(\"failed to load library \" + url);\n",
" };\n",
" console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" }\n",
" };var element = document.getElementById(\"6d2ce430-6870-4592-aaab-65c6fb3d1902\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid '6d2ce430-6870-4592-aaab-65c6fb3d1902' but no matching script tag was found. \")\n",
" return false;\n",
" }\n",
" \n",
" var js_urls = [];\n",
" \n",
" var inline_js = [\n",
" function(Bokeh) {\n",
" (function() {\n",
" var fn = function() {\n",
" var docs_json = {\"ca47c6ff-62b6-4995-a634-ce9382d13127\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"2f575513-e3a2-443f-9f68-00022876659c\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"f0840f0a-0089-4557-b787-2240d42f45ce\",\"type\":\"StringEditor\"},\"field\":\"level_1\",\"formatter\":{\"id\":\"60c87bc4-cc8e-407a-af15-584fda8c1ec0\",\"type\":\"StringFormatter\"},\"title\":\"level 1\"},\"id\":\"538ee1e6-06f7-4d96-bfa6-d6283dbf9523\",\"type\":\"TableColumn\"},{\"attributes\":{\"columns\":[{\"id\":\"9aa42e6f-65d7-4f73-9822-88b5e46b7d70\",\"type\":\"TableColumn\"},{\"id\":\"538ee1e6-06f7-4d96-bfa6-d6283dbf9523\",\"type\":\"TableColumn\"},{\"id\":\"5cbcd3fd-aa5f-4872-b3f6-f50665858e74\",\"type\":\"TableColumn\"},{\"id\":\"bb582716-caaf-41aa-8fed-43edf255ca4a\",\"type\":\"TableColumn\"},{\"id\":\"644f2799-6fce-42d4-8bba-6d5851783504\",\"type\":\"TableColumn\"},{\"id\":\"dd44e8fe-c97d-48b5-89b6-3f0310c38bd2\",\"type\":\"TableColumn\"},{\"id\":\"050a4c25-9021-4a7b-b468-1376a34f4de8\",\"type\":\"TableColumn\"},{\"id\":\"01e12d97-69b9-4e69-a7bc-8890b9af2e78\",\"type\":\"TableColumn\"},{\"id\":\"ad765087-3aae-4a3e-b1be-6cbc56c005d1\",\"type\":\"TableColumn\"}],\"source\":{\"id\":\"5bf7241b-17d3-41db-b327-1e35a43ccfab\",\"type\":\"ColumnDataSource\"},\"width\":1000},\"id\":\"dec9973c-738b-4d9a-bfb8-127ab402e90c\",\"type\":\"DataTable\"},{\"attributes\":{},\"id\":\"b9901db3-33f9-49e6-9181-5e1847aeee24\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"aa4833c5-35f4-49bd-86c5-73f45583f2e1\",\"type\":\"StringEditor\"},\"field\":\"level_0\",\"formatter\":{\"id\":\"8f8fb9fd-7370-4ce1-b702-9efacc2b697e\",\"type\":\"StringFormatter\"},\"title\":\"level 0\"},\"id\":\"9aa42e6f-65d7-4f73-9822-88b5e46b7d70\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"a6264aed-b97a-4ee7-8b74-9ad0cc2f42f4\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"d4d8fd16-03fb-40d2-901b-b1c7d2025dfa\",\"type\":\"StringEditor\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"level_3\",\"level_2\",\"numerator\",\"spend_prop\",\"index\",\"level_0\",\"level_1\",\"levels\",\"other_ga_fb_cpt\",\"denominator\",\"imp_factor\",\"precision\",\"metric\",\"recall\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAADIiEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"imp_factor\":{\"__ndarray__\":\"Rrbz/dR47T8=\",\"dtype\":\"float64\",\"shape\":[1]},\"index\":[0],\"level_0\":[\"Audience Types : DPA\"],\"level_1\":[\"- : -\"],\"level_2\":[\"- : -\"],\"level_3\":[\"- : -\"],\"levels\":[[{\"Audience Types\":{\"name\":\"DPA\",\"value\":\"DPA\"}}]],\"metric\":{\"__ndarray__\":\"ZmZmZmZKi0A=\",\"dtype\":\"float64\",\"shape\":[1]},\"numerator\":{\"__ndarray__\":\"hetRuGEiJUE=\",\"dtype\":\"float64\",\"shape\":[1]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"XI/C9Sh8mkA=\",\"dtype\":\"float64\",\"shape\":[1]},\"precision\":{\"__ndarray__\":\"8KfGSzeJ6T8=\",\"dtype\":\"float64\",\"shape\":[1]},\"recall\":{\"__ndarray__\":\"1XjpJjEI1D8=\",\"dtype\":\"float64\",\"shape\":[1]},\"spend_prop\":{\"__ndarray__\":\"16NwPQp3QEA=\",\"dtype\":\"float64\",\"shape\":[1]}}},\"id\":\"5bf7241b-17d3-41db-b327-1e35a43ccfab\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"editor\":{\"id\":\"cc74e640-13e4-4c8c-9ce4-096db91a1e12\",\"type\":\"StringEditor\"},\"field\":\"precision\",\"formatter\":{\"id\":\"26f78d65-110b-40d8-a114-9a4e66ae3994\",\"type\":\"StringFormatter\"},\"title\":\"Precision\"},\"id\":\"050a4c25-9021-4a7b-b468-1376a34f4de8\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"aa4833c5-35f4-49bd-86c5-73f45583f2e1\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"8f8fb9fd-7370-4ce1-b702-9efacc2b697e\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"cc74e640-13e4-4c8c-9ce4-096db91a1e12\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"7d9d3519-c889-4cd0-a1fe-70dfa28b549a\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"26f78d65-110b-40d8-a114-9a4e66ae3994\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"15a78411-f544-496c-a425-20ab89f23822\",\"type\":\"StringEditor\"},\"field\":\"level_3\",\"formatter\":{\"id\":\"9328bb2c-3523-4f88-a837-95853c4d11de\",\"type\":\"StringFormatter\"},\"title\":\"level 3\"},\"id\":\"bb582716-caaf-41aa-8fed-43edf255ca4a\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"afa7619a-bd81-49d7-9690-4d67a4ed375e\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"f3ede087-2f44-48b2-b5b7-a942af7ec850\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"3109d983-a88f-4afc-9c4f-9b62af175683\",\"type\":\"StringEditor\"},\"field\":\"recall\",\"formatter\":{\"id\":\"7d9d3519-c889-4cd0-a1fe-70dfa28b549a\",\"type\":\"StringFormatter\"},\"title\":\"Recall\"},\"id\":\"01e12d97-69b9-4e69-a7bc-8890b9af2e78\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"dafb018a-5cdb-4274-bbd0-e2ffd66a0e26\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"60c87bc4-cc8e-407a-af15-584fda8c1ec0\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"d4d8fd16-03fb-40d2-901b-b1c7d2025dfa\",\"type\":\"StringEditor\"},\"field\":\"metric\",\"formatter\":{\"id\":\"2f575513-e3a2-443f-9f68-00022876659c\",\"type\":\"StringFormatter\"},\"title\":\"ga_fb_cpt\"},\"id\":\"644f2799-6fce-42d4-8bba-6d5851783504\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"15a78411-f544-496c-a425-20ab89f23822\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"a6264aed-b97a-4ee7-8b74-9ad0cc2f42f4\",\"type\":\"StringEditor\"},\"field\":\"imp_factor\",\"formatter\":{\"id\":\"afa7619a-bd81-49d7-9690-4d67a4ed375e\",\"type\":\"StringFormatter\"},\"title\":\"MCC\"},\"id\":\"ad765087-3aae-4a3e-b1be-6cbc56c005d1\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"3109d983-a88f-4afc-9c4f-9b62af175683\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"f0840f0a-0089-4557-b787-2240d42f45ce\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"dafb018a-5cdb-4274-bbd0-e2ffd66a0e26\",\"type\":\"StringEditor\"},\"field\":\"level_2\",\"formatter\":{\"id\":\"b9901db3-33f9-49e6-9181-5e1847aeee24\",\"type\":\"StringFormatter\"},\"title\":\"level 2\"},\"id\":\"5cbcd3fd-aa5f-4872-b3f6-f50665858e74\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"841803bf-90ff-437a-95af-d3bdaee5882c\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"841803bf-90ff-437a-95af-d3bdaee5882c\",\"type\":\"StringEditor\"},\"field\":\"spend_prop\",\"formatter\":{\"id\":\"f3ede087-2f44-48b2-b5b7-a942af7ec850\",\"type\":\"StringFormatter\"},\"title\":\"Spend %\"},\"id\":\"dd44e8fe-c97d-48b5-89b6-3f0310c38bd2\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"9328bb2c-3523-4f88-a837-95853c4d11de\",\"type\":\"StringFormatter\"}],\"root_ids\":[\"dec9973c-738b-4d9a-bfb8-127ab402e90c\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.6\"}};\n",
" var render_items = [{\"docid\":\"ca47c6ff-62b6-4995-a634-ce9382d13127\",\"elementid\":\"6d2ce430-6870-4592-aaab-65c6fb3d1902\",\"modelid\":\"dec9973c-738b-4d9a-bfb8-127ab402e90c\",\"notebook_comms_target\":\"2d42c6a9-588b-47c1-8429-fe1963a979ec\"}];\n",
" \n",
" Bokeh.embed.embed_items(docs_json, render_items);\n",
" };\n",
" if (document.readyState != \"loading\") fn();\n",
" else document.addEventListener(\"DOMContentLoaded\", fn);\n",
" })();\n",
" },\n",
" function(Bokeh) {\n",
" }\n",
" ];\n",
" \n",
" function run_inline_js() {\n",
" \n",
" if ((window.Bokeh !== undefined) || (force === true)) {\n",
" for (var i = 0; i < inline_js.length; i++) {\n",
" inline_js[i](window.Bokeh);\n",
" }if (force === true) {\n",
" display_loaded();\n",
" }} else if (Date.now() < window._bokeh_timeout) {\n",
" setTimeout(run_inline_js, 100);\n",
" } else if (!window._bokeh_failed_load) {\n",
" console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
" window._bokeh_failed_load = true;\n",
" } else if (force !== true) {\n",
" var cell = $(document.getElementById(\"6d2ce430-6870-4592-aaab-65c6fb3d1902\")).parents('.cell').data().cell;\n",
" cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
" }\n",
" \n",
" }\n",
" \n",
" if (window._bokeh_is_loading === 0) {\n",
" console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
" run_inline_js();\n",
" } else {\n",
" load_libs(js_urls, function() {\n",
" console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
" run_inline_js();\n",
" });\n",
" }\n",
" }(this));\n",
"</script>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Quick Wins\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" <div class=\"bk-root\">\n",
" <div class=\"bk-plotdiv\" id=\"641250cd-1fbb-42e5-9cb0-239880d54f41\"></div>\n",
" </div>\n",
"<script type=\"text/javascript\">\n",
" \n",
" (function(global) {\n",
" function now() {\n",
" return new Date();\n",
" }\n",
" \n",
" var force = false;\n",
" \n",
" if (typeof (window._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n",
" window._bokeh_onload_callbacks = [];\n",
" window._bokeh_is_loading = undefined;\n",
" }\n",
" \n",
" \n",
" \n",
" if (typeof (window._bokeh_timeout) === \"undefined\" || force === true) {\n",
" window._bokeh_timeout = Date.now() + 0;\n",
" window._bokeh_failed_load = false;\n",
" }\n",
" \n",
" var NB_LOAD_WARNING = {'data': {'text/html':\n",
" \"<div style='background-color: #fdd'>\\n\"+\n",
" \"<p>\\n\"+\n",
" \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
" \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
" \"</p>\\n\"+\n",
" \"<ul>\\n\"+\n",
" \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
" \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
" \"</ul>\\n\"+\n",
" \"<code>\\n\"+\n",
" \"from bokeh.resources import INLINE\\n\"+\n",
" \"output_notebook(resources=INLINE)\\n\"+\n",
" \"</code>\\n\"+\n",
" \"</div>\"}};\n",
" \n",
" function display_loaded() {\n",
" if (window.Bokeh !== undefined) {\n",
" var el = document.getElementById(\"641250cd-1fbb-42e5-9cb0-239880d54f41\");\n",
" el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n",
" } else if (Date.now() < window._bokeh_timeout) {\n",
" setTimeout(display_loaded, 100)\n",
" }\n",
" }if ((window.Jupyter !== undefined) && Jupyter.notebook.kernel) {\n",
" comm_manager = Jupyter.notebook.kernel.comm_manager\n",
" comm_manager.register_target(\"f8a3aa43-94ef-40ea-af13-e9f1a9b3045e\", function () {});\n",
" }\n",
" \n",
" function run_callbacks() {\n",
" try {\n",
" window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
" }\n",
" finally {\n",
" delete window._bokeh_onload_callbacks\n",
" }\n",
" console.info(\"Bokeh: all callbacks have finished\");\n",
" }\n",
" \n",
" function load_libs(js_urls, callback) {\n",
" window._bokeh_onload_callbacks.push(callback);\n",
" if (window._bokeh_is_loading > 0) {\n",
" console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
" return null;\n",
" }\n",
" if (js_urls == null || js_urls.length === 0) {\n",
" run_callbacks();\n",
" return null;\n",
" }\n",
" console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
" window._bokeh_is_loading = js_urls.length;\n",
" for (var i = 0; i < js_urls.length; i++) {\n",
" var url = js_urls[i];\n",
" var s = document.createElement('script');\n",
" s.src = url;\n",
" s.async = false;\n",
" s.onreadystatechange = s.onload = function() {\n",
" window._bokeh_is_loading--;\n",
" if (window._bokeh_is_loading === 0) {\n",
" console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
" run_callbacks()\n",
" }\n",
" };\n",
" s.onerror = function() {\n",
" console.warn(\"failed to load library \" + url);\n",
" };\n",
" console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" }\n",
" };var element = document.getElementById(\"641250cd-1fbb-42e5-9cb0-239880d54f41\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid '641250cd-1fbb-42e5-9cb0-239880d54f41' but no matching script tag was found. \")\n",
" return false;\n",
" }\n",
" \n",
" var js_urls = [];\n",
" \n",
" var inline_js = [\n",
" function(Bokeh) {\n",
" (function() {\n",
" var fn = function() {\n",
" var docs_json = {\"4966dfa7-b5ee-42a4-b1c7-439620e77747\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"2f575513-e3a2-443f-9f68-00022876659c\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"f0840f0a-0089-4557-b787-2240d42f45ce\",\"type\":\"StringEditor\"},\"field\":\"level_1\",\"formatter\":{\"id\":\"60c87bc4-cc8e-407a-af15-584fda8c1ec0\",\"type\":\"StringFormatter\"},\"title\":\"level 1\"},\"id\":\"538ee1e6-06f7-4d96-bfa6-d6283dbf9523\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"b9901db3-33f9-49e6-9181-5e1847aeee24\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"aa4833c5-35f4-49bd-86c5-73f45583f2e1\",\"type\":\"StringEditor\"},\"field\":\"level_0\",\"formatter\":{\"id\":\"8f8fb9fd-7370-4ce1-b702-9efacc2b697e\",\"type\":\"StringFormatter\"},\"title\":\"level 0\"},\"id\":\"9aa42e6f-65d7-4f73-9822-88b5e46b7d70\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"a6264aed-b97a-4ee7-8b74-9ad0cc2f42f4\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"d4d8fd16-03fb-40d2-901b-b1c7d2025dfa\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"cc74e640-13e4-4c8c-9ce4-096db91a1e12\",\"type\":\"StringEditor\"},\"field\":\"precision\",\"formatter\":{\"id\":\"26f78d65-110b-40d8-a114-9a4e66ae3994\",\"type\":\"StringFormatter\"},\"title\":\"Precision\"},\"id\":\"050a4c25-9021-4a7b-b468-1376a34f4de8\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"aa4833c5-35f4-49bd-86c5-73f45583f2e1\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"8f8fb9fd-7370-4ce1-b702-9efacc2b697e\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"cc74e640-13e4-4c8c-9ce4-096db91a1e12\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"7d9d3519-c889-4cd0-a1fe-70dfa28b549a\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"f0840f0a-0089-4557-b787-2240d42f45ce\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"26f78d65-110b-40d8-a114-9a4e66ae3994\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"15a78411-f544-496c-a425-20ab89f23822\",\"type\":\"StringEditor\"},\"field\":\"level_3\",\"formatter\":{\"id\":\"9328bb2c-3523-4f88-a837-95853c4d11de\",\"type\":\"StringFormatter\"},\"title\":\"level 3\"},\"id\":\"bb582716-caaf-41aa-8fed-43edf255ca4a\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"afa7619a-bd81-49d7-9690-4d67a4ed375e\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"f3ede087-2f44-48b2-b5b7-a942af7ec850\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"3109d983-a88f-4afc-9c4f-9b62af175683\",\"type\":\"StringEditor\"},\"field\":\"recall\",\"formatter\":{\"id\":\"7d9d3519-c889-4cd0-a1fe-70dfa28b549a\",\"type\":\"StringFormatter\"},\"title\":\"Recall\"},\"id\":\"01e12d97-69b9-4e69-a7bc-8890b9af2e78\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"dafb018a-5cdb-4274-bbd0-e2ffd66a0e26\",\"type\":\"StringEditor\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"level_3\",\"level_2\",\"numerator\",\"spend_prop\",\"index\",\"level_0\",\"level_1\",\"levels\",\"other_ga_fb_cpt\",\"denominator\",\"imp_factor\",\"precision\",\"metric\",\"recall\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAABAU0AAAAAAAAAwQAAAAAAAgE9AAAAAAABgYkAAAAAAAMBQQAAAAAAAAFNAAAAAAAAAZEA=\",\"dtype\":\"float64\",\"shape\":[7]},\"imp_factor\":{\"__ndarray__\":\"EoPAyqFF8j9OYhBYObTwPwRWDi2yne8/wcqhRbbz7T+oxks3iUHoP4/C9Shcj+Y/zczMzMzM5D8=\",\"dtype\":\"float64\",\"shape\":[7]},\"index\":[0,1,2,3,4,5,6],\"level_0\":[\"Audience Types : Lookalike\",\"Audience Types : Interests\",\"Audience Types : Website\",\"Audience Types : Website\",\"Audience Types : Interests\",\"Audience Types : Interests\",\"Audience Types : Interests\"],\"level_1\":[\"Lookalike Types : 1-2%\",\"Interests : Education or Higher education or Hotels or Travel or University\",\"Custom Audiences : Retargeting 7 days\",\"- : -\",\"Interests : Nightclubs or Nightlife or Online shopping or Others or Parties or Shopping\",\"Interests : Action movies or Animated movies or Being Indian or Bollywood movies or BuzzFeed or Others\",\"- : -\"],\"level_2\":[\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\"],\"level_3\":[\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\"],\"levels\":[[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}},{\"Lookalike Types\":{\"name\":\"1-2%\",\"value\":\"1-2%\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}},{\"Interests\":{\"name\":\"Education or Higher education or Hotels or Travel or University\",\"value\":\"Education or Higher education or Hotels or Travel or University\"}}],[{\"Audience Types\":{\"name\":\"Website\",\"value\":\"Website\"}},{\"Custom Audiences\":{\"name\":\"Retargeting 7 days\",\"value\":\"Retargeting 7 days\"}}],[{\"Audience Types\":{\"name\":\"Website\",\"value\":\"Website\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}},{\"Interests\":{\"name\":\"Nightclubs or Nightlife or Online shopping or Others or Parties or Shopping\",\"value\":\"Nightclubs or Nightlife or Online shopping or Others or Parties or Shopping\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}},{\"Interests\":{\"name\":\"Action movies or Animated movies or Being Indian or Bollywood movies or BuzzFeed or Others\",\"value\":\"Action movies or Animated movies or Being Indian or Bollywood movies or BuzzFeed or Others\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}}]],\"metric\":{\"__ndarray__\":\"hetRuJ4RpkC4HoXrUfCfQIXrUbgeKJpApHA9CtdUlkC4HoXrUayYQHE9CtejAJVAAAAAAACjl0A=\",\"dtype\":\"float64\",\"shape\":[7]},\"numerator\":{\"__ndarray__\":\"UrgehTWNCkGkcD0KV/DfQK5H4XqAv/lAXI/C9W6lCUFSuB6FZ9T5QBSuR+HC8PhAXI/C9byLDUE=\",\"dtype\":\"float64\",\"shape\":[7]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"H4XrUbj3mUCkcD0K17aWQI/C9ShcdpNAuB6F61EClECkcD0K1+OWQIXrUbgeBZpAw/UoXI/Yk0A=\",\"dtype\":\"float64\",\"shape\":[7]},\"precision\":{\"__ndarray__\":\"LbKd76fG7z+LbOf7qfHuPz0K16NwPeo/z/dT46Wb6D/LoUW28/3cP2Dl0CLb+dY/tvP91Hjp3j8=\",\"dtype\":\"float64\",\"shape\":[7]},\"recall\":{\"__ndarray__\":\"CKwcWmQ7vz8730+Nl26SP0oMAiuHFqk/WmQ730+Ntz/ZzvdT46WbPxsv3SQGgZU/TDeJQWDlsD8=\",\"dtype\":\"float64\",\"shape\":[7]},\"spend_prop\":{\"__ndarray__\":\"rkfhehSuJED2KFyPwvX4PxSuR+F6FBRAexSuR+H6I0AfhetRuB4UQHE9CtejcBNAhetRuB4FJ0A=\",\"dtype\":\"float64\",\"shape\":[7]}}},\"id\":\"f865b8fe-4d00-461c-af94-88626b6e3c7b\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"editor\":{\"id\":\"d4d8fd16-03fb-40d2-901b-b1c7d2025dfa\",\"type\":\"StringEditor\"},\"field\":\"metric\",\"formatter\":{\"id\":\"2f575513-e3a2-443f-9f68-00022876659c\",\"type\":\"StringFormatter\"},\"title\":\"ga_fb_cpt\"},\"id\":\"644f2799-6fce-42d4-8bba-6d5851783504\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"15a78411-f544-496c-a425-20ab89f23822\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"a6264aed-b97a-4ee7-8b74-9ad0cc2f42f4\",\"type\":\"StringEditor\"},\"field\":\"imp_factor\",\"formatter\":{\"id\":\"afa7619a-bd81-49d7-9690-4d67a4ed375e\",\"type\":\"StringFormatter\"},\"title\":\"MCC\"},\"id\":\"ad765087-3aae-4a3e-b1be-6cbc56c005d1\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"3109d983-a88f-4afc-9c4f-9b62af175683\",\"type\":\"StringEditor\"},{\"attributes\":{\"columns\":[{\"id\":\"9aa42e6f-65d7-4f73-9822-88b5e46b7d70\",\"type\":\"TableColumn\"},{\"id\":\"538ee1e6-06f7-4d96-bfa6-d6283dbf9523\",\"type\":\"TableColumn\"},{\"id\":\"5cbcd3fd-aa5f-4872-b3f6-f50665858e74\",\"type\":\"TableColumn\"},{\"id\":\"bb582716-caaf-41aa-8fed-43edf255ca4a\",\"type\":\"TableColumn\"},{\"id\":\"644f2799-6fce-42d4-8bba-6d5851783504\",\"type\":\"TableColumn\"},{\"id\":\"dd44e8fe-c97d-48b5-89b6-3f0310c38bd2\",\"type\":\"TableColumn\"},{\"id\":\"050a4c25-9021-4a7b-b468-1376a34f4de8\",\"type\":\"TableColumn\"},{\"id\":\"01e12d97-69b9-4e69-a7bc-8890b9af2e78\",\"type\":\"TableColumn\"},{\"id\":\"ad765087-3aae-4a3e-b1be-6cbc56c005d1\",\"type\":\"TableColumn\"}],\"source\":{\"id\":\"f865b8fe-4d00-461c-af94-88626b6e3c7b\",\"type\":\"ColumnDataSource\"},\"width\":1000},\"id\":\"83748c8b-11c6-41c5-9551-b42611e9bc82\",\"type\":\"DataTable\"},{\"attributes\":{},\"id\":\"60c87bc4-cc8e-407a-af15-584fda8c1ec0\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"dafb018a-5cdb-4274-bbd0-e2ffd66a0e26\",\"type\":\"StringEditor\"},\"field\":\"level_2\",\"formatter\":{\"id\":\"b9901db3-33f9-49e6-9181-5e1847aeee24\",\"type\":\"StringFormatter\"},\"title\":\"level 2\"},\"id\":\"5cbcd3fd-aa5f-4872-b3f6-f50665858e74\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"841803bf-90ff-437a-95af-d3bdaee5882c\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"841803bf-90ff-437a-95af-d3bdaee5882c\",\"type\":\"StringEditor\"},\"field\":\"spend_prop\",\"formatter\":{\"id\":\"f3ede087-2f44-48b2-b5b7-a942af7ec850\",\"type\":\"StringFormatter\"},\"title\":\"Spend %\"},\"id\":\"dd44e8fe-c97d-48b5-89b6-3f0310c38bd2\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"9328bb2c-3523-4f88-a837-95853c4d11de\",\"type\":\"StringFormatter\"}],\"root_ids\":[\"83748c8b-11c6-41c5-9551-b42611e9bc82\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.6\"}};\n",
" var render_items = [{\"docid\":\"4966dfa7-b5ee-42a4-b1c7-439620e77747\",\"elementid\":\"641250cd-1fbb-42e5-9cb0-239880d54f41\",\"modelid\":\"83748c8b-11c6-41c5-9551-b42611e9bc82\",\"notebook_comms_target\":\"f8a3aa43-94ef-40ea-af13-e9f1a9b3045e\"}];\n",
" \n",
" Bokeh.embed.embed_items(docs_json, render_items);\n",
" };\n",
" if (document.readyState != \"loading\") fn();\n",
" else document.addEventListener(\"DOMContentLoaded\", fn);\n",
" })();\n",
" },\n",
" function(Bokeh) {\n",
" }\n",
" ];\n",
" \n",
" function run_inline_js() {\n",
" \n",
" if ((window.Bokeh !== undefined) || (force === true)) {\n",
" for (var i = 0; i < inline_js.length; i++) {\n",
" inline_js[i](window.Bokeh);\n",
" }if (force === true) {\n",
" display_loaded();\n",
" }} else if (Date.now() < window._bokeh_timeout) {\n",
" setTimeout(run_inline_js, 100);\n",
" } else if (!window._bokeh_failed_load) {\n",
" console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
" window._bokeh_failed_load = true;\n",
" } else if (force !== true) {\n",
" var cell = $(document.getElementById(\"641250cd-1fbb-42e5-9cb0-239880d54f41\")).parents('.cell').data().cell;\n",
" cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
" }\n",
" \n",
" }\n",
" \n",
" if (window._bokeh_is_loading === 0) {\n",
" console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
" run_inline_js();\n",
" } else {\n",
" load_libs(js_urls, function() {\n",
" console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
" run_inline_js();\n",
" });\n",
" }\n",
" }(this));\n",
"</script>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Over Valued\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" <div class=\"bk-root\">\n",
" <div class=\"bk-plotdiv\" id=\"a533067a-9ffa-4b8f-a98a-cc8e3d019617\"></div>\n",
" </div>\n",
"<script type=\"text/javascript\">\n",
" \n",
" (function(global) {\n",
" function now() {\n",
" return new Date();\n",
" }\n",
" \n",
" var force = false;\n",
" \n",
" if (typeof (window._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n",
" window._bokeh_onload_callbacks = [];\n",
" window._bokeh_is_loading = undefined;\n",
" }\n",
" \n",
" \n",
" \n",
" if (typeof (window._bokeh_timeout) === \"undefined\" || force === true) {\n",
" window._bokeh_timeout = Date.now() + 0;\n",
" window._bokeh_failed_load = false;\n",
" }\n",
" \n",
" var NB_LOAD_WARNING = {'data': {'text/html':\n",
" \"<div style='background-color: #fdd'>\\n\"+\n",
" \"<p>\\n\"+\n",
" \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
" \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
" \"</p>\\n\"+\n",
" \"<ul>\\n\"+\n",
" \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
" \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
" \"</ul>\\n\"+\n",
" \"<code>\\n\"+\n",
" \"from bokeh.resources import INLINE\\n\"+\n",
" \"output_notebook(resources=INLINE)\\n\"+\n",
" \"</code>\\n\"+\n",
" \"</div>\"}};\n",
" \n",
" function display_loaded() {\n",
" if (window.Bokeh !== undefined) {\n",
" var el = document.getElementById(\"a533067a-9ffa-4b8f-a98a-cc8e3d019617\");\n",
" el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n",
" } else if (Date.now() < window._bokeh_timeout) {\n",
" setTimeout(display_loaded, 100)\n",
" }\n",
" }if ((window.Jupyter !== undefined) && Jupyter.notebook.kernel) {\n",
" comm_manager = Jupyter.notebook.kernel.comm_manager\n",
" comm_manager.register_target(\"345b9048-f5da-4bd9-9f54-9e730a3a317a\", function () {});\n",
" }\n",
" \n",
" function run_callbacks() {\n",
" try {\n",
" window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
" }\n",
" finally {\n",
" delete window._bokeh_onload_callbacks\n",
" }\n",
" console.info(\"Bokeh: all callbacks have finished\");\n",
" }\n",
" \n",
" function load_libs(js_urls, callback) {\n",
" window._bokeh_onload_callbacks.push(callback);\n",
" if (window._bokeh_is_loading > 0) {\n",
" console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
" return null;\n",
" }\n",
" if (js_urls == null || js_urls.length === 0) {\n",
" run_callbacks();\n",
" return null;\n",
" }\n",
" console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
" window._bokeh_is_loading = js_urls.length;\n",
" for (var i = 0; i < js_urls.length; i++) {\n",
" var url = js_urls[i];\n",
" var s = document.createElement('script');\n",
" s.src = url;\n",
" s.async = false;\n",
" s.onreadystatechange = s.onload = function() {\n",
" window._bokeh_is_loading--;\n",
" if (window._bokeh_is_loading === 0) {\n",
" console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
" run_callbacks()\n",
" }\n",
" };\n",
" s.onerror = function() {\n",
" console.warn(\"failed to load library \" + url);\n",
" };\n",
" console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" }\n",
" };var element = document.getElementById(\"a533067a-9ffa-4b8f-a98a-cc8e3d019617\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'a533067a-9ffa-4b8f-a98a-cc8e3d019617' but no matching script tag was found. \")\n",
" return false;\n",
" }\n",
" \n",
" var js_urls = [];\n",
" \n",
" var inline_js = [\n",
" function(Bokeh) {\n",
" (function() {\n",
" var fn = function() {\n",
" var docs_json = {\"9252c4f3-4f74-4647-9111-5dc7567b2ace\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"2f575513-e3a2-443f-9f68-00022876659c\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"f0840f0a-0089-4557-b787-2240d42f45ce\",\"type\":\"StringEditor\"},\"field\":\"level_1\",\"formatter\":{\"id\":\"60c87bc4-cc8e-407a-af15-584fda8c1ec0\",\"type\":\"StringFormatter\"},\"title\":\"level 1\"},\"id\":\"538ee1e6-06f7-4d96-bfa6-d6283dbf9523\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"b9901db3-33f9-49e6-9181-5e1847aeee24\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"aa4833c5-35f4-49bd-86c5-73f45583f2e1\",\"type\":\"StringEditor\"},\"field\":\"level_0\",\"formatter\":{\"id\":\"8f8fb9fd-7370-4ce1-b702-9efacc2b697e\",\"type\":\"StringFormatter\"},\"title\":\"level 0\"},\"id\":\"9aa42e6f-65d7-4f73-9822-88b5e46b7d70\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"a6264aed-b97a-4ee7-8b74-9ad0cc2f42f4\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"d4d8fd16-03fb-40d2-901b-b1c7d2025dfa\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"26f78d65-110b-40d8-a114-9a4e66ae3994\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"cc74e640-13e4-4c8c-9ce4-096db91a1e12\",\"type\":\"StringEditor\"},\"field\":\"precision\",\"formatter\":{\"id\":\"26f78d65-110b-40d8-a114-9a4e66ae3994\",\"type\":\"StringFormatter\"},\"title\":\"Precision\"},\"id\":\"050a4c25-9021-4a7b-b468-1376a34f4de8\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"aa4833c5-35f4-49bd-86c5-73f45583f2e1\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"8f8fb9fd-7370-4ce1-b702-9efacc2b697e\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"cc74e640-13e4-4c8c-9ce4-096db91a1e12\",\"type\":\"StringEditor\"},{\"attributes\":{\"columns\":[{\"id\":\"9aa42e6f-65d7-4f73-9822-88b5e46b7d70\",\"type\":\"TableColumn\"},{\"id\":\"538ee1e6-06f7-4d96-bfa6-d6283dbf9523\",\"type\":\"TableColumn\"},{\"id\":\"5cbcd3fd-aa5f-4872-b3f6-f50665858e74\",\"type\":\"TableColumn\"},{\"id\":\"bb582716-caaf-41aa-8fed-43edf255ca4a\",\"type\":\"TableColumn\"},{\"id\":\"644f2799-6fce-42d4-8bba-6d5851783504\",\"type\":\"TableColumn\"},{\"id\":\"dd44e8fe-c97d-48b5-89b6-3f0310c38bd2\",\"type\":\"TableColumn\"},{\"id\":\"050a4c25-9021-4a7b-b468-1376a34f4de8\",\"type\":\"TableColumn\"},{\"id\":\"01e12d97-69b9-4e69-a7bc-8890b9af2e78\",\"type\":\"TableColumn\"},{\"id\":\"ad765087-3aae-4a3e-b1be-6cbc56c005d1\",\"type\":\"TableColumn\"}],\"source\":{\"id\":\"99e204df-975c-4117-947a-c9e91a454690\",\"type\":\"ColumnDataSource\"},\"width\":1000},\"id\":\"6f4abf17-6c52-4bc1-b686-814336a7d8fb\",\"type\":\"DataTable\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"level_3\",\"level_2\",\"numerator\",\"spend_prop\",\"index\",\"level_0\",\"level_1\",\"levels\",\"other_ga_fb_cpt\",\"denominator\",\"imp_factor\",\"precision\",\"metric\",\"recall\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAAAAbkAAAAAAAGBkQAAAAAAAwGBA\",\"dtype\":\"float64\",\"shape\":[3]},\"imp_factor\":{\"__ndarray__\":\"vHSTGARW8D9OYhBYObTsP28Sg8DKoek/\",\"dtype\":\"float64\",\"shape\":[3]},\"index\":[0,1,2],\"level_0\":[\"Audience Types : Lookalike\",\"Audience Types : Lookalike\",\"Audience Types : Open Targeting\"],\"level_1\":[\"- : -\",\"Lookalike Types : 1%\",\"- : -\"],\"level_2\":[\"- : -\",\"- : -\",\"- : -\"],\"level_3\":[\"- : -\",\"- : -\",\"- : -\"],\"levels\":[[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}}],[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}},{\"Lookalike Types\":{\"name\":\"1%\",\"value\":\"1%\"}}],[{\"Audience Types\":{\"name\":\"Open Targeting\",\"value\":\"Open Targeting\"}}]],\"metric\":{\"__ndarray__\":\"rkfhehTMn0AfhetRuPeZQM3MzMzMgZ9A\",\"dtype\":\"float64\",\"shape\":[3]},\"numerator\":{\"__ndarray__\":\"mpmZmVfPHUFxPQrXvIgQQY/C9SjvfRBB\",\"dtype\":\"float64\",\"shape\":[3]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"7FG4HoU2kkCF61G4nhGmQGZmZmZmNJNA\",\"dtype\":\"float64\",\"shape\":[3]},\"precision\":{\"__ndarray__\":\"sp3vp8ZL6z+DwMqhRbbnP/hT46WbxOQ/\",\"dtype\":\"float64\",\"shape\":[3]},\"recall\":{\"__ndarray__\":\"aJHtfD81zj/Jdr6fGi+9P/LSTWIQWLk/\",\"dtype\":\"float64\",\"shape\":[3]},\"spend_prop\":{\"__ndarray__\":\"exSuR+E6N0DD9Shcj8IpQDMzMzMzsylA\",\"dtype\":\"float64\",\"shape\":[3]}}},\"id\":\"99e204df-975c-4117-947a-c9e91a454690\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"editor\":{\"id\":\"15a78411-f544-496c-a425-20ab89f23822\",\"type\":\"StringEditor\"},\"field\":\"level_3\",\"formatter\":{\"id\":\"9328bb2c-3523-4f88-a837-95853c4d11de\",\"type\":\"StringFormatter\"},\"title\":\"level 3\"},\"id\":\"bb582716-caaf-41aa-8fed-43edf255ca4a\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"afa7619a-bd81-49d7-9690-4d67a4ed375e\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"f3ede087-2f44-48b2-b5b7-a942af7ec850\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"7d9d3519-c889-4cd0-a1fe-70dfa28b549a\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"3109d983-a88f-4afc-9c4f-9b62af175683\",\"type\":\"StringEditor\"},\"field\":\"recall\",\"formatter\":{\"id\":\"7d9d3519-c889-4cd0-a1fe-70dfa28b549a\",\"type\":\"StringFormatter\"},\"title\":\"Recall\"},\"id\":\"01e12d97-69b9-4e69-a7bc-8890b9af2e78\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"dafb018a-5cdb-4274-bbd0-e2ffd66a0e26\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"60c87bc4-cc8e-407a-af15-584fda8c1ec0\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"d4d8fd16-03fb-40d2-901b-b1c7d2025dfa\",\"type\":\"StringEditor\"},\"field\":\"metric\",\"formatter\":{\"id\":\"2f575513-e3a2-443f-9f68-00022876659c\",\"type\":\"StringFormatter\"},\"title\":\"ga_fb_cpt\"},\"id\":\"644f2799-6fce-42d4-8bba-6d5851783504\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"15a78411-f544-496c-a425-20ab89f23822\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"a6264aed-b97a-4ee7-8b74-9ad0cc2f42f4\",\"type\":\"StringEditor\"},\"field\":\"imp_factor\",\"formatter\":{\"id\":\"afa7619a-bd81-49d7-9690-4d67a4ed375e\",\"type\":\"StringFormatter\"},\"title\":\"MCC\"},\"id\":\"ad765087-3aae-4a3e-b1be-6cbc56c005d1\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"3109d983-a88f-4afc-9c4f-9b62af175683\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"f0840f0a-0089-4557-b787-2240d42f45ce\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"dafb018a-5cdb-4274-bbd0-e2ffd66a0e26\",\"type\":\"StringEditor\"},\"field\":\"level_2\",\"formatter\":{\"id\":\"b9901db3-33f9-49e6-9181-5e1847aeee24\",\"type\":\"StringFormatter\"},\"title\":\"level 2\"},\"id\":\"5cbcd3fd-aa5f-4872-b3f6-f50665858e74\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"841803bf-90ff-437a-95af-d3bdaee5882c\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"841803bf-90ff-437a-95af-d3bdaee5882c\",\"type\":\"StringEditor\"},\"field\":\"spend_prop\",\"formatter\":{\"id\":\"f3ede087-2f44-48b2-b5b7-a942af7ec850\",\"type\":\"StringFormatter\"},\"title\":\"Spend %\"},\"id\":\"dd44e8fe-c97d-48b5-89b6-3f0310c38bd2\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"9328bb2c-3523-4f88-a837-95853c4d11de\",\"type\":\"StringFormatter\"}],\"root_ids\":[\"6f4abf17-6c52-4bc1-b686-814336a7d8fb\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.6\"}};\n",
" var render_items = [{\"docid\":\"9252c4f3-4f74-4647-9111-5dc7567b2ace\",\"elementid\":\"a533067a-9ffa-4b8f-a98a-cc8e3d019617\",\"modelid\":\"6f4abf17-6c52-4bc1-b686-814336a7d8fb\",\"notebook_comms_target\":\"345b9048-f5da-4bd9-9f54-9e730a3a317a\"}];\n",
" \n",
" Bokeh.embed.embed_items(docs_json, render_items);\n",
" };\n",
" if (document.readyState != \"loading\") fn();\n",
" else document.addEventListener(\"DOMContentLoaded\", fn);\n",
" })();\n",
" },\n",
" function(Bokeh) {\n",
" }\n",
" ];\n",
" \n",
" function run_inline_js() {\n",
" \n",
" if ((window.Bokeh !== undefined) || (force === true)) {\n",
" for (var i = 0; i < inline_js.length; i++) {\n",
" inline_js[i](window.Bokeh);\n",
" }if (force === true) {\n",
" display_loaded();\n",
" }} else if (Date.now() < window._bokeh_timeout) {\n",
" setTimeout(run_inline_js, 100);\n",
" } else if (!window._bokeh_failed_load) {\n",
" console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
" window._bokeh_failed_load = true;\n",
" } else if (force !== true) {\n",
" var cell = $(document.getElementById(\"a533067a-9ffa-4b8f-a98a-cc8e3d019617\")).parents('.cell').data().cell;\n",
" cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
" }\n",
" \n",
" }\n",
" \n",
" if (window._bokeh_is_loading === 0) {\n",
" console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
" run_inline_js();\n",
" } else {\n",
" load_libs(js_urls, function() {\n",
" console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
" run_inline_js();\n",
" });\n",
" }\n",
" }(this));\n",
"</script>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"all_df = df_1.append(df_2, ignore_index=True)\n",
"all_df = all_df.append(df_3, ignore_index=True)\n",
"all_df = all_df.append(df_4, ignore_index=True)\n",
"\n",
"def round_float(s):\n",
" if s.dtype == 'float64':\n",
" s = s.round(3)\n",
" return s\n",
"\n",
"\n",
"avg_spend_prop = float(data['spend_axis'])\n",
"\n",
"tooltips=[\n",
" ('lvl 0:', '@level_0'),\n",
" ('lvl 1:', '@level_1'),\n",
" ('lvl 2:', '@level_2'),\n",
" ('lvl 3:', '@level_3'),\n",
" (args['goal_metric'][\"value\"], '@metric'),\n",
" ('Precision', '@precision'),\n",
" ('Recall', '@recall'),\n",
" ('mcc', '@imp_factor'),\n",
" ('Spend Prop', '@spend_prop')\n",
"]\n",
"\n",
"hover = HoverTool(tooltips=tooltips)\n",
"hover1 = HoverTool(tooltips=tooltips)\n",
"\n",
"def build_bokeh_trace(df_obj, num):\n",
" df_obj = df_obj.copy()\n",
" if len(df_obj):\n",
" df_obj = df_obj.sort_values(by='imp_factor', ascending=False)\n",
" df_plotly = df_obj.iloc[0:num].copy()\n",
" df_plotly['idx'] = df_plotly.index\n",
" df_plotly['size'] = df_plotly['imp_factor']\n",
" # range r1 to r2\n",
" r1=8\n",
" r2=30\n",
" min_r = df_plotly['size'].min()\n",
" max_r = df_plotly['size'].max()\n",
" df_plotly['size'] = ((df_plotly['size'])/ max_r)*20\n",
" df_plotly['overall'] = data['goal_axis']\n",
" df_plotly['overall_spend_prop'] = avg_spend_prop\n",
" else:\n",
" return ColumnDataSource(df_obj)\n",
"\n",
" source = ColumnDataSource(df_plotly)\n",
" return source\n",
"\n",
"spend_source_1 = build_bokeh_trace(df_1, 10)\n",
"spend_source_2 = build_bokeh_trace(df_2, 10)\n",
"spend_source_3 = build_bokeh_trace(df_3, 10)\n",
"spend_source_4 = build_bokeh_trace(df_4, 10)\n",
"\n",
"table_source_1 = ColumnDataSource(df_1.apply(round_float))\n",
"table_source_2 = ColumnDataSource(df_2.apply(round_float))\n",
"table_source_3 = ColumnDataSource(df_3.apply(round_float))\n",
"table_source_4 = ColumnDataSource(df_4.apply(round_float))\n",
"\n",
"columns = [\n",
" TableColumn(field=\"level_0\", title=\"level 0\"),\n",
" TableColumn(field=\"level_1\", title=\"level 1\"),\n",
" TableColumn(field=\"level_2\", title=\"level 2\"),\n",
" TableColumn(field=\"level_3\", title=\"level 3\"),\n",
"# TableColumn(field=\"other_{0}\".format(args['goal_metric'][\"value\"]), title=\"Other {0}\".format(args['goal_metric']['value'])),\n",
" TableColumn(field=\"metric\", title=args['goal_metric'][\"value\"],),\n",
"# TableColumn(field=\"Projected_change\", title=\"Projected % CPT change\"),\n",
" TableColumn(field=\"spend_prop\", title=\"Spend %\"),\n",
"# TableColumn(field=\"imp_factor\", title=\"Impact factor\"),\n",
" TableColumn(field=\"precision\", title=\"Precision\"),\n",
" TableColumn(field=\"recall\", title=\"Recall\"),\n",
" TableColumn(field=\"imp_factor\", title=\"MCC\") \n",
"]\n",
"\n",
"# Spend sorted.\n",
"p1 = figure(plot_width=800, plot_height=500, tools=[hover1],\n",
" title=\"Performance by paths.\")\n",
"p1.xaxis.axis_label = 'Spend Proportion'\n",
"p1.yaxis.axis_label = args['goal_metric'][\"value\"]\n",
"\n",
"if len(df_1):\n",
" prop_plot_1 = p1.circle('spend_prop', 'metric', fill_color='orange', source=spend_source_1, size='size')\n",
"if len(df_2):\n",
" prop_plot_2 = p1.circle('spend_prop', 'metric', fill_color='red', source=spend_source_2, size='size')\n",
"if len(df_3):\n",
" prop_plot_3 = p1.circle('spend_prop', 'metric', fill_color='green', source=spend_source_3, size='size')\n",
"if len(df_4):\n",
" prop_plot_4 = p1.circle('spend_prop', 'metric', fill_color='blue', source=spend_source_4, size='size')\n",
"\n",
"avg_spend = Span(location=avg_spend_prop, dimension='height', line_color='black', line_width=3)\n",
"avg_cpt = Span(location=data['goal_axis'], dimension='width', line_color='black', line_width=3)\n",
"\n",
"p1.add_layout(avg_spend)\n",
"p1.add_layout(avg_cpt)\n",
"\n",
"prop_plot = show(p1, notebook_handle=True)\n",
"\n",
"print('Under Valued')\n",
"if len(df_1):\n",
" data_table_1 = DataTable(source=table_source_1, columns=columns, width=1000)\n",
" table_1 = show(data_table_1, notebook_handle=True)\n",
"\n",
"print('Strategic Wins')\n",
"if len(df_2):\n",
" data_table_2 = DataTable(source=table_source_2, columns=columns, width=1000)\n",
" table_2 = show(data_table_2, notebook_handle=True)\n",
"\n",
"print('Quick Wins')\n",
"if len(df_3):\n",
" data_table_3 = DataTable(source=table_source_3, columns=columns, width=1000)\n",
" table_3 = show(data_table_3, notebook_handle=True)\n",
"\n",
"print('Over Valued')\n",
"if len(df_4):\n",
" data_table_4 = DataTable(source=table_source_4, columns=columns, width=1000)\n",
" table_4 = show(data_table_4, notebook_handle=True)\n"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"ename": "KeyError",
"evalue": "'Audience Strategy'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m~/anaconda3/envs/jarvis1/lib/python3.5/site-packages/pandas/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 1875\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1876\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1877\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32mpandas/index.pyx\u001b[0m in \u001b[0;36mpandas.index.IndexEngine.get_loc (pandas/index.c:4027)\u001b[0;34m()\u001b[0m\n",
"\u001b[0;32mpandas/index.pyx\u001b[0m in \u001b[0;36mpandas.index.IndexEngine.get_loc (pandas/index.c:3891)\u001b[0;34m()\u001b[0m\n",
"\u001b[0;32mpandas/hashtable.pyx\u001b[0m in \u001b[0;36mpandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12408)\u001b[0;34m()\u001b[0m\n",
"\u001b[0;32mpandas/hashtable.pyx\u001b[0m in \u001b[0;36mpandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12359)\u001b[0;34m()\u001b[0m\n",
"\u001b[0;31mKeyError\u001b[0m: 'Audience Strategy'",
"\nDuring handling of the above exception, another exception occurred:\n",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-27-22fa0349b244>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf_bigger\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Audience Strategy'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'Retention'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m&\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Ad Type'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'Carousel'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m&\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Landing Pages'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'www.zivame.com/no-sag-flat-30.html, www.zivame.com'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mdf_bigger\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/envs/jarvis1/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1990\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1991\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1992\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1993\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1994\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/envs/jarvis1/lib/python3.5/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_getitem_column\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1997\u001b[0m \u001b[0;31m# get column\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1998\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_unique\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1999\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_item_cache\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2000\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2001\u001b[0m \u001b[0;31m# duplicate columns & possible reduce dimensionality\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/envs/jarvis1/lib/python3.5/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_get_item_cache\u001b[0;34m(self, item)\u001b[0m\n\u001b[1;32m 1343\u001b[0m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1344\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1345\u001b[0;31m \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1346\u001b[0m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_box_item_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1347\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/envs/jarvis1/lib/python3.5/site-packages/pandas/core/internals.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, item, fastpath)\u001b[0m\n\u001b[1;32m 3223\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3224\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misnull\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3225\u001b[0;31m \u001b[0mloc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3226\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3227\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0misnull\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/envs/jarvis1/lib/python3.5/site-packages/pandas/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 1876\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1877\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1878\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maybe_cast_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1879\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1880\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtolerance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32mpandas/index.pyx\u001b[0m in \u001b[0;36mpandas.index.IndexEngine.get_loc (pandas/index.c:4027)\u001b[0;34m()\u001b[0m\n",
"\u001b[0;32mpandas/index.pyx\u001b[0m in \u001b[0;36mpandas.index.IndexEngine.get_loc (pandas/index.c:3891)\u001b[0;34m()\u001b[0m\n",
"\u001b[0;32mpandas/hashtable.pyx\u001b[0m in \u001b[0;36mpandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12408)\u001b[0;34m()\u001b[0m\n",
"\u001b[0;32mpandas/hashtable.pyx\u001b[0m in \u001b[0;36mpandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12359)\u001b[0;34m()\u001b[0m\n",
"\u001b[0;31mKeyError\u001b[0m: 'Audience Strategy'"
]
}
],
"source": [
"df_bigger = df[(df['Audience Strategy'] == 'Retention') & (df['Ad Type'] == 'Carousel') & (df['Landing Pages'] == 'www.zivame.com/no-sag-flat-30.html, www.zivame.com')]\n",
"df_bigger.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"plt.figure(figsize=(20,10))\n",
"binwidth = 0.1\n",
"h = hist(df_bigger[goal_metric['value']], weights=df_bigger.fb_spend, bins=pd.np.linspace((min(df_bigger[goal_metric['value']])),\n",
" (max(df_bigger[goal_metric['value']])), 50))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"scrolled": false
},
"outputs": [],
"source": [
"df_smaller = df[(df['Audience Strategy'] == 'Prospecting') & (df['Product Category'] == 'Shapewear')]\n",
"df_smaller.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"plt.figure(figsize=(20,10))\n",
"binwidth = 0.1\n",
"h = hist(df_smaller[goal_metric['value']], weights=df_smaller.fb_spend, bins=pd.np.linspace((min(df_smaller[goal_metric['value']])),\n",
" (max(df_smaller[goal_metric['value']])), 50))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"from scipy.stats import norm\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# Fit a normal distribution to the data:\n",
"\n",
"\n",
"mu, std = norm.fit(data, loc = path_model.overall_goal_metric)\n",
"\n",
"# Plot the histogram.\n",
"plt.hist(data, bins=25, normed=True, alpha=0.6, color='g')\n",
"\n",
"# Plot the PDF.\n",
"xmin, xmax = plt.xlim()\n",
"x = np.linspace(xmin, xmax, 100)\n",
"p = norm.pdf(x, mu, std)\n",
"plt.plot(x, p, 'k', linewidth=2)\n",
"title = \"Fit results: mu = %.2f, std = %.2f\" % (mu, std)\n",
"plt.title(title)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"check_threshold*mu"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"check_threshold = std*0.675 / mu"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"positive_df = df[abs(df[goal_metric['value']] - path_model.overall_goal_metric) > check_threshold*path_model.overall_goal_metric] "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"positive_df.fb_spend.sum() / df.fb_spend.sum()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"path_model.check_threshold"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"(0.713 - 0.0181*0.430)/ (1-0.0181)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"(0.713 - 0.0189*0.410)/ (1-0.0189)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"path_model.overall_goal_metric - # + path_model.overall_goal_metric*path_model.check_threshold"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"(pd.np.percentile(data, 25) - path_model.overall_goal_metric) / path_model.overall_goal_metric"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"(pd.np.percentile(data, 75) - path_model.overall_goal_metric) / path_model.overall_goal_metric"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pd.np.quant"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.stats import t\n",
"t.fit(data, loc=path_model.overall_goal_metric)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"len([d for d in data if d > 1000])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df.fb_spend.sum()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [jarvis1]",
"language": "python",
"name": "Python [jarvis1]"
},
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment