{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "b63efc59-d5d5-ddc0-7551-5667ad0fb4a4"
      },
      "outputs": [],
      "source": [
        "# https://github.com/kaggle/docker-python\n",
        "import numpy as np # linear algebra\n",
        "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n",
        "import os\n",
        "import gc\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "import sklearn\n",
        "# Input data files are available in the \"../input/\" directory.\n",
        "from subprocess import check_output\n",
        "p = sns.color_palette()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "e9c6abc9-1cbc-2547-9b6e-269839e9526f"
      },
      "outputs": [],
      "source": [
        "clicks_train = pd.read_csv('../input/clicks_train.csv')\n",
        "clicks_test = pd.read_csv('../input/clicks_test.csv')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "a6911525-cf5c-b353-42a0-03ce3ced9ee4"
      },
      "outputs": [],
      "source": [
        "sizes_train = clicks_train.groupby('display_id')['ad_id'].count().value_counts()\n",
        "sizes_train = sizes_train / np.sum(sizes_train)\n",
        "plt.figure(figsize=(12,4))\n",
        "sns.barplot(sizes_train.index, sizes_train.values, alpha=0.8, color=p[0], label='train')\n",
        "plt.legend()\n",
        "plt.xlabel('Number of Ads in display', fontsize=12)\n",
        "plt.ylabel('Proportion of set', fontsize=12);"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "d02dcc63-d7bd-37f6-dd34-797ffff8d920"
      },
      "outputs": [],
      "source": [
        "ad_usage_train = clicks_train.groupby('ad_id')['ad_id'].count()\n",
        "\n",
        "for i in [2, 10, 50, 100, 1000]:\n",
        "    print('Ads that appear less than {} times: {}%'.format(i, round((ad_usage_train < i).mean() * 100, 2)))\n",
        "\n",
        "plt.figure(figsize=(12, 6))\n",
        "plt.hist(ad_usage_train.values, bins=50, log=True)\n",
        "plt.xlabel('Number of times ad appeared', fontsize=12)\n",
        "plt.ylabel('log(Count of displays with ad)', fontsize=12)\n",
        "plt.show();"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "1d606365-bb7c-2dff-be8b-a360280445c9"
      },
      "outputs": [],
      "source": [
        "print('display ids in train:', len(clicks_train.display_id.unique()))\n",
        "print('display ids in test:', len(clicks_test.display_id.unique()))\n",
        "print('ad ids in train:', len(clicks_train.ad_id.unique()))\n",
        "print('ad ids in test:', len(clicks_test.ad_id.unique()))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "f84e7e6c-4bb5-5fdb-8a45-d0c3d42e6204"
      },
      "outputs": [],
      "source": [
        "ad_ctr = clicks_train.groupby('ad_id').clicked.mean().to_frame()\n",
        "clicks_test_ctr = clicks_test.join(ad_ctr, on='ad_id')\n",
        "clicks_test_ctr.clicked.fillna(0., inplace=True)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "97e56125-cbe8-60b0-46d3-6a9e8772c07a"
      },
      "outputs": [],
      "source": [
        "clicks_test_ctr.sort_values(['display_id','clicked'], inplace=True, ascending=False)\n",
        "subm = clicks_test_ctr.groupby('display_id').ad_id.apply(lambda x: \" \".join(map(str,x))).reset_index()\n",
        "subm.to_csv(\"subm.csv\", index=False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "15ac9b9f-4447-e530-c16f-07a6c3341590"
      },
      "outputs": [],
      "source": [
        "check_output(['ls','-lh'])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "580c6a6a-e2d1-781e-5001-833ba3e501f3"
      },
      "outputs": [],
      "source": ""
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "ed30fdbd-41b5-a6b9-c9cc-21bbf621376a"
      },
      "outputs": [],
      "source": ""
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "90b91aff-2502-fdcb-70c4-fb48d6a04672"
      },
      "outputs": [],
      "source": ""
    }
  ],
  "metadata": {
    "_change_revision": 0,
    "_is_fork": false,
    "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.5.2"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}