{"cells":[
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "# Imports\n\n# pandas\nimport pandas as pd\nfrom pandas import Series,DataFrame\n\n# numpy, matplotlib, seaborn\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nsns.set_style('whitegrid')\n%matplotlib inline\n\n# machine learning\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.svm import SVC, LinearSVC\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.naive_bayes import GaussianNB\nfrom sklearn import cross_validation\nimport xgboost as xgb"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "# Define training and testing sets\n\ntrain_df = open('../input/train.csv', \"r\")\ntest_df  = open('../input/test.csv', \"r\")"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "# Construct dest_clusters dictionary\n\nfrom collections import defaultdict\nimport math\n\ndef scale(X,Y):\n    X = math.floor(float(X) * 100)\n    Y = math.floor(float(Y) * 100)\n    return X,Y;\n\ncluster = defaultdict(lambda: defaultdict(int))\ntrain_df.readline()\n\nwhile True:\n\tline = train_df.readline().strip()\n\tif line == '': break\n\trow = line.split(',')\n\tX,Y = scale(row[1],row[2])\n\tplace_id = row[5]\n    \n    # for every (X,Y) - after scaling, increment it's palce_id by 1\n\tcluster[(X,Y)][place_id]+= 1\n\ntrain_df.close()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "# For every (X,Y), get the top frequent places\n\nfreq_places = dict()\n\nfor coord in cluster:\n        d = cluster[coord]\n        freq_places[coord] = sorted(d, key=d.get, reverse=True)[:3]"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "# Create Submission\n\nsubmission = open(\"facebook.csv\",'w')\nsubmission.write(\"row_id,place_id\\n\")\n\ntest_df.readline()\n\nwhile True:\n    line = test_df.readline().strip()\n    if line == '': break\n    row = line.split(',')\n    row_id = row[0]\n    X = math.floor(float(row[1]) * 100)\n    Y = math.floor(float(row[2]) * 100)\n    \n    submission.write(str(row_id)+\",\")\n    if (X,Y) in freq_places:\n        places = freq_places[(X,Y)]\n        submission.write(\" \".join(places))\n        \n    submission.write(\"\\n\")\n\nsubmission.flush()\nsubmission.close()"
 }
],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}}, "nbformat": 4, "nbformat_minor": 0}