diff --git a/机器学习竞赛实战_优胜解决方案/京东用户购买意向预测/.ipynb_checkpoints/2-数据探索-checkpoint.ipynb b/机器学习竞赛实战_优胜解决方案/京东用户购买意向预测/.ipynb_checkpoints/2-数据探索-checkpoint.ipynb
index 2fd6442..03056b3 100644
--- a/机器学习竞赛实战_优胜解决方案/京东用户购买意向预测/.ipynb_checkpoints/2-数据探索-checkpoint.ipynb
+++ b/机器学习竞赛实战_优胜解决方案/京东用户购买意向预测/.ipynb_checkpoints/2-数据探索-checkpoint.ipynb
@@ -1,6 +1,1597 @@
{
- "cells": [],
- "metadata": {},
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 2-数据探索"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "D:\\Anaconda3\\lib\\importlib\\_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
+ " return f(*args, **kwds)\n"
+ ]
+ }
+ ],
+ "source": [
+ "%matplotlib inline\n",
+ "import matplotlib\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 定义文件名\n",
+ "ACTION_201602_FILE = \"data/JData_Action_201602.csv\"\n",
+ "ACTION_201603_FILE = \"data/JData_Action_201603.csv\"\n",
+ "ACTION_201604_FILE = \"data/JData_Action_201604.csv\"\n",
+ "COMMENT_FILE = \"data/JData_Comment.csv\"\n",
+ "PRODUCT_FILE = \"data/JData_Product.csv\"\n",
+ "USER_FILE = \"data/JData_User.csv\"\n",
+ "\n",
+ "USER_TABLE_FILE = \"data/user_table.csv\"\n",
+ "ITEM_TABLE_FILE = \"data/item_table.csv\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 周一到周日各天购买情况\n",
+ "不同的时间购买情况不同,我们分析出其中的规律。\n",
+ "\n",
+ "比如我们分析出周四、周五的购买量大(京东送货速度快,一般这时候购买周末收货),亦或者周一周二买,上班回来顺便拿,那么即使预测这些时间的购买概率低,我们也可以人为的往上提一点。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 提取购买(type=4)的行为数据\n",
+ "def get_from_action_data(fname, chunk_size=50000):\n",
+ " reader = pd.read_csv(fname, header=0, iterator=True)\n",
+ " chunks = []\n",
+ " loop = True\n",
+ " while loop:\n",
+ " try:\n",
+ " chunk = reader.get_chunk(chunk_size)[\n",
+ " [\"user_id\", \"sku_id\", \"type\", \"time\"]]\n",
+ " chunks.append(chunk)\n",
+ " except StopIteration:\n",
+ " loop = False\n",
+ " print(\"Iteration is stopped\")\n",
+ " \n",
+ " df_ac = pd.concat(chunks, ignore_index=True)\n",
+ " # type=4,为购买\n",
+ " df_ac = df_ac[df_ac['type'] == 4]\n",
+ " \n",
+ " return df_ac[[\"user_id\", \"sku_id\", \"time\"]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n",
+ "Iteration is stopped\n",
+ "Iteration is stopped\n"
+ ]
+ }
+ ],
+ "source": [
+ "df_ac = []\n",
+ "df_ac.append(get_from_action_data(fname=ACTION_201602_FILE))\n",
+ "df_ac.append(get_from_action_data(fname=ACTION_201603_FILE))\n",
+ "df_ac.append(get_from_action_data(fname=ACTION_201604_FILE))\n",
+ "df_ac = pd.concat(df_ac, ignore_index=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "user_id int64\n",
+ "sku_id int64\n",
+ "time object\n",
+ "dtype: object\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(df_ac.dtypes)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 将time字段转换为datetime类型\n",
+ "df_ac['time'] = pd.to_datetime(df_ac['time'])\n",
+ "\n",
+ "# 使用lambda匿名函数将时间time转换为星期(周一为1, 周日为7)\n",
+ "df_ac['time'] = df_ac['time'].apply(lambda x: x.weekday() + 1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " user_id | \n",
+ " sku_id | \n",
+ " time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 269365 | \n",
+ " 166345 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 235443 | \n",
+ " 36692 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 247689 | \n",
+ " 9112 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 273959 | \n",
+ " 102034 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 226791 | \n",
+ " 163550 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " user_id sku_id time\n",
+ "0 269365 166345 1\n",
+ "1 235443 36692 1\n",
+ "2 247689 9112 1\n",
+ "3 273959 102034 1\n",
+ "4 226791 163550 1"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_ac.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " weekday | \n",
+ " user_num | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 6162 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 6946 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 5001 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 6409 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6049 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 4174 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 3710 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " weekday user_num\n",
+ "0 1 6162\n",
+ "1 2 6946\n",
+ "2 3 5001\n",
+ "3 4 6409\n",
+ "4 5 6049\n",
+ "5 6 4174\n",
+ "6 7 3710"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# 周一到周日每天购买用户个数\n",
+ "df_user = df_ac.groupby('time')['user_id'].nunique() # 统计购买的用户,而不是购买量 \n",
+ "df_user = df_user.to_frame().reset_index()\n",
+ "df_user.columns = ['weekday', 'user_num']\n",
+ "df_user"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " weekday | \n",
+ " item_num | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1844 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 1996 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 1800 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 1805 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 1855 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 1643 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 1578 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " weekday item_num\n",
+ "0 1 1844\n",
+ "1 2 1996\n",
+ "2 3 1800\n",
+ "3 4 1805\n",
+ "4 5 1855\n",
+ "5 6 1643\n",
+ "6 7 1578"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# 周一到周日每天购买商品个数\n",
+ "df_item = df_ac.groupby('time')['sku_id'].nunique()\n",
+ "df_item = df_item.to_frame().reset_index()\n",
+ "df_item.columns = ['weekday', 'item_num']\n",
+ "df_item"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " weekday | \n",
+ " user_item_num | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 7759 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 8869 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 6262 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 8078 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 7505 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 5143 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 4636 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " weekday user_item_num\n",
+ "0 1 7759\n",
+ "1 2 8869\n",
+ "2 3 6262\n",
+ "3 4 8078\n",
+ "4 5 7505\n",
+ "5 6 5143\n",
+ "6 7 4636"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# 周一到周日每天购买记录个数\n",
+ "df_ui = df_ac.groupby('time', as_index=False).size()\n",
+ "df_ui = df_ui.to_frame().reset_index()\n",
+ "df_ui.columns = ['weekday', 'user_item_num']\n",
+ "df_ui"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# 条形宽度\n",
+ "bar_width = 0.2\n",
+ "# 透明度\n",
+ "opacity = 0.4\n",
+ " \n",
+ "plt.bar(df_user['weekday'], df_user['user_num'], bar_width, alpha=opacity, color='c', label='user')\n",
+ "plt.bar(df_item['weekday']+bar_width, df_item['item_num'], bar_width, alpha=opacity, color='g', label='item')\n",
+ "plt.bar(df_ui['weekday']+bar_width*2, df_ui['user_item_num'], bar_width, alpha=opacity, color='m', label='user_item')\n",
+ " \n",
+ "plt.xlabel('weekday')\n",
+ "plt.ylabel('number')\n",
+ "plt.title('A Week Purchase Table')\n",
+ "plt.xticks(df_user['weekday'] + bar_width * 3 / 2., (1,2,3,4,5,6,7))\n",
+ "plt.tight_layout() \n",
+ "plt.legend(prop={'size':10})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "user是用户数,item是商品数,user_item是购买记录。\n",
+ "\n",
+ "从当前情况看,周二是最高值,周三是最低值。从总体来看工作日的购买情况比周末高。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 一个月中各天购买量\n",
+ "\n",
+ "### 2016年2月"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n"
+ ]
+ }
+ ],
+ "source": [
+ "df_ac = get_from_action_data(fname=ACTION_201602_FILE)\n",
+ " \n",
+ "# 将time字段转换为datetime类型并使用lambda匿名函数将时间time转换为天\n",
+ "df_ac['time'] = pd.to_datetime(df_ac['time']).apply(lambda x: x.day)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " user_id | \n",
+ " sku_id | \n",
+ " time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 351 | \n",
+ " 269365 | \n",
+ " 166345 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 649 | \n",
+ " 235443 | \n",
+ " 36692 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 980 | \n",
+ " 247689 | \n",
+ " 9112 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1719 | \n",
+ " 273959 | \n",
+ " 102034 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2153 | \n",
+ " 226791 | \n",
+ " 163550 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " user_id sku_id time\n",
+ "351 269365 166345 1\n",
+ "649 235443 36692 1\n",
+ "980 247689 9112 1\n",
+ "1719 273959 102034 1\n",
+ "2153 226791 163550 1"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_ac.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " user_id | \n",
+ " sku_id | \n",
+ " time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 11464511 | \n",
+ " 256461 | \n",
+ " 126092 | \n",
+ " 29 | \n",
+ "
\n",
+ " \n",
+ " 11470852 | \n",
+ " 224347 | \n",
+ " 137636 | \n",
+ " 29 | \n",
+ "
\n",
+ " \n",
+ " 11478541 | \n",
+ " 300214 | \n",
+ " 102335 | \n",
+ " 29 | \n",
+ "
\n",
+ " \n",
+ " 11480871 | \n",
+ " 213442 | \n",
+ " 48000 | \n",
+ " 29 | \n",
+ "
\n",
+ " \n",
+ " 11483928 | \n",
+ " 228994 | \n",
+ " 165190 | \n",
+ " 29 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " user_id sku_id time\n",
+ "11464511 256461 126092 29\n",
+ "11470852 224347 137636 29\n",
+ "11478541 300214 102335 29\n",
+ "11480871 213442 48000 29\n",
+ "11483928 228994 165190 29"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_ac.tail()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 每天的购买用户、商品、用户购买商品的数量\n",
+ "df_user = df_ac.groupby('time')['user_id'].nunique()\n",
+ "df_user = df_user.to_frame().reset_index()\n",
+ "df_user.columns = ['day', 'user_num']\n",
+ " \n",
+ "df_item = df_ac.groupby('time')['sku_id'].nunique()\n",
+ "df_item = df_item.to_frame().reset_index()\n",
+ "df_item.columns = ['day', 'item_num']\n",
+ " \n",
+ "df_ui = df_ac.groupby('time', as_index=False).size()\n",
+ "df_ui = df_ui.to_frame().reset_index()\n",
+ "df_ui.columns = ['day', 'user_item_num']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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bgDAThPQASBJa+2mzHZ7fz3JrZntmL4lP/rfyg9ntgP7zST7JPnl7Zzvzswu+vaBJDdntqM+d1X3X81sh/m7mQ2k40LhOBcmOSEPPb19e34lyfOT3JHkZXmITvxw/furkpyf2evgP5PZKd8P5UOZnTJ+c2av1/7cNs+fmWTjMP399Rmm77fW1mf2OvQ/SHJ7kuszOzV9h7TW2nDed1XVd5P8pyQf3+aw+5J8Psk/JfnzJOe21v5yzLm+ltkp+b+T2VkTN2b2e/T/UgDsMjX73y4AYCmoqmdkttt/5A5cUw4ALAH+6gsAS8QwVf5XMnsttHAOALsZAR0AloCqOj6zU9IPTfKeRS4HAJgAU9wBAACgAzroAAAA0IEVi13Aj+Pggw9uRx555GKXAQAAAPO2YcOGf26tHbLt+JIO6EceeWTWr1+/2GUAAADAvFXVjePGTXEHAACADgjoAAAA0AEBHQAAADqwpK9BBwAAYOFs3rw5mzZtyj333LPYpSwJ++yzT1auXJm99tprXscL6AAAAMzLpk2b8vCHPzxHHnlkqmqxy+laay233XZbNm3alKOOOmperzHFHQAAgHm55557ctBBBwnn81BVOeigg3ZotoGADgAAwLwJ5/O3o9+VKe4AAADssNHMzC45z/TU1C45z+5ABx0AAIDd3n333bfYJTwkAR0AAIBurVu3Lq95zWt+sH/MMcfk4osvzkknnZRnPvOZOeecc5Ikn/nMZ7JmzZqcfPLJef3rX5/WWjZu3JgnPvGJOfPMM/Pa1752sT7CvJniDgAAwJLy0Y9+NBdddFGOO+643H///Wmt5eyzz866deuy//77501velOuuOKKrFq1Khs3bsxVV12V/fbbb7HLfkgCOgAAAN0at9DaO97xjrzrXe/K3XffnTPOOCNPecpTsnHjxpx22mlJkrvuuiuPecxjsmrVqqxatWpJhPNEQAcAAKBjBx54YDZt2pQkueaaa7Jly5YcddRRGY1Guffee3PsscfmxhtvzNFHH53LL788++67b5Jk8+bNufnmm7PnnnsuZvk7REAHAACgWyeccEL222+/rFmzJmvWrMmKFSvylre8Jddee202b96c173udamqnHfeeXnBC16Q1lr22GOPnH/++Uumc75VtdYWu4adtnr16rZ+/frFLgMAAGBZuO6663L88ccvdhlLyrjvrKo2tNZWb3usVdwBAACgAwI6AAAAdEBABwAAgA4I6AAAANABAR0AAAA6IKADAABAB9wHHQAAgB022jDaJeeZ/tfTD3nMN7/5zfz+7/9+nv/85+fAAw/M4x73uF3y3r3RQQcAAKBrP/3TP513v/vdWbduXb785S8vdjkTI6ADAADQtY0bN+aUU07JBz/4wbz97W/PySefnPvuuy8f//jH8/SnPz1Pe9rTcu655yZJ1q1bl+c85zl5yUtekuOPPz6XXnppTj/99Jxwwgn58Ic/vMifZPtMcQcAAKB7e+yxR175ylfmmGOOyctf/vLcfvvtefe7353Pfvaz2WuvvfKiF70o1157bZLktttuy5VXXpkvfOELedGLXpQbbrgh99xzT0499dSceeaZi/xJHpyADgAAwJJz/fXX58Ybb8yzn/3sJMkdd9yRG2+8Mfvuu28e97jHZY899sjKlStz3HHH5WEPe1ge9rCH5fvf//4iV719AjoAAABLwt57750tW7YkSY4++ugcc8wx+fSnP50VK1bk/vvvT2stn/3sZ1NVP3jN3O3eCegAAADssPmsvr6rPfvZz87ZZ5+dyy+/PJdccknOPvvsnHLKKdlzzz2z11575UMf+tCC17QrVWttsWvYaatXr27r169f7DIAAACWheuuuy7HH3/8YpexpIz7zqpqQ2tt9bbH6qADAGxjZjQzdnxqemqBKwFgOXGbNQAAAOiAgA4AAAAdENABAACgAwI6AAAAdMAicQAAAOywB1tQc0dZgPOHdNABAABYtl72spclSTZu3JjLLrtsUWsR0AEAANjt3XfffWPHP/KRjyQR0AEAAGC71q1bl9e85jU/2D/mmGNy8cUX56STTsozn/nMnHPOOUmSz3zmM1mzZk1OPvnkvP71r09rLRs3bswTn/jEnHnmmXnta1879vzHHHNMkuS8887LFVdckZNPPjkbNmzItddem2c961k55ZRTcsYZZ+T73/9+kuTRj3503vjGN+bEE0/Me9/73px99tl50pOelDe84Q0/9md1DToAAABLykc/+tFcdNFFOe6443L//fentZazzz4769aty/777583velNueKKK7Jq1aps3LgxV111Vfbbb7/tnvPNb35zLrroonzgAx9IkjzjGc/IRRddlCOOOCLvfe97c8EFF+SXfumXcsstt+Q3f/M3s//+++dRj3pU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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# 条形宽度\n",
+ "bar_width = 0.2\n",
+ "# 透明度\n",
+ "opacity = 0.4\n",
+ "# 天数\n",
+ "day_range = range(1,len(df_user['day']) + 1, 1)\n",
+ "# 设置图片大小\n",
+ "plt.figure(figsize=(14,10))\n",
+ " \n",
+ "plt.bar(df_user['day'], df_user['user_num'], bar_width, \n",
+ " alpha=opacity, color='c', label='user')\n",
+ "plt.bar(df_item['day']+bar_width, df_item['item_num'], \n",
+ " bar_width, alpha=opacity, color='g', label='item')\n",
+ "plt.bar(df_ui['day']+bar_width*2, df_ui['user_item_num'], \n",
+ " bar_width, alpha=opacity, color='m', label='user_item')\n",
+ " \n",
+ "plt.xlabel('day')\n",
+ "plt.ylabel('number')\n",
+ "plt.title('February Purchase Table')\n",
+ "plt.xticks(df_user['day'] + bar_width * 3 / 2., day_range)\n",
+ "# plt.ylim(0, 80)\n",
+ "plt.tight_layout() \n",
+ "plt.legend(prop={'size':9})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "分析: 2月份6~11是开始春节假期,购买量非常少。后续慢慢回稳。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2016年3月"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n"
+ ]
+ }
+ ],
+ "source": [
+ "df_ac = get_from_action_data(fname=ACTION_201603_FILE)\n",
+ " \n",
+ "# 将time字段转换为datetime类型并使用lambda匿名函数将时间time转换为天\n",
+ "df_ac['time'] = pd.to_datetime(df_ac['time']).apply(lambda x: x.day)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_user = df_ac.groupby('time')['user_id'].nunique()\n",
+ "df_user = df_user.to_frame().reset_index()\n",
+ "df_user.columns = ['day', 'user_num']\n",
+ " \n",
+ "df_item = df_ac.groupby('time')['sku_id'].nunique()\n",
+ "df_item = df_item.to_frame().reset_index()\n",
+ "df_item.columns = ['day', 'item_num']\n",
+ " \n",
+ "df_ui = df_ac.groupby('time', as_index=False).size()\n",
+ "df_ui = df_ui.to_frame().reset_index()\n",
+ "df_ui.columns = ['day', 'user_item_num']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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Nf5vM3mht13SWvtOkn+dyfPi703yy0mu2+awjZk8D/1bSS5L8sbW2teneaz/nuQ3kvxBkgeS/H+ZfMNl290GADCrqjX/XwMAAACjZgUdAAAAOiDQAQAAoAMCHQAAADog0AEAAKADS0Y9gWE46KCD2rJly0Y9DQAAANjOTTfd9J3W2sHbji/IQF+2bFnWrXuiT8EBAACA0amq26cbt8UdAAAAOiDQAQAAoAMCHQAAADqwIM9BBwAAYPZt3rw5mzZtyiOPPDLqqcwLe+21V5YuXZo99thjRscLdAAAAGZk06ZNeepTn5ply5alqkY9na611nLvvfdm06ZNOeKII2Z0H1vcAQAAmJFHHnkkT3va08T5DFRVnva0p+3SbgOBDgAAwIyJ85nb1d+VLe4AAADssvGJiVl5nDVjY7PyOAuBFXQAAAAWvMcee2zUU9gpgQ4AAEC31q5dmze/+c0/un3UUUflyiuvzAknnJCXvOQlOf/885MkX/rSl7Jy5cqsWrUqb3nLW9Jay8aNG/PCF74wZ555Zs4+++xRvYQZs8UdAACAeeWKK67I5ZdfnmOOOSaPP/54Wms577zzsnbt2uy33355+9vfnmuvvTbLly/Pxo0bc8MNN2Tfffcd9bR3SqADAADQrekutPa+970v73//+/Pwww/njDPOyIte9KJs3Lgxp512WpLkoYceyrOf/ewsX748y5cvnxdxngh0AAAAOnbggQdm06ZNSZKbb745W7ZsyRFHHJHx8fE8+uijOfroo3P77bfnyCOPzDXXXJN99tknSbJ58+bceeed2X333Uc5/V0i0AEAAOjWcccdl3333TcrV67MypUrs2TJkrzzne/M+vXrs3nz5pxzzjmpqlxyySU59dRT01rLbrvtlksvvXTerJxvVa21Uc9h1q1YsaKtW7du1NMAAABYUG677bYce+yxo57GvDLd76yqbmqtrdj2WFdxBwAAgA4IdAAAAOiAQAcAAIAOCHQAAADogEAHAACADgh0AAAA6IDPQQcAAGCXjd80PiuPs+Zn1+z0mG9961v5vd/7vfzSL/1SDjzwwDzvec+blefujRV0AAAAuvbMZz4zF198cdauXZtbbrll1NMZGoEOAABA1zZu3JjVq1fn4x//eC666KKsWrUqjz32WD772c/mF37hF/LiF784F154YZJk7dq1Ofnkk/Oa17wmxx57bD73uc/l1a9+dY477rh86lOfGvEr2TFb3AEAAOjebrvtlrPOOitHHXVUfu3Xfi33339/Lr744tx4443ZY489cvrpp2f9+vVJknvvvTfXXXddvvKVr+T000/P1772tTzyyCN56UtfmjPPPHPEr+SJCXQAAADmnQ0bNuT222/PSSedlCR54IEHcvvtt2efffbJ8573vOy2225ZunRpjjnmmOy9997Ze++984Mf/GDEs94xgQ4AAMC8sOeee2bLli1JkiOPPDJHHXVUvvCFL2TJkiV5/PHH01rLjTfemKr60X2mft87gQ4AAMAum8nV12fbSSedlPPOOy/XXHNNrrrqqpx33nlZvXp1dt999+yxxx755Cc/Oedzmk3VWhv1HGbdihUr2rp160Y9DQAAgAXltttuy7HHHjvqacwr0/3Oquqm1tqKbY+1gg4A89jE+MS042NrxuZ4JgDAT8vHrAEAAEAHBDoAAAB0QKADAABABwQ6AAAAdMBF4gAAANhlT3Sh0l3lwqY/ZgUdAACARet1r3tdkmTjxo25+uqrRzoXgQ4AAMCC99hjj007/ulPfzqJQAcAAIAdWrt2bd785jf/6PZRRx2VK6+8MieccEJe8pKX5Pzzz0+SfOlLX8rKlSuzatWqvOUtb0lrLRs3bswLX/jCnHnmmTn77LOnffyjjjoqSXLJJZfk2muvzapVq3LTTTdl/fr1ednLXpbVq1fnjDPOyA9+8IMkybOe9ay87W1vy/HHH58PfvCDOe+883LiiSfm3HPP/alfq3PQAQAAmFeuuOKKXH755TnmmGPy+OOPp7WW8847L2vXrs1+++2Xt7/97bn22muzfPnybNy4MTfccEP23XffHT7mO97xjlx++eX56Ec/miT5xV/8xVx++eU5/PDD88EPfjAf+9jH8ta3vjV33313fvu3fzv77bdfnvGMZ+SLX/xiPvCBD+T444/PfffdlwMPPPBJvy6BDgAAQLeqarux973vfXn/+9+fhx9+OGeccUZe9KIXZePGjTnttNOSJA899FCe/exnZ/ny5Vm+fPlO43w6t956a17/+tcnSR555JG87GUvS5KMjY3l6U9/epLkoIMOyvHHH58kOfTQQ3P//fcLdAAAABamAw88MJs2bUqS3HzzzdmyZUuOOOKIjI+P59FHH83RRx+d22+/PUceeWSuueaa7LPP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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# 条形宽度\n",
+ "bar_width = 0.2\n",
+ "# 透明度\n",
+ "opacity = 0.4\n",
+ "# 天数\n",
+ "day_range = range(1,len(df_user['day']) + 1, 1)\n",
+ "# 设置图片大小\n",
+ "plt.figure(figsize=(14,10))\n",
+ " \n",
+ "plt.bar(df_user['day'], df_user['user_num'], bar_width, \n",
+ " alpha=opacity, color='c', label='user')\n",
+ "plt.bar(df_item['day']+bar_width, df_item['item_num'], \n",
+ " bar_width, alpha=opacity, color='g', label='item')\n",
+ "plt.bar(df_ui['day']+bar_width*2, df_ui['user_item_num'], \n",
+ " bar_width, alpha=opacity, color='m', label='user_item')\n",
+ " \n",
+ "plt.xlabel('day')\n",
+ "plt.ylabel('number')\n",
+ "plt.title('March Purchase Table')\n",
+ "plt.xticks(df_user['day'] + bar_width * 3 / 2., day_range)\n",
+ "# plt.ylim(0, 80)\n",
+ "plt.tight_layout() \n",
+ "plt.legend(prop={'size':9})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "分析:3.15京东营销活动,前后三天的时间购买量激增。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2016年4月"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n"
+ ]
+ }
+ ],
+ "source": [
+ "df_ac = get_from_action_data(fname=ACTION_201604_FILE)\n",
+ " \n",
+ "# 将time字段转换为datetime类型并使用lambda匿名函数将时间time转换为天\n",
+ "df_ac['time'] = pd.to_datetime(df_ac['time']).apply(lambda x: x.day)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_user = df_ac.groupby('time')['user_id'].nunique()\n",
+ "df_user = df_user.to_frame().reset_index()\n",
+ "df_user.columns = ['day', 'user_num']\n",
+ " \n",
+ "df_item = df_ac.groupby('time')['sku_id'].nunique()\n",
+ "df_item = df_item.to_frame().reset_index()\n",
+ "df_item.columns = ['day', 'item_num']\n",
+ " \n",
+ "df_ui = df_ac.groupby('time', as_index=False).size()\n",
+ "df_ui = df_ui.to_frame().reset_index()\n",
+ "df_ui.columns = ['day', 'user_item_num']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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MIIOAAAAHVjw0F12TPvvv387+OCDJ10GAAAA/DOrVq36Xmtt4dbtO21AP/jgg7Ny5cpJlwEAAAD/TFXdPF27Ke4AAADQAQEdAAAAOiCgAwAAQAd22jXoAAAAzK2NGzdm3bp1uffeeyddyg5hr732yuLFi7PHHnvMqL+ADgAAwIysW7cuj3rUo3LwwQenqiZdTtdaa7n99tuzbt26HHLIITM6xxR3AAAAZuTee+/NYx/7WOF8Bqoqj33sY2c120BABwAAYMaE85mb7c/KFHcAAABmbfn69XNynWWLFs3JdXYGRtABAADY6W3evHnSJTwkAR0AAIBurVixIq997Wt/+v6www7L5ZdfnuOOOy7Pfe5zc/bZZydJPv3pT+f444/PCSeckDe84Q1prWXt2rV52tOeljPOOCOve93rJvUVZswUdwAAAHYol156aS655JIcccQRuf/++9Nay1lnnZUVK1Zk3333zVve8pZcddVVWbJkSdauXZtrr702++yzz6TLfkgCOgAAAN2abqO1d7/73TnvvPPyox/9KKeddlqe+cxnZu3atTnllFOSJHfffXeOPPLILFmyJEuWLNkhwnkioAMAANCx/fbbL+vWrUuSXH/99dm0aVMOOeSQLF++PPfdd18OP/zw3HzzzTn00EPziU98InvvvXeSZOPGjbnllluy++67T7L8WRHQAQAA6NbRRx+dffbZJ8cff3yOP/74LFiwIG9729uyevXqbNy4Ma9//etTVbngggvyspe9LK217Lbbbrnwwgt3mJHzLaq1NukaxmLp0qVt5cqVky4DAABgp3HjjTfmqKOOmnQZO5TpfmZVtaq1tnTrvnZxBwAAgA4I6AAAANABAR0AAAA6IKADAABABwR0AAAA6ICADgAAAB1wH3QAAABmbfmq5XNynWVPXfaQfb7zne/kT/7kT/LSl740++23X5785CfPyWf3xgg6AAAAXfv5n//5nH/++VmxYkVuuOGGSZczNgI6AAAAXVu7dm1OPPHEfOhDH8q73vWunHDCCdm8eXP+6q/+Ks9+9rPzrGc9K+eee26SZMWKFTn55JNz+umn56ijjsoVV1yRV7ziFTn66KPzl3/5lxP+JttmijsAAADd22233fKa17wmhx12WH7jN34jd955Z84///x89rOfzR577JFTTz01q1evTpLcfvvtufrqq/OFL3whp556am666abce++9ed7znpczzjhjwt/kwQnoAAAA7HDWrFmTm2++OSeddFKS5Pvf/35uvvnm7L333nnyk5+c3XbbLYsXL84RRxyRRz7ykXnkIx+Ze+65Z8JVb5uADgAAwA5hzz33zKZNm5Ikhx56aA477LB88pOfzIIFC3L//fentZbPfvazqaqfnjP6uncCOgAAALM2k93X59pJJ52Us846K5/4xCfysY99LGeddVZOPPHE7L777tljjz3ykY98ZN5rmkvVWpt0DWOxdOnStnLlykmXAQAAsNO48cYbc9RRR026jB3KdD+zqlrVWlu6dV8j6AAAADuQ9cvXz7jvomWLxlgJc81t1gAAAKADAjoAAAB0QEAHAACADgjoAAAA0AGbxAEAADBrs9msbltsZPczRtABAADYZb3qVa9KkqxduzZXXnnlRGsR0AEAANjpbd68edr2j370o0kEdAAAANimFStW5LWvfe1P3x922GG5/PLLc9xxx+W5z31uzj777CTJpz/96Rx//PE54YQT8oY3vCGttaxduzZPe9rTcsYZZ+R1r3vdtNc/7LDDkiQXXHBBrrrqqpxwwglZtWpVVq9enec///k58cQTc9ppp+Wee+5JkvzCL/xC3vzmN+fYY4/Ne9/73px11ll5+tOfnje+8Y0P+7tagw4AAMAO5dJLL80ll1ySI444Ivfff39aaznrrLOyYsWK7LvvvnnLW96Sq666KkuWLMnatWtz7bXXZp999tnmNd/61rfmkksuyQc+8IEkyXOe85xccsklecITnpD3vve9+eAHP5g3velNue222/IHf/AH2XffffP4xz8+n/rUp/Knf/qnOfbYY3PHHXdkv/322+7vJaADAADQrap6QNu73/3unHfeefnRj36U0047Lc985jOzdu3anHLKKUmSu+++O0ceeWSWLFmSJUuWPGQ4n85Xv/rVvPrVr06S3HvvvXn+85+fJFm0aFEe97jHJUn233//HHvssUmSAw88MHfeeaeADgAAwM5pv/32y7p165Ik119/fTZt2pRDDjkky5cvz3333ZfDDz88N998cw499NB84hOfyN57750k2bhxY2655ZbsvvvuM/qcPffcM5s2bfrp+yVLluSyyy7LAQcckCT5yU9+kuSBfzAYfd9a2/4vGgEdAACA7TBft0c7+uijs88+++T444/P8ccf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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# 条形宽度\n",
+ "bar_width = 0.2\n",
+ "# 透明度\n",
+ "opacity = 0.4\n",
+ "# 天数\n",
+ "day_range = range(1,len(df_user['day']) + 1, 1)\n",
+ "# 设置图片大小\n",
+ "plt.figure(figsize=(14,10))\n",
+ " \n",
+ "plt.bar(df_user['day'], df_user['user_num'], bar_width, \n",
+ " alpha=opacity, color='c', label='user')\n",
+ "plt.bar(df_item['day']+bar_width, df_item['item_num'], \n",
+ " bar_width, alpha=opacity, color='g', label='item')\n",
+ "plt.bar(df_ui['day']+bar_width*2, df_ui['user_item_num'], \n",
+ " bar_width, alpha=opacity, color='m', label='user_item')\n",
+ " \n",
+ "plt.xlabel('day')\n",
+ "plt.ylabel('number')\n",
+ "plt.title('April Purchase Table')\n",
+ "plt.xticks(df_user['day'] + bar_width * 3 / 2., day_range)\n",
+ "# plt.ylim(0, 80)\n",
+ "plt.tight_layout() \n",
+ "plt.legend(prop={'size':9})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "分析:4月份的8号和14号前后销量比较高,可能存在某些活动。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 商品类别销售统计\n",
+ "\n",
+ "### 周一到周日各商品类别销售情况"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 从行为记录中提取商品类别数据\n",
+ "def get_from_action_data(fname, chunk_size=50000):\n",
+ " reader = pd.read_csv(fname, header=0, iterator=True)\n",
+ " chunks = []\n",
+ " loop = True\n",
+ " while loop:\n",
+ " try:\n",
+ " chunk = reader.get_chunk(chunk_size)[\n",
+ " [\"cate\", \"brand\", \"type\", \"time\"]]\n",
+ " chunks.append(chunk)\n",
+ " except StopIteration:\n",
+ " loop = False\n",
+ " print(\"Iteration is stopped\")\n",
+ " \n",
+ " df_ac = pd.concat(chunks, ignore_index=True)\n",
+ " # type=4,为购买\n",
+ " df_ac = df_ac[df_ac['type'] == 4]\n",
+ " \n",
+ " return df_ac[[\"cate\", \"brand\", \"type\", \"time\"]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n",
+ "Iteration is stopped\n",
+ "Iteration is stopped\n"
+ ]
+ }
+ ],
+ "source": [
+ "df_ac = []\n",
+ "df_ac.append(get_from_action_data(fname=ACTION_201602_FILE))\n",
+ "df_ac.append(get_from_action_data(fname=ACTION_201603_FILE))\n",
+ "df_ac.append(get_from_action_data(fname=ACTION_201604_FILE))\n",
+ "df_ac = pd.concat(df_ac, ignore_index=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " cate | \n",
+ " brand | \n",
+ " type | \n",
+ " time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 9 | \n",
+ " 306 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 174 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 5 | \n",
+ " 78 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 5 | \n",
+ " 78 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 4 | \n",
+ " 306 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " cate brand type time\n",
+ "0 9 306 4 1\n",
+ "1 4 174 4 1\n",
+ "2 5 78 4 1\n",
+ "3 5 78 4 1\n",
+ "4 4 306 4 1"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# 将time字段转换为datetime类型\n",
+ "df_ac['time'] = pd.to_datetime(df_ac['time'])\n",
+ " \n",
+ "# 使用lambda匿名函数将时间time转换为星期(周一为1, 周日为7)\n",
+ "df_ac['time'] = df_ac['time'].apply(lambda x: x.weekday() + 1)\n",
+ "df_ac.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " cate | \n",
+ " brand | \n",
+ " type | \n",
+ " time | \n",
+ "
\n",
+ " \n",
+ " cate | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 4 | \n",
+ " 9326 | \n",
+ " 9326 | \n",
+ " 9326 | \n",
+ " 9326 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 8138 | \n",
+ " 8138 | \n",
+ " 8138 | \n",
+ " 8138 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " 6982 | \n",
+ " 6982 | \n",
+ " 6982 | \n",
+ " 6982 | \n",
+ "
\n",
+ " \n",
+ " 7 | \n",
+ " 6214 | \n",
+ " 6214 | \n",
+ " 6214 | \n",
+ " 6214 | \n",
+ "
\n",
+ " \n",
+ " 8 | \n",
+ " 13281 | \n",
+ " 13281 | \n",
+ " 13281 | \n",
+ " 13281 | \n",
+ "
\n",
+ " \n",
+ " 9 | \n",
+ " 4104 | \n",
+ " 4104 | \n",
+ " 4104 | \n",
+ " 4104 | \n",
+ "
\n",
+ " \n",
+ " 10 | \n",
+ " 189 | \n",
+ " 189 | \n",
+ " 189 | \n",
+ " 189 | \n",
+ "
\n",
+ " \n",
+ " 11 | \n",
+ " 18 | \n",
+ " 18 | \n",
+ " 18 | \n",
+ " 18 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " cate brand type time\n",
+ "cate \n",
+ "4 9326 9326 9326 9326\n",
+ "5 8138 8138 8138 8138\n",
+ "6 6982 6982 6982 6982\n",
+ "7 6214 6214 6214 6214\n",
+ "8 13281 13281 13281 13281\n",
+ "9 4104 4104 4104 4104\n",
+ "10 189 189 189 189\n",
+ "11 18 18 18 18"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# 观测有几个类别商品\n",
+ "df_ac.groupby(df_ac['cate']).count()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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Y1O1r1rosVW1pKqW3HHHmu6vBgAAMLm12o2ttfbjJF9J8pwkT66qlTND85PcMjxelmSnJBmOb5XR3Zsfbp/kNRPHOK21tm9rbd95835pJgoAAGBaprMb27yqevLw+HFJfj3J0iRfTnLk0O2YJOcNj88fnmc4fsnwuZ/zk7xm2K1tlyQLk1w5UxcCAAAw0XQ+s7NDkjOHz+08Jsk5rbULquq6JGdX1X9J8q0kpw/9T0/yN8MGBHdmtANbWmvXVtU5Sa5L8kCS41trD87s5QAAAFP5xS9+kWXLluVnP/vZXJeyTrbYYovMnz8/m2222bT612jSZf207777NhsUAADAzLjxxhuz5ZZb5ilPeUpGGyZvOFprWb58ee69997ssssujzhWVd9sre276mvW6jM7AADAhutnP/vZBhl0kqSq8pSnPGWtZqWEHQAA2IhsiEFnpbWtXdgBAABmzFe+8pV87Wtfm+sykgg7AADADBJ2AACADconPvGJPPOZz8yee+6Z1772tfn85z+f/fffP3vvvXd+/dd/PbfddltuuummnHrqqXn/+9+fvfbaK1/96ldzxx135JWvfGWe/exn59nPfnYuu+yysdU8na2nAQCAjdi1116bd7/73bnsssuy7bbb5s4770xV5YorrkhV5aMf/Wje85735L3vfW+OO+64PPGJT8zb3/72JMnRRx+dP/qjP8rzn//8/OAHP8iLX/ziLF26dCx1CzsAAMBqXXLJJTnyyCOz7bbbJkm22WabXHPNNXn1q1+dW2+9Nffff/8vbQe90pe+9KVcd911Dz+/5557cu+992bLLbec9bqFHQAAYLVaa7+0E9of/MEf5K1vfWte/vKX5ytf+UpOOumkSV/70EMP5fLLL8/jHve4MVT6SD6zAwAArNZBBx2Uc845J8uXL0+S3Hnnnbn77ruz4447JknOPPPMh/tuueWWuffeex9+fsghh+TDH/7ww8+vvvrqMVUt7AAAAGuw++675x3veEde9KIXZc8998xb3/rWnHTSSXnVq16VF7zgBQ8vb0uS3/iN38i555778AYFH/rQh7JkyZI885nPzG677ZZTTz11bHVXa21sg62tfffdty1ZsmSuywAAgC4sXbo0ixYtmusyHpXJrqGqvtla23fVvmZ2AACALgk7AABAl4QdAACgS8IOAADQJWEHAADokrADAAB0SdgBAADG6sEHH8zee++dl73sZbM6zqazenYAAGC9teDEL8zo+W46+bBp9fvgBz+YRYsW5Z577pnR8Vcl7MA6OuW4S6Y8dvypB46xEgCADceyZcvyhS98Ie94xzvyvve9b1bHsowNAAAYmz/8wz/Me97znjzmMbMfRYQdAABgLC644IJst912edaznjWW8YQdAABgLC677LKcf/75WbBgQV7zmtfkkksuye/8zu/M2njCDgAAMBb/7b/9tyxbtiw33XRTzj777Bx44IH55Cc/OWvjCTsAAECX7MYGAAAbqeluFT0bDjjggBxwwAGzOoaZHQAAoEvCDgAA0CVhBwAA6JKwAwAAdEnYAQAAuiTsAAAAXbL1NAAAMFYLFizIlltumU022SSbbrpplixZMivjCDsAALCxOmmrGT7f3dPu+uUvfznbbrvtzI6/CsvYAACALgk7AADAWFVVDjnkkDzrWc/KaaedNmvjWMYGAACM1WWXXZanPvWpuf3223PwwQdn1113zQtf+MIZH8fMDgAAMFZPfepTkyTbbbddjjjiiFx55ZWzMo6wAwAAjM19992Xe++99+HHX/ziF7N48eJZGcsyNgAAYGxuu+22HHHEEUmSBx54IEcffXQOPfTQWRlL2AEAgI3VWmwVPVOe/vSn59vf/vZYxrKMDQAA6JKwAwAAdEnYAQAAuiTsAAAAXRJ2AACALgk7AABAl4QdAABgrH784x/nyCOPzK677ppFixbl8ssvn5Vx3GcHAAA2UnucuceMnu+aY66ZVr+3vOUtOfTQQ/OZz3wm999/f1asWDGjdawk7AAAAGNzzz335NJLL83HP/7xJMnmm2+ezTfffFbGsowNAAAYm+9///uZN29e3vCGN2TvvffO7/7u7+a+++6blbGEHQAAYGweeOCBXHXVVfn93//9fOtb38oTnvCEnHzyybMylrADAACMzfz58zN//vzsv//+SZIjjzwyV1111ayMJewAAABj8yu/8ivZaaedcv311ydJLr744uy2226zMpYNCgAAgLH6H//jf+S3f/u3c//99+fpT396Pvaxj83KOMIOAABspKa7VfRM22uvvbJkyZJZH8cyNgAAoEvCDgAA0CVhBwAA6JKwAwAAdEnYAQAAuiTsAAAAXRJ2AACAsbn++uuz1157Pfz1pCc9KR/4wAdmZSz32QEAgI3U0l0X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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# 周一到周日每天购买商品类别数量统计\n",
+ "df_product = df_ac['brand'].groupby([df_ac['time'],df_ac['cate']]).count()\n",
+ "df_product=df_product.unstack()\n",
+ "df_product.plot(kind='bar',title='Cate Purchase Table in a Week',figsize=(14,10))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "分析:星期二买类别8的最多,星期天最少。由上可知,我们需要对商品8做更多的分析。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 每月各类商品销售情况(只关注商品8)\n",
+ "\n",
+ "### 2016年2,3,4月"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n",
+ "Iteration is stopped\n",
+ "Iteration is stopped\n"
+ ]
+ }
+ ],
+ "source": [
+ "df_ac2 = get_from_action_data(fname=ACTION_201602_FILE)\n",
+ "\n",
+ "# 将time字段转换为datetime类型并使用lambda匿名函数将时间time转换为天\n",
+ "df_ac2['time'] = pd.to_datetime(df_ac2['time']).apply(lambda x: x.day)\n",
+ " \n",
+ "df_ac3 = get_from_action_data(fname=ACTION_201603_FILE)\n",
+ "df_ac3['time'] = pd.to_datetime(df_ac3['time']).apply(lambda x: x.day)\n",
+ " \n",
+ "df_ac4 = get_from_action_data(fname=ACTION_201604_FILE)\n",
+ "df_ac4['time'] = pd.to_datetime(df_ac4['time']).apply(lambda x: x.day)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "dc_cate2 = df_ac2[df_ac2['cate']==8]\n",
+ "dc_cate2 = dc_cate2['brand'].groupby(dc_cate2['time']).count()\n",
+ "dc_cate2 = dc_cate2.to_frame().reset_index()\n",
+ "dc_cate2.columns = ['day', 'product_num']\n",
+ " \n",
+ "dc_cate3 = df_ac3[df_ac3['cate']==8]\n",
+ "dc_cate3 = dc_cate3['brand'].groupby(dc_cate3['time']).count()\n",
+ "dc_cate3 = dc_cate3.to_frame().reset_index()\n",
+ "dc_cate3.columns = ['day', 'product_num']\n",
+ " \n",
+ "dc_cate4 = df_ac4[df_ac4['cate']==8]\n",
+ "dc_cate4 = dc_cate4['brand'].groupby(dc_cate4['time']).count()\n",
+ "dc_cate4 = dc_cate4.to_frame().reset_index()\n",
+ "dc_cate4.columns = ['day', 'product_num']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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q/KFL3whT3jCE5JM7LQnyfXXX59ddtnl3udMPnf8nnvuyR133JHbbrst1157bZLkve99bw499NB85jOfyete97p7w33T55599tk599xzc8kll+TUU0+9X+/DDjoAAABz2iGHHJLjjz8+T3nKU7JgwYLstNNOufjii5MkO++8c575zGdm/fr1eetb3zrl81/2spflyCOPzBOe8IQsXbo0SfK0pz0tz33uc3PllVfmsY997BZ/9pIlS7LTTjvl2GOPzaJFi+7X+6jJfwXYUSxfvrxtPK8AAACA0bj22mtz8MEHj3sZY3f66afnLW95Sx796Edv9thUv6OqWtNaW77pXIe4AwAAwHa48847c+KJJ2bvvfeeMs63lUPcAQAAYDssWrQol1xyyYy9nh10AAAA6IBABwAAgA4IdAAAAOiAQAcAAIAOuEgcAAAAM2LlmpUz8jorDl+x1cfXrl2b/fffP+95z3vyvOc9L0ly9tln51Of+lS+9a1vbdfPXLt2bV70ohflE5/4xHY9fybYQQcAAGDOOeyww3LRRRclSe64447ccMMNWbBgwX0+75577hn10rabQAcAAGDO2X333bNw4cJ873vfy0c+8pGceOKJSZIrrrgixx57bI4++uiceuqpuf3225MkBxxwQF7zmtfkuOOOy2233ZZzzjknRx11VI499th87GMfS5LceuuteeELX5jDDjssb3vb22b9PQl0AAAA5qQzzjgjF154YT7wgQ/k2c9+dpLkiCOOyBVXXJErr7wyj3nMY3LhhRcmSe66666cfPLJueKKK7Jq1apcf/31ueqqq3LFFVfk+OOPT5KsW7cu73jHO3LVVVfl7W9/+6y/H+egAwAAMCedcsopOf7447P77rtn7733TpJ85StfyWtf+9rccccdufHGG7PLLrskSRYsWJAjjzwySfLlL385xx57bKrq3seS5OCDD87OO+/8M2OzyQ46AAAAc9JOO+2U008/PS95yUvuHXvTm96UN7zhDfn0pz+dU045Ja21JElV3RvkhxxySD796U/f+5yN56VvfHxc7KADAAAwI+7r6uuj8Pu///s/c//MM8/M2WefnYMOOii77rrrvTvok5144olZtWpVjjrqqOy000551atelYMOOmi2lrxFtfGvCTuS5cuXt9WrV497GQAAADu0a6+9NgcffPC4l9G1qX5HVbWm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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# 条形宽度\n",
+ "bar_width = 0.2\n",
+ "# 透明度\n",
+ "opacity = 0.4\n",
+ "# 天数\n",
+ "day_range = range(1,len(dc_cate3['day']) + 1, 1)\n",
+ "# 设置图片大小\n",
+ "plt.figure(figsize=(14,10))\n",
+ " \n",
+ "plt.bar(dc_cate2['day'], dc_cate2['product_num'], bar_width, alpha=opacity, color='c', label='February')\n",
+ "plt.bar(dc_cate3['day']+bar_width, dc_cate3['product_num'], bar_width, alpha=opacity, color='g', label='March')\n",
+ "plt.bar(dc_cate4['day']+bar_width*2, dc_cate4['product_num'], bar_width, alpha=opacity, color='m', label='April')\n",
+ " \n",
+ "plt.xlabel('day')\n",
+ "plt.ylabel('number')\n",
+ "plt.title('Cate-8 Purchase Table')\n",
+ "plt.xticks(dc_cate3['day'] + bar_width * 3 / 2., day_range)\n",
+ "# plt.ylim(0, 80)\n",
+ "plt.tight_layout() \n",
+ "plt.legend(prop={'size':9})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "分析:2月份对类别8商品的购买普遍偏低,3,4月份普遍偏高,3月15日购买极其多!可以对比3月份的销售记录,发现类别8将近占了3月15日总销售的一半!同时发现,3,4月份类别8销售记录在前半个月特别相似,除了4月8号,9号和3月15号。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 关于极端值:\n",
+ "\n",
+ "类别8的3月15是一个极端值,极端值对于数据建模来说一般是负影响,3月15这天大概率是人为的促进商品8的销售量,而非正常情况,所以我们需要做更多的分析,来确定是否需要保留商品8,或者对3月15号这天的数据做处理。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 查看特定用户对特定商品的轨迹\n",
+ "如用户对某个商品购买前是先浏览多少次、添加购物车多少次,浏览类似商品等,再进行购买。这样能让模型学到用户怎样的行为会促成购买。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def spec_ui_action_data(fname, user_id, item_id, chunk_size=100000):\n",
+ " reader = pd.read_csv(fname, header=0, iterator=True)\n",
+ " chunks = []\n",
+ " loop = True\n",
+ " while loop:\n",
+ " try:\n",
+ " chunk = reader.get_chunk(chunk_size)[\n",
+ " [\"user_id\", \"sku_id\", \"type\", \"time\"]]\n",
+ " chunks.append(chunk)\n",
+ " except StopIteration:\n",
+ " loop = False\n",
+ " print(\"Iteration is stopped\")\n",
+ "\n",
+ " df_ac = pd.concat(chunks, ignore_index=True)\n",
+ " df_ac = df_ac[(df_ac['user_id'] == user_id) & (df_ac['sku_id'] == item_id)]\n",
+ "\n",
+ " return df_ac"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def explore_user_item_via_time():\n",
+ " user_id = 266079 # 选择一个用户\n",
+ " item_id = 138778 # 选择一个item\n",
+ " df_ac = []\n",
+ " df_ac.append(spec_ui_action_data(ACTION_201602_FILE, user_id, item_id))\n",
+ " df_ac.append(spec_ui_action_data(ACTION_201603_FILE, user_id, item_id))\n",
+ " df_ac.append(spec_ui_action_data(ACTION_201604_FILE, user_id, item_id))\n",
+ "\n",
+ " df_ac = pd.concat(df_ac, ignore_index=False)\n",
+ " print(df_ac.sort_values(by='time'))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n",
+ "Iteration is stopped\n",
+ "Iteration is stopped\n",
+ " user_id sku_id type time\n",
+ "0 266079 138778 1 2016-01-31 23:59:02\n",
+ "1 266079 138778 6 2016-01-31 23:59:03\n",
+ "15 266079 138778 6 2016-01-31 23:59:40\n"
+ ]
+ }
+ ],
+ "source": [
+ "explore_user_item_via_time() # 看一下该用户对该item的行为轨迹"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.3"
+ }
+ },
"nbformat": 4,
"nbformat_minor": 2
}
diff --git a/机器学习竞赛实战_优胜解决方案/京东用户购买意向预测/2-数据探索.ipynb b/机器学习竞赛实战_优胜解决方案/京东用户购买意向预测/2-数据探索.ipynb
index 6730f37..03056b3 100644
--- a/机器学习竞赛实战_优胜解决方案/京东用户购买意向预测/2-数据探索.ipynb
+++ b/机器学习竞赛实战_优胜解决方案/京东用户购买意向预测/2-数据探索.ipynb
@@ -561,12 +561,1016 @@
"从当前情况看,周二是最高值,周三是最低值。从总体来看工作日的购买情况比周末高。"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 一个月中各天购买量\n",
+ "\n",
+ "### 2016年2月"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n"
+ ]
+ }
+ ],
+ "source": [
+ "df_ac = get_from_action_data(fname=ACTION_201602_FILE)\n",
+ " \n",
+ "# 将time字段转换为datetime类型并使用lambda匿名函数将时间time转换为天\n",
+ "df_ac['time'] = pd.to_datetime(df_ac['time']).apply(lambda x: x.day)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " user_id | \n",
+ " sku_id | \n",
+ " time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 351 | \n",
+ " 269365 | \n",
+ " 166345 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 649 | \n",
+ " 235443 | \n",
+ " 36692 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 980 | \n",
+ " 247689 | \n",
+ " 9112 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1719 | \n",
+ " 273959 | \n",
+ " 102034 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2153 | \n",
+ " 226791 | \n",
+ " 163550 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " user_id sku_id time\n",
+ "351 269365 166345 1\n",
+ "649 235443 36692 1\n",
+ "980 247689 9112 1\n",
+ "1719 273959 102034 1\n",
+ "2153 226791 163550 1"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_ac.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " user_id | \n",
+ " sku_id | \n",
+ " time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 11464511 | \n",
+ " 256461 | \n",
+ " 126092 | \n",
+ " 29 | \n",
+ "
\n",
+ " \n",
+ " 11470852 | \n",
+ " 224347 | \n",
+ " 137636 | \n",
+ " 29 | \n",
+ "
\n",
+ " \n",
+ " 11478541 | \n",
+ " 300214 | \n",
+ " 102335 | \n",
+ " 29 | \n",
+ "
\n",
+ " \n",
+ " 11480871 | \n",
+ " 213442 | \n",
+ " 48000 | \n",
+ " 29 | \n",
+ "
\n",
+ " \n",
+ " 11483928 | \n",
+ " 228994 | \n",
+ " 165190 | \n",
+ " 29 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " user_id sku_id time\n",
+ "11464511 256461 126092 29\n",
+ "11470852 224347 137636 29\n",
+ "11478541 300214 102335 29\n",
+ "11480871 213442 48000 29\n",
+ "11483928 228994 165190 29"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_ac.tail()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 每天的购买用户、商品、用户购买商品的数量\n",
+ "df_user = df_ac.groupby('time')['user_id'].nunique()\n",
+ "df_user = df_user.to_frame().reset_index()\n",
+ "df_user.columns = ['day', 'user_num']\n",
+ " \n",
+ "df_item = df_ac.groupby('time')['sku_id'].nunique()\n",
+ "df_item = df_item.to_frame().reset_index()\n",
+ "df_item.columns = ['day', 'item_num']\n",
+ " \n",
+ "df_ui = df_ac.groupby('time', as_index=False).size()\n",
+ "df_ui = df_ui.to_frame().reset_index()\n",
+ "df_ui.columns = ['day', 'user_item_num']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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bgDAThPQASBJa+2mzHZ7fz3JrZntmL4lP/rfyg9ntgP7zST7JPnl7Zzvzswu+vaBJDdntqM+d1X3X81sh/m7mQ2k40LhOBcmOSEPPb19e34lyfOT3JHkZXmITvxw/furkpyf2evgP5PZKd8P5UOZnTJ+c2av1/7cNs+fmWTjMP399Rmm77fW1mf2OvQ/SHJ7kuszOzV9h7TW2nDed1XVd5P8pyQf3+aw+5J8Psk/JfnzJOe21v5yzLm+ltkp+b+T2VkTN2b2e/T/UgDsMjX73y4AYCmoqmdkttt/5A5cUw4ALAH+6gsAS8QwVf5XMnsttHAOALsZAR0AloCqOj6zU9IPTfKeRS4HAJgAU9wBAACgAzroAAAA0IEVi13Aj+Pggw9uRx555GKXAQAAAPO2YcOGf26tHbLt+JIO6EceeWTWr1+/2GUAAADAvFXVjePGTXEHAACADgjoAAAA0AEBHQAAADqwpK9BBwAAYOFs3rw5mzZtyj333LPYpSwJ++yzT1auXJm99tprXscL6AAAAMzLpk2b8vCHPzxHHnlkqmqxy+laay233XZbNm3alKOOOmperzHFHQAAgHm55557ctBBBwnn81BVOeigg3ZotoGADgAAwLwJ5/O3o9+VKe4AAADssNHMzC45z/TU1C45z+5ABx0AAIDd3n333bfYJTwkAR0AAIBurVu3Lq95zWt+sH/MMcfk4osvzkknnZRnPvOZOeecc5Ikn/nMZ7JmzZqcfPLJef3rX5/WWjZu3JgnPvGJOfPMM/Pa1752sT7CvJniDgAAwJLy0Y9+NBdddFGOO+643H///Wmt5eyzz866deuy//77501velOuuOKKrFq1Khs3bsxVV12V/fbbb7HLfkgCOgAAAN0at9DaO97xjrzrXe/K3XffnTPOOCNPecpTsnHjxpx22mlJkrvuuiuPecxjsmrVqqxatWpJhPNEQAcAAKBjBx54YDZt2pQkueaaa7Jly5YcddRRGY1Guffee3PsscfmxhtvzNFHH53LL788++67b5Jk8+bNufnmm7PnnnsuZvk7REAHAACgWyeccEL222+/rFmzJmvWrMmKFSvylre8Jddee202b96c173udamqnHfeeXnBC16Q1lr22GOPnH/++Uumc75VtdYWu4adtnr16rZ+/frFLgMAAGBZuO6663L88ccvdhlLyrjvrKo2tNZWb3usVdwBAACgAwI6AAAAdEBABwAAgA4I6AAAANABAR0AAAA6IKADAABAB9wHHQAAgB022jDaJeeZ/tfTD3nMN7/5zfz+7/9+nv/85+fAAw/M4x73uF3y3r3RQQcAAKBrP/3TP513v/vdWbduXb785S8vdjkTI6ADAADQtY0bN+aUU07JBz/4wbz97W/PySefnPvuuy8f//jH8/SnPz1Pe9rTcu655yZJ1q1bl+c85zl5yUtekuOPPz6XXnppTj/99Jxwwgn58Ic/vMifZPtMcQcAAKB7e+yxR175ylfmmGOOyctf/vLcfvvtefe7353Pfvaz2WuvvfKiF70o1157bZLktttuy5VXXpkvfOELedGLXpQbbrgh99xzT0499dSceeaZi/xJHpyADgAAwJJz/fXX58Ybb8yzn/3sJMkdd9yRG2+8Mfvuu28e97jHZY899sjKlStz3HHH5WEPe1ge9rCH5fvf//4iV719AjoAAABLwt57750tW7YkSY4++ugcc8wx+fSnP50VK1bk/vvvT2stn/3sZ1NVP3jN3O3eCegAAADssPmsvr6rPfvZz87ZZ5+dyy+/PJdccknOPvvsnHLKKdlzzz2z11575UMf+tCC17QrVWttsWvYaatXr27r169f7DIAAACWheuuuy7HH3/8YpexpIz7zqpqQ2tt9bbH6qADAGxjZjQzdnxqemqBKwFgOXGbNQAAAOiAgA4AAAAdENABAACgAwI6AAAAdMAicQAAAOywB1tQc0dZgPOHdNABAABYtl72spclSTZu3JjLLrtsUWsR0AEAANjt3XfffWPHP/KRjyQR0AEAAGC71q1bl9e85jU/2D/mmGNy8cUX56STTsozn/nMnHPOOUmSz3zmM1mzZk1OPvnkvP71r09rLRs3bswTn/jEnHnmmXnta1879vzHHHNMkuS8887LFVdckZNPPjkbNmzItddem2c961k55ZRTcsYZZ+T73/9+kuTRj3503vjGN+bEE0/Me9/73px99tl50pOelDe84Q0/9md1DToAAABLykc/+tFcdNFFOe6443L//fentZazzz4769aty/777583velNueKKK7Jq1aps3LgxV111Vfbbb7/tnvPNb35zLrroonzgAx9IkjzjGc/IRRddlCOOOCLvfe97c8EFF+SXfumXcsstt+Q3f/M3s//+++dRj3pU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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# 条形宽度\n",
+ "bar_width = 0.2\n",
+ "# 透明度\n",
+ "opacity = 0.4\n",
+ "# 天数\n",
+ "day_range = range(1,len(df_user['day']) + 1, 1)\n",
+ "# 设置图片大小\n",
+ "plt.figure(figsize=(14,10))\n",
+ " \n",
+ "plt.bar(df_user['day'], df_user['user_num'], bar_width, \n",
+ " alpha=opacity, color='c', label='user')\n",
+ "plt.bar(df_item['day']+bar_width, df_item['item_num'], \n",
+ " bar_width, alpha=opacity, color='g', label='item')\n",
+ "plt.bar(df_ui['day']+bar_width*2, df_ui['user_item_num'], \n",
+ " bar_width, alpha=opacity, color='m', label='user_item')\n",
+ " \n",
+ "plt.xlabel('day')\n",
+ "plt.ylabel('number')\n",
+ "plt.title('February Purchase Table')\n",
+ "plt.xticks(df_user['day'] + bar_width * 3 / 2., day_range)\n",
+ "# plt.ylim(0, 80)\n",
+ "plt.tight_layout() \n",
+ "plt.legend(prop={'size':9})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "分析: 2月份6~11是开始春节假期,购买量非常少。后续慢慢回稳。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2016年3月"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n"
+ ]
+ }
+ ],
+ "source": [
+ "df_ac = get_from_action_data(fname=ACTION_201603_FILE)\n",
+ " \n",
+ "# 将time字段转换为datetime类型并使用lambda匿名函数将时间time转换为天\n",
+ "df_ac['time'] = pd.to_datetime(df_ac['time']).apply(lambda x: x.day)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_user = df_ac.groupby('time')['user_id'].nunique()\n",
+ "df_user = df_user.to_frame().reset_index()\n",
+ "df_user.columns = ['day', 'user_num']\n",
+ " \n",
+ "df_item = df_ac.groupby('time')['sku_id'].nunique()\n",
+ "df_item = df_item.to_frame().reset_index()\n",
+ "df_item.columns = ['day', 'item_num']\n",
+ " \n",
+ "df_ui = df_ac.groupby('time', as_index=False).size()\n",
+ "df_ui = df_ui.to_frame().reset_index()\n",
+ "df_ui.columns = ['day', 'user_item_num']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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Nf5vM3mht13SWvtOkn+dyfPi703yy0mu2+awjZk8D/1bSS5L8sbW2teneaz/nuQ3kvxBkgeS/H+ZfMNl290GADCrqjX/XwMAAACjZgUdAAAAOiDQAQAAoAMCHQAAADog0AEAAKADS0Y9gWE46KCD2rJly0Y9DQAAANjOTTfd9J3W2sHbji/IQF+2bFnWrXuiT8EBAACA0amq26cbt8UdAAAAOiDQAQAAoAMCHQAAADqwIM9BBwAAYPZt3rw5mzZtyiOPPDLqqcwLe+21V5YuXZo99thjRscLdAAAAGZk06ZNeepTn5ply5alqkY9na611nLvvfdm06ZNOeKII2Z0H1vcAQAAmJFHHnkkT3va08T5DFRVnva0p+3SbgOBDgAAwIyJ85nb1d+VLe4AAADssvGJiVl5nDVjY7PyOAuBFXQAAAAWvMcee2zUU9gpgQ4AAEC31q5dmze/+c0/un3UUUflyiuvzAknnJCXvOQlOf/885MkX/rSl7Jy5cqsWrUqb3nLW9Jay8aNG/PCF74wZ555Zs4+++xRvYQZs8UdAACAeeWKK67I5ZdfnmOOOSaPP/54Wms577zzsnbt2uy33355+9vfnmuvvTbLly/Pxo0bc8MNN2Tfffcd9bR3SqADAADQrekutPa+970v73//+/Pwww/njDPOyIte9KJs3Lgxp512WpLkoYceyrOf/ewsX748y5cvnxdxngh0AAAAOnbggQdm06ZNSZKbb745W7ZsyRFHHJHx8fE8+uijOfroo3P77bfnyCOPzDXXXJN99tknSbJ58+bceeed2X333Uc5/V0i0AEAAOjWcccdl3333TcrV67MypUrs2TJkrzzne/M+vXrs3nz5pxzzjmpqlxyySU59dRT01rLbrvtlksvvXTerJxvVa21Uc9h1q1YsaKtW7du1NMAAABYUG677bYce+yxo57GvDLd76yqbmqtrdj2WFdxBwAAgA4IdAAAAOiAQAcAAIAOCHQAAADogEAHAACADgh0AAAA6IDPQQcAAGCXjd80PiuPs+Zn1+z0mG9961v5vd/7vfzSL/1SDjzwwDzvec+blefujRV0AAAAuvbMZz4zF198cdauXZtbbrll1NMZGoEOAABA1zZu3JjVq1fn4x//eC666KKsWrUqjz32WD772c/mF37hF/LiF784F154YZJk7dq1Ofnkk/Oa17wmxx57bD73uc/l1a9+dY477rh86lOfGvEr2TFb3AEAAOjebrvtlrPOOitHHXVUfu3Xfi33339/Lr744tx4443ZY489cvrpp2f9+vVJknvvvTfXXXddvvKVr+T000/P1772tTzyyCN56UtfmjPPPHPEr+SJCXQAAADmnQ0bNuT222/PSSedlCR54IEHcvvtt2efffbJ8573vOy2225ZunRpjjnmmOy9997Ze++984Mf/GDEs94xgQ4AAMC8sOeee2bLli1JkiOPPDJHHXVUvvCFL2TJkiV5/PHH01rLjTfemKr60X2mft87gQ4AAMAum8nV12fbSSedlPPOOy/XXHNNrrrqqpx33nlZvXp1dt999+yxxx755Cc/Oedzmk3VWhv1HGbdihUr2rp160Y9DQAAgAXltttuy7HHHjvqacwr0/3Oquqm1tqKbY+1gg4A89jE+MS042NrxuZ4JgDAT8vHrAEAAEAHBDoAAAB0QKADAABABwQ6AAAAdMBF4gAAANhlT3Sh0l3lwqY/ZgUdAACARet1r3tdkmTjxo25+uqrRzoXgQ4AAMCC99hjj007/ulPfzqJQAcAAIAdWrt2bd785jf/6PZRRx2VK6+8MieccEJe8pKX5Pzzz0+SfOlLX8rKlSuzatWqvOUtb0lrLRs3bswLX/jCnHnmmTn77LOnffyjjjoqSXLJJZfk2muvzapVq3LTTTdl/fr1ednLXpbVq1fnjDPOyA9+8IMkybOe9ay87W1vy/HHH58PfvCDOe+883LiiSfm3HPP/alfq3PQAQAAmFeuuOKKXH755TnmmGPy+OOPp7WW8847L2vXrs1+++2Xt7/97bn22muzfPnybNy4MTfccEP23XffHT7mO97xjlx++eX56Ec/miT5xV/8xVx++eU5/PDD88EPfjAf+9jH8ta3vjV33313fvu3fzv77bdfnvGMZ+SLX/xiPvCBD+T444/PfffdlwMPPPBJvy6BDgAAQLeqarux973vfXn/+9+fhx9+OGeccUZe9KIXZePGjTnttNOSJA899FCe/exnZ/ny5Vm+fPlO43w6t956a17/+tcnSR555JG87GUvS5KMjY3l6U9/epLkoIMOyvHHH58kOfTQQ3P//fcLdAAAABamAw88MJs2bUqS3HzzzdmyZUuOOOKIjI+P59FHH83RRx+d22+/PUceeWSuueaa7LPP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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# 条形宽度\n",
+ "bar_width = 0.2\n",
+ "# 透明度\n",
+ "opacity = 0.4\n",
+ "# 天数\n",
+ "day_range = range(1,len(df_user['day']) + 1, 1)\n",
+ "# 设置图片大小\n",
+ "plt.figure(figsize=(14,10))\n",
+ " \n",
+ "plt.bar(df_user['day'], df_user['user_num'], bar_width, \n",
+ " alpha=opacity, color='c', label='user')\n",
+ "plt.bar(df_item['day']+bar_width, df_item['item_num'], \n",
+ " bar_width, alpha=opacity, color='g', label='item')\n",
+ "plt.bar(df_ui['day']+bar_width*2, df_ui['user_item_num'], \n",
+ " bar_width, alpha=opacity, color='m', label='user_item')\n",
+ " \n",
+ "plt.xlabel('day')\n",
+ "plt.ylabel('number')\n",
+ "plt.title('March Purchase Table')\n",
+ "plt.xticks(df_user['day'] + bar_width * 3 / 2., day_range)\n",
+ "# plt.ylim(0, 80)\n",
+ "plt.tight_layout() \n",
+ "plt.legend(prop={'size':9})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "分析:3.15京东营销活动,前后三天的时间购买量激增。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2016年4月"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n"
+ ]
+ }
+ ],
+ "source": [
+ "df_ac = get_from_action_data(fname=ACTION_201604_FILE)\n",
+ " \n",
+ "# 将time字段转换为datetime类型并使用lambda匿名函数将时间time转换为天\n",
+ "df_ac['time'] = pd.to_datetime(df_ac['time']).apply(lambda x: x.day)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_user = df_ac.groupby('time')['user_id'].nunique()\n",
+ "df_user = df_user.to_frame().reset_index()\n",
+ "df_user.columns = ['day', 'user_num']\n",
+ " \n",
+ "df_item = df_ac.groupby('time')['sku_id'].nunique()\n",
+ "df_item = df_item.to_frame().reset_index()\n",
+ "df_item.columns = ['day', 'item_num']\n",
+ " \n",
+ "df_ui = df_ac.groupby('time', as_index=False).size()\n",
+ "df_ui = df_ui.to_frame().reset_index()\n",
+ "df_ui.columns = ['day', 'user_item_num']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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MIIOAAAAHVjw0F12TPvvv387+OCDJ10GAAAA/DOrVq36Xmtt4dbtO21AP/jgg7Ny5cpJlwEAAAD/TFXdPF27Ke4AAADQAQEdAAAAOiCgAwAAQAd22jXoAAAAzK2NGzdm3bp1uffeeyddyg5hr732yuLFi7PHHnvMqL+ADgAAwIysW7cuj3rUo3LwwQenqiZdTtdaa7n99tuzbt26HHLIITM6xxR3AAAAZuTee+/NYx/7WOF8Bqoqj33sY2c120BABwAAYMaE85mb7c/KFHcAAABmbfn69XNynWWLFs3JdXYGRtABAADY6W3evHnSJTwkAR0AAIBurVixIq997Wt/+v6www7L5ZdfnuOOOy7Pfe5zc/bZZydJPv3pT+f444/PCSeckDe84Q1prWXt2rV52tOeljPOOCOve93rJvUVZswUdwAAAHYol156aS655JIcccQRuf/++9Nay1lnnZUVK1Zk3333zVve8pZcddVVWbJkSdauXZtrr702++yzz6TLfkgCOgAAAN2abqO1d7/73TnvvPPyox/9KKeddlqe+cxnZu3atTnllFOSJHfffXeOPPLILFmyJEuWLNkhwnkioAMAANCx/fbbL+vWrUuSXH/99dm0aVMOOeSQLF++PPfdd18OP/zw3HzzzTn00EPziU98InvvvXeSZOPGjbnllluy++67T7L8WRHQAQAA6NbRRx+dffbZJ8cff3yOP/74LFiwIG9729uyevXqbNy4Ma9//etTVbngggvyspe9LK217Lbbbrnwwgt3mJHzLaq1NukaxmLp0qVt5cqVky4DAABgp3HjjTfmqKOOmnQZO5TpfmZVtaq1tnTrvnZxBwAAgA4I6AAAANABAR0AAAA6IKADAABABwR0AAAA6ICADgAAAB1wH3QAAABmbfmq5XNynWVPXfaQfb7zne/kT/7kT/LSl740++23X5785CfPyWf3xgg6AAAAXfv5n//5nH/++VmxYkVuuOGGSZczNgI6AAAAXVu7dm1OPPHEfOhDH8q73vWunHDCCdm8eXP+6q/+Ks9+9rPzrGc9K+eee26SZMWKFTn55JNz+umn56ijjsoVV1yRV7ziFTn66KPzl3/5lxP+JttmijsAAADd22233fKa17wmhx12WH7jN34jd955Z84///x89rOfzR577JFTTz01q1evTpLcfvvtufrqq/OFL3whp556am666abce++9ed7znpczzjhjwt/kwQnoAAAA7HDWrFmTm2++OSeddFKS5Pvf/35uvvnm7L333nnyk5+c3XbbLYsXL84RRxyRRz7ykXnkIx+Ze+65Z8JVb5uADgAAwA5hzz33zKZNm5Ikhx56aA477LB88pOfzIIFC3L//fentZbPfvazqaqfnjP6uncCOgAAALM2k93X59pJJ52Us846K5/4xCfysY99LGeddVZOPPHE7L777tljjz3ykY98ZN5rmkvVWpt0DWOxdOnStnLlykmXAQAAsNO48cYbc9RRR026jB3KdD+zqlrVWlu6dV8j6AAAADuQ9cvXz7jvomWLxlgJc81t1gAAAKADAjoAAAB0QEAHAACADgjoAAAA0AGbxAEAADBrs9msbltsZPczRtABAADYZb3qVa9KkqxduzZXXnnlRGsR0AEAANjpbd68edr2j370o0kEdAAAANimFStW5LWvfe1P3x922GG5/PLLc9xxx+W5z31uzj777CTJpz/96Rx//PE54YQT8oY3vCGttaxduzZPe9rTcsYZZ+R1r3vdtNc/7LDDkiQXXHBBrrrqqpxwwglZtWpVVq9enec///k58cQTc9ppp+Wee+5JkvzCL/xC3vzmN+fYY4/Ne9/73px11ll5+tOfnje+8Y0P+7tagw4AAMAO5dJLL80ll1ySI444Ivfff39aaznrrLOyYsWK7LvvvnnLW96Sq666KkuWLMnatWtz7bXXZp999tnmNd/61rfmkksuyQc+8IEkyXOe85xccsklecITnpD3vve9+eAHP5g3velNue222/IHf/AH2XffffP4xz8+n/rUp/Knf/qnOfbYY3PHHXdkv/322+7vJaADAADQrap6QNu73/3unHfeefnRj36U0047Lc985jOzdu3anHLKKUmSu+++O0ceeWSWLFmSJUuWPGQ4n85Xv/rVvPrVr06S3HvvvXn+85+fJFm0aFEe97jHJUn233//HHvssUmSAw88MHfeeaeADgAAwM5pv/32y7p165Ik119/fTZt2pRDDjkky5cvz3333ZfDDz88N998cw499NB84hOfyN57750k2bhxY2655ZbsvvvuM/qcPffcM5s2bfrp+yVLluSyyy7LAQcckCT5yU9+kuSBfzAYfd9a2/4vGgEdAACA7TBft0c7+uijs88+++T444/P8ccf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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# 条形宽度\n",
+ "bar_width = 0.2\n",
+ "# 透明度\n",
+ "opacity = 0.4\n",
+ "# 天数\n",
+ "day_range = range(1,len(df_user['day']) + 1, 1)\n",
+ "# 设置图片大小\n",
+ "plt.figure(figsize=(14,10))\n",
+ " \n",
+ "plt.bar(df_user['day'], df_user['user_num'], bar_width, \n",
+ " alpha=opacity, color='c', label='user')\n",
+ "plt.bar(df_item['day']+bar_width, df_item['item_num'], \n",
+ " bar_width, alpha=opacity, color='g', label='item')\n",
+ "plt.bar(df_ui['day']+bar_width*2, df_ui['user_item_num'], \n",
+ " bar_width, alpha=opacity, color='m', label='user_item')\n",
+ " \n",
+ "plt.xlabel('day')\n",
+ "plt.ylabel('number')\n",
+ "plt.title('April Purchase Table')\n",
+ "plt.xticks(df_user['day'] + bar_width * 3 / 2., day_range)\n",
+ "# plt.ylim(0, 80)\n",
+ "plt.tight_layout() \n",
+ "plt.legend(prop={'size':9})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "分析:4月份的8号和14号前后销量比较高,可能存在某些活动。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 商品类别销售统计\n",
+ "\n",
+ "### 周一到周日各商品类别销售情况"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 从行为记录中提取商品类别数据\n",
+ "def get_from_action_data(fname, chunk_size=50000):\n",
+ " reader = pd.read_csv(fname, header=0, iterator=True)\n",
+ " chunks = []\n",
+ " loop = True\n",
+ " while loop:\n",
+ " try:\n",
+ " chunk = reader.get_chunk(chunk_size)[\n",
+ " [\"cate\", \"brand\", \"type\", \"time\"]]\n",
+ " chunks.append(chunk)\n",
+ " except StopIteration:\n",
+ " loop = False\n",
+ " print(\"Iteration is stopped\")\n",
+ " \n",
+ " df_ac = pd.concat(chunks, ignore_index=True)\n",
+ " # type=4,为购买\n",
+ " df_ac = df_ac[df_ac['type'] == 4]\n",
+ " \n",
+ " return df_ac[[\"cate\", \"brand\", \"type\", \"time\"]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n",
+ "Iteration is stopped\n",
+ "Iteration is stopped\n"
+ ]
+ }
+ ],
+ "source": [
+ "df_ac = []\n",
+ "df_ac.append(get_from_action_data(fname=ACTION_201602_FILE))\n",
+ "df_ac.append(get_from_action_data(fname=ACTION_201603_FILE))\n",
+ "df_ac.append(get_from_action_data(fname=ACTION_201604_FILE))\n",
+ "df_ac = pd.concat(df_ac, ignore_index=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " cate | \n",
+ " brand | \n",
+ " type | \n",
+ " time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 9 | \n",
+ " 306 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 174 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 5 | \n",
+ " 78 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 5 | \n",
+ " 78 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 4 | \n",
+ " 306 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " cate brand type time\n",
+ "0 9 306 4 1\n",
+ "1 4 174 4 1\n",
+ "2 5 78 4 1\n",
+ "3 5 78 4 1\n",
+ "4 4 306 4 1"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# 将time字段转换为datetime类型\n",
+ "df_ac['time'] = pd.to_datetime(df_ac['time'])\n",
+ " \n",
+ "# 使用lambda匿名函数将时间time转换为星期(周一为1, 周日为7)\n",
+ "df_ac['time'] = df_ac['time'].apply(lambda x: x.weekday() + 1)\n",
+ "df_ac.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " cate | \n",
+ " brand | \n",
+ " type | \n",
+ " time | \n",
+ "
\n",
+ " \n",
+ " cate | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 4 | \n",
+ " 9326 | \n",
+ " 9326 | \n",
+ " 9326 | \n",
+ " 9326 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 8138 | \n",
+ " 8138 | \n",
+ " 8138 | \n",
+ " 8138 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " 6982 | \n",
+ " 6982 | \n",
+ " 6982 | \n",
+ " 6982 | \n",
+ "
\n",
+ " \n",
+ " 7 | \n",
+ " 6214 | \n",
+ " 6214 | \n",
+ " 6214 | \n",
+ " 6214 | \n",
+ "
\n",
+ " \n",
+ " 8 | \n",
+ " 13281 | \n",
+ " 13281 | \n",
+ " 13281 | \n",
+ " 13281 | \n",
+ "
\n",
+ " \n",
+ " 9 | \n",
+ " 4104 | \n",
+ " 4104 | \n",
+ " 4104 | \n",
+ " 4104 | \n",
+ "
\n",
+ " \n",
+ " 10 | \n",
+ " 189 | \n",
+ " 189 | \n",
+ " 189 | \n",
+ " 189 | \n",
+ "
\n",
+ " \n",
+ " 11 | \n",
+ " 18 | \n",
+ " 18 | \n",
+ " 18 | \n",
+ " 18 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " cate brand type time\n",
+ "cate \n",
+ "4 9326 9326 9326 9326\n",
+ "5 8138 8138 8138 8138\n",
+ "6 6982 6982 6982 6982\n",
+ "7 6214 6214 6214 6214\n",
+ "8 13281 13281 13281 13281\n",
+ "9 4104 4104 4104 4104\n",
+ "10 189 189 189 189\n",
+ "11 18 18 18 18"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# 观测有几个类别商品\n",
+ "df_ac.groupby(df_ac['cate']).count()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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Y1O1r1rosVW1pKqW3HHHmu6vBgAAMLm12o2ttfbjJF9J8pwkT66qlTND85PcMjxelmSnJBmOb5XR3Zsfbp/kNRPHOK21tm9rbd95835pJgoAAGBaprMb27yqevLw+HFJfj3J0iRfTnLk0O2YJOcNj88fnmc4fsnwuZ/zk7xm2K1tlyQLk1w5UxcCAAAw0XQ+s7NDkjOHz+08Jsk5rbULquq6JGdX1X9J8q0kpw/9T0/yN8MGBHdmtANbWmvXVtU5Sa5L8kCS41trD87s5QAAAFP5xS9+kWXLluVnP/vZXJeyTrbYYovMnz8/m2222bT612jSZf207777NhsUAADAzLjxxhuz5ZZb5ilPeUpGGyZvOFprWb58ee69997ssssujzhWVd9sre276mvW6jM7AADAhutnP/vZBhl0kqSq8pSnPGWtZqWEHQAA2IhsiEFnpbWtXdgBAABmzFe+8pV87Wtfm+sykgg7AADADBJ2AACADconPvGJPPOZz8yee+6Z1772tfn85z+f/fffP3vvvXd+/dd/PbfddltuuummnHrqqXn/+9+fvfbaK1/96ldzxx135JWvfGWe/exn59nPfnYuu+yysdU8na2nAQCAjdi1116bd7/73bnsssuy7bbb5s4770xV5YorrkhV5aMf/Wje85735L3vfW+OO+64PPGJT8zb3/72JMnRRx+dP/qjP8rzn//8/OAHP8iLX/ziLF26dCx1CzsAAMBqXXLJJTnyyCOz7bbbJkm22WabXHPNNXn1q1+dW2+9Nffff/8vbQe90pe+9KVcd911Dz+/5557cu+992bLLbec9bqFHQAAYLVaa7+0E9of/MEf5K1vfWte/vKX5ytf+UpOOumkSV/70EMP5fLLL8/jHve4MVT6SD6zAwAArNZBBx2Uc845J8uXL0+S3Hnnnbn77ruz4447JknOPPPMh/tuueWWuffeex9+fsghh+TDH/7ww8+vvvrqMVUt7AAAAGuw++675x3veEde9KIXZc8998xb3/rWnHTSSXnVq16VF7zgBQ8vb0uS3/iN38i555778AYFH/rQh7JkyZI885nPzG677ZZTTz11bHVXa21sg62tfffdty1ZsmSuywAAgC4sXbo0ixYtmusyHpXJrqGqvtla23fVvmZ2AACALgk7AABAl4QdAACgS8IOAADQJWEHAADokrADAAB0SdgBAADG6sEHH8zee++dl73sZbM6zqazenYAAGC9teDEL8zo+W46+bBp9fvgBz+YRYsW5Z577pnR8Vcl7MA6OuW4S6Y8dvypB46xEgCADceyZcvyhS98Ie94xzvyvve9b1bHsowNAAAYmz/8wz/Me97znjzmMbMfRYQdAABgLC644IJst912edaznjWW8YQdAABgLC677LKcf/75WbBgQV7zmtfkkksuye/8zu/M2njCDgAAMBb/7b/9tyxbtiw33XRTzj777Bx44IH55Cc/OWvjCTsAAECX7MYGAAAbqeluFT0bDjjggBxwwAGzOoaZHQAAoEvCDgAA0CVhBwAA6JKwAwAAdEnYAQAAuiTsAAAAXbL1NAAAMFYLFizIlltumU022SSbbrpplixZMivjCDsAALCxOmmrGT7f3dPu+uUvfznbbrvtzI6/CsvYAACALgk7AADAWFVVDjnkkDzrWc/KaaedNmvjWMYGAACM1WWXXZanPvWpuf3223PwwQdn1113zQtf+MIZH8fMDgAAMFZPfepTkyTbbbddjjjiiFx55ZWzMo6wAwAAjM19992Xe++99+HHX/ziF7N48eJZGcsyNgAAYGxuu+22HHHEEUmSBx54IEcffXQOPfTQWRlL2AEAgI3VWmwVPVOe/vSn59vf/vZYxrKMDQAA6JKwAwAAdEnYAQAAuiTsAAAAXRJ2AACALgk7AABAl4QdAABgrH784x/nyCOPzK677ppFixbl8ssvn5Vx3GcHAAA2UnucuceMnu+aY66ZVr+3vOUtOfTQQ/OZz3wm999/f1asWDGjdawk7AAAAGNzzz335NJLL83HP/7xJMnmm2+ezTfffFbGsowNAAAYm+9///uZN29e3vCGN2TvvffO7/7u7+a+++6blbGEHQAAYGweeOCBXHXVVfn93//9fOtb38oTnvCEnHzyybMylrADAACMzfz58zN//vzsv//+SZIjjzwyV1111ayMJewAAABj8yu/8ivZaaedcv311ydJLr744uy2226zMpYNCgAAgLH6H//jf+S3f/u3c//99+fpT396Pvaxj83KOMIOAABspKa7VfRM22uvvbJkyZJZH8cyNgAAoEvCDgAA0CVhBwAA6JKwAwAAdEnYAQAAuiTsAAAAXRJ2AACAsbn++uuz1157Pfz1pCc9KR/4wAdmZSz32QEAgI3U0l0X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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# 周一到周日每天购买商品类别数量统计\n",
+ "df_product = df_ac['brand'].groupby([df_ac['time'],df_ac['cate']]).count()\n",
+ "df_product=df_product.unstack()\n",
+ "df_product.plot(kind='bar',title='Cate Purchase Table in a Week',figsize=(14,10))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "分析:星期二买类别8的最多,星期天最少。由上可知,我们需要对商品8做更多的分析。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 每月各类商品销售情况(只关注商品8)\n",
+ "\n",
+ "### 2016年2,3,4月"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n",
+ "Iteration is stopped\n",
+ "Iteration is stopped\n"
+ ]
+ }
+ ],
+ "source": [
+ "df_ac2 = get_from_action_data(fname=ACTION_201602_FILE)\n",
+ "\n",
+ "# 将time字段转换为datetime类型并使用lambda匿名函数将时间time转换为天\n",
+ "df_ac2['time'] = pd.to_datetime(df_ac2['time']).apply(lambda x: x.day)\n",
+ " \n",
+ "df_ac3 = get_from_action_data(fname=ACTION_201603_FILE)\n",
+ "df_ac3['time'] = pd.to_datetime(df_ac3['time']).apply(lambda x: x.day)\n",
+ " \n",
+ "df_ac4 = get_from_action_data(fname=ACTION_201604_FILE)\n",
+ "df_ac4['time'] = pd.to_datetime(df_ac4['time']).apply(lambda x: x.day)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "dc_cate2 = df_ac2[df_ac2['cate']==8]\n",
+ "dc_cate2 = dc_cate2['brand'].groupby(dc_cate2['time']).count()\n",
+ "dc_cate2 = dc_cate2.to_frame().reset_index()\n",
+ "dc_cate2.columns = ['day', 'product_num']\n",
+ " \n",
+ "dc_cate3 = df_ac3[df_ac3['cate']==8]\n",
+ "dc_cate3 = dc_cate3['brand'].groupby(dc_cate3['time']).count()\n",
+ "dc_cate3 = dc_cate3.to_frame().reset_index()\n",
+ "dc_cate3.columns = ['day', 'product_num']\n",
+ " \n",
+ "dc_cate4 = df_ac4[df_ac4['cate']==8]\n",
+ "dc_cate4 = dc_cate4['brand'].groupby(dc_cate4['time']).count()\n",
+ "dc_cate4 = dc_cate4.to_frame().reset_index()\n",
+ "dc_cate4.columns = ['day', 'product_num']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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q/KFL3whT3jCE5JM7LQnyfXXX59ddtnl3udMPnf8nnvuyR133JHbbrst1157bZLkve99bw499NB85jOfyete97p7w33T55599tk599xzc8kll+TUU0+9X+/DDjoAAABz2iGHHJLjjz8+T3nKU7JgwYLstNNOufjii5MkO++8c575zGdm/fr1eetb3zrl81/2spflyCOPzBOe8IQsXbo0SfK0pz0tz33uc3PllVfmsY997BZ/9pIlS7LTTjvl2GOPzaJFi+7X+6jJfwXYUSxfvrxtPK8AAACA0bj22mtz8MEHj3sZY3f66afnLW95Sx796Edv9thUv6OqWtNaW77pXIe4AwAAwHa48847c+KJJ2bvvfeeMs63lUPcAQAAYDssWrQol1xyyYy9nh10AAAA6IBABwAAgA4IdAAAAOiAQAcAAIAOuEgcAAAAM2LlmpUz8jorDl+x1cfXrl2b/fffP+95z3vyvOc9L0ly9tln51Of+lS+9a1vbdfPXLt2bV70ohflE5/4xHY9fybYQQcAAGDOOeyww3LRRRclSe64447ccMMNWbBgwX0+75577hn10rabQAcAAGDO2X333bNw4cJ873vfy0c+8pGceOKJSZIrrrgixx57bI4++uiceuqpuf3225MkBxxwQF7zmtfkuOOOy2233ZZzzjknRx11VI499th87GMfS5LceuuteeELX5jDDjssb3vb22b9PQl0AAAA5qQzzjgjF154YT7wgQ/k2c9+dpLkiCOOyBVXXJErr7wyj3nMY3LhhRcmSe66666cfPLJueKKK7Jq1apcf/31ueqqq3LFFVfk+OOPT5KsW7cu73jHO3LVVVfl7W9/+6y/H+egAwAAMCedcsopOf7447P77rtn7733TpJ85StfyWtf+9rccccdufHGG7PLLrskSRYsWJAjjzwySfLlL385xx57bKrq3seS5OCDD87OO+/8M2OzyQ46AAAAc9JOO+2U008/PS95yUvuHXvTm96UN7zhDfn0pz+dU045Ja21JElV3RvkhxxySD796U/f+5yN56VvfHxc7KADAAAwI+7r6uuj8Pu///s/c//MM8/M2WefnYMOOii77rrrvTvok5144olZtWpVjjrqqOy000551atelYMOOmi2lrxFtfGvCTuS5cuXt9WrV497GQAAADu0a6+9NgcffPC4l9G1qX5HVbWm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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# 条形宽度\n",
+ "bar_width = 0.2\n",
+ "# 透明度\n",
+ "opacity = 0.4\n",
+ "# 天数\n",
+ "day_range = range(1,len(dc_cate3['day']) + 1, 1)\n",
+ "# 设置图片大小\n",
+ "plt.figure(figsize=(14,10))\n",
+ " \n",
+ "plt.bar(dc_cate2['day'], dc_cate2['product_num'], bar_width, alpha=opacity, color='c', label='February')\n",
+ "plt.bar(dc_cate3['day']+bar_width, dc_cate3['product_num'], bar_width, alpha=opacity, color='g', label='March')\n",
+ "plt.bar(dc_cate4['day']+bar_width*2, dc_cate4['product_num'], bar_width, alpha=opacity, color='m', label='April')\n",
+ " \n",
+ "plt.xlabel('day')\n",
+ "plt.ylabel('number')\n",
+ "plt.title('Cate-8 Purchase Table')\n",
+ "plt.xticks(dc_cate3['day'] + bar_width * 3 / 2., day_range)\n",
+ "# plt.ylim(0, 80)\n",
+ "plt.tight_layout() \n",
+ "plt.legend(prop={'size':9})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "分析:2月份对类别8商品的购买普遍偏低,3,4月份普遍偏高,3月15日购买极其多!可以对比3月份的销售记录,发现类别8将近占了3月15日总销售的一半!同时发现,3,4月份类别8销售记录在前半个月特别相似,除了4月8号,9号和3月15号。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 关于极端值:\n",
+ "\n",
+ "类别8的3月15是一个极端值,极端值对于数据建模来说一般是负影响,3月15这天大概率是人为的促进商品8的销售量,而非正常情况,所以我们需要做更多的分析,来确定是否需要保留商品8,或者对3月15号这天的数据做处理。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 查看特定用户对特定商品的轨迹\n",
+ "如用户对某个商品购买前是先浏览多少次、添加购物车多少次,浏览类似商品等,再进行购买。这样能让模型学到用户怎样的行为会促成购买。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def spec_ui_action_data(fname, user_id, item_id, chunk_size=100000):\n",
+ " reader = pd.read_csv(fname, header=0, iterator=True)\n",
+ " chunks = []\n",
+ " loop = True\n",
+ " while loop:\n",
+ " try:\n",
+ " chunk = reader.get_chunk(chunk_size)[\n",
+ " [\"user_id\", \"sku_id\", \"type\", \"time\"]]\n",
+ " chunks.append(chunk)\n",
+ " except StopIteration:\n",
+ " loop = False\n",
+ " print(\"Iteration is stopped\")\n",
+ "\n",
+ " df_ac = pd.concat(chunks, ignore_index=True)\n",
+ " df_ac = df_ac[(df_ac['user_id'] == user_id) & (df_ac['sku_id'] == item_id)]\n",
+ "\n",
+ " return df_ac"
+ ]
+ },
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 41,
"metadata": {},
"outputs": [],
- "source": []
+ "source": [
+ "def explore_user_item_via_time():\n",
+ " user_id = 266079 # 选择一个用户\n",
+ " item_id = 138778 # 选择一个item\n",
+ " df_ac = []\n",
+ " df_ac.append(spec_ui_action_data(ACTION_201602_FILE, user_id, item_id))\n",
+ " df_ac.append(spec_ui_action_data(ACTION_201603_FILE, user_id, item_id))\n",
+ " df_ac.append(spec_ui_action_data(ACTION_201604_FILE, user_id, item_id))\n",
+ "\n",
+ " df_ac = pd.concat(df_ac, ignore_index=False)\n",
+ " print(df_ac.sort_values(by='time'))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iteration is stopped\n",
+ "Iteration is stopped\n",
+ "Iteration is stopped\n",
+ " user_id sku_id type time\n",
+ "0 266079 138778 1 2016-01-31 23:59:02\n",
+ "1 266079 138778 6 2016-01-31 23:59:03\n",
+ "15 266079 138778 6 2016-01-31 23:59:40\n"
+ ]
+ }
+ ],
+ "source": [
+ "explore_user_item_via_time() # 看一下该用户对该item的行为轨迹"
+ ]
}
],
"metadata": {