Skip to content

Instantly share code, notes, and snippets.

@Saurabh7
Created August 18, 2017 05:39
Show Gist options
  • Save Saurabh7/b2403dda5432fc15a166525085f6e418 to your computer and use it in GitHub Desktop.
Save Saurabh7/b2403dda5432fc15a166525085f6e418 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 3.9747447967529297\n",
"TIME USED 4.114331960678101\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.03774970305\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'] = 10\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": [
"1480.8946938775509"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1103.7768503937009"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.41062716362005564"
]
},
"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 0x7f841151a828>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nSZIkjYT/Bxh8/myPvQWIAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f8411318748>"
]
},
"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=\"5d40a855-6894-47d7-85c6-c0e1ce728d6f\">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(\"5d40a855-6894-47d7-85c6-c0e1ce728d6f\");\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(\"5d40a855-6894-47d7-85c6-c0e1ce728d6f\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid '5d40a855-6894-47d7-85c6-c0e1ce728d6f' 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(\"5d40a855-6894-47d7-85c6-c0e1ce728d6f\").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(\"5d40a855-6894-47d7-85c6-c0e1ce728d6f\")).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=\"d37a5649-a702-4b8a-91d2-50576586e887\"></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(\"d37a5649-a702-4b8a-91d2-50576586e887\");\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(\"306ff0fb-5590-4597-81c5-e6ef5a089441\", 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(\"d37a5649-a702-4b8a-91d2-50576586e887\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'd37a5649-a702-4b8a-91d2-50576586e887' 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 = {\"e1720065-4c41-4456-9ff8-2e474aa1cf8b\":{\"roots\":{\"references\":[{\"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\":\"24a1c5de-561d-4ebf-b100-035583c07b3c\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"ga_fb_cpt\",\"formatter\":{\"id\":\"046169fa-1b90-45f9-a46a-d7cb88eca605\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"e51fe882-1f96-4c8f-9cfc-bfb7db8cd353\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"b706c591-757e-40e8-acea-6da6e4896abf\",\"type\":\"BasicTicker\"}},\"id\":\"a34986dc-3186-4367-8156-54db59823dbd\",\"type\":\"LinearAxis\"},{\"attributes\":{\"plot\":null,\"text\":\"Performance by paths.\"},\"id\":\"6079083b-2207-4d2b-a030-a237b610fe44\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"b706c591-757e-40e8-acea-6da6e4896abf\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"73c1ebe3-8b4a-42f2-9aef-809a1e14ef2a\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"Spend Proportion\",\"formatter\":{\"id\":\"9d248497-fe34-4799-8b52-990a3257c1cc\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"e51fe882-1f96-4c8f-9cfc-bfb7db8cd353\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"8de0715d-0831-462a-8354-d88e04417af0\",\"type\":\"BasicTicker\"}},\"id\":\"41c21a53-9d5c-453f-b177-9ab37fb9c6c6\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null,\"plot\":{\"id\":\"e51fe882-1f96-4c8f-9cfc-bfb7db8cd353\",\"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\":\"41b953fe-457a-494c-9dab-22aaabc5bd34\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"046169fa-1b90-45f9-a46a-d7cb88eca605\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"overall\",\"level_2\",\"index\",\"level_1\",\"level_3\",\"level_0\",\"imp_factor\",\"spend_prop\",\"recall\",\"precision\",\"size\",\"idx\",\"levels\",\"other_ga_fb_cpt\",\"overall_spend_prop\",\"denominator\",\"numerator\",\"metric\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAAAAbkAAAAAAAGBkQAAAAAAAwGBA\",\"dtype\":\"float64\",\"shape\":[3]},\"idx\":[0,1,2],\"imp_factor\":{\"__ndarray__\":\"+FPjpZvE8D/ufD81XrrtP1pkO99Pjes/\",\"dtype\":\"float64\",\"shape\":[3]},\"index\":[0,1,2],\"level_0\":[\"Audience Types : Lookalike\",\"Audience Types : Lookalike\",\"Audience Types : Open Targeting\"],\"level_1\":[\"- : -\",\"Lookalike Types : 1%\",\"- : -\"],\"level_2\":[\"- : -\",\"- : -\",\"- : -\"],\"level_3\":[\"- : -\",\"- : -\",\"- : -\"],\"levels\":[[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}}],[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}},{\"Lookalike Types\":{\"name\":\"1%\",\"value\":\"1%\"}}],[{\"Audience Types\":{\"name\":\"Open Targeting\",\"value\":\"Open Targeting\"}}]],\"metric\":{\"__ndarray__\":\"rkfhehTMn0AfhetRuPeZQM3MzMzMgZ9A\",\"dtype\":\"float64\",\"shape\":[3]},\"numerator\":{\"__ndarray__\":\"mpmZmVfPHUFxPQrXvIgQQY/C9SjvfRBB\",\"dtype\":\"float64\",\"shape\":[3]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"7FG4HoU2kkCF61G4nhGmQGZmZmZmNJNA\",\"dtype\":\"float64\",\"shape\":[3]},\"overall\":{\"__ndarray__\":\"MkOHVx44lEAyQ4dXHjiUQDJDh1ceOJRA\",\"dtype\":\"float64\",\"shape\":[3]},\"overall_spend_prop\":{\"__ndarray__\":\"IiIiIiKiKUAiIiIiIqIpQCIiIiIioilA\",\"dtype\":\"float64\",\"shape\":[3]},\"precision\":{\"__ndarray__\":\"wcqhRbbz6T+8dJMYBFbmP1YOLbKd7+M/\",\"dtype\":\"float64\",\"shape\":[3]},\"recall\":{\"__ndarray__\":\"tMh2vp8azz8ZBFYOLbK9P5HtfD81Xro/\",\"dtype\":\"float64\",\"shape\":[3]},\"size\":{\"__ndarray__\":\"AAAAAAAANEA8y4g+oLoxQDr21oZpbjBA\",\"dtype\":\"float64\",\"shape\":[3]},\"spend_prop\":{\"__ndarray__\":\"exSuR+E6N0DD9Shcj8IpQDMzMzMzsylA\",\"dtype\":\"float64\",\"shape\":[3]}}},\"id\":\"0631afc2-ea47-452f-b961-67edd8f63002\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data_source\":{\"id\":\"0631afc2-ea47-452f-b961-67edd8f63002\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"45bb867b-9455-48b3-863c-f4d99b5c52de\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"f7c8ab99-a011-4c48-9376-e52c30b9d2a6\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"4ed4de11-61ed-4d9a-9a50-2398fb8c42ca\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null},\"id\":\"46fe391c-b362-4528-a135-37c3c6f80493\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data_source\":{\"id\":\"9aad24e5-bdf8-4145-aecc-e64a31b211ed\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"48209d5a-2165-4cd7-b0b8-072cb10f9656\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"9242d94c-0852-484d-b83b-0a8124e84350\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"cd596115-5080-4398-bc38-c6fb1ec86383\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"45bb867b-9455-48b3-863c-f4d99b5c52de\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"f7c8ab99-a011-4c48-9376-e52c30b9d2a6\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"9242d94c-0852-484d-b83b-0a8124e84350\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"overall\",\"level_2\",\"index\",\"level_1\",\"level_3\",\"level_0\",\"imp_factor\",\"spend_prop\",\"recall\",\"precision\",\"size\",\"idx\",\"levels\",\"other_ga_fb_cpt\",\"overall_spend_prop\",\"denominator\",\"numerator\",\"metric\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAABAU0AAAAAAAAAwQAAAAAAAgE9AAAAAAADAUEAAAAAAAABkQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"idx\":[0,1,2,3,4],\"imp_factor\":{\"__ndarray__\":\"5/up8dJN8j8hsHJoke3wPzEIrBxaZO8/5/up8dJN6j9WDi2yne/nPw==\",\"dtype\":\"float64\",\"shape\":[5]},\"index\":[0,1,2,3,4],\"level_0\":[\"Audience Types : Lookalike\",\"Audience Types : Interests\",\"Audience Types : Website\",\"Audience Types : Interests\",\"Audience Types : Interests\"],\"level_1\":[\"Lookalike Types : 1-2%\",\"Interests : Education or Higher education or Hotels or Travel or University\",\"Custom Audiences : Retargeting 7 days\",\"Interests : Nightclubs or Nightlife or Online shopping or Others or Parties or Shopping\",\"- : -\"],\"level_2\":[\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\"],\"level_3\":[\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\"],\"levels\":[[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}},{\"Lookalike Types\":{\"name\":\"1-2%\",\"value\":\"1-2%\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}},{\"Interests\":{\"name\":\"Education or Higher education or Hotels or Travel or University\",\"value\":\"Education or Higher education or Hotels or Travel or University\"}}],[{\"Audience Types\":{\"name\":\"Website\",\"value\":\"Website\"}},{\"Custom Audiences\":{\"name\":\"Retargeting 7 days\",\"value\":\"Retargeting 7 days\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}},{\"Interests\":{\"name\":\"Nightclubs or Nightlife or Online shopping or Others or Parties or Shopping\",\"value\":\"Nightclubs or Nightlife or Online shopping or Others or Parties or Shopping\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}}]],\"metric\":{\"__ndarray__\":\"hetRuJ4RpkC4HoXrUfCfQIXrUbgeKJpAuB6F61GsmEAAAAAAAKOXQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"numerator\":{\"__ndarray__\":\"UrgehTWNCkGkcD0KV/DfQK5H4XqAv/lAUrgehWfU+UBcj8L1vIsNQQ==\",\"dtype\":\"float64\",\"shape\":[5]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"H4XrUbj3mUCkcD0K17aWQI/C9ShcdpNApHA9CtfjlkDD9Shcj9iTQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"overall\":{\"__ndarray__\":\"MkOHVx44lEAyQ4dXHjiUQDJDh1ceOJRAMkOHVx44lEAyQ4dXHjiUQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"overall_spend_prop\":{\"__ndarray__\":\"IiIiIiKiKUAiIiIiIqIpQCIiIiIioilAIiIiIiKiKUAiIiIiIqIpQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"precision\":{\"__ndarray__\":\"EFg5tMh27j+LbOf7qfHuP4PAyqFFtuc/y6FFtvP93D+28/3UeOnePw==\",\"dtype\":\"float64\",\"shape\":[5]},\"recall\":{\"__ndarray__\":\"qMZLN4lBwD/b+X5qvHSTP/p+arx0k6g/GQRWDi2ynT8730+Nl26yPw==\",\"dtype\":\"float64\",\"shape\":[5]},\"size\":{\"__ndarray__\":\"AAAAAAAANEAJ1WfaGn8yQIA3j1B9JjFAlpQDIsO9LEB2Yid2YicqQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"spend_prop\":{\"__ndarray__\":\"rkfhehSuJED2KFyPwvX4PxSuR+F6FBRAH4XrUbgeFECF61G4HgUnQA==\",\"dtype\":\"float64\",\"shape\":[5]}}},\"id\":\"aa978b5d-ce0b-4029-9b61-f681ec9f652d\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"dimension\":\"height\",\"line_width\":{\"value\":3},\"location\":12.816666666666666,\"plot\":{\"id\":\"e51fe882-1f96-4c8f-9cfc-bfb7db8cd353\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"61657fb2-23e6-4820-b4a4-f1137ef7f9c1\",\"type\":\"Span\"},{\"attributes\":{\"line_width\":{\"value\":3},\"location\":1294.0296307692302,\"plot\":{\"id\":\"e51fe882-1f96-4c8f-9cfc-bfb7db8cd353\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"d68298c8-d169-4424-8458-73fb2c9b443e\",\"type\":\"Span\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"field\":\"size\",\"units\":\"screen\"},\"x\":{\"field\":\"spend_prop\"},\"y\":{\"field\":\"metric\"}},\"id\":\"48209d5a-2165-4cd7-b0b8-072cb10f9656\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"4da7ec4b-f77a-461e-a57c-d33ec5aa72f9\",\"type\":\"ToolEvents\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"overall\",\"level_2\",\"index\",\"level_1\",\"level_3\",\"level_0\",\"imp_factor\",\"spend_prop\",\"recall\",\"precision\",\"size\",\"idx\",\"levels\",\"other_ga_fb_cpt\",\"overall_spend_prop\",\"denominator\",\"numerator\",\"metric\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAADIiEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"idx\":[0],\"imp_factor\":{\"__ndarray__\":\"z/dT46Wb8D8=\",\"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__\":\"IiIiIiKiKUA=\",\"dtype\":\"float64\",\"shape\":[1]},\"precision\":{\"__ndarray__\":\"8KfGSzeJ6T8=\",\"dtype\":\"float64\",\"shape\":[1]},\"recall\":{\"__ndarray__\":\"GQRWDi2y1T8=\",\"dtype\":\"float64\",\"shape\":[1]},\"size\":{\"__ndarray__\":\"AAAAAAAANEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"spend_prop\":{\"__ndarray__\":\"16NwPQp3QEA=\",\"dtype\":\"float64\",\"shape\":[1]}}},\"id\":\"9aad24e5-bdf8-4145-aecc-e64a31b211ed\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8de0715d-0831-462a-8354-d88e04417af0\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data_source\":{\"id\":\"aa978b5d-ce0b-4029-9b61-f681ec9f652d\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"73c1ebe3-8b4a-42f2-9aef-809a1e14ef2a\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"24a1c5de-561d-4ebf-b100-035583c07b3c\",\"type\":\"Circle\"},\"selection_glyph\":null},\"id\":\"c0719cdd-3b78-4b8d-ba50-f3a751039db5\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null},\"id\":\"2ef8fd81-51ba-4c13-8415-d9bb4471e7ca\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"41c21a53-9d5c-453f-b177-9ab37fb9c6c6\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"a34986dc-3186-4367-8156-54db59823dbd\",\"type\":\"LinearAxis\"}],\"plot_height\":500,\"plot_width\":800,\"renderers\":[{\"id\":\"41c21a53-9d5c-453f-b177-9ab37fb9c6c6\",\"type\":\"LinearAxis\"},{\"id\":\"11b09f13-48f9-4908-80a9-aa500c99518a\",\"type\":\"Grid\"},{\"id\":\"a34986dc-3186-4367-8156-54db59823dbd\",\"type\":\"LinearAxis\"},{\"id\":\"2716fc9c-d580-42f2-896b-eb17c8203eee\",\"type\":\"Grid\"},{\"id\":\"cd596115-5080-4398-bc38-c6fb1ec86383\",\"type\":\"GlyphRenderer\"},{\"id\":\"c0719cdd-3b78-4b8d-ba50-f3a751039db5\",\"type\":\"GlyphRenderer\"},{\"id\":\"4ed4de11-61ed-4d9a-9a50-2398fb8c42ca\",\"type\":\"GlyphRenderer\"},{\"id\":\"61657fb2-23e6-4820-b4a4-f1137ef7f9c1\",\"type\":\"Span\"},{\"id\":\"d68298c8-d169-4424-8458-73fb2c9b443e\",\"type\":\"Span\"}],\"title\":{\"id\":\"6079083b-2207-4d2b-a030-a237b610fe44\",\"type\":\"Title\"},\"tool_events\":{\"id\":\"4da7ec4b-f77a-461e-a57c-d33ec5aa72f9\",\"type\":\"ToolEvents\"},\"toolbar\":{\"id\":\"e75d397f-475c-4679-9e32-eba64631c59d\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"2ef8fd81-51ba-4c13-8415-d9bb4471e7ca\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"2f50203e-e6b2-4291-ac05-7d325fa0c613\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"46fe391c-b362-4528-a135-37c3c6f80493\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"45e5b0e3-c145-4cc1-b71c-0c3179f637a4\",\"type\":\"LinearScale\"}},\"id\":\"e51fe882-1f96-4c8f-9cfc-bfb7db8cd353\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2f50203e-e6b2-4291-ac05-7d325fa0c613\",\"type\":\"LinearScale\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"41b953fe-457a-494c-9dab-22aaabc5bd34\",\"type\":\"HoverTool\"}]},\"id\":\"e75d397f-475c-4679-9e32-eba64631c59d\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"45e5b0e3-c145-4cc1-b71c-0c3179f637a4\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"9d248497-fe34-4799-8b52-990a3257c1cc\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"plot\":{\"id\":\"e51fe882-1f96-4c8f-9cfc-bfb7db8cd353\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"8de0715d-0831-462a-8354-d88e04417af0\",\"type\":\"BasicTicker\"}},\"id\":\"11b09f13-48f9-4908-80a9-aa500c99518a\",\"type\":\"Grid\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"e51fe882-1f96-4c8f-9cfc-bfb7db8cd353\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"b706c591-757e-40e8-acea-6da6e4896abf\",\"type\":\"BasicTicker\"}},\"id\":\"2716fc9c-d580-42f2-896b-eb17c8203eee\",\"type\":\"Grid\"}],\"root_ids\":[\"e51fe882-1f96-4c8f-9cfc-bfb7db8cd353\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.6\"}};\n",
" var render_items = [{\"docid\":\"e1720065-4c41-4456-9ff8-2e474aa1cf8b\",\"elementid\":\"d37a5649-a702-4b8a-91d2-50576586e887\",\"modelid\":\"e51fe882-1f96-4c8f-9cfc-bfb7db8cd353\",\"notebook_comms_target\":\"306ff0fb-5590-4597-81c5-e6ef5a089441\"}];\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(\"d37a5649-a702-4b8a-91d2-50576586e887\")).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=\"d15e21df-ba7a-4f4e-91bb-6b0e6e275856\"></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(\"d15e21df-ba7a-4f4e-91bb-6b0e6e275856\");\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(\"1c28b204-d4d2-43f6-ac82-e324d23b15e2\", 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(\"d15e21df-ba7a-4f4e-91bb-6b0e6e275856\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'd15e21df-ba7a-4f4e-91bb-6b0e6e275856' 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 = {\"def92849-0c84-4ec3-a40c-6fd1a6ca3c6b\":{\"roots\":{\"references\":[{\"attributes\":{\"editor\":{\"id\":\"25730a9e-03e6-4dc7-9f2f-9227d67ca766\",\"type\":\"StringEditor\"},\"field\":\"precision\",\"formatter\":{\"id\":\"0dcd00cb-275e-459c-8216-ff86ab4c07f0\",\"type\":\"StringFormatter\"},\"title\":\"Precision\"},\"id\":\"8662c8eb-bd73-43da-908c-2f154a899b7e\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"dbaa58f3-393c-4057-86c2-aed08cf2d07c\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"bf0ba3f9-e8c6-4529-bbbd-9f80d8c20f18\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"0dcd00cb-275e-459c-8216-ff86ab4c07f0\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"bf0ba3f9-e8c6-4529-bbbd-9f80d8c20f18\",\"type\":\"StringEditor\"},\"field\":\"imp_factor\",\"formatter\":{\"id\":\"96685fda-8cbd-41e4-b3b5-b6ce3f8c894f\",\"type\":\"StringFormatter\"},\"title\":\"MCC\"},\"id\":\"f062096e-9e54-4520-a3e2-eeeefd4a4c53\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"5c1cb409-c331-4dc0-a221-21ed6832218f\",\"type\":\"StringEditor\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"level_2\",\"index\",\"level_1\",\"level_3\",\"level_0\",\"imp_factor\",\"spend_prop\",\"recall\",\"precision\",\"levels\",\"other_ga_fb_cpt\",\"denominator\",\"numerator\",\"metric\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAADIiEA=\",\"dtype\":\"float64\",\"shape\":[1]},\"imp_factor\":{\"__ndarray__\":\"z/dT46Wb8D8=\",\"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__\":\"GQRWDi2y1T8=\",\"dtype\":\"float64\",\"shape\":[1]},\"spend_prop\":{\"__ndarray__\":\"16NwPQp3QEA=\",\"dtype\":\"float64\",\"shape\":[1]}}},\"id\":\"66bb1837-c04d-4269-a34c-98b8e6784635\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"96685fda-8cbd-41e4-b3b5-b6ce3f8c894f\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"d39a5a7f-5046-4992-b6ee-9c3a3086e09f\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"c7fd9646-1387-4600-8431-e50f31b6275e\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"25730a9e-03e6-4dc7-9f2f-9227d67ca766\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"64965e0a-f317-4347-a963-188142ce36f4\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"ee1b76f9-04f7-4d17-93c9-7b98cce88382\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"5f1df556-bb9e-4889-9909-d311839f53e0\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"dbaa58f3-393c-4057-86c2-aed08cf2d07c\",\"type\":\"StringEditor\"},\"field\":\"level_0\",\"formatter\":{\"id\":\"ae5de4d7-1c39-4069-9c51-2cb2bd44ce98\",\"type\":\"StringFormatter\"},\"title\":\"level 0\"},\"id\":\"72f9519d-e4f3-4479-80c8-14ac8476cb7f\",\"type\":\"TableColumn\"},{\"attributes\":{\"editor\":{\"id\":\"5c1cb409-c331-4dc0-a221-21ed6832218f\",\"type\":\"StringEditor\"},\"field\":\"level_2\",\"formatter\":{\"id\":\"d39a5a7f-5046-4992-b6ee-9c3a3086e09f\",\"type\":\"StringFormatter\"},\"title\":\"level 2\"},\"id\":\"a510e8ae-aa9c-4b10-9ad2-1eb8beb93f6b\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"e69d675d-0032-4c83-b8b7-a71f4643fbb5\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"d5d2939c-76d9-46db-9799-bed6928c0fd2\",\"type\":\"StringEditor\"},\"field\":\"recall\",\"formatter\":{\"id\":\"5f1df556-bb9e-4889-9909-d311839f53e0\",\"type\":\"StringFormatter\"},\"title\":\"Recall\"},\"id\":\"c8a18f42-e795-47b8-a81c-f05eb1c87d3a\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"58ccdae0-f8a2-45c3-9531-e5220d1fbfd0\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"31a29712-3e02-4242-ae69-806e7ba177d7\",\"type\":\"StringEditor\"},\"field\":\"level_1\",\"formatter\":{\"id\":\"ee1b76f9-04f7-4d17-93c9-7b98cce88382\",\"type\":\"StringFormatter\"},\"title\":\"level 1\"},\"id\":\"2d31a5d2-24a3-4084-87dc-560d38098554\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"d5d2939c-76d9-46db-9799-bed6928c0fd2\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"e69d675d-0032-4c83-b8b7-a71f4643fbb5\",\"type\":\"StringEditor\"},\"field\":\"metric\",\"formatter\":{\"id\":\"cf503998-987c-4593-abd7-366e7579e2a5\",\"type\":\"StringFormatter\"},\"title\":\"ga_fb_cpt\"},\"id\":\"93c1a0a6-c5af-43dc-99b2-6dec394a27b7\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"f7064ee7-6b07-4838-b75b-d0663f05d679\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"ae5de4d7-1c39-4069-9c51-2cb2bd44ce98\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"c7fd9646-1387-4600-8431-e50f31b6275e\",\"type\":\"StringEditor\"},\"field\":\"spend_prop\",\"formatter\":{\"id\":\"f7064ee7-6b07-4838-b75b-d0663f05d679\",\"type\":\"StringFormatter\"},\"title\":\"Spend %\"},\"id\":\"e955cab9-314f-4ad8-a7e4-f712bb8bbede\",\"type\":\"TableColumn\"},{\"attributes\":{\"editor\":{\"id\":\"64965e0a-f317-4347-a963-188142ce36f4\",\"type\":\"StringEditor\"},\"field\":\"level_3\",\"formatter\":{\"id\":\"58ccdae0-f8a2-45c3-9531-e5220d1fbfd0\",\"type\":\"StringFormatter\"},\"title\":\"level 3\"},\"id\":\"73f1a230-cb52-424e-a6d9-1815daa32c0e\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"31a29712-3e02-4242-ae69-806e7ba177d7\",\"type\":\"StringEditor\"},{\"attributes\":{\"columns\":[{\"id\":\"72f9519d-e4f3-4479-80c8-14ac8476cb7f\",\"type\":\"TableColumn\"},{\"id\":\"2d31a5d2-24a3-4084-87dc-560d38098554\",\"type\":\"TableColumn\"},{\"id\":\"a510e8ae-aa9c-4b10-9ad2-1eb8beb93f6b\",\"type\":\"TableColumn\"},{\"id\":\"73f1a230-cb52-424e-a6d9-1815daa32c0e\",\"type\":\"TableColumn\"},{\"id\":\"93c1a0a6-c5af-43dc-99b2-6dec394a27b7\",\"type\":\"TableColumn\"},{\"id\":\"e955cab9-314f-4ad8-a7e4-f712bb8bbede\",\"type\":\"TableColumn\"},{\"id\":\"8662c8eb-bd73-43da-908c-2f154a899b7e\",\"type\":\"TableColumn\"},{\"id\":\"c8a18f42-e795-47b8-a81c-f05eb1c87d3a\",\"type\":\"TableColumn\"},{\"id\":\"f062096e-9e54-4520-a3e2-eeeefd4a4c53\",\"type\":\"TableColumn\"}],\"source\":{\"id\":\"66bb1837-c04d-4269-a34c-98b8e6784635\",\"type\":\"ColumnDataSource\"},\"width\":1000},\"id\":\"18ea4a85-68ec-4282-896b-ffc138c4a274\",\"type\":\"DataTable\"},{\"attributes\":{},\"id\":\"cf503998-987c-4593-abd7-366e7579e2a5\",\"type\":\"StringFormatter\"}],\"root_ids\":[\"18ea4a85-68ec-4282-896b-ffc138c4a274\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.6\"}};\n",
" var render_items = [{\"docid\":\"def92849-0c84-4ec3-a40c-6fd1a6ca3c6b\",\"elementid\":\"d15e21df-ba7a-4f4e-91bb-6b0e6e275856\",\"modelid\":\"18ea4a85-68ec-4282-896b-ffc138c4a274\",\"notebook_comms_target\":\"1c28b204-d4d2-43f6-ac82-e324d23b15e2\"}];\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(\"d15e21df-ba7a-4f4e-91bb-6b0e6e275856\")).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=\"029aa637-6e10-4942-a7ae-bb69f60bf0e5\"></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(\"029aa637-6e10-4942-a7ae-bb69f60bf0e5\");\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(\"33065553-64fd-4933-81cb-d10fa566eedc\", 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(\"029aa637-6e10-4942-a7ae-bb69f60bf0e5\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid '029aa637-6e10-4942-a7ae-bb69f60bf0e5' 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 = {\"d44af973-e7ce-4047-8b31-f565328902a0\":{\"roots\":{\"references\":[{\"attributes\":{\"editor\":{\"id\":\"25730a9e-03e6-4dc7-9f2f-9227d67ca766\",\"type\":\"StringEditor\"},\"field\":\"precision\",\"formatter\":{\"id\":\"0dcd00cb-275e-459c-8216-ff86ab4c07f0\",\"type\":\"StringFormatter\"},\"title\":\"Precision\"},\"id\":\"8662c8eb-bd73-43da-908c-2f154a899b7e\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"dbaa58f3-393c-4057-86c2-aed08cf2d07c\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"bf0ba3f9-e8c6-4529-bbbd-9f80d8c20f18\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"0dcd00cb-275e-459c-8216-ff86ab4c07f0\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"5c1cb409-c331-4dc0-a221-21ed6832218f\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"bf0ba3f9-e8c6-4529-bbbd-9f80d8c20f18\",\"type\":\"StringEditor\"},\"field\":\"imp_factor\",\"formatter\":{\"id\":\"96685fda-8cbd-41e4-b3b5-b6ce3f8c894f\",\"type\":\"StringFormatter\"},\"title\":\"MCC\"},\"id\":\"f062096e-9e54-4520-a3e2-eeeefd4a4c53\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"96685fda-8cbd-41e4-b3b5-b6ce3f8c894f\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"d39a5a7f-5046-4992-b6ee-9c3a3086e09f\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"c7fd9646-1387-4600-8431-e50f31b6275e\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"25730a9e-03e6-4dc7-9f2f-9227d67ca766\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"ae5de4d7-1c39-4069-9c51-2cb2bd44ce98\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"ee1b76f9-04f7-4d17-93c9-7b98cce88382\",\"type\":\"StringFormatter\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"level_2\",\"index\",\"level_1\",\"level_3\",\"level_0\",\"imp_factor\",\"spend_prop\",\"recall\",\"precision\",\"levels\",\"other_ga_fb_cpt\",\"denominator\",\"numerator\",\"metric\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAABAU0AAAAAAAAAwQAAAAAAAgE9AAAAAAADAUEAAAAAAAABkQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"imp_factor\":{\"__ndarray__\":\"5/up8dJN8j8hsHJoke3wPzEIrBxaZO8/5/up8dJN6j9WDi2yne/nPw==\",\"dtype\":\"float64\",\"shape\":[5]},\"index\":[0,1,2,3,4],\"level_0\":[\"Audience Types : Lookalike\",\"Audience Types : Interests\",\"Audience Types : Website\",\"Audience Types : Interests\",\"Audience Types : Interests\"],\"level_1\":[\"Lookalike Types : 1-2%\",\"Interests : Education or Higher education or Hotels or Travel or University\",\"Custom Audiences : Retargeting 7 days\",\"Interests : Nightclubs or Nightlife or Online shopping or Others or Parties or Shopping\",\"- : -\"],\"level_2\":[\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\"],\"level_3\":[\"- : -\",\"- : -\",\"- : -\",\"- : -\",\"- : -\"],\"levels\":[[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}},{\"Lookalike Types\":{\"name\":\"1-2%\",\"value\":\"1-2%\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}},{\"Interests\":{\"name\":\"Education or Higher education or Hotels or Travel or University\",\"value\":\"Education or Higher education or Hotels or Travel or University\"}}],[{\"Audience Types\":{\"name\":\"Website\",\"value\":\"Website\"}},{\"Custom Audiences\":{\"name\":\"Retargeting 7 days\",\"value\":\"Retargeting 7 days\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}},{\"Interests\":{\"name\":\"Nightclubs or Nightlife or Online shopping or Others or Parties or Shopping\",\"value\":\"Nightclubs or Nightlife or Online shopping or Others or Parties or Shopping\"}}],[{\"Audience Types\":{\"name\":\"Interests\",\"value\":\"Interests\"}}]],\"metric\":{\"__ndarray__\":\"hetRuJ4RpkC4HoXrUfCfQIXrUbgeKJpAuB6F61GsmEAAAAAAAKOXQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"numerator\":{\"__ndarray__\":\"UrgehTWNCkGkcD0KV/DfQK5H4XqAv/lAUrgehWfU+UBcj8L1vIsNQQ==\",\"dtype\":\"float64\",\"shape\":[5]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"H4XrUbj3mUCkcD0K17aWQI/C9ShcdpNApHA9CtfjlkDD9Shcj9iTQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"precision\":{\"__ndarray__\":\"EFg5tMh27j+LbOf7qfHuP4PAyqFFtuc/y6FFtvP93D+28/3UeOnePw==\",\"dtype\":\"float64\",\"shape\":[5]},\"recall\":{\"__ndarray__\":\"qMZLN4lBwD/b+X5qvHSTP/p+arx0k6g/GQRWDi2ynT8730+Nl26yPw==\",\"dtype\":\"float64\",\"shape\":[5]},\"spend_prop\":{\"__ndarray__\":\"rkfhehSuJED2KFyPwvX4PxSuR+F6FBRAH4XrUbgeFECF61G4HgUnQA==\",\"dtype\":\"float64\",\"shape\":[5]}}},\"id\":\"9d83d075-2dc5-4948-84ff-bee5ab1839be\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"5f1df556-bb9e-4889-9909-d311839f53e0\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"dbaa58f3-393c-4057-86c2-aed08cf2d07c\",\"type\":\"StringEditor\"},\"field\":\"level_0\",\"formatter\":{\"id\":\"ae5de4d7-1c39-4069-9c51-2cb2bd44ce98\",\"type\":\"StringFormatter\"},\"title\":\"level 0\"},\"id\":\"72f9519d-e4f3-4479-80c8-14ac8476cb7f\",\"type\":\"TableColumn\"},{\"attributes\":{\"editor\":{\"id\":\"5c1cb409-c331-4dc0-a221-21ed6832218f\",\"type\":\"StringEditor\"},\"field\":\"level_2\",\"formatter\":{\"id\":\"d39a5a7f-5046-4992-b6ee-9c3a3086e09f\",\"type\":\"StringFormatter\"},\"title\":\"level 2\"},\"id\":\"a510e8ae-aa9c-4b10-9ad2-1eb8beb93f6b\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"e69d675d-0032-4c83-b8b7-a71f4643fbb5\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"d5d2939c-76d9-46db-9799-bed6928c0fd2\",\"type\":\"StringEditor\"},\"field\":\"recall\",\"formatter\":{\"id\":\"5f1df556-bb9e-4889-9909-d311839f53e0\",\"type\":\"StringFormatter\"},\"title\":\"Recall\"},\"id\":\"c8a18f42-e795-47b8-a81c-f05eb1c87d3a\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"58ccdae0-f8a2-45c3-9531-e5220d1fbfd0\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"31a29712-3e02-4242-ae69-806e7ba177d7\",\"type\":\"StringEditor\"},\"field\":\"level_1\",\"formatter\":{\"id\":\"ee1b76f9-04f7-4d17-93c9-7b98cce88382\",\"type\":\"StringFormatter\"},\"title\":\"level 1\"},\"id\":\"2d31a5d2-24a3-4084-87dc-560d38098554\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"d5d2939c-76d9-46db-9799-bed6928c0fd2\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"e69d675d-0032-4c83-b8b7-a71f4643fbb5\",\"type\":\"StringEditor\"},\"field\":\"metric\",\"formatter\":{\"id\":\"cf503998-987c-4593-abd7-366e7579e2a5\",\"type\":\"StringFormatter\"},\"title\":\"ga_fb_cpt\"},\"id\":\"93c1a0a6-c5af-43dc-99b2-6dec394a27b7\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"f7064ee7-6b07-4838-b75b-d0663f05d679\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"64965e0a-f317-4347-a963-188142ce36f4\",\"type\":\"StringEditor\"},\"field\":\"level_3\",\"formatter\":{\"id\":\"58ccdae0-f8a2-45c3-9531-e5220d1fbfd0\",\"type\":\"StringFormatter\"},\"title\":\"level 3\"},\"id\":\"73f1a230-cb52-424e-a6d9-1815daa32c0e\",\"type\":\"TableColumn\"},{\"attributes\":{\"columns\":[{\"id\":\"72f9519d-e4f3-4479-80c8-14ac8476cb7f\",\"type\":\"TableColumn\"},{\"id\":\"2d31a5d2-24a3-4084-87dc-560d38098554\",\"type\":\"TableColumn\"},{\"id\":\"a510e8ae-aa9c-4b10-9ad2-1eb8beb93f6b\",\"type\":\"TableColumn\"},{\"id\":\"73f1a230-cb52-424e-a6d9-1815daa32c0e\",\"type\":\"TableColumn\"},{\"id\":\"93c1a0a6-c5af-43dc-99b2-6dec394a27b7\",\"type\":\"TableColumn\"},{\"id\":\"e955cab9-314f-4ad8-a7e4-f712bb8bbede\",\"type\":\"TableColumn\"},{\"id\":\"8662c8eb-bd73-43da-908c-2f154a899b7e\",\"type\":\"TableColumn\"},{\"id\":\"c8a18f42-e795-47b8-a81c-f05eb1c87d3a\",\"type\":\"TableColumn\"},{\"id\":\"f062096e-9e54-4520-a3e2-eeeefd4a4c53\",\"type\":\"TableColumn\"}],\"source\":{\"id\":\"9d83d075-2dc5-4948-84ff-bee5ab1839be\",\"type\":\"ColumnDataSource\"},\"width\":1000},\"id\":\"b48b26af-26a5-468b-bd12-0fd498cd28ff\",\"type\":\"DataTable\"},{\"attributes\":{},\"id\":\"64965e0a-f317-4347-a963-188142ce36f4\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"c7fd9646-1387-4600-8431-e50f31b6275e\",\"type\":\"StringEditor\"},\"field\":\"spend_prop\",\"formatter\":{\"id\":\"f7064ee7-6b07-4838-b75b-d0663f05d679\",\"type\":\"StringFormatter\"},\"title\":\"Spend %\"},\"id\":\"e955cab9-314f-4ad8-a7e4-f712bb8bbede\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"31a29712-3e02-4242-ae69-806e7ba177d7\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"cf503998-987c-4593-abd7-366e7579e2a5\",\"type\":\"StringFormatter\"}],\"root_ids\":[\"b48b26af-26a5-468b-bd12-0fd498cd28ff\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.6\"}};\n",
" var render_items = [{\"docid\":\"d44af973-e7ce-4047-8b31-f565328902a0\",\"elementid\":\"029aa637-6e10-4942-a7ae-bb69f60bf0e5\",\"modelid\":\"b48b26af-26a5-468b-bd12-0fd498cd28ff\",\"notebook_comms_target\":\"33065553-64fd-4933-81cb-d10fa566eedc\"}];\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(\"029aa637-6e10-4942-a7ae-bb69f60bf0e5\")).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=\"3b7d7ccb-a447-4102-91e8-1c61db3579d9\"></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(\"3b7d7ccb-a447-4102-91e8-1c61db3579d9\");\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(\"23461dfa-b3b0-4fa4-acac-4eb5ceb96ec2\", 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(\"3b7d7ccb-a447-4102-91e8-1c61db3579d9\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid '3b7d7ccb-a447-4102-91e8-1c61db3579d9' 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 = {\"25eaa7d7-2b9d-4f56-9637-f35801e4123c\":{\"roots\":{\"references\":[{\"attributes\":{\"editor\":{\"id\":\"25730a9e-03e6-4dc7-9f2f-9227d67ca766\",\"type\":\"StringEditor\"},\"field\":\"precision\",\"formatter\":{\"id\":\"0dcd00cb-275e-459c-8216-ff86ab4c07f0\",\"type\":\"StringFormatter\"},\"title\":\"Precision\"},\"id\":\"8662c8eb-bd73-43da-908c-2f154a899b7e\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"dbaa58f3-393c-4057-86c2-aed08cf2d07c\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"bf0ba3f9-e8c6-4529-bbbd-9f80d8c20f18\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"0dcd00cb-275e-459c-8216-ff86ab4c07f0\",\"type\":\"StringFormatter\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"level_2\",\"index\",\"level_1\",\"level_3\",\"level_0\",\"imp_factor\",\"spend_prop\",\"recall\",\"precision\",\"levels\",\"other_ga_fb_cpt\",\"denominator\",\"numerator\",\"metric\"],\"data\":{\"denominator\":{\"__ndarray__\":\"AAAAAAAAbkAAAAAAAGBkQAAAAAAAwGBA\",\"dtype\":\"float64\",\"shape\":[3]},\"imp_factor\":{\"__ndarray__\":\"+FPjpZvE8D/ufD81XrrtP1pkO99Pjes/\",\"dtype\":\"float64\",\"shape\":[3]},\"index\":[0,1,2],\"level_0\":[\"Audience Types : Lookalike\",\"Audience Types : Lookalike\",\"Audience Types : Open Targeting\"],\"level_1\":[\"- : -\",\"Lookalike Types : 1%\",\"- : -\"],\"level_2\":[\"- : -\",\"- : -\",\"- : -\"],\"level_3\":[\"- : -\",\"- : -\",\"- : -\"],\"levels\":[[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}}],[{\"Audience Types\":{\"name\":\"Lookalike\",\"value\":\"Lookalike\"}},{\"Lookalike Types\":{\"name\":\"1%\",\"value\":\"1%\"}}],[{\"Audience Types\":{\"name\":\"Open Targeting\",\"value\":\"Open Targeting\"}}]],\"metric\":{\"__ndarray__\":\"rkfhehTMn0AfhetRuPeZQM3MzMzMgZ9A\",\"dtype\":\"float64\",\"shape\":[3]},\"numerator\":{\"__ndarray__\":\"mpmZmVfPHUFxPQrXvIgQQY/C9SjvfRBB\",\"dtype\":\"float64\",\"shape\":[3]},\"other_ga_fb_cpt\":{\"__ndarray__\":\"7FG4HoU2kkCF61G4nhGmQGZmZmZmNJNA\",\"dtype\":\"float64\",\"shape\":[3]},\"precision\":{\"__ndarray__\":\"wcqhRbbz6T+8dJMYBFbmP1YOLbKd7+M/\",\"dtype\":\"float64\",\"shape\":[3]},\"recall\":{\"__ndarray__\":\"tMh2vp8azz8ZBFYOLbK9P5HtfD81Xro/\",\"dtype\":\"float64\",\"shape\":[3]},\"spend_prop\":{\"__ndarray__\":\"exSuR+E6N0DD9Shcj8IpQDMzMzMzsylA\",\"dtype\":\"float64\",\"shape\":[3]}}},\"id\":\"2c63186d-0afd-42db-8816-2334410de9b3\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"5c1cb409-c331-4dc0-a221-21ed6832218f\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"bf0ba3f9-e8c6-4529-bbbd-9f80d8c20f18\",\"type\":\"StringEditor\"},\"field\":\"imp_factor\",\"formatter\":{\"id\":\"96685fda-8cbd-41e4-b3b5-b6ce3f8c894f\",\"type\":\"StringFormatter\"},\"title\":\"MCC\"},\"id\":\"f062096e-9e54-4520-a3e2-eeeefd4a4c53\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"96685fda-8cbd-41e4-b3b5-b6ce3f8c894f\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"d39a5a7f-5046-4992-b6ee-9c3a3086e09f\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"c7fd9646-1387-4600-8431-e50f31b6275e\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"25730a9e-03e6-4dc7-9f2f-9227d67ca766\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"ae5de4d7-1c39-4069-9c51-2cb2bd44ce98\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"ee1b76f9-04f7-4d17-93c9-7b98cce88382\",\"type\":\"StringFormatter\"},{\"attributes\":{},\"id\":\"5f1df556-bb9e-4889-9909-d311839f53e0\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"dbaa58f3-393c-4057-86c2-aed08cf2d07c\",\"type\":\"StringEditor\"},\"field\":\"level_0\",\"formatter\":{\"id\":\"ae5de4d7-1c39-4069-9c51-2cb2bd44ce98\",\"type\":\"StringFormatter\"},\"title\":\"level 0\"},\"id\":\"72f9519d-e4f3-4479-80c8-14ac8476cb7f\",\"type\":\"TableColumn\"},{\"attributes\":{\"editor\":{\"id\":\"5c1cb409-c331-4dc0-a221-21ed6832218f\",\"type\":\"StringEditor\"},\"field\":\"level_2\",\"formatter\":{\"id\":\"d39a5a7f-5046-4992-b6ee-9c3a3086e09f\",\"type\":\"StringFormatter\"},\"title\":\"level 2\"},\"id\":\"a510e8ae-aa9c-4b10-9ad2-1eb8beb93f6b\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"e69d675d-0032-4c83-b8b7-a71f4643fbb5\",\"type\":\"StringEditor\"},{\"attributes\":{\"columns\":[{\"id\":\"72f9519d-e4f3-4479-80c8-14ac8476cb7f\",\"type\":\"TableColumn\"},{\"id\":\"2d31a5d2-24a3-4084-87dc-560d38098554\",\"type\":\"TableColumn\"},{\"id\":\"a510e8ae-aa9c-4b10-9ad2-1eb8beb93f6b\",\"type\":\"TableColumn\"},{\"id\":\"73f1a230-cb52-424e-a6d9-1815daa32c0e\",\"type\":\"TableColumn\"},{\"id\":\"93c1a0a6-c5af-43dc-99b2-6dec394a27b7\",\"type\":\"TableColumn\"},{\"id\":\"e955cab9-314f-4ad8-a7e4-f712bb8bbede\",\"type\":\"TableColumn\"},{\"id\":\"8662c8eb-bd73-43da-908c-2f154a899b7e\",\"type\":\"TableColumn\"},{\"id\":\"c8a18f42-e795-47b8-a81c-f05eb1c87d3a\",\"type\":\"TableColumn\"},{\"id\":\"f062096e-9e54-4520-a3e2-eeeefd4a4c53\",\"type\":\"TableColumn\"}],\"source\":{\"id\":\"2c63186d-0afd-42db-8816-2334410de9b3\",\"type\":\"ColumnDataSource\"},\"width\":1000},\"id\":\"565d9552-9727-474f-b21a-4fb4e3e70bf9\",\"type\":\"DataTable\"},{\"attributes\":{\"editor\":{\"id\":\"d5d2939c-76d9-46db-9799-bed6928c0fd2\",\"type\":\"StringEditor\"},\"field\":\"recall\",\"formatter\":{\"id\":\"5f1df556-bb9e-4889-9909-d311839f53e0\",\"type\":\"StringFormatter\"},\"title\":\"Recall\"},\"id\":\"c8a18f42-e795-47b8-a81c-f05eb1c87d3a\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"58ccdae0-f8a2-45c3-9531-e5220d1fbfd0\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"31a29712-3e02-4242-ae69-806e7ba177d7\",\"type\":\"StringEditor\"},\"field\":\"level_1\",\"formatter\":{\"id\":\"ee1b76f9-04f7-4d17-93c9-7b98cce88382\",\"type\":\"StringFormatter\"},\"title\":\"level 1\"},\"id\":\"2d31a5d2-24a3-4084-87dc-560d38098554\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"d5d2939c-76d9-46db-9799-bed6928c0fd2\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"e69d675d-0032-4c83-b8b7-a71f4643fbb5\",\"type\":\"StringEditor\"},\"field\":\"metric\",\"formatter\":{\"id\":\"cf503998-987c-4593-abd7-366e7579e2a5\",\"type\":\"StringFormatter\"},\"title\":\"ga_fb_cpt\"},\"id\":\"93c1a0a6-c5af-43dc-99b2-6dec394a27b7\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"f7064ee7-6b07-4838-b75b-d0663f05d679\",\"type\":\"StringFormatter\"},{\"attributes\":{\"editor\":{\"id\":\"64965e0a-f317-4347-a963-188142ce36f4\",\"type\":\"StringEditor\"},\"field\":\"level_3\",\"formatter\":{\"id\":\"58ccdae0-f8a2-45c3-9531-e5220d1fbfd0\",\"type\":\"StringFormatter\"},\"title\":\"level 3\"},\"id\":\"73f1a230-cb52-424e-a6d9-1815daa32c0e\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"64965e0a-f317-4347-a963-188142ce36f4\",\"type\":\"StringEditor\"},{\"attributes\":{\"editor\":{\"id\":\"c7fd9646-1387-4600-8431-e50f31b6275e\",\"type\":\"StringEditor\"},\"field\":\"spend_prop\",\"formatter\":{\"id\":\"f7064ee7-6b07-4838-b75b-d0663f05d679\",\"type\":\"StringFormatter\"},\"title\":\"Spend %\"},\"id\":\"e955cab9-314f-4ad8-a7e4-f712bb8bbede\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"31a29712-3e02-4242-ae69-806e7ba177d7\",\"type\":\"StringEditor\"},{\"attributes\":{},\"id\":\"cf503998-987c-4593-abd7-366e7579e2a5\",\"type\":\"StringFormatter\"}],\"root_ids\":[\"565d9552-9727-474f-b21a-4fb4e3e70bf9\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.6\"}};\n",
" var render_items = [{\"docid\":\"25eaa7d7-2b9d-4f56-9637-f35801e4123c\",\"elementid\":\"3b7d7ccb-a447-4102-91e8-1c61db3579d9\",\"modelid\":\"565d9552-9727-474f-b21a-4fb4e3e70bf9\",\"notebook_comms_target\":\"23461dfa-b3b0-4fa4-acac-4eb5ceb96ec2\"}];\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(\"3b7d7ccb-a447-4102-91e8-1c61db3579d9\")).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