{"cells":[
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\ndf_train = pd.read_csv('../input/train.csv')\n#most of the checkins has the accuracy being under 100 (probably 100 meters)\nimport matplotlib.pyplot as plt\nplt.hist(df_train.accuracy)\nplt.show()\n#take part of the data to do experiment\ndf_train_sub=df_train[:20000].copy()\ndf_test=df_train[20000:23000].copy()\ndef process(df,keep_good): #to return the training data and testing data\n    if keep_good:\n        df_processed=df[df['accuracy']<200].copy()  #rule out the checkins with low quality\n    else:\n        df_processed=df\n    weight=[20,40,0,0]\n    df_processed['x']=weight[0]*df_processed['x']\n    df_processed['y']=weight[1]*df_processed['y']\n    minute= (df_processed['time'] % (24*60))*1.0/(24*60) * 2 * np.pi\n    df_processed['minute_sin'] = (np.sin(minute) + 1).round(4)\n    df_processed['minute_cos'] = (np.cos(minute) + 1).round(4)\n    df_processed['minute_sin'] =weight[2]*df_processed['minute_sin']\n    df_processed['minute_cos'] =weight[2]*df_processed['minute_cos']\n    del minute\n    weekday = 2 * np.pi * ((df_processed['time'] // 1440) % 7) / 7\n    df_processed['weekday_sin'] = (np.sin(weekday) + 1).round(4)\n    df_processed['weekday_cos'] = (np.cos(weekday) + 1).round(4)\n    df_processed['weekday_sin']=weight[3]*df_processed['weekday_sin']\n    df_processed['weekday_cos']=weight[3]*df_processed['weekday_cos']\n    del weekday\n    X=df_processed.drop(['row_id','time','place_id','accuracy'],axis=1)\n    Y=df_processed['place_id']\n    return X,Y\n    \n    \n"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train_x,train_y=process(df_train_sub,False)\ntest_x,test_y=process(df_test,False)\nfrom sklearn.neighbors import KNeighborsClassifier\nclf = KNeighborsClassifier(n_neighbors=37,weights=\"distance\")\nclf.fit(train_x,train_y)\npred=clf.predict(test_x)\nnp.mean(pred==test_y.values)"
 }
],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}}, "nbformat": 4, "nbformat_minor": 0}