{"metadata":{"kernelspec":{"name":"ir","display_name":"R","language":"R"},"language_info":{"name":"R","codemirror_mode":"r","pygments_lexer":"r","mimetype":"text/x-r-source","file_extension":".r","version":"4.0.5"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Submission Using Time Series API with R\n\nWe can do it with [reticulate](https://rstudio.github.io/reticulate/) package.","metadata":{}},{"cell_type":"code","source":"library(tidyverse)","metadata":{"execution":{"iopub.status.busy":"2023-04-03T00:34:02.728287Z","iopub.execute_input":"2023-04-03T00:34:02.729827Z","iopub.status.idle":"2023-04-03T00:34:02.741725Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Prepare Python and virtualenv\n\nThe Time Series API seems to be built for Python 3.7.\nBut installed in R notebook is [Python 3.8](https://github.com/Kaggle/docker-rstats/blob/59a11e32205243908ed03b9e02db4826c5e8ac2c/Dockerfile#L8).\n\nSo I created a Python 3.7 environment on a notebook and made it available on other notebooks.","metadata":{}},{"cell_type":"markdown","source":"First, add [this notebook](https://www.kaggle.com/code/igjit1/prepare-python-3-7-for-time-series-api)'s output to your notebook.","metadata":{}},{"cell_type":"markdown","source":"And unzip Python and virtualenv.","metadata":{}},{"cell_type":"code","source":"if (!file.exists(\"~/.pyenv\")) zip::unzip(\"/kaggle/input/prepare-python-3-7-for-time-series-api/pyenv.zip\", exdir = \"~/\")","metadata":{"execution":{"iopub.status.busy":"2023-04-03T00:34:02.744158Z","iopub.execute_input":"2023-04-03T00:34:02.752243Z","iopub.status.idle":"2023-04-03T00:34:05.567404Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if (!file.exists(\"~/.virtualenvs\")) zip::unzip(\"/kaggle/input/prepare-python-3-7-for-time-series-api/virtualenvs.zip\", exdir = \"~/\")","metadata":{"execution":{"iopub.status.busy":"2023-04-03T00:34:05.56984Z","iopub.execute_input":"2023-04-03T00:34:05.571131Z","iopub.status.idle":"2023-04-03T00:34:30.550405Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Specify virtual environment","metadata":{}},{"cell_type":"code","source":"Sys.unsetenv(\"RETICULATE_PYTHON\")","metadata":{"execution":{"iopub.status.busy":"2023-04-03T00:34:30.552811Z","iopub.execute_input":"2023-04-03T00:34:30.554106Z","iopub.status.idle":"2023-04-03T00:34:30.565278Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"reticulate::use_virtualenv(\"myenv\")","metadata":{"execution":{"iopub.status.busy":"2023-04-03T00:34:30.567615Z","iopub.execute_input":"2023-04-03T00:34:30.568908Z","iopub.status.idle":"2023-04-03T00:34:32.916009Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Infer Test Data","metadata":{}},{"cell_type":"markdown","source":"Import Time Series API","metadata":{}},{"cell_type":"code","source":"sys <- reticulate::import(\"sys\")\nkaggle_path <- c(\"/kaggle/working\", \"/kaggle/lib/kagglegym\", \"/kaggle/lib\", \"/kaggle/input/predict-student-performance-from-game-play\")\nsys$path <- c(kaggle_path, sys$path)\n\njo_wilder <- reticulate::import(\"jo_wilder\")","metadata":{"execution":{"iopub.status.busy":"2023-04-03T00:34:32.921232Z","iopub.execute_input":"2023-04-03T00:34:32.922883Z","iopub.status.idle":"2023-04-03T00:34:33.966169Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"env <- jo_wilder$make_env()\niter_test <- env$iter_test()","metadata":{"execution":{"iopub.status.busy":"2023-04-03T00:34:33.970115Z","iopub.execute_input":"2023-04-03T00:34:33.971942Z","iopub.status.idle":"2023-04-03T00:34:33.99281Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Infer test data.","metadata":{}},{"cell_type":"markdown","source":"Here, infer as in [Random Submission](https://www.kaggle.com/code/cpmpml/random-submission) notebook.","metadata":{}},{"cell_type":"code","source":"difficult_q <- c(5, 8, 10, 13, 15)","metadata":{"execution":{"iopub.status.busy":"2023-04-03T00:34:33.99628Z","iopub.execute_input":"2023-04-03T00:34:33.998397Z","iopub.status.idle":"2023-04-03T00:34:34.014895Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"reticulate::iterate(iter_test, function(x) {\n  test <- reticulate::py_to_r(x[[1]])\n  sample_submission <- reticulate::py_to_r(x[[2]])\n\n  submission <- sample_submission %>%\n    separate(session_id, c(\"id\", \"q\"), sep = \"_q\", remove = FALSE) %>%\n    mutate(correct = ifelse(q %in% difficult_q, 0L, 1L)) %>%\n    select(-c(id, q))\n\n  env$predict(submission)\n})","metadata":{"execution":{"iopub.status.busy":"2023-04-03T00:34:34.018089Z","iopub.execute_input":"2023-04-03T00:34:34.019784Z","iopub.status.idle":"2023-04-03T00:34:34.242978Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Check submission.csv","metadata":{}},{"cell_type":"code","source":"read_csv(\"submission.csv\") %>% head(20)","metadata":{"execution":{"iopub.status.busy":"2023-04-03T00:34:53.767694Z","iopub.execute_input":"2023-04-03T00:34:53.769245Z","iopub.status.idle":"2023-04-03T00:34:53.862865Z"},"trusted":true},"execution_count":null,"outputs":[]}]}