{"cells":[
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "library(data.table)\nlibrary(magrittr)\nlibrary(stringr)\ntrain <- fread('../input/train.csv', \n               header=TRUE, \n               select = c(\"user_id\", \"hotel_cluster\", \"srch_destination_id\", \"srch_children_cnt\"), \n               nrows = 10000000)\nhead(train)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "# Posibles fuentes de influencia:\n# 1. Preferencias del usuario (clicks + bookings)\n# 2. Hoteles más populares en cada destino"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "top_ten <- function(all_clusters){\n    all_clusters %>% table() %>% order(decreasing = T) %>% head(10) %>% paste(collapse = \",\")  \n}"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "# 1. Preferencias de usuario\nusers <- train[, top_ten(hotel_cluster), by = .(user_id, srch_children_cnt > 0)]\nsetnames(users, \"srch_children_cnt\", \"children\")\nsetnames(users, \"V1\", \"hotel_clusters\")\nhead(users, 10)"
 },
 {
  "cell_type": "markdown",
  "metadata": {},
  "source": "Hay usuarios que viajan a veces con niños y a veces sin niños, por lo que hay usuarios que están\nen ambos listados."
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "# 2. Hoteles más populares en cada destino\ndestinations <- train[, top_ten(hotel_cluster), by = .(srch_destination_id, srch_children_cnt > 0)]\nsetnames(destinations, \"srch_children_cnt\", \"children\")\nsetnames(destinations, \"V1\", \"hotel_clusters\")\nhead(destinations, 10)"
 },
 {
  "cell_type": "markdown",
  "metadata": {},
  "source": "Trato de predecir el test. Para cada caso del test set quiero:\n\n\n- Ver si hay o no hay niños.\n- Añadir los clusters preferidos por el usuario.\n- Añadir los clusters más populares en el destino.\n- Seleccionar los clusters que coincidan en las dos nuevas columnas"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test <- fread('../input/test.csv', \n               header=TRUE, \n               select = c(\"user_id\", \"srch_destination_id\", \"srch_children_cnt\"), \n               nrows = 100000)\n\ntotal_rows <- nrow(test)\n\ninvisible( test[, children := srch_children_cnt > 0][, srch_children_cnt := NULL] )\ntest <- merge(test, users, by = c(\"user_id\", \"children\"))\nsetnames(test, \"hotel_clusters\", \"hotel_clusters_user\")\ntest <- merge(test, destinations, by = c(\"srch_destination_id\", \"children\"))\nsetnames(test, \"hotel_clusters\", \"hotel_clusters_destinations\")"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "cluster_join <- character(nrow(test))\nhotel_clusters_user <- test[, hotel_clusters_user]\nhotel_clusters_destinations <- test[, hotel_clusters_destinations]\n\nfor(i in 1:nrow(test)){\n    hcu <- str_split(hotel_clusters_user[i], \",\") %>% unlist()\n    hcd <- str_split(hotel_clusters_destinations[i], \",\") %>% unlist()\n    cluster_join[i] <- hcu[hcu %in% hcd] %>% paste(collapse = \",\")\n    if(i%%100 == 0) cat(i, \",\")\n}\n\ntest[, hotel_clusters_join := cluster_join]\nhead(test, 10)\n\ncat(\"\\n\\n\")\n# if(nrow(test) != total_rows) stop(\"Number of rows in result is wrong\")"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "nrow(test)"
 }
],"metadata":{"kernelspec":{"display_name":"R","language":"R","name":"ir"}}, "nbformat": 4, "nbformat_minor": 0}