Skip to content

Instantly share code, notes, and snippets.

@Saurabh7
Created August 18, 2017 05:41
Show Gist options
  • Save Saurabh7/469d1d617ad67533a393794c4c8e4b34 to your computer and use it in GitHub Desktop.
Save Saurabh7/469d1d617ad67533a393794c4c8e4b34 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.221376180648804\n",
"TIME USED 4.383429050445557\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.148184714952\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'] = 15\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": [
"1690.53"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"958.59400000000005"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.3795368090846"
]
},
"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 0x7f1312330a58>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nSUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f131212bd30>"
]
},
"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=\"1647319e-7193-43e4-b4ae-f3437522e0ce\">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(\"1647319e-7193-43e4-b4ae-f3437522e0ce\");\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(\"1647319e-7193-43e4-b4ae-f3437522e0ce\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid '1647319e-7193-43e4-b4ae-f3437522e0ce' 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(\"1647319e-7193-43e4-b4ae-f3437522e0ce\").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(\"1647319e-7193-43e4-b4ae-f3437522e0ce\")).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=\"751cb9c5-59be-4108-9c31-1e13e855604d\"></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(\"751cb9c5-59be-4108-9c31-1e13e855604d\");\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(\"0412114f-b474-4a8e-9084-d07dbab663a0\", 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(\"751cb9c5-59be-4108-9c31-1e13e855604d\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid '751cb9c5-59be-4108-9c31-1e13e855604d' 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 = {\"b9048dd2-3a9f-4111-a0b9-7cfcaf8692f6\":{\"roots\":{\"references\":[{\"attributes\":{\"callback\":null,\"column_names\":[\"metric\",\"spend_prop\",\"overall_spend_prop\",\"denominator\",\"level_0\",\"precision\",\"recall\",\"level_2\",\"level_3\",\"idx\",\"level_1\",\"overall\",\"other_ga_fb_cpt\",\"levels\",\"size\",\"index\",\"imp_factor\",\"numerator\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAADIiEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"idx\":[0],\"imp_factor\":{\"__ndarray__\":\"ke18PzVe8j8=\",\"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__\":\"O99PjZcuMEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"precision\":{\"__ndarray__\":\"8KfGSzeJ6T8=\",\"dtype\":\"float64\",\"shape\":[1]},\"recall\":{\"__ndarray__\":\"AAAAAAAA2D8=\",\"dtype\":\"float64\",\"shape\":[1]},\"size\":{\"__ndarray__\":\"AAAAAAAANEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"spend_prop\":{\"__ndarray__\":\"16NwPQp3QEA=\",\"dtype\":\"float64\",\"shape\":[1]}}},\"id\":\"d1e486d9-502f-45b8-85e5-b564e1783ab2\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"74df7379-1992-494e-ae26-5575ade94659\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"c18b79d6-b6e6-42cb-8cf4-dd880b7d52da\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"eb02808f-950c-4d84-9ae6-62a289a62406\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"74df7379-1992-494e-ae26-5575ade94659\",\"type\":\"BasicTicker\"}},\"id\":\"af8bd9b9-063e-4777-83c8-f8367b1886b6\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1eabca01-fab9-4e87-b8a8-465bbe4a09f9\",\"type\":\"LinearScale\"},{\"attributes\":{\"plot\":null,\"text\":\"Performance by paths.\"},\"id\":\"35ce0807-bcf8-4d82-8282-39d5bb990d49\",\"type\":\"Title\"},{\"attributes\":{\"below\":[{\"id\":\"0735d064-2d49-4879-8f2e-a6f5aa2e2de2\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"f12a3d3c-7222-43b7-a42f-6db0c1fc02a3\",\"type\":\"LinearAxis\"}],\"plot_height\":500,\"plot_width\":800,\"renderers\":[{\"id\":\"0735d064-2d49-4879-8f2e-a6f5aa2e2de2\",\"type\":\"LinearAxis\"},{\"id\":\"2d5558a8-e475-4d74-9a63-7c490bd39607\",\"type\":\"Grid\"},{\"id\":\"f12a3d3c-7222-43b7-a42f-6db0c1fc02a3\",\"type\":\"LinearAxis\"},{\"id\":\"af8bd9b9-063e-4777-83c8-f8367b1886b6\",\"type\":\"Grid\"},{\"id\":\"b7eb1ecd-d0d0-43e8-856f-648ce0ab8788\",\"type\":\"GlyphRenderer\"},{\"id\":\"599aed58-23b4-4277-8ef0-07eb8d9b6a1a\",\"type\":\"GlyphRenderer\"},{\"id\":\"8db0c604-eefb-4f79-9842-d6b674b2411f\",\"type\":\"GlyphRenderer\"},{\"id\":\"d782a6db-a2bc-46b2-9015-3e84880d308b\",\"type\":\"Span\"},{\"id\":\"2d69f3b0-afdb-4ff5-b092-3ea5a71371a8\",\"type\":\"Span\"}],\"title\":{\"id\":\"35ce0807-bcf8-4d82-8282-39d5bb990d49\",\"type\":\"Title\"},\"tool_events\":{\"id\":\"88cb2a61-def9-4d62-a7fb-01d1d7ed76da\",\"type\":\"ToolEvents\"},\"toolbar\":{\"id\":\"9d0882e2-80e0-4f90-b744-87bf96b94163\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"773084f6-5b47-4902-a6b6-1f4ca15cb0ab\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"9e9ec523-c5e1-44fb-af74-cf52a70fba44\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"a59053d8-3707-4ab2-8d89-3dffe2c9fa39\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1eabca01-fab9-4e87-b8a8-465bbe4a09f9\",\"type\":\"LinearScale\"}},\"id\":\"eb02808f-950c-4d84-9ae6-62a289a62406\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null},\"id\":\"773084f6-5b47-4902-a6b6-1f4ca15cb0ab\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null,\"plot\":{\"id\":\"eb02808f-950c-4d84-9ae6-62a289a62406\",\"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\":\"07f887f6-9286-4a56-90f3-dff40581a163\",\"type\":\"HoverTool\"},{\"attributes\":{\"data_source\":{\"id\":\"f80ee19c-b2c6-48d6-84dd-757ec346c83c\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"03a96f45-361c-4079-9957-09d731eaae83\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"10f41d56-402f-4238-8bce-c7cbfc432213\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"8db0c604-eefb-4f79-9842-d6b674b2411f\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null},\"id\":\"a59053d8-3707-4ab2-8d89-3dffe2c9fa39\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"fdb11bd1-c2ad-496a-aa03-90782a92f2e7\",\"type\":\"BasicTicker\"},{\"attributes\":{\"plot\":{\"id\":\"eb02808f-950c-4d84-9ae6-62a289a62406\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"fdb11bd1-c2ad-496a-aa03-90782a92f2e7\",\"type\":\"BasicTicker\"}},\"id\":\"2d5558a8-e475-4d74-9a63-7c490bd39607\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Spend Proportion\",\"formatter\":{\"id\":\"915033d6-ec4d-4665-bc71-a2fbda5d9de3\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"eb02808f-950c-4d84-9ae6-62a289a62406\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"fdb11bd1-c2ad-496a-aa03-90782a92f2e7\",\"type\":\"BasicTicker\"}},\"id\":\"0735d064-2d49-4879-8f2e-a6f5aa2e2de2\",\"type\":\"LinearAxis\"},{\"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\":\"10f41d56-402f-4238-8bce-c7cbfc432213\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"ad5536e9-c78b-4245-a56f-c1ecff850199\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"969a2e51-f4b4-4483-be76-6be0ca3aecf3\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"8fcf345c-9952-4b2f-b6e1-db8546556b6e\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"599aed58-23b4-4277-8ef0-07eb8d9b6a1a\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_width\":{\"value\":3},\"location\":1294.0296307692302,\"plot\":{\"id\":\"eb02808f-950c-4d84-9ae6-62a289a62406\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"2d69f3b0-afdb-4ff5-b092-3ea5a71371a8\",\"type\":\"Span\"},{\"attributes\":{\"data_source\":{\"id\":\"d1e486d9-502f-45b8-85e5-b564e1783ab2\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"7ccb20f7-4925-4b01-a6be-b7abf9382198\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"ef424973-ea1f-4844-80f6-41112317843e\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"b7eb1ecd-d0d0-43e8-856f-648ce0ab8788\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"9e9ec523-c5e1-44fb-af74-cf52a70fba44\",\"type\":\"LinearScale\"},{\"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\":\"8fcf345c-9952-4b2f-b6e1-db8546556b6e\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"88cb2a61-def9-4d62-a7fb-01d1d7ed76da\",\"type\":\"ToolEvents\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"969a2e51-f4b4-4483-be76-6be0ca3aecf3\",\"type\":\"Circle\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"07f887f6-9286-4a56-90f3-dff40581a163\",\"type\":\"HoverTool\"}]},\"id\":\"9d0882e2-80e0-4f90-b744-87bf96b94163\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"03a96f45-361c-4079-9957-09d731eaae83\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"915033d6-ec4d-4665-bc71-a2fbda5d9de3\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"dimension\":\"height\",\"line_width\":{\"value\":3},\"location\":16.182,\"plot\":{\"id\":\"eb02808f-950c-4d84-9ae6-62a289a62406\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"d782a6db-a2bc-46b2-9015-3e84880d308b\",\"type\":\"Span\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"metric\",\"spend_prop\",\"overall_spend_prop\",\"denominator\",\"level_0\",\"precision\",\"recall\",\"level_2\",\"level_3\",\"idx\",\"level_1\",\"overall\",\"other_ga_fb_cpt\",\"levels\",\"size\",\"index\",\"imp_factor\",\"numerator\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAAAAbkA=\",\"dtype\":\"float64\",\"shape\":[1]},\"idx\":[0],\"imp_factor\":{\"__ndarray__\":\"VOOlm8Qg8j8=\",\"dtype\":\"float64\",\"shape\":[1]},\"index\":[0],\"level_0\":[\"Audience Types : Lookalike\"],\"level_1\":[\"- : -\"],\"level_2\":[\"- : -\"],\"level_3\":[\"- : -\"],\"levels\":[[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}}]],\"metric\":{\"__ndarray__\":\"rkfhehTMn0A=\",\"dtype\":\"float64\",\"shape\":[1]},\"numerator\":{\"__ndarray__\":\"mpmZmVfPHUE=\",\"dtype\":\"float64\",\"shape\":[1]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"7FG4HoU2kkA=\",\"dtype\":\"float64\",\"shape\":[1]},\"overall\":{\"__ndarray__\":\"MkOHVx44lEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"overall_spend_prop\":{\"__ndarray__\":\"O99PjZcuMEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"precision\":{\"__ndarray__\":\"wcqhRbbz6T8=\",\"dtype\":\"float64\",\"shape\":[1]},\"recall\":{\"__ndarray__\":\"nu+nxks30T8=\",\"dtype\":\"float64\",\"shape\":[1]},\"size\":{\"__ndarray__\":\"AAAAAAAANEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"spend_prop\":{\"__ndarray__\":\"exSuR+E6N0A=\",\"dtype\":\"float64\",\"shape\":[1]}}},\"id\":\"f80ee19c-b2c6-48d6-84dd-757ec346c83c\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"ga_fb_cpt\",\"formatter\":{\"id\":\"c18b79d6-b6e6-42cb-8cf4-dd880b7d52da\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"eb02808f-950c-4d84-9ae6-62a289a62406\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"74df7379-1992-494e-ae26-5575ade94659\",\"type\":\"BasicTicker\"}},\"id\":\"f12a3d3c-7222-43b7-a42f-6db0c1fc02a3\",\"type\":\"LinearAxis\"},{\"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\":\"ef424973-ea1f-4844-80f6-41112317843e\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"metric\",\"spend_prop\",\"overall_spend_prop\",\"denominator\",\"level_0\",\"precision\",\"recall\",\"level_2\",\"level_3\",\"idx\",\"level_1\",\"overall\",\"other_ga_fb_cpt\",\"levels\",\"size\",\"index\",\"imp_factor\",\"numerator\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAABAU0AAAAAAAAAwQAAAAAAAwGBA\",\"dtype\":\"float64\",\"shape\":[3]},\"idx\":[0,1,2],\"imp_factor\":{\"__ndarray__\":\"y6FFtvP98j9eukkMAivxP3npJjEIrOw/\",\"dtype\":\"float64\",\"shape\":[3]},\"index\":[0,1,2],\"level_0\":[\"Audience Types : Lookalike\",\"Audience Types : Interests\",\"Audience Types : Open Targeting\"],\"level_1\":[\"Lookalike Types : 1-2%\",\"Interests : Education or Higher education or Hotels or Travel or University\",\"- : -\"],\"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\":\"Open Targeting\",\"value\":\"Open Targeting\"}}]],\"metric\":{\"__ndarray__\":\"hetRuJ4RpkC4HoXrUfCfQM3MzMzMgZ9A\",\"dtype\":\"float64\",\"shape\":[3]},\"numerator\":{\"__ndarray__\":\"UrgehTWNCkGkcD0KV/DfQI/C9SjvfRBB\",\"dtype\":\"float64\",\"shape\":[3]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"H4XrUbj3mUCkcD0K17aWQGZmZmZmNJNA\",\"dtype\":\"float64\",\"shape\":[3]},\"overall\":{\"__ndarray__\":\"MkOHVx44lEAyQ4dXHjiUQDJDh1ceOJRA\",\"dtype\":\"float64\",\"shape\":[3]},\"overall_spend_prop\":{\"__ndarray__\":\"O99PjZcuMEA730+Nly4wQDvfT42XLjBA\",\"dtype\":\"float64\",\"shape\":[3]},\"precision\":{\"__ndarray__\":\"EFg5tMh27j+LbOf7qfHuPzvfT42XbuI/\",\"dtype\":\"float64\",\"shape\":[3]},\"recall\":{\"__ndarray__\":\"PzVeukkMwj8bL90kBoGVP4lBYOXQIrs/\",\"dtype\":\"float64\",\"shape\":[3]},\"size\":{\"__ndarray__\":\"AAAAAAAANECRIIPgRRQyQF5wnaKaMS5A\",\"dtype\":\"float64\",\"shape\":[3]},\"spend_prop\":{\"__ndarray__\":\"rkfhehSuJED2KFyPwvX4PzMzMzMzsylA\",\"dtype\":\"float64\",\"shape\":[3]}}},\"id\":\"ad5536e9-c78b-4245-a56f-c1ecff850199\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"7ccb20f7-4925-4b01-a6be-b7abf9382198\",\"type\":\"Circle\"}],\"root_ids\":[\"eb02808f-950c-4d84-9ae6-62a289a62406\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.6\"}};\n",
" var render_items = [{\"docid\":\"b9048dd2-3a9f-4111-a0b9-7cfcaf8692f6\",\"elementid\":\"751cb9c5-59be-4108-9c31-1e13e855604d\",\"modelid\":\"eb02808f-950c-4d84-9ae6-62a289a62406\",\"notebook_comms_target\":\"0412114f-b474-4a8e-9084-d07dbab663a0\"}];\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(\"751cb9c5-59be-4108-9c31-1e13e855604d\")).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=\"14cdcb0e-eece-4e76-8121-bf65d1d3f57a\"></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(\"14cdcb0e-eece-4e76-8121-bf65d1d3f57a\");\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(\"447bf3c3-66a4-499c-a416-91bfbabb152b\", 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(\"14cdcb0e-eece-4e76-8121-bf65d1d3f57a\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid '14cdcb0e-eece-4e76-8121-bf65d1d3f57a' 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 = {\"554a5452-ff9d-48ef-8914-5e194248d99b\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"5cf0b4a5-00fb-4622-9093-4c23ead953a2\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"8033cf5b-abd4-4915-a2f8-13f83bcbd9dd\",\"type\":\"StringEditor\"},\"field\":\"level_2\",\"formatter\":{\"id\":\"a0f2868a-8dee-4956-b550-b6372db9f11a\",\"type\":\"StringFormatter\"},\"title\":\"level 2\"},\"id\":\"3b71b9ea-dbd6-4814-94b2-f1ceba99a4e8\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"d837e119-47c3-44ce-a9cf-e0cc7a1506cd\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"6ccce30b-45fb-4126-a676-ecf31f9d0706\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"6e9027db-7505-47c7-b282-1af42c95164f\",\"type\":\"StringEditor\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"metric\",\"spend_prop\",\"denominator\",\"level_0\",\"precision\",\"recall\",\"level_2\",\"level_3\",\"level_1\",\"other_ga_fb_cpt\",\"levels\",\"index\",\"imp_factor\",\"numerator\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAADIiEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"imp_factor\":{\"__ndarray__\":\"ke18PzVe8j8=\",\"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__\":\"AAAAAAAA2D8=\",\"dtype\":\"float64\",\"shape\":[1]},\"spend_prop\":{\"__ndarray__\":\"16NwPQp3QEA=\",\"dtype\":\"float64\",\"shape\":[1]}}},\"id\":\"97601357-1dc6-4e70-9072-0822a1ff3cf4\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"editor\":{\"id\":\"9006b0fb-65e6-49a7-b9cd-0b62164e30d8\",\"type\":\"StringEditor\"},\"field\":\"precision\",\"formatter\":{\"id\":\"6271c08c-d2aa-415a-a07b-36c8796bce46\",\"type\":\"StringFormatter\"},\"title\":\"Precision\"},\"id\":\"22c56289-f3a8-43e0-a662-2d71bcd0add6\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"9006b0fb-65e6-49a7-b9cd-0b62164e30d8\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"6e9027db-7505-47c7-b282-1af42c95164f\",\"type\":\"StringEditor\"},\"field\":\"spend_prop\",\"formatter\":{\"id\":\"5cf0b4a5-00fb-4622-9093-4c23ead953a2\",\"type\":\"StringFormatter\"},\"title\":\"Spend %\"},\"id\":\"106fa0a8-6dd8-4552-bf92-986e7998c252\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"8033cf5b-abd4-4915-a2f8-13f83bcbd9dd\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"22737714-896c-4c94-86f2-517ac7fae621\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"3e57c167-0fb0-4b46-9b67-ffb3f4fd1bae\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"f0af8736-e25e-4ef9-a4e3-c705338ae78a\",\"type\":\"StringEditor\"},\"field\":\"metric\",\"formatter\":{\"id\":\"3e57c167-0fb0-4b46-9b67-ffb3f4fd1bae\",\"type\":\"StringFormatter\"},\"title\":\"ga_fb_cpt\"},\"id\":\"489a426f-324f-4318-9b09-beee5df91d7a\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"b056695e-f3dc-418f-8cd9-2bfe46a66840\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"f0af8736-e25e-4ef9-a4e3-c705338ae78a\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"6e0cf56d-f4b1-4ed8-8ae6-d096e2393d45\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"3f3c1d62-c012-48cd-bfe0-d81c105420e9\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"f39dc278-e2a7-47b0-b9c7-87f191c05e78\",\"type\":\"StringFormatter\"},{\"attributes\":{\"columns\":[{\"id\":\"538911dc-3889-44c6-9251-6fbd3388ba7d\",\"type\":\"TableColumn\"},{\"id\":\"fd22727a-ed98-4571-8d43-e174f081fe8d\",\"type\":\"TableColumn\"},{\"id\":\"3b71b9ea-dbd6-4814-94b2-f1ceba99a4e8\",\"type\":\"TableColumn\"},{\"id\":\"6d82e5a2-6aa3-4f9b-8230-45ef598383c9\",\"type\":\"TableColumn\"},{\"id\":\"489a426f-324f-4318-9b09-beee5df91d7a\",\"type\":\"TableColumn\"},{\"id\":\"106fa0a8-6dd8-4552-bf92-986e7998c252\",\"type\":\"TableColumn\"},{\"id\":\"22c56289-f3a8-43e0-a662-2d71bcd0add6\",\"type\":\"TableColumn\"},{\"id\":\"78882748-7490-44af-9479-07c11d7ee7f6\",\"type\":\"TableColumn\"},{\"id\":\"257546c3-1b23-4956-9548-f3edc6f2305a\",\"type\":\"TableColumn\"}],\"source\":{\"id\":\"97601357-1dc6-4e70-9072-0822a1ff3cf4\",\"type\":\"ColumnDataSource\"},\"width\":1000},\"id\":\"3f7d63a4-9551-4f3a-8cae-7ae81a20978f\",\"type\":\"DataTable\"},{\"attributes\":{},\"id\":\"6271c08c-d2aa-415a-a07b-36c8796bce46\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"bc939164-c911-4d47-91df-c84229b1e7d7\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"6ccce30b-45fb-4126-a676-ecf31f9d0706\",\"type\":\"StringEditor\"},\"field\":\"level_1\",\"formatter\":{\"id\":\"f39dc278-e2a7-47b0-b9c7-87f191c05e78\",\"type\":\"StringFormatter\"},\"title\":\"level 1\"},\"id\":\"fd22727a-ed98-4571-8d43-e174f081fe8d\",\"type\":\"TableColumn\"},{\"attributes\":{\"editor\":{\"id\":\"6e0cf56d-f4b1-4ed8-8ae6-d096e2393d45\",\"type\":\"StringEditor\"},\"field\":\"recall\",\"formatter\":{\"id\":\"b056695e-f3dc-418f-8cd9-2bfe46a66840\",\"type\":\"StringFormatter\"},\"title\":\"Recall\"},\"id\":\"78882748-7490-44af-9479-07c11d7ee7f6\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"a0f2868a-8dee-4956-b550-b6372db9f11a\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"57981965-ceb2-4f0f-9a54-de20fcfed1d6\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"57981965-ceb2-4f0f-9a54-de20fcfed1d6\",\"type\":\"StringEditor\"},\"field\":\"level_0\",\"formatter\":{\"id\":\"3f3c1d62-c012-48cd-bfe0-d81c105420e9\",\"type\":\"StringFormatter\"},\"title\":\"level 0\"},\"id\":\"538911dc-3889-44c6-9251-6fbd3388ba7d\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"b7d10ff3-a16c-4310-bf66-b99a6e5ed4a4\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"d837e119-47c3-44ce-a9cf-e0cc7a1506cd\",\"type\":\"StringEditor\"},\"field\":\"level_3\",\"formatter\":{\"id\":\"bc939164-c911-4d47-91df-c84229b1e7d7\",\"type\":\"StringFormatter\"},\"title\":\"level 3\"},\"id\":\"6d82e5a2-6aa3-4f9b-8230-45ef598383c9\",\"type\":\"TableColumn\"},{\"attributes\":{\"editor\":{\"id\":\"22737714-896c-4c94-86f2-517ac7fae621\",\"type\":\"StringEditor\"},\"field\":\"imp_factor\",\"formatter\":{\"id\":\"b7d10ff3-a16c-4310-bf66-b99a6e5ed4a4\",\"type\":\"StringFormatter\"},\"title\":\"MCC\"},\"id\":\"257546c3-1b23-4956-9548-f3edc6f2305a\",\"type\":\"TableColumn\"}],\"root_ids\":[\"3f7d63a4-9551-4f3a-8cae-7ae81a20978f\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.6\"}};\n",
" var render_items = [{\"docid\":\"554a5452-ff9d-48ef-8914-5e194248d99b\",\"elementid\":\"14cdcb0e-eece-4e76-8121-bf65d1d3f57a\",\"modelid\":\"3f7d63a4-9551-4f3a-8cae-7ae81a20978f\",\"notebook_comms_target\":\"447bf3c3-66a4-499c-a416-91bfbabb152b\"}];\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(\"14cdcb0e-eece-4e76-8121-bf65d1d3f57a\")).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=\"db82c65a-430c-4f07-b655-3df362263d39\"></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(\"db82c65a-430c-4f07-b655-3df362263d39\");\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(\"82c4608e-75e8-4d41-91e3-2462129afff6\", 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(\"db82c65a-430c-4f07-b655-3df362263d39\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'db82c65a-430c-4f07-b655-3df362263d39' 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 = {\"f2728329-3382-4a7a-a846-3b0916d52d7d\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"5cf0b4a5-00fb-4622-9093-4c23ead953a2\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"8033cf5b-abd4-4915-a2f8-13f83bcbd9dd\",\"type\":\"StringEditor\"},\"field\":\"level_2\",\"formatter\":{\"id\":\"a0f2868a-8dee-4956-b550-b6372db9f11a\",\"type\":\"StringFormatter\"},\"title\":\"level 2\"},\"id\":\"3b71b9ea-dbd6-4814-94b2-f1ceba99a4e8\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"f39dc278-e2a7-47b0-b9c7-87f191c05e78\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"d837e119-47c3-44ce-a9cf-e0cc7a1506cd\",\"type\":\"StringEditor\"},{\"attributes\":{\"columns\":[{\"id\":\"538911dc-3889-44c6-9251-6fbd3388ba7d\",\"type\":\"TableColumn\"},{\"id\":\"fd22727a-ed98-4571-8d43-e174f081fe8d\",\"type\":\"TableColumn\"},{\"id\":\"3b71b9ea-dbd6-4814-94b2-f1ceba99a4e8\",\"type\":\"TableColumn\"},{\"id\":\"6d82e5a2-6aa3-4f9b-8230-45ef598383c9\",\"type\":\"TableColumn\"},{\"id\":\"489a426f-324f-4318-9b09-beee5df91d7a\",\"type\":\"TableColumn\"},{\"id\":\"106fa0a8-6dd8-4552-bf92-986e7998c252\",\"type\":\"TableColumn\"},{\"id\":\"22c56289-f3a8-43e0-a662-2d71bcd0add6\",\"type\":\"TableColumn\"},{\"id\":\"78882748-7490-44af-9479-07c11d7ee7f6\",\"type\":\"TableColumn\"},{\"id\":\"257546c3-1b23-4956-9548-f3edc6f2305a\",\"type\":\"TableColumn\"}],\"source\":{\"id\":\"875e0dbc-9077-419e-adf1-450d20f06c1d\",\"type\":\"ColumnDataSource\"},\"width\":1000},\"id\":\"908709c6-164d-447c-ab3b-56f2759b423e\",\"type\":\"DataTable\"},{\"attributes\":{},\"id\":\"6e9027db-7505-47c7-b282-1af42c95164f\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"9006b0fb-65e6-49a7-b9cd-0b62164e30d8\",\"type\":\"StringEditor\"},\"field\":\"precision\",\"formatter\":{\"id\":\"6271c08c-d2aa-415a-a07b-36c8796bce46\",\"type\":\"StringFormatter\"},\"title\":\"Precision\"},\"id\":\"22c56289-f3a8-43e0-a662-2d71bcd0add6\",\"type\":\"TableColumn\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"metric\",\"spend_prop\",\"denominator\",\"level_0\",\"precision\",\"recall\",\"level_2\",\"level_3\",\"level_1\",\"other_ga_fb_cpt\",\"levels\",\"index\",\"imp_factor\",\"numerator\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAABAU0AAAAAAAAAwQAAAAAAAwGBA\",\"dtype\":\"float64\",\"shape\":[3]},\"imp_factor\":{\"__ndarray__\":\"y6FFtvP98j9eukkMAivxP3npJjEIrOw/\",\"dtype\":\"float64\",\"shape\":[3]},\"index\":[0,1,2],\"level_0\":[\"Audience Types : Lookalike\",\"Audience Types : Interests\",\"Audience Types : Open Targeting\"],\"level_1\":[\"Lookalike Types : 1-2%\",\"Interests : Education or Higher education or Hotels or Travel or University\",\"- : -\"],\"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\":\"Open Targeting\",\"value\":\"Open Targeting\"}}]],\"metric\":{\"__ndarray__\":\"hetRuJ4RpkC4HoXrUfCfQM3MzMzMgZ9A\",\"dtype\":\"float64\",\"shape\":[3]},\"numerator\":{\"__ndarray__\":\"UrgehTWNCkGkcD0KV/DfQI/C9SjvfRBB\",\"dtype\":\"float64\",\"shape\":[3]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"H4XrUbj3mUCkcD0K17aWQGZmZmZmNJNA\",\"dtype\":\"float64\",\"shape\":[3]},\"precision\":{\"__ndarray__\":\"EFg5tMh27j+LbOf7qfHuPzvfT42XbuI/\",\"dtype\":\"float64\",\"shape\":[3]},\"recall\":{\"__ndarray__\":\"PzVeukkMwj8bL90kBoGVP4lBYOXQIrs/\",\"dtype\":\"float64\",\"shape\":[3]},\"spend_prop\":{\"__ndarray__\":\"rkfhehSuJED2KFyPwvX4PzMzMzMzsylA\",\"dtype\":\"float64\",\"shape\":[3]}}},\"id\":\"875e0dbc-9077-419e-adf1-450d20f06c1d\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"9006b0fb-65e6-49a7-b9cd-0b62164e30d8\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"3e57c167-0fb0-4b46-9b67-ffb3f4fd1bae\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"6e9027db-7505-47c7-b282-1af42c95164f\",\"type\":\"StringEditor\"},\"field\":\"spend_prop\",\"formatter\":{\"id\":\"5cf0b4a5-00fb-4622-9093-4c23ead953a2\",\"type\":\"StringFormatter\"},\"title\":\"Spend %\"},\"id\":\"106fa0a8-6dd8-4552-bf92-986e7998c252\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"8033cf5b-abd4-4915-a2f8-13f83bcbd9dd\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"22737714-896c-4c94-86f2-517ac7fae621\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"b7d10ff3-a16c-4310-bf66-b99a6e5ed4a4\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"f0af8736-e25e-4ef9-a4e3-c705338ae78a\",\"type\":\"StringEditor\"},\"field\":\"metric\",\"formatter\":{\"id\":\"3e57c167-0fb0-4b46-9b67-ffb3f4fd1bae\",\"type\":\"StringFormatter\"},\"title\":\"ga_fb_cpt\"},\"id\":\"489a426f-324f-4318-9b09-beee5df91d7a\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"b056695e-f3dc-418f-8cd9-2bfe46a66840\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"f0af8736-e25e-4ef9-a4e3-c705338ae78a\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"6e0cf56d-f4b1-4ed8-8ae6-d096e2393d45\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"3f3c1d62-c012-48cd-bfe0-d81c105420e9\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"6ccce30b-45fb-4126-a676-ecf31f9d0706\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"6271c08c-d2aa-415a-a07b-36c8796bce46\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"bc939164-c911-4d47-91df-c84229b1e7d7\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"6ccce30b-45fb-4126-a676-ecf31f9d0706\",\"type\":\"StringEditor\"},\"field\":\"level_1\",\"formatter\":{\"id\":\"f39dc278-e2a7-47b0-b9c7-87f191c05e78\",\"type\":\"StringFormatter\"},\"title\":\"level 1\"},\"id\":\"fd22727a-ed98-4571-8d43-e174f081fe8d\",\"type\":\"TableColumn\"},{\"attributes\":{\"editor\":{\"id\":\"6e0cf56d-f4b1-4ed8-8ae6-d096e2393d45\",\"type\":\"StringEditor\"},\"field\":\"recall\",\"formatter\":{\"id\":\"b056695e-f3dc-418f-8cd9-2bfe46a66840\",\"type\":\"StringFormatter\"},\"title\":\"Recall\"},\"id\":\"78882748-7490-44af-9479-07c11d7ee7f6\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"a0f2868a-8dee-4956-b550-b6372db9f11a\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"57981965-ceb2-4f0f-9a54-de20fcfed1d6\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"57981965-ceb2-4f0f-9a54-de20fcfed1d6\",\"type\":\"StringEditor\"},\"field\":\"level_0\",\"formatter\":{\"id\":\"3f3c1d62-c012-48cd-bfe0-d81c105420e9\",\"type\":\"StringFormatter\"},\"title\":\"level 0\"},\"id\":\"538911dc-3889-44c6-9251-6fbd3388ba7d\",\"type\":\"TableColumn\"},{\"attributes\":{\"editor\":{\"id\":\"d837e119-47c3-44ce-a9cf-e0cc7a1506cd\",\"type\":\"StringEditor\"},\"field\":\"level_3\",\"formatter\":{\"id\":\"bc939164-c911-4d47-91df-c84229b1e7d7\",\"type\":\"StringFormatter\"},\"title\":\"level 3\"},\"id\":\"6d82e5a2-6aa3-4f9b-8230-45ef598383c9\",\"type\":\"TableColumn\"},{\"attributes\":{\"editor\":{\"id\":\"22737714-896c-4c94-86f2-517ac7fae621\",\"type\":\"StringEditor\"},\"field\":\"imp_factor\",\"formatter\":{\"id\":\"b7d10ff3-a16c-4310-bf66-b99a6e5ed4a4\",\"type\":\"StringFormatter\"},\"title\":\"MCC\"},\"id\":\"257546c3-1b23-4956-9548-f3edc6f2305a\",\"type\":\"TableColumn\"}],\"root_ids\":[\"908709c6-164d-447c-ab3b-56f2759b423e\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.6\"}};\n",
" var render_items = [{\"docid\":\"f2728329-3382-4a7a-a846-3b0916d52d7d\",\"elementid\":\"db82c65a-430c-4f07-b655-3df362263d39\",\"modelid\":\"908709c6-164d-447c-ab3b-56f2759b423e\",\"notebook_comms_target\":\"82c4608e-75e8-4d41-91e3-2462129afff6\"}];\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(\"db82c65a-430c-4f07-b655-3df362263d39\")).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=\"df81f9d1-fa14-4394-8254-f1916c3e386c\"></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(\"df81f9d1-fa14-4394-8254-f1916c3e386c\");\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(\"cf5c9de4-65c6-49da-a607-d8e939baa53d\", 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(\"df81f9d1-fa14-4394-8254-f1916c3e386c\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'df81f9d1-fa14-4394-8254-f1916c3e386c' 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 = {\"430f768f-2bd3-482c-a92d-763fb45a90b9\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"5cf0b4a5-00fb-4622-9093-4c23ead953a2\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"8033cf5b-abd4-4915-a2f8-13f83bcbd9dd\",\"type\":\"StringEditor\"},\"field\":\"level_2\",\"formatter\":{\"id\":\"a0f2868a-8dee-4956-b550-b6372db9f11a\",\"type\":\"StringFormatter\"},\"title\":\"level 2\"},\"id\":\"3b71b9ea-dbd6-4814-94b2-f1ceba99a4e8\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"d837e119-47c3-44ce-a9cf-e0cc7a1506cd\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"6ccce30b-45fb-4126-a676-ecf31f9d0706\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"6e9027db-7505-47c7-b282-1af42c95164f\",\"type\":\"StringEditor\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"metric\",\"spend_prop\",\"denominator\",\"level_0\",\"precision\",\"recall\",\"level_2\",\"level_3\",\"level_1\",\"other_ga_fb_cpt\",\"levels\",\"index\",\"imp_factor\",\"numerator\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAAAAbkA=\",\"dtype\":\"float64\",\"shape\":[1]},\"imp_factor\":{\"__ndarray__\":\"VOOlm8Qg8j8=\",\"dtype\":\"float64\",\"shape\":[1]},\"index\":[0],\"level_0\":[\"Audience Types : Lookalike\"],\"level_1\":[\"- : -\"],\"level_2\":[\"- : -\"],\"level_3\":[\"- : -\"],\"levels\":[[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}}]],\"metric\":{\"__ndarray__\":\"rkfhehTMn0A=\",\"dtype\":\"float64\",\"shape\":[1]},\"numerator\":{\"__ndarray__\":\"mpmZmVfPHUE=\",\"dtype\":\"float64\",\"shape\":[1]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"7FG4HoU2kkA=\",\"dtype\":\"float64\",\"shape\":[1]},\"precision\":{\"__ndarray__\":\"wcqhRbbz6T8=\",\"dtype\":\"float64\",\"shape\":[1]},\"recall\":{\"__ndarray__\":\"nu+nxks30T8=\",\"dtype\":\"float64\",\"shape\":[1]},\"spend_prop\":{\"__ndarray__\":\"exSuR+E6N0A=\",\"dtype\":\"float64\",\"shape\":[1]}}},\"id\":\"a0dd39df-95e1-4c5f-9c33-363c9c5829d8\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"editor\":{\"id\":\"9006b0fb-65e6-49a7-b9cd-0b62164e30d8\",\"type\":\"StringEditor\"},\"field\":\"precision\",\"formatter\":{\"id\":\"6271c08c-d2aa-415a-a07b-36c8796bce46\",\"type\":\"StringFormatter\"},\"title\":\"Precision\"},\"id\":\"22c56289-f3a8-43e0-a662-2d71bcd0add6\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"9006b0fb-65e6-49a7-b9cd-0b62164e30d8\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"6e9027db-7505-47c7-b282-1af42c95164f\",\"type\":\"StringEditor\"},\"field\":\"spend_prop\",\"formatter\":{\"id\":\"5cf0b4a5-00fb-4622-9093-4c23ead953a2\",\"type\":\"StringFormatter\"},\"title\":\"Spend %\"},\"id\":\"106fa0a8-6dd8-4552-bf92-986e7998c252\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"8033cf5b-abd4-4915-a2f8-13f83bcbd9dd\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"22737714-896c-4c94-86f2-517ac7fae621\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"3e57c167-0fb0-4b46-9b67-ffb3f4fd1bae\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"f0af8736-e25e-4ef9-a4e3-c705338ae78a\",\"type\":\"StringEditor\"},\"field\":\"metric\",\"formatter\":{\"id\":\"3e57c167-0fb0-4b46-9b67-ffb3f4fd1bae\",\"type\":\"StringFormatter\"},\"title\":\"ga_fb_cpt\"},\"id\":\"489a426f-324f-4318-9b09-beee5df91d7a\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"b056695e-f3dc-418f-8cd9-2bfe46a66840\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"f0af8736-e25e-4ef9-a4e3-c705338ae78a\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"6e0cf56d-f4b1-4ed8-8ae6-d096e2393d45\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"3f3c1d62-c012-48cd-bfe0-d81c105420e9\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"f39dc278-e2a7-47b0-b9c7-87f191c05e78\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"6271c08c-d2aa-415a-a07b-36c8796bce46\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"bc939164-c911-4d47-91df-c84229b1e7d7\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"6ccce30b-45fb-4126-a676-ecf31f9d0706\",\"type\":\"StringEditor\"},\"field\":\"level_1\",\"formatter\":{\"id\":\"f39dc278-e2a7-47b0-b9c7-87f191c05e78\",\"type\":\"StringFormatter\"},\"title\":\"level 1\"},\"id\":\"fd22727a-ed98-4571-8d43-e174f081fe8d\",\"type\":\"TableColumn\"},{\"attributes\":{\"editor\":{\"id\":\"6e0cf56d-f4b1-4ed8-8ae6-d096e2393d45\",\"type\":\"StringEditor\"},\"field\":\"recall\",\"formatter\":{\"id\":\"b056695e-f3dc-418f-8cd9-2bfe46a66840\",\"type\":\"StringFormatter\"},\"title\":\"Recall\"},\"id\":\"78882748-7490-44af-9479-07c11d7ee7f6\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"a0f2868a-8dee-4956-b550-b6372db9f11a\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"57981965-ceb2-4f0f-9a54-de20fcfed1d6\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"57981965-ceb2-4f0f-9a54-de20fcfed1d6\",\"type\":\"StringEditor\"},\"field\":\"level_0\",\"formatter\":{\"id\":\"3f3c1d62-c012-48cd-bfe0-d81c105420e9\",\"type\":\"StringFormatter\"},\"title\":\"level 0\"},\"id\":\"538911dc-3889-44c6-9251-6fbd3388ba7d\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"b7d10ff3-a16c-4310-bf66-b99a6e5ed4a4\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"d837e119-47c3-44ce-a9cf-e0cc7a1506cd\",\"type\":\"StringEditor\"},\"field\":\"level_3\",\"formatter\":{\"id\":\"bc939164-c911-4d47-91df-c84229b1e7d7\",\"type\":\"StringFormatter\"},\"title\":\"level 3\"},\"id\":\"6d82e5a2-6aa3-4f9b-8230-45ef598383c9\",\"type\":\"TableColumn\"},{\"attributes\":{\"editor\":{\"id\":\"22737714-896c-4c94-86f2-517ac7fae621\",\"type\":\"StringEditor\"},\"field\":\"imp_factor\",\"formatter\":{\"id\":\"b7d10ff3-a16c-4310-bf66-b99a6e5ed4a4\",\"type\":\"StringFormatter\"},\"title\":\"MCC\"},\"id\":\"257546c3-1b23-4956-9548-f3edc6f2305a\",\"type\":\"TableColumn\"},{\"attributes\":{\"columns\":[{\"id\":\"538911dc-3889-44c6-9251-6fbd3388ba7d\",\"type\":\"TableColumn\"},{\"id\":\"fd22727a-ed98-4571-8d43-e174f081fe8d\",\"type\":\"TableColumn\"},{\"id\":\"3b71b9ea-dbd6-4814-94b2-f1ceba99a4e8\",\"type\":\"TableColumn\"},{\"id\":\"6d82e5a2-6aa3-4f9b-8230-45ef598383c9\",\"type\":\"TableColumn\"},{\"id\":\"489a426f-324f-4318-9b09-beee5df91d7a\",\"type\":\"TableColumn\"},{\"id\":\"106fa0a8-6dd8-4552-bf92-986e7998c252\",\"type\":\"TableColumn\"},{\"id\":\"22c56289-f3a8-43e0-a662-2d71bcd0add6\",\"type\":\"TableColumn\"},{\"id\":\"78882748-7490-44af-9479-07c11d7ee7f6\",\"type\":\"TableColumn\"},{\"id\":\"257546c3-1b23-4956-9548-f3edc6f2305a\",\"type\":\"TableColumn\"}],\"source\":{\"id\":\"a0dd39df-95e1-4c5f-9c33-363c9c5829d8\",\"type\":\"ColumnDataSource\"},\"width\":1000},\"id\":\"45c3d012-cb4b-48a6-baef-a028047ab88b\",\"type\":\"DataTable\"}],\"root_ids\":[\"45c3d012-cb4b-48a6-baef-a028047ab88b\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.6\"}};\n",
" var render_items = [{\"docid\":\"430f768f-2bd3-482c-a92d-763fb45a90b9\",\"elementid\":\"df81f9d1-fa14-4394-8254-f1916c3e386c\",\"modelid\":\"45c3d012-cb4b-48a6-baef-a028047ab88b\",\"notebook_comms_target\":\"cf5c9de4-65c6-49da-a607-d8e939baa53d\"}];\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(\"df81f9d1-fa14-4394-8254-f1916c3e386c\")).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