{"cells":[
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "import numpy as np\nimport pandas as pd \nfrom subprocess import check_output\n#print(check_output([\"ls\", \"../input\"]).decode(\"utf8\"))\nimport datetime\nimport time"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "from sklearn.decomposition import PCA"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "desti1 = pd.read_csv(\"../input/destinations.csv\")"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "desti1.info()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "X = desti1.ix[:,1:150]"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "X.info()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "y = desti1.ix[:,0:1]"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "y.info()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "pca = PCA(n_components=5)\nX_r = pca.fit(X).transform(X)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "X_r1 = pd.DataFrame(X_r)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "X_r1[\"srch_destination_id\"] = desti1[\"srch_destination_id\"]"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "print('explained variance ratio (first 5 components): %s' % str(pca.explained_variance_ratio_))"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "X_r1.info()"
 },
 {
  "cell_type": "markdown",
  "metadata": {},
  "source": "We compresses the 149 columns in destinations down to 5 columns, and creates a new DataFrame called X_r1, preserve most of the variance in destinations, to save a lot of runtime for a machine learning algorithm."
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "\nX_r1.columns = ['d1','d2','d3','d4','d5','srch_destination_id']"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1 = pd.read_csv(\"../input/train.csv\", nrows=1000000)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1[\"srch_ci\"] = pd.to_datetime(train1[\"srch_ci\"], format='%Y-%m-%d', errors=\"coerce\")"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1[\"srch_ci\"] = pd.to_datetime(test1[\"srch_ci\"], format='%Y-%m-%d', errors=\"coerce\")"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1[\"srch_co\"] = pd.to_datetime(train1[\"srch_co\"], format='%Y-%m-%d', errors=\"coerce\")"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1[\"srch_co\"] = pd.to_datetime(test1[\"srch_co\"], format='%Y-%m-%d', errors=\"coerce\")"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1[\"stay_span\"] = (train1[\"srch_co\"] - train1[\"srch_ci\"]).astype('timedelta64[D]')"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1[\"stay_span\"] = (test1[\"srch_co\"] - test1[\"srch_ci\"]).astype('timedelta64[D]')"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train2 = pd.to_datetime(train1[\"date_time\"])"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test2 = pd.to_datetime(test1[\"date_time\"])"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train2 = pd.DataFrame(train2)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test2 = pd.DataFrame(test2)"
 },
 {
  "cell_type": "markdown",
  "metadata": {},
  "source": "train1['year'] = train2['date_time'].dt.year\ntrain1['month'] = train2['date_time'].dt.month\ntrain1['day_of_week'] = train2['date_time'].dt.dayofweek\ntrain1['day'] = train2['date_time'].dt.day\ntrain1['hour'] = train2['date_time'].dt.hour"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1['year'] = test2['date_time'].dt.year\ntest1['month'] = test2['date_time'].dt.month\ntest1['day_of_week'] = test2['date_time'].dt.dayofweek\ntest1['day'] = test2['date_time'].dt.day\ntest1['hour'] = test2['date_time'].dt.hour"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1[\"date_time\"] = pd.to_datetime(train1[\"date_time\"], format='%Y-%m-%d', errors=\"coerce\")\ntrain1[\"srch_ci\"] = pd.to_datetime(train1[\"srch_ci\"], format='%Y-%m-%d', errors=\"coerce\")\ntrain1[\"search_span\"] = (train1[\"srch_ci\"] - train1[\"date_time\"]).astype('timedelta64[D]')"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1[\"date_time\"] = pd.to_datetime(test1[\"date_time\"], format='%Y-%m-%d', errors=\"coerce\")\ntest1[\"srch_ci\"] = pd.to_datetime(test1[\"srch_ci\"], format='%Y-%m-%d', errors=\"coerce\")\ntest1[\"search_span\"] = (test1[\"srch_ci\"] - test1[\"date_time\"]).astype('timedelta64[D]')"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1.ix[(train1['hour'] >= 10) & (train1['hour'] < 18), 'hour'] = 1\ntrain1.ix[(train1['hour'] >= 18) & (train1['hour'] < 22), 'hour'] = 2\ntrain1.ix[(train1['hour'] >= 22) & (train1['hour'] == 24), 'hour'] = 3\ntrain1.ix[(train1['hour'] >= 1) & (train1['hour'] < 10), 'hour'] = 3"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1.ix[(test1['hour'] >= 10) & (test1['hour'] < 18), 'hour'] = 1\ntest1.ix[(test1['hour'] >= 18) & (test1['hour'] < 22), 'hour'] = 2\ntest1.ix[(test1['hour'] >= 22) & (test1['hour'] == 24), 'hour'] = 3\ntest1.ix[(test1['hour'] >= 1) & (test1['hour'] < 10), 'hour'] = 3"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1 = train1.drop('srch_ci', axis=1)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1 = test1.drop('srch_ci', axis=1)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1 = train1.drop('srch_co', axis=1)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1 = test1.drop('srch_co', axis=1)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1 = train1.drop('date_time', axis=1)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1 = test1.drop('date_time', axis=1)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1 = train1.join(X_r1, on = 'srch_destination_id', how = 'left', rsuffix='dest')"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1 = train1.drop(\"srch_destination_iddest\", axis=1)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1.fillna(-1, inplace=True)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1.fillna(-1, inplace=True)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1.info()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "hotelCluster = train1.ix[:,'hotel_cluster']"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "hotelCluster1 = pd.DataFrame(hotelCluster)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "hotelCluster1.info()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "hotelCluster1['hotel_cluster'].head()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train1 = train1.drop('hotel_cluster', axis=1) #df.drop('reports', axis=1)"
 },
 {
  "cell_type": "markdown",
  "metadata": {},
  "source": "train1.info()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "from sklearn import cross_validation\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.neural_network import MLPClassifier\n#clf = RandomForestClassifier(n_estimators=10, min_weight_fraction_leaf=0.1)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "clf = MLPClassifier(algorithm='adam', alpha=1e-5, hidden_layer_sizes=(100, 3), learning_rate='adaptive', random_state=1)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "print(hotelCluster.shape)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "clf.fit(train1, hotelCluster)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1 = pd.read_csv(\"../input/test.csv\", parse_dates=['date_time'], nrows=10)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1.info()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test1['j'] = -1"
 },
 {
  "cell_type": "markdown",
  "metadata": {},
  "source": "clf.predict_proba(test1)"
 }
],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}}, "nbformat": 4, "nbformat_minor": 0}