{"cells":[{"metadata":{"toc":true,"_uuid":"ac1c192efcbacf0a8475d76eb6f83c12d2145279"},"cell_type":"markdown","source":"<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#相关变量分析\" data-toc-modified-id=\"相关变量分析-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>相关变量分析</a></span><ul class=\"toc-item\"><li><span><a href=\"#比赛介绍\" data-toc-modified-id=\"比赛介绍-1.1\"><span class=\"toc-item-num\">1.1&nbsp;&nbsp;</span>比赛介绍</a></span></li><li><span><a href=\"#相关有趣的知识点\" data-toc-modified-id=\"相关有趣的知识点-1.2\"><span class=\"toc-item-num\">1.2&nbsp;&nbsp;</span>相关有趣的知识点</a></span></li><li><span><a href=\"#读入数据\" data-toc-modified-id=\"读入数据-1.3\"><span class=\"toc-item-num\">1.3&nbsp;&nbsp;</span>读入数据</a></span><ul class=\"toc-item\"><li><span><a href=\"#Target-variable\" data-toc-modified-id=\"Target-variable-1.3.1\"><span class=\"toc-item-num\">1.3.1&nbsp;&nbsp;</span>Target variable</a></span></li><li><span><a href=\"#full-Visitor-ld\" data-toc-modified-id=\"full-Visitor-ld-1.3.2\"><span class=\"toc-item-num\">1.3.2&nbsp;&nbsp;</span>full Visitor ld</a></span></li></ul></li><li><span><a href=\"#基本数据分析\" data-toc-modified-id=\"基本数据分析-1.4\"><span class=\"toc-item-num\">1.4&nbsp;&nbsp;</span>基本数据分析</a></span><ul class=\"toc-item\"><li><span><a href=\"#目标变量\" data-toc-modified-id=\"目标变量-1.4.1\"><span class=\"toc-item-num\">1.4.1&nbsp;&nbsp;</span>目标变量</a></span></li><li><span><a href=\"#设备与-target-的关系\" data-toc-modified-id=\"设备与-target-的关系-1.4.2\"><span class=\"toc-item-num\">1.4.2&nbsp;&nbsp;</span>设备与 target 的关系</a></span></li><li><span><a href=\"#target-当成时间序列\" data-toc-modified-id=\"target-当成时间序列-1.4.3\"><span class=\"toc-item-num\">1.4.3&nbsp;&nbsp;</span>target 当成时间序列</a></span></li><li><span><a href=\"#geographic-与-target-关系\" data-toc-modified-id=\"geographic-与-target-关系-1.4.4\"><span class=\"toc-item-num\">1.4.4&nbsp;&nbsp;</span>geographic 与 target 关系</a></span></li><li><span><a href=\"#traffic-source-和-target-的关系\" data-toc-modified-id=\"traffic-source-和-target-的关系-1.4.5\"><span class=\"toc-item-num\">1.4.5&nbsp;&nbsp;</span>traffic source 和 target 的关系</a></span></li></ul></li></ul></li><li><span><a href=\"#参考资料\" data-toc-modified-id=\"参考资料-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>参考资料</a></span></li></ul></div>"},{"metadata":{"_uuid":"4d0f681910fdf8df23800664e90cc6a5f15242bc"},"cell_type":"markdown","source":"# 相关变量分析\n\n*By Jared Gong*\n\n本文档专注于分析各个变量。"},{"metadata":{"_uuid":"de186e55600d77465ebf2d861940393e3cb3328b"},"cell_type":"markdown","source":"## 比赛介绍\n\n>> Google Analytics Customer Revenue Prediction \n\n**Objective of the competition:**\n\n在本次竞赛中，我们面临的挑战是分析Google Merchandise Store（也称为GStore，销售谷歌周边）客户数据集，predicting the log of the total revenue per user, be aware that not all rows in `test.csv` will correspond to a row in the submission, but all unique `fullVisitorIds` will correspond to a row in the submission.\n\n\n有多个列包含不同深度的JSON blob。在其中一个JSON列（`total`）中，子列 `transactionRevenue` 包含我们尝试预测的收入信息。该子列仅存在于训练数据中。具体的来说，我们预测每个用户的所有交易总和的自然对数。对于测试集中的每个用户，目标是：\n\n$$\n\\text{target}^\\text{user} = \\ln \\sum_{i=1}^n \\text{transaction}_i^\\text{user}\n$$"},{"metadata":{"trusted":true,"_uuid":"0486362a0112abc9362198402c0afcaf2f2cb9f2"},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\n%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"904515ce7015183658b963c08253ef6c99b2db51"},"cell_type":"markdown","source":"## 相关有趣的知识点"},{"metadata":{"_uuid":"5bd03eccd8a8cc84cbc1d8adc7fb6046d357c842"},"cell_type":"markdown","source":"## 读入数据\n\n本数据有多个列包含不同深度的JSON blob。"},{"metadata":{"_uuid":"f798427aea738a57ff2a95bf748c0f9c502e6d28"},"cell_type":"markdown","source":"\n关于数据集：\n\n与大多数其他的kaggle比赛类似，我们给出了两个数据集\n\n    train.csv\n    test.csv\n\n数据集中的每一行都是对商店的一次访问。我们预测每个用户的所有交易总和的自然对数。\n\n需要注意的是，有多个列包含不同深度的JSON blob。在其中一个JSON列（`total`）中，子列 `transactionRevenue` 包含我们尝试预测的收入信息。"},{"metadata":{"code_folding":[4],"trusted":true,"_uuid":"f41b23ceefebeddfb293264628e3a5bd15620bb8"},"cell_type":"code","source":"import os\nimport json\nfrom pandas.io.json import json_normalize\n\ndef load_df(csv_path='../input/train.csv', nrows=None):\n    JSON_COLUMNS = ['device', 'geoNetwork', 'totals', 'trafficSource']\n    \n    df = pd.read_csv(csv_path, \n                     converters={column: json.loads for column in JSON_COLUMNS}, \n                     dtype={'fullVisitorId': 'str'}, \n                     nrows=nrows) # Important!!\n    \n    for column in JSON_COLUMNS:\n        column_as_df = json_normalize(df[column])\n        column_as_df.columns = [f\"{column}.{subcolumn}\" for subcolumn in column_as_df.columns]\n        df = df.drop(column, axis=1).merge(column_as_df, right_index=True, left_index=True)\n    print(f\"Loaded {os.path.basename(csv_path)}. Shape: {df.shape}\")\n    return df\n\nprint(os.listdir(\"../input\"))\n\ntrain = load_df(nrows=100000)\ntest =load_df('../input/test.csv', nrows=100000)\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"2be5be1672cc6ba34740f63c511d1b7f514f1495"},"cell_type":"markdown","source":"\n总共12个变量：\n\n1. `channelGrouping`  - 用户通过其进入商店的渠道。\n1. `date` - 用户访问Store的日期\n1. `device` - 用户访问 Store 的设备类型\n1. `fullVisitorId` - Google Merchandise Store的每个用户的唯一标识符。\n1. `geoNetwork`  - 包含有关用户地理位置的信息。\n1. `sessionId` - 此次访问商店的唯一标识符。\n1. `socialEngagementType` - Engagement type, either \"Socially Engaged\" or \"Not Socially Engaged\".\n1. `totals` - This section contains aggregate values across the session.\n1. `trafficSource` - This section contains information about the Traffic Source from which the session originated.\n1. `visitId`  - 此会话的标识符。这是通常存储为_utmb cookie的值的一部分。这仅对用户而言是唯一的。对于完全唯一的ID，您应该使用fullVisitorId和visitId的组合。\n1. `visitNumber`  - 此用户的会话号。如果这是第一个会话，则将其设置为1。\n1. `visitStartTime`  - 时间戳（表示为POSIX时间）。\n\n其中的四个变量 `device, geoNetwork, totals, trafficSource` 进一步处理成多个变量。"},{"metadata":{"_uuid":"30e372d67aca9927f783a183f159e99f872b6597"},"cell_type":"markdown","source":"最后分解成54个特征, 包括 'channelGrouping', 'date', 'fullVisitorId', 'sessionId',\n       'socialEngagementType', 'visitId', 'visitNumber', 'visitStartTime',\n       'device.browser', 'device.browserSize', 'device.browserVersion',\n       'device.deviceCategory', 'device.flashVersion', 'device.isMobile',\n       'device.language', 'device.mobileDeviceBranding',\n       'device.mobileDeviceInfo', 'device.mobileDeviceMarketingName',\n       'device.mobileDeviceModel', 'device.mobileInputSelector',\n       'device.operatingSystem', 'device.operatingSystemVersion',\n       'device.screenColors', 'device.screenResolution', 'geoNetwork.city',\n       'geoNetwork.cityId', 'geoNetwork.continent', 'geoNetwork.country',\n       'geoNetwork.latitude', 'geoNetwork.longitude', 'geoNetwork.metro',\n       'geoNetwork.networkDomain', 'geoNetwork.networkLocation',\n       'geoNetwork.region', 'geoNetwork.subContinent', 'totals.bounces',\n       'totals.hits', 'totals.newVisits', 'totals.pageviews',\n       'totals.transactionRevenue', 'totals.visits', 'trafficSource.adContent',\n       'trafficSource.adwordsClickInfo.adNetworkType',\n       'trafficSource.adwordsClickInfo.criteriaParameters',\n       'trafficSource.adwordsClickInfo.gclId',\n       'trafficSource.adwordsClickInfo.isVideoAd',\n       'trafficSource.adwordsClickInfo.page',\n       'trafficSource.adwordsClickInfo.slot', 'trafficSource.campaign',\n       'trafficSource.isTrueDirect', 'trafficSource.keyword',\n       'trafficSource.medium', 'trafficSource.referralPath',\n       'trafficSource.source' "},{"metadata":{"_uuid":"371a8967bcdb9d177ba2ba139ea950cf582637ae"},"cell_type":"markdown","source":"###  Target variable"},{"metadata":{"_uuid":"94b4efd6fc13a588f467bf7104b8dcec6f23f655"},"cell_type":"markdown","source":"\n我们预测每个用户的所有交易总和的自然对数。对于测试集中的每个用户，目标是：\n\n$$\n\\text{target}^\\text{user} = \\ln \\sum_{i=1}^n \\text{transaction}_i^\\text{user}\n$$\n\n看看进行散点图。"},{"metadata":{"scrolled":false,"trusted":true,"_uuid":"6841d686a19b37442842fb518f47edb36d93b651"},"cell_type":"code","source":"train[\"totals.transactionRevenue\"] = train[\"totals.transactionRevenue\"].astype('float')\ngdf = train.groupby(\"fullVisitorId\")[\"totals.transactionRevenue\"].sum().reset_index()\n\nplt.figure(figsize=(6,4))\nplt.scatter(range(gdf.shape[0]), np.sort(np.log1p(gdf[\"totals.transactionRevenue\"].values)))\nplt.xlabel('index', fontsize=12)\nplt.ylabel('TransactionRevenue', fontsize=12)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f7139b04c60115afa1e41398edf832ddd180e5bf"},"cell_type":"code","source":"gdf.describe()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"24c0dfc216239ae608c2d1288136d880d9e3bb28"},"cell_type":"markdown","source":"从中可以看出一个重要的点：\n\n*The 80/20 rule has proven true for many businesses–only a small percentage of customers produce most of the revenue. As such, marketing teams are challenged to make appropriate investments in promotional strategies.*"},{"metadata":{"_uuid":"73ebf90aa189ac32e93b4928c36ba11efacdf7b1"},"cell_type":"markdown","source":"### full Visitor ld\n\n与客户 Id 相关的变量包括 `fullVisitorId, sessionId, visitId, visitNumber`，一个 `fullVisitorId` 包含多个 `sessionId`, 而一个 `sessionId` 唯一对应一个 `visitId`，个数和 `visitNumber` 相关。\n\n> 我们需要创建一个以 `fullVisitorId` 为 index 的数据框。"},{"metadata":{"_uuid":"cfcdde45935bcc79e14ac82a71593c377f9dcaad"},"cell_type":"markdown","source":"## 基本数据分析"},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"bdad68fc949ad8c42465af251dca0eb456f3d6c4"},"cell_type":"code","source":"zeroColumns = [c for c in train.columns if train[c].nunique() == 1]\nzeroColumns\n# 数据中方差不为0的特征","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"9f827c218a2582d7fc347f823b3ba130213d1c3e"},"cell_type":"markdown","source":"### 目标变量"},{"metadata":{"trusted":true,"_uuid":"22937723041b6c5133171b1e0c32004bef2a11b6"},"cell_type":"code","source":"nzi = pd.notnull(train[\"totals.transactionRevenue\"]).sum()\nnzr = (gdf[\"totals.transactionRevenue\"] > 0).sum()\nprint(\"Nusmber of instances in train set with non-zero revenue : \", nzi, \" and ratio is : \", nzi / train.shape[0])\nprint(\"Number of unique customers with non-zero revenue : \", nzr, \"and the ratio is : \", nzr / gdf.shape[0])\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"a14a62ca3401825febd8e7f9dc6ec5d6065c57d4"},"cell_type":"markdown","source":"访客人数和共同访客人数：\n\n现在让我们看一下训练和测试集中的不同访客数量，以及共同的访客的数量。"},{"metadata":{"trusted":true,"_uuid":"883f6e7c3adfe6b800617bc07e228f3e9b7b0928"},"cell_type":"code","source":"print(\"Number of unique visitors in train set : \",train.fullVisitorId.nunique(), \" out of rows : \",train.shape[0])\nprint(\"Number of unique visitors in test set : \",test.fullVisitorId.nunique(), \" out of rows : \",test.shape[0])\nprint(\"Number of common visitors in train and test set : \",len(set(train.fullVisitorId.unique()).intersection(set(test.fullVisitorId.unique())) ))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"ff3c3f20d6e8f539a8a4db593879c68c36f3b2d7"},"cell_type":"markdown","source":"### 设备与 target 的关系\n\n与设备相关的三个重要属性是：\n\n- 浏览器(chrome,firefox, IE)\n- 操作系统（mac, linux, windows）\n- 设备类型（移动端，桌面端和平板）\n\n我们考察这三个变量和目标变量的关系。"},{"metadata":{"trusted":true,"_uuid":"89fb331e0519f3945d095493ae7b3d5d13507f6f"},"cell_type":"code","source":"import seaborn as sns\nfrom plotly import tools\nimport plotly.offline as py\npy.init_notebook_mode(connected=True)\nimport plotly.graph_objs as go\n\ndef horizontal_bar_chart(cnt_srs, color):\n    trace = go.Bar(\n        y=cnt_srs.index[::-1],\n        x=cnt_srs.values[::-1],\n        showlegend=False,\n        orientation = 'h',\n        marker=dict(\n            color=color,\n        ),\n    )\n    return trace","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ee4d0eefad832dabd541a01bfc83cfc57f98b12e"},"cell_type":"code","source":"# Device Browser\ncnt_srs = train.groupby('device.browser')['totals.transactionRevenue'].agg(['size', 'count'])\ncnt_srs.columns = [\"count\", \"count of non-zero revenue\"]\ncnt_srs = cnt_srs.sort_values(by=\"count\", ascending=False)\ntrace1 = horizontal_bar_chart(cnt_srs[\"count\"].head(10), 'rgba(50, 171, 96, 0.6)')\ntrace2 = horizontal_bar_chart(cnt_srs[\"count of non-zero revenue\"].head(10), 'rgba(50, 171, 96, 0.6)')\n\n# Device Category\ncnt_srs = train.groupby('device.deviceCategory')['totals.transactionRevenue'].agg(['size', 'count'])\ncnt_srs.columns = [\"count\", \"count of non-zero revenue\"]\ncnt_srs = cnt_srs.sort_values(by=\"count\", ascending=False)\ntrace3 = horizontal_bar_chart(cnt_srs[\"count\"].head(10), 'rgba(71, 58, 131, 0.8)')\ntrace4 = horizontal_bar_chart(cnt_srs[\"count of non-zero revenue\"].head(10), 'rgba(71, 58, 131, 0.8)')\n\n# Operating system\ncnt_srs = train.groupby('device.operatingSystem')['totals.transactionRevenue'].agg(['size', 'count'])\ncnt_srs.columns = [\"count\", \"count of non-zero revenue\"]\ncnt_srs = cnt_srs.sort_values(by=\"count\", ascending=False)\ntrace5 = horizontal_bar_chart(cnt_srs[\"count\"].head(10), 'rgba(246, 78, 139, 0.6)')\ntrace6 = horizontal_bar_chart(cnt_srs[\"count of non-zero revenue\"].head(10),'rgba(246, 78, 139, 0.6)')\n\n# Creating two subplots\nfig = tools.make_subplots(rows=3, cols=2, vertical_spacing=0.04, \n                          subplot_titles=[\"Device Browser - Count\", \"Device Browser - Non-zero Revenue Count\",\n                                          \"Device Category - Count\",  \"Device Category - Non-zero Revenue Count\",\n                                          \"Device Operating System - Count\", \"Device Operating System - Non-zero Revenue Count\"])\n\nfig.append_trace(trace1, 1, 1)\nfig.append_trace(trace2, 1, 2)\nfig.append_trace(trace3, 2, 1)\nfig.append_trace(trace4, 2, 2)\nfig.append_trace(trace5, 3, 1)\nfig.append_trace(trace6, 3, 2)\n\nfig['layout'].update(height=1200, width=800, paper_bgcolor='rgb(233,233,233)', title=\"Device Plots\")\npy.iplot(fig, filename='device-plots')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"f0390ad8a0c4b7a579e9980e443e91dcc4688256"},"cell_type":"markdown","source":"\n推论：\n\n- 设备浏览器分布在非零收入图的计数和计数方面看起来相似\n- 在设备类别方面，与移动设备相比，桌面似乎具有更高的非零收入计数百分比。\n- 在设备操作系统中，虽然计数的次数多来自Windows，但收入不为零的计数数量对于Macintosh来说更多。\n- Chrome操作系统的非零收入占比也较高\n- 在移动操作系统方面，与Android相比，iOS拥有更多的非零收入计数"},{"metadata":{"_uuid":"a8dd23b7e3b46344be6919162ee9c9cdf3d135c5"},"cell_type":"markdown","source":"### target 当成时间序列\n\n"},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"50f607912dbb16644934aebbbca2be54493898a3"},"cell_type":"code","source":"import datetime\n\ndef scatter_plot(cnt_srs, color):\n    trace = go.Scatter(\n        x=cnt_srs.index[::-1],\n        y=cnt_srs.values[::-1],\n        showlegend=False,\n        marker=dict(\n            color=color,\n        ),\n    )\n    return trace\n\ntrain['date'] = train['date'].apply(lambda x: datetime.date(int(str(x)[:4]), int(str(x)[4:6]), int(str(x)[6:])))\ncnt_srs = train.groupby('date')['totals.transactionRevenue'].agg(['size', 'count'])\ncnt_srs.columns = [\"count\", \"count of non-zero revenue\"]\ncnt_srs = cnt_srs.sort_index()\n#cnt_srs.index = cnt_srs.index.astype('str')\ntrace1 = scatter_plot(cnt_srs[\"count\"], 'red')\ntrace2 = scatter_plot(cnt_srs[\"count of non-zero revenue\"], 'blue')\n\nfig = tools.make_subplots(rows=2, cols=1, vertical_spacing=0.08,\n                          subplot_titles=[\"Date - Count\", \"Date - Non-zero Revenue count\"])\nfig.append_trace(trace1, 1, 1)\nfig.append_trace(trace2, 2, 1)\nfig['layout'].update(height=800, width=800, paper_bgcolor='rgb(233,233,233)', title=\"Date Plots\")\npy.iplot(fig, filename='date-plots')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"7115aa23e82093c1975590bd691c5e28e954214d"},"cell_type":"markdown","source":"\n推论：\n\n- 我们的训练数据集中包含2016年8月1日至2017年7月31日的数据\n- 2016年11月，虽然访客人数有所增加，但在此期间非零收入计数没有增加。"},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"94b279e2fcca3e2ccdbb9c81125dfbde757a855a"},"cell_type":"code","source":"test['date'] = test['date'].apply(lambda x: datetime.date(int(str(x)[:4]), int(str(x)[4:6]), int(str(x)[6:])))\ncnt_srs = test.groupby('date')['fullVisitorId'].size()\n\n\ntrace = scatter_plot(cnt_srs, 'red')\n\nlayout = go.Layout(\n    height=400,\n    width=800,\n    paper_bgcolor='rgb(233,233,233)',\n    title='Dates in Test set'\n)\n\ndata = [trace]\nfig = go.Figure(data=data, layout=layout)\npy.iplot(fig, filename=\"ActivationDate\")","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"3fb07bdda2a55c140f2d08737a0234aa83e12b62"},"cell_type":"markdown","source":"\n在测试集中，我们的日期为2017年8月2日至2018年4月30日。因此，训练和测试集之间没有共同日期。因此，对此数据集进行基于时间的验证可能是个好主意。"},{"metadata":{"_uuid":"b906bef5de0d362b1e8a8ba85de6cab207f4b8f6"},"cell_type":"markdown","source":"### geographic 与 target 关系"},{"metadata":{"trusted":true,"_uuid":"623b0c62f3006a6f47f8f281ac657fdc26eefda3"},"cell_type":"code","source":"# Geographic Information:\n\n# Continent\ncnt_srs = train.groupby('geoNetwork.continent')['totals.transactionRevenue'].agg(['size', 'count'])\ncnt_srs.columns = [\"count\", \"count of non-zero revenue\"]\ncnt_srs = cnt_srs.sort_values(by=\"count\", ascending=False)\ntrace1 = horizontal_bar_chart(cnt_srs[\"count\"].head(10), 'rgba(58, 71, 80, 0.6)')\ntrace2 = horizontal_bar_chart(cnt_srs[\"count of non-zero revenue\"].head(10), 'rgba(58, 71, 80, 0.6)')\n\n# Sub-continent\ncnt_srs = train.groupby('geoNetwork.subContinent')['totals.transactionRevenue'].agg(['size', 'count'])\ncnt_srs.columns = [\"count\", \"count of non-zero revenue\"]\ncnt_srs = cnt_srs.sort_values(by=\"count\", ascending=False)\ntrace3 = horizontal_bar_chart(cnt_srs[\"count\"], 'orange')\ntrace4 = horizontal_bar_chart(cnt_srs[\"count of non-zero revenue\"], 'orange')\n\n# Network domain\ncnt_srs = train.groupby('geoNetwork.networkDomain')['totals.transactionRevenue'].agg(['size', 'count'])\ncnt_srs.columns = [\"count\", \"count of non-zero revenue\"]\ncnt_srs = cnt_srs.sort_values(by=\"count\", ascending=False)\ntrace5 = horizontal_bar_chart(cnt_srs[\"count\"].head(10), 'blue')\ntrace6 = horizontal_bar_chart(cnt_srs[\"count of non-zero revenue\"].head(10), 'blue')\n\n# Creating two subplots\nfig = tools.make_subplots(rows=3, cols=2, vertical_spacing=0.08, horizontal_spacing=0.15, \n                          subplot_titles=[\"Continent - Count\", \"Continent - Non-zero Revenue Count\",\n                                          \"Sub Continent - Count\",  \"Sub Continent - Non-zero Revenue Count\",\n                                          \"Network Domain - Count\", \"Network Domain - Non-zero Revenue Count\"])\n\nfig.append_trace(trace1, 1, 1)\nfig.append_trace(trace2, 1, 2)\nfig.append_trace(trace3, 2, 1)\nfig.append_trace(trace4, 2, 2)\nfig.append_trace(trace5, 3, 1)\nfig.append_trace(trace6, 3, 2)\n\nfig['layout'].update(height=1200, width=800, paper_bgcolor='rgb(233,233,233)', title=\"Geography Plots\")\npy.iplot(fig, filename='geo-plots')\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8f36195dd10e495fba5e77186bf369cea2425d5a"},"cell_type":"markdown","source":"\n推论：\n\n- 在非洲大陆的情节中，我们可以看到，美国的计数数量更多，而且收入非零的计数最多\n- 虽然亚洲和欧洲的计数很多，但来自这些大陆的非零收入数量相对较低。\n- 我们也可以从次大陆的图推断前两点。\n- 如果网络域是“unknown.unknown”而不是“（未设置）”，则具有非零收入的计数数量往往较低。"},{"metadata":{"_uuid":"2a249c5185f1daf14987a86abcc3a5e0ff3c052f"},"cell_type":"markdown","source":"### traffic source 和 target 的关系"},{"metadata":{"trusted":true,"_uuid":"4e97a26f87bd8ff4d113828bba7eb740e1825c53"},"cell_type":"code","source":"cnt_srs = train.groupby('trafficSource.source')['totals.transactionRevenue'].agg(['size', 'count'])\ncnt_srs.columns = [\"count\", \"count of non-zero revenue\"]\ncnt_srs = cnt_srs.sort_values(by=\"count\", ascending=False)\ntrace1 = horizontal_bar_chart(cnt_srs[\"count\"].head(10), 'green')\ntrace2 = horizontal_bar_chart(cnt_srs[\"count of non-zero revenue\"].head(10), 'green')\n\n# Sub-continent\ncnt_srs = train.groupby('trafficSource.medium')['totals.transactionRevenue'].agg(['size', 'count'])\ncnt_srs.columns = [\"count\", \"count of non-zero revenue\"]\ncnt_srs = cnt_srs.sort_values(by=\"count\", ascending=False)\ntrace3 = horizontal_bar_chart(cnt_srs[\"count\"], 'purple')\ntrace4 = horizontal_bar_chart(cnt_srs[\"count of non-zero revenue\"], 'purple')\n\n# Creating two subplots\nfig = tools.make_subplots(rows=2, cols=2, vertical_spacing=0.08, horizontal_spacing=0.15, \n                          subplot_titles=[\"Traffic Source - Count\", \"Traffic Source - Non-zero Revenue Count\",\n                                          \"Traffic Source Medium - Count\",  \"Traffic Source Medium - Non-zero Revenue Count\"])\n\nfig.append_trace(trace1, 1, 1)\nfig.append_trace(trace2, 1, 2)\nfig.append_trace(trace3, 2, 1)\nfig.append_trace(trace4, 2, 2)\n\nfig['layout'].update(height=1000, width=800, paper_bgcolor='rgb(233,233,233)', title=\"Traffic Source Plots\")\npy.iplot(fig, filename='traffic-source-plots')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"648e09a8916363729874eb4c296c06d05effdde1"},"cell_type":"markdown","source":"\n推论：\n\n- 在流量来源图中，尽管Youtube在数据集中具有大量计数，但非零收入计数的数量非常少。\n- Google plex的非零收入计数与流量来源图中的总计数之比很高。\n- 在流量来源媒体上，与“organic”媒体相比，“referral”具有更多的非零收入计数。"},{"metadata":{"_uuid":"5915fbc00f746d92936265883247abe82a7f6766"},"cell_type":"markdown","source":"# 参考资料"},{"metadata":{"_uuid":"beef9f370f4dae810f8f7cdcea3599025d8fe0f8"},"cell_type":"markdown","source":"- Simple Exploration+Baseline - GA Customer Revenue\n https://www.kaggle.com/sudalairajkumar/simple-exploration-baseline-ga-customer-revenue"},{"metadata":{"trusted":false,"_uuid":"f2be5b4c362cac690148ad306a37f367c93c33cd"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"toc":{"base_numbering":1,"nav_menu":{},"number_sections":true,"sideBar":true,"skip_h1_title":false,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":true,"toc_position":{"height":"calc(100% - 180px)","left":"10px","top":"150px","width":"305px"},"toc_section_display":true,"toc_window_display":true}},"nbformat":4,"nbformat_minor":1}