{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Emulator for debugging submission code\nEmurator to debug sunmit code in a local environment using sample_submission.csv and test.csv.","metadata":{}},{"cell_type":"code","source":"from pathlib import Path\nimport pandas as pd","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-02-12T09:40:21.323478Z","iopub.execute_input":"2023-02-12T09:40:21.324210Z","iopub.status.idle":"2023-02-12T09:40:21.328487Z","shell.execute_reply.started":"2023-02-12T09:40:21.324168Z","shell.execute_reply":"2023-02-12T09:40:21.327694Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Emulator\n- iter_test:Returns (sample_submission, test) per session_level.\n- predict:Output submission to output_dir for debugging.","metadata":{}},{"cell_type":"code","source":"class JoWilderEmulator:\n    def __init__(self, data_dir: Path, output_dir: Path):\n        self.sample_submission_df = pd.read_csv(data_dir / \"sample_submission.csv\")\n        self.test_df = pd.read_csv(data_dir / \"test.csv\")\n        self.output_dir = output_dir\n\n    def iter_test(self):\n        \"\"\"Generator returned per session_level\"\"\"\n        sample_submission_df = self.sample_submission_df\n        test_df = self.test_df\n        session_levels = sample_submission_df.session_level.unique()\n        for session_level in session_levels:\n            sample_submission = sample_submission_df.query(f\"session_level=='{session_level}'\")\n            test = test_df.query(f\"session_level=='{session_level}'\")\n\n            sample_submission = sample_submission.drop(\"session_level\", axis=\"columns\").reset_index(drop=True)\n            test = test.drop(\"session_level\", axis=\"columns\").reset_index(drop=True)\n            yield sample_submission, test\n\n    def predict(self, submission: pd.DataFrame):\n        \"\"\"Output submission to output_dir\"\"\"\n        session = submission.session_id.iloc[0].split(\"_\")[0]\n        head_q = submission.session_id.iloc[0].split(\"_\")[1]\n        tail_q = submission.session_id.iloc[-1].split(\"_\")[1]\n        submission.to_csv(self.output_dir / f\"{session}_{head_q}-{tail_q}_submit.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2023-02-12T09:41:24.332022Z","iopub.execute_input":"2023-02-12T09:41:24.332855Z","iopub.status.idle":"2023-02-12T09:41:24.341421Z","shell.execute_reply.started":"2023-02-12T09:41:24.332811Z","shell.execute_reply":"2023-02-12T09:41:24.340543Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Usage","metadata":{}},{"cell_type":"code","source":"debug=True\nif debug:\n    data_dir=Path(\"/kaggle/input/predict-student-performance-from-game-play\")\n    output_dir=Path(\"/kaggle/working\")\n    env = JoWilderEmulator(data_dir, output_dir)\nelse:\n    import jo_wilder\n    env = jo_wilder.make_env()\niter_test = env.iter_test()\nfor (sample_submission, test) in iter_test:\n    submission = sample_submission  # your prediction\n    env.predict(submission)","metadata":{"execution":{"iopub.status.busy":"2023-02-12T09:41:26.717128Z","iopub.execute_input":"2023-02-12T09:41:26.717989Z","iopub.status.idle":"2023-02-12T09:41:26.796961Z","shell.execute_reply.started":"2023-02-12T09:41:26.717948Z","shell.execute_reply":"2023-02-12T09:41:26.796013Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}