{"cells":[
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nfrom subprocess import check_output\nprint(check_output([\"ls\", \"../input\"]).decode(\"utf8\"))\n\n# Any results you write to the current directory are saved as output.\n\ndf_train = pd.read_csv('../input/train.csv')\ndf_test = pd.read_csv('../input/test.csv')"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "df_train.head()\nlen(df_train['place_id'].unique())\ndf_train['place_id'].value_counts()\ndf_train.groupby('place_id').first()\ndf_train.groupby('place_id').mean()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "time = df_train['time']\ntime.max() - time.min()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "df_train['hour'] = (df_train['time']/60)%24\ndf_train['dayofweek'] = np.floor((df_train['time']/(60*24))%7)+1\ndf_train['monthofyear'] = np.floor((df_train['time']/(60*24*30))%12)+1\ndf_train['season'] = np.floor((df_train['time']/(60*24*30*4))%4)+1\n\ndf_test['hour'] = (df_test['time']/60)%24\ndf_test['dayofweek'] = np.floor((df_test['time']/(60*24))%7)+1\ndf_test['monthofyear'] = np.floor((df_test['time']/(60*24*30))%12)+1"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "df_placecounts = df_train[\"place_id\"].value_counts()\ndf_placecounts.head()\ndf_topplaces = df_placecounts.iloc[0:20]\nl_topplaces = list(df_topplaces.index)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "import matplotlib.pyplot as plt\nplt.figure(figsize=(14,10))\nfor i in range(len(l_topplaces)):\n    place = l_topplaces[i]\n\n    df_place = df_train[df_train[\"place_id\"]==place]\n\n    counts, bins = np.histogram(df_place[\"time\"], bins=50, range=[df_train[\"time\"].min(), df_train[\"time\"].max()])\n    binsc = bins[:-1] + np.diff(bins)/2.\n    \n    plt.subplot(5,4,i+1)\n    plt.bar(binsc, counts/(counts.sum()*1.0), width=np.diff(bins)[0])\n    plt.xlim(df_train[\"time\"].min(), df_train[\"time\"].max())\n    plt.grid(True)\n    plt.xlabel(\"Time\")\n    plt.ylabel(\"Fraction\")\n    plt.gca().get_xaxis().set_ticks([])\n    plt.title(\"pid: \" + str(place))\n    \nplt.tight_layout()\nplt.show()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "plt.figure(figsize=(14,10))\nfor i in range(len(l_topplaces)):\n    place = l_topplaces[i]\n\n    df_place = df_train[df_train[\"place_id\"]==place]\n    df_plot = df_place['hour']\n  \n    counts, bins = np.histogram(df_plot, bins=50)\n    binsc = bins[:-1] + np.diff(bins)/2.\n    \n    plt.subplot(5,4,i+1)\n    plt.bar(binsc, counts/(counts.sum()*1.0), width=np.diff(bins)[0])\n    plt.grid(True)\n    plt.xlabel(\"Time\")\n    plt.ylabel(\"Fraction\")\n    plt.gca().get_xaxis().set_ticks([])\n    plt.title(\"pid: \" + str(place))\n    \nplt.tight_layout()\nplt.show()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "import matplotlib.pyplot as plt\nplt.figure(figsize=(14,10))\nfor i in range(len(l_topplaces)):\n    place = l_topplaces[i]\n\n    df_place = df_train[df_train[\"place_id\"]==place]\n    df_plot = df_place['dayofweek']\n  \n    counts, bins = np.histogram(df_plot, bins=50)\n    binsc = bins[:-1] + np.diff(bins)/2.\n    \n    plt.subplot(5,4,i+1)\n    plt.bar(binsc, counts/(counts.sum()*1.0), width=np.diff(bins)[0])\n    plt.grid(True)\n    plt.xlabel(\"Time\")\n    plt.ylabel(\"Fraction\")\n    plt.gca().get_xaxis().set_ticks([])\n    plt.title(\"pid: \" + str(place))\n    \nplt.tight_layout()\nplt.show()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "plt.figure(figsize=(14,10))\nfor i in range(len(l_topplaces)):\n    place = l_topplaces[i]\n\n    df_place = df_train[df_train[\"place_id\"]==place]\n    df_plot = df_place['monthofyear']\n  \n    counts, bins = np.histogram(df_plot, bins=50)\n    binsc = bins[:-1] + np.diff(bins)/2.\n    \n    plt.subplot(5,4,i+1)\n    plt.bar(binsc, counts/(counts.sum()*1.0), width=np.diff(bins)[0])\n    plt.grid(True)\n    plt.xlabel(\"Time\")\n    plt.ylabel(\"Fraction\")\n    plt.gca().get_xaxis().set_ticks([])\n    plt.title(\"pid: \" + str(place))\n    \nplt.tight_layout()\nplt.show()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "plt.figure(figsize=(14,10))\nfor i in range(len(l_topplaces)):\n    place = l_topplaces[i]\n\n    df_place = df_train[df_train[\"place_id\"]==place]\n    df_plot = df_place['season']\n  \n    counts, bins = np.histogram(df_plot, bins=50)\n    binsc = bins[:-1] + np.diff(bins)/2.\n    \n    plt.subplot(5,4,i+1)\n    plt.bar(binsc, counts/(counts.sum()*1.0), width=np.diff(bins)[0])\n    plt.grid(True)\n    plt.xlabel(\"Time\")\n    plt.ylabel(\"Fraction\")\n    plt.gca().get_xaxis().set_ticks([])\n    plt.title(\"pid: \" + str(place))\n    \nplt.tight_layout()\nplt.show()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "df_small = df_train[(df_train['x'] > 5) & (df_train['x'] < 5.25) & (df_train['y'] > 1) & (df_train['y'] < 1.25)]\ndf_smallByPlaceId = df_small['place_id'].value_counts()\ndf_topplaces = df_smallByPlaceId.iloc[0:20]\nl_topplaces = list(df_topplaces.index)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "df_smallByPlaceId"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "df_small['place_id']"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "plt.figure(figsize=(10,10))\nfor i in range(len(l_topplaces)):\n    place = l_topplaces[i]\n\n    df_place = df_small[df_small[\"place_id\"]==place]\n    plt.scatter(df_place[\"x\"], df_place[\"y\"], s=10, c=plt.cm.viridis(int(i*(255/len(l_topplaces)))), lw=0, cmap=plt.cm.viridis)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "import matplotlib.pyplot as plt\nfrom mpl_toolkits.mplot3d import Axes3D\nfig = plt.figure(figsize=(10,10))\nax = fig.add_subplot(111, projection='3d')\nfor i in range(len(l_topplaces)):\n    place = l_topplaces[i]\n\n    df_place = df_small[df_small[\"place_id\"]==place]\n    ax.scatter(df_place['x'], df_place['y'], df_place['hour'], c=plt.cm.viridis(int(i*(255/len(l_topplaces)))),lw=0, cmap=plt.cm.viridis)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": ""
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": ""
 }
],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}}, "nbformat": 4, "nbformat_minor": 0}