{"cells":[
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "# -*- coding: utf-8 -*-\n\"\"\"\nCreated on Wed May 11 22:52:25 2016\n\n@author: Jared Turkewitz\n\"\"\"\n#%%\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport timeit\n\ntic0=timeit.default_timer()\ntic=timeit.default_timer()\npd.options.mode.chained_assignment = None  # default='warn'\n\ntrain = pd.read_csv(\"../input/train.csv\")\ntest = pd.read_csv(\"../input/test.csv\")\n\ntoc=timeit.default_timer()\nprint('Load Time',toc - tic)\n\n#%%\ndef get_grid_dict(x_bins=100,y_bins=100):\n\n    grid_dict = {}\n    grid_value = 0\n    for i in range(x_bins):\n        for j in range(y_bins):\n            key = (i,j)\n            grid_dict[key] = grid_value\n            grid_value = grid_value + 1\n    return grid_dict\n#%%\ntic=timeit.default_timer()\ntic1=timeit.default_timer()\n\n\ny_bins_fine = []\ny_bins_range = 800\nfor i in range(y_bins_range):\n    y_bins_fine.append(i/(y_bins_range-1)*10  )\nx_bins_fine = []\nx_bins_range = 400\nfor i in range(x_bins_range):\n    x_bins_fine.append(i/(x_bins_range-1)*10 )\n\n#all caps to avoid spyder variable explorer bug\nGRID_DICT_FINE = get_grid_dict(x_bins_range,y_bins_range)\n\n#normally I combine train and test before feature engineering but this causes memory issues\n#for the scripts with the zip step\ntrain['y_binned_fine'] = np.digitize(train['y'],y_bins_fine,right=True)\ntrain['x_binned_fine'] = np.digitize(train['x'],x_bins_fine,right=True)\ntrain['xy_binned_fine'] = list(zip(train['x_binned_fine'],train['y_binned_fine']))\ntrain['xy_binned_fine'] = train['xy_binned_fine'].map(GRID_DICT_FINE)\n\ntest['y_binned_fine'] = np.digitize(test['y'],y_bins_fine,right=True)\ntest['x_binned_fine'] = np.digitize(test['x'],x_bins_fine,right=True)\ntest['xy_binned_fine'] = list(zip(test['x_binned_fine'],test['y_binned_fine']))\ntest['xy_binned_fine'] = test['xy_binned_fine'].map(GRID_DICT_FINE)\n\ntoc=timeit.default_timer()\nprint('Getting xy time',toc - tic)\n\ntic=timeit.default_timer()\n\ntrain_grid_fine_grouped = train.groupby('xy_binned_fine')\ntemp_vc = train_grid_fine_grouped['place_id'].value_counts()\n\ntemp_df = pd.DataFrame(temp_vc)\ntemp_df.rename(columns={'place_id':'freq'},inplace=True)\ntemp_df.reset_index(inplace=True)\n\ntemp_df_grouped_place_id = temp_df.groupby('xy_binned_fine')['place_id']\n\n#get 3 most common places in the given grid xy bins\nCOMMON_1_DICT = temp_df_grouped_place_id.nth(0).to_dict()\nCOMMON_2_DICT = temp_df_grouped_place_id.nth(1).to_dict()\nCOMMON_3_DICT = temp_df_grouped_place_id.nth(2).to_dict()\n\ndef apply_common_dict(common_dict,x):\n    try:\n        return common_dict[x]\n    except KeyError:\n        return -1\n\ntest['pred_0'] = test['xy_binned_fine'].map(lambda x: apply_common_dict(COMMON_1_DICT,x))\ntest['pred_1'] = test['xy_binned_fine'].map(lambda x: apply_common_dict(COMMON_2_DICT,x))\ntest['pred_2'] = test['xy_binned_fine'].map(lambda x: apply_common_dict(COMMON_3_DICT,x))\n\ntoc=timeit.default_timer()\nprint('Grouping Time',toc - tic)\n\n#if you want to do cv\n#test['pred_0_res'] = test['pred_0'] - test['place_id']\n#test['pred_1_res'] = test['pred_1'] - test['place_id']\n#test['pred_2_res'] = test['pred_2'] - test['place_id']\n#test['pred_0_res'] = (test['pred_0_res'] == 0).astype(int)\n#test['pred_1_res'] = (test['pred_1_res'] == 0).astype(int) / 2\n#test['pred_2_res'] = (test['pred_2_res'] == 0).astype(int) / 3\n#test['apk'] = test['pred_0_res'] + test['pred_1_res'] + test['pred_2_res']\n#print('apk',test['apk'].mean())\n\ntoc=timeit.default_timer()\nprint('Running Time',toc - tic1)\n#%%\n\ntic=timeit.default_timer()\n\ntest_neg0_cond = test['pred_0'] == -1\ntest_neg1_cond = test['pred_1'] == -1\ntest_neg2_cond = test['pred_2'] == -1\n\ntest['pred_0'][test_neg0_cond] = 8772469670\ntest['pred_1'][test_neg1_cond] = 1623394281\ntest['pred_2'][test_neg2_cond] = 1308450003\n\ntest['pred_0'] = test['pred_0'].astype(str)\ntest['pred_1'] = test['pred_1'].astype(str)\ntest['pred_2'] = test['pred_2'].astype(str)\n\ntest['place_id'] = test['pred_0'] + ' ' + test['pred_1'] + ' ' + test['pred_2']\n\ntest = test[['row_id','place_id']].copy()\ntest.to_csv('basic_fb_checkin.csv', index=False)\nprint('submission created')\ntoc=timeit.default_timer()\nprint('Making Sub Time',toc - tic)\ntoc=timeit.default_timer()\nprint('Total Time',toc - tic0)\n"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "COMMON_1_DICT[0]"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test['y_binned_fine'] = np.digitize(test['y'],y_bins_fine,right=True)\ntest['x_binned_fine'] = np.digitize(test['x'],x_bins_fine,right=True)\ntest['xy_binned_fine'] = list(zip(test['x_binned_fine'],test['y_binned_fine']))\ntest['xy_binned_fine'] = test['xy_binned_fine'].map(GRID_DICT_FINE)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test = pd.read_csv(\"../input/test.csv\")\ntest['y_binned_fine'] = np.digitize(test['y'],y_bins_fine,right=True)\ntest['x_binned_fine'] = np.digitize(test['x'],x_bins_fine,right=True)\ntest['xy_binned_fine'] = list(zip(test['x_binned_fine'],test['y_binned_fine']))\ntest['xy_binned_fine'] = test['xy_binned_fine'].map(GRID_DICT_FINE)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test['pred_0'] = test['xy_binned_fine'].map(lambda x: apply_common_dict(COMMON_1_DICT,x))"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test['pred_0']"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "y_bins_fine"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test['xy_binned_fine'] = list(zip(test['x_binned_fine'],test['y_binned_fine']))"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "7*7\n\n\n"
 }
],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}}, "nbformat": 4, "nbformat_minor": 0}