{"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":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nfrom joblib import load\n\nimport jo_wilder_310\n\nenv = jo_wilder_310.make_env()\niter_test = env.iter_test()","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-08-03T12:28:19.818951Z","iopub.execute_input":"2023-08-03T12:28:19.819818Z","iopub.status.idle":"2023-08-03T12:28:19.959210Z","shell.execute_reply.started":"2023-08-03T12:28:19.819764Z","shell.execute_reply":"2023-08-03T12:28:19.957888Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def pre_processing(train):\n    # fill empty numerical values with mean value, and add a dummy column indicating it was NaN\n    for column in ['elapsed_time', 'level', 'page', 'room_coor_x', 'room_coor_y', 'screen_coor_x', 'screen_coor_y',\n                   'hover_duration']:\n        train[column].fillna(train[column].mean(), inplace=True)\n\n    train = train.sort_values(by=['session_id', 'elapsed_time'])\n    train['Time Spent Per Action'] = train.groupby('session_id')['elapsed_time'].diff().fillna(0)\n\n    return train\n\ndef create_features(train):\n    extra_features = []\n\n    for num in ['Time Spent Per Action', 'level', 'page', 'room_coor_x', 'room_coor_y', 'screen_coor_x',\n                'screen_coor_y', 'hover_duration']:\n        tmp = train.groupby(['session_id', 'level_group'])[num].agg('mean')\n        tmp.name = tmp.name + '_mean'\n        extra_features.append(tmp)\n\n    # Make columns for event types, getting their count for a session_id and level_group\n    for event in event_types:\n        tmp = train.groupby(['session_id', 'level_group'])['event_name'].apply(lambda x: (x == event).sum())\n        tmp.name = event + '_sum'\n        extra_features.append(tmp)\n\n    # Make columns for following numerical values, getting their mean for a session_id and level_group\n    for num in ['event_name', 'name', 'fqid', 'room_fqid', 'text_fqid']:\n        tmp = train.groupby(['session_id', 'level_group'])[num].agg('nunique')\n        tmp.name = tmp.name + '_nunique'\n        extra_features.append(tmp)\n\n    # Make columns for each event type elapsed time. getting their mean for a session_id and level_group\n    tmp = train.groupby(['session_id', 'level_group']).apply(\n        lambda x: x[[\"level_group\", \"elapsed_time\"]][\"elapsed_time\"].max())\n    tmp.name = \"elapsed_time_per_level_group\"\n    extra_features.append(tmp)\n\n    train = pd.concat(extra_features, axis=1)\n    train = train.fillna(0)\n    train = train.reset_index()\n    train = train.set_index('session_id')\n\n    return train\n    \ndef overall(train):\n    train = pre_processing(train)\n    train = create_features(train)\n    return train","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:28:19.961203Z","iopub.execute_input":"2023-08-03T12:28:19.961529Z","iopub.status.idle":"2023-08-03T12:28:19.976255Z","shell.execute_reply.started":"2023-08-03T12:28:19.961500Z","shell.execute_reply":"2023-08-03T12:28:19.975330Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models = {}\n\nfor dirname, _ , filenames in os.walk(\"/kaggle/input/svm-3fold-feng-unbal\"):\n    for filename in filenames:\n        models[int(filename.split('.')[0])] = load(os.path.join(dirname, filename))","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:28:19.977471Z","iopub.execute_input":"2023-08-03T12:28:19.978073Z","iopub.status.idle":"2023-08-03T12:28:21.945996Z","shell.execute_reply.started":"2023-08-03T12:28:19.978039Z","shell.execute_reply":"2023-08-03T12:28:21.944968Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"limits = {'0-4':(1,4), '5-12':(4,14), '13-22':(14,19)}\nevent_types = ['checkpoint', 'cutscene_click', 'map_click', 'map_hover', \n               'navigate_click', 'notebook_click', 'notification_click', \n               'object_click', 'object_hover', 'observation_click', 'person_click']\n\nfor (test, sample_submission) in iter_test:\n    test_df = overall(test)\n    \n    grp = test_df.level_group.values[0]\n    a,b = limits[grp]\n    \n    test_df = test_df.loc[test_df.level_group == grp]\n    test_df = test_df.drop(\"level_group\", axis=1)\n    \n    for q in range(a,b):\n        est = models[q]\n        prediction = est.predict(test_df)\n        mask = sample_submission.session_id.str.contains(f'q{q}')\n        sample_submission.loc[mask,'correct'] = prediction\n\n    env.predict(sample_submission)","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:28:21.947806Z","iopub.execute_input":"2023-08-03T12:28:21.948461Z","iopub.status.idle":"2023-08-03T12:28:22.739787Z","shell.execute_reply.started":"2023-08-03T12:28:21.948427Z","shell.execute_reply":"2023-08-03T12:28:22.738861Z"},"trusted":true},"execution_count":null,"outputs":[]}]}