{"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 pandas as pd\nfrom tqdm.auto import tqdm\nimport numpy as np\nimport scipy.signal as sigtool\nimport gc\n\nKAGGLE = True\nKAGGLE_PATH = '/kaggle/input/sleep-competition/'\nLOCAL_PATH = 'C:/Temp/cleaned_df/child-mind-institute-detect-sleep-states/'","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-09-14T15:12:18.48931Z","iopub.execute_input":"2023-09-14T15:12:18.489619Z","iopub.status.idle":"2023-09-14T15:12:18.495712Z","shell.execute_reply.started":"2023-09-14T15:12:18.489594Z","shell.execute_reply":"2023-09-14T15:12:18.494119Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\ntest = pd.read_parquet('/kaggle/input/child-mind-institute-detect-sleep-states/test_series.parquet')","metadata":{"execution":{"iopub.status.busy":"2023-09-14T15:12:18.497331Z","iopub.execute_input":"2023-09-14T15:12:18.498287Z","iopub.status.idle":"2023-09-14T15:12:18.520734Z","shell.execute_reply.started":"2023-09-14T15:12:18.49824Z","shell.execute_reply":"2023-09-14T15:12:18.519196Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def compute_submission(signal, step, id):\n    signal = pd.DataFrame(signal, index=step, dtype='float16', columns=['score'])\n    signal = signal.diff().fillna(0)\n    signal = pd.concat([signal.loc[signal['score']==1], signal.loc[signal['score']==-1]])\n    signal['event'] = signal['score'].replace({1.0:'wake', -1.0:'onset'})\n    signal['score'] = signal['score'].abs()\n    signal['series_id'] = id\n    signal = signal.reset_index()\n    # signal = signal.reset_index(names='row_id')\n    return signal","metadata":{"execution":{"iopub.status.busy":"2023-09-14T15:12:18.522816Z","iopub.execute_input":"2023-09-14T15:12:18.523485Z","iopub.status.idle":"2023-09-14T15:12:18.530681Z","shell.execute_reply.started":"2023-09-14T15:12:18.523451Z","shell.execute_reply":"2023-09-14T15:12:18.529018Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"unique_ids = test['series_id'].unique()\npredictions = []\nk = 3600\npercentile_thresh = 0.9985\n\nfor id in tqdm(unique_ids):\n    subset = test[test['series_id']==id].copy()\n    subset.loc[:, 'enmo_denoise'] = subset.loc[:, 'enmo'].ewm(span=10).mean().fillna(method='bfill').fillna(method='ffill').astype('float32')\n    threshold = subset['enmo_denoise'].quantile(percentile_thresh, interpolation='linear')\n    env = np.abs(sigtool.hilbert(subset['enmo_denoise']))\n    square_sig = (env > threshold).astype(int)\n    smoothed_square_sig = pd.Series(square_sig).rolling(k).mean().fillna(method='bfill')\n    smoothed_square_sig.loc[smoothed_square_sig>0] = 1\n    smoothed_square_sig = smoothed_square_sig.shift(k).fillna(method='bfill').fillna(method='ffill').astype('UInt8')\n    predictions.append(compute_submission(smoothed_square_sig, subset['step'], id))\n    \n    del subset\n    _ = gc.collect()","metadata":{"execution":{"iopub.status.busy":"2023-09-14T15:12:18.535047Z","iopub.execute_input":"2023-09-14T15:12:18.535384Z","iopub.status.idle":"2023-09-14T15:12:18.920616Z","shell.execute_reply.started":"2023-09-14T15:12:18.535357Z","shell.execute_reply":"2023-09-14T15:12:18.919269Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = pd.concat(predictions).reset_index(drop=True).reset_index(names='row_id')\nsubmission['row_id'] = submission['row_id'].astype('int64')\nsubmission['series_id'] = submission['series_id'].astype('object')\nsubmission['step'] = submission['step'].astype('int64')\nsubmission['event'] = submission['event'].astype('object')\nsubmission['score'] = submission['score'].astype('float64')\nsubmission = submission.reindex(columns=['row_id', 'series_id', 'step', 'event', 'score'])\nsubmission.to_csv('submission.csv', index=False)\nsubmission","metadata":{"execution":{"iopub.status.busy":"2023-09-14T15:12:18.922781Z","iopub.execute_input":"2023-09-14T15:12:18.923077Z","iopub.status.idle":"2023-09-14T15:12:18.955395Z","shell.execute_reply.started":"2023-09-14T15:12:18.923051Z","shell.execute_reply":"2023-09-14T15:12:18.954184Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}