{"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":"\n# やりたいこと\n\n下記のシチュエーションを想定\n1. night 1 : 2023/11/13 20:30 就寝\n1. night 1 : 2023/11/14 08:30 起床\n1. night 2 : ????/??/?? ??:?? 就寝\n1. night 2 : ????/??/?? ??:?? 起床\n1. night 3 : 2023/11/15 21:30 就寝\n1. night 3 : 2023/11/16 09:30 起床\n\n上記の場合、  \n「night 1 : 2023/11/14 08:30 起床」から「night 3 : 2023/11/15 21:30 就寝」までの間は状態がわからないので、  \n学習データから除外したい。","metadata":{"execution":{"iopub.status.busy":"2023-11-13T03:01:33.863364Z","iopub.execute_input":"2023-11-13T03:01:33.863749Z","iopub.status.idle":"2023-11-13T03:01:33.901778Z","shell.execute_reply.started":"2023-11-13T03:01:33.863717Z","shell.execute_reply":"2023-11-13T03:01:33.899634Z"}}},{"cell_type":"code","source":"import pandas as pd\n\ntrain_series = pd.read_parquet(\"/kaggle/input/child-mind-institute-detect-sleep-states/train_series.parquet\")\ntrain_events = pd.read_csv(\"/kaggle/input/child-mind-institute-detect-sleep-states/train_events.csv\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-11-14T06:46:38.021265Z","iopub.execute_input":"2023-11-14T06:46:38.021780Z","iopub.status.idle":"2023-11-14T06:47:25.846310Z","shell.execute_reply.started":"2023-11-14T06:46:38.021749Z","shell.execute_reply":"2023-11-14T06:47:25.845503Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_series","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:25.849655Z","iopub.execute_input":"2023-11-14T06:47:25.849958Z","iopub.status.idle":"2023-11-14T06:47:25.871302Z","shell.execute_reply.started":"2023-11-14T06:47:25.849930Z","shell.execute_reply":"2023-11-14T06:47:25.870111Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_events","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:25.872844Z","iopub.execute_input":"2023-11-14T06:47:25.873113Z","iopub.status.idle":"2023-11-14T06:47:25.886872Z","shell.execute_reply.started":"2023-11-14T06:47:25.873089Z","shell.execute_reply":"2023-11-14T06:47:25.885952Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"series_ids = train_events['series_id'].unique()","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:25.888951Z","iopub.execute_input":"2023-11-14T06:47:25.889230Z","iopub.status.idle":"2023-11-14T06:47:25.895605Z","shell.execute_reply.started":"2023-11-14T06:47:25.889206Z","shell.execute_reply":"2023-11-14T06:47:25.894553Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nnew_train_series_list = {}\nfor series_id in series_ids:\n    print('\\n'+'='*50)\n    print(series_id)\n    \n    _train_series = train_series[train_series['series_id']==series_id]\n    _train_events = train_events[train_events['series_id']==series_id]\n    \n    _train_series.index = pd.to_datetime(_train_series['timestamp'], utc=True)\n    _train_events.index = pd.to_datetime(_train_events['timestamp'], utc=True)\n    \n    _train_series = _train_series.assign(awake=-1, event_id=-1, night=0)\n    \n    current_event_time = _train_series.index[0]\n    for _event_id, _events in enumerate(_train_events.itertuples()):\n        _event = 0 if _events.event=='onset' else 1\n        if _event_id == (len(_train_events)-1):\n            _event = -1\n        \n        if not pd.isnull(_events.step):\n            _train_series.loc[_train_series.index>=_events.Index, ['awake']] = _event\n            current_event_time = _events.Index\n        else:\n            _train_series.loc[_train_series.index>=current_event_time, ['awake']] = -1\n        _train_series.loc[_train_series.index>=_events.Index, ['event_id']] = _event_id\n        _train_series.loc[_train_series.index>=_events.Index, ['night']] = _events.night\n        \n    new_train_series_list[series_id] = _train_series.copy()\n    \n    fig, ax = plt.subplots(figsize=(20, 3))\n    _plot_series = _train_series['enmo']\n    _plot_series.plot(ax=ax)\n    (_train_series['awake']*_plot_series.abs().max()*0.5+_plot_series.abs().max()*0.5).plot(ax=ax, linewidth=5)\n    for _time, _event in zip(_train_events.index, _train_events['event']):\n        if not pd.isnull(_time):\n            ax.axvline(x=_time, color='red' if _event=='onset' else 'green')\n    plt.show()\n","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:25.896934Z","iopub.execute_input":"2023-11-14T06:47:25.897224Z","iopub.status.idle":"2023-11-14T06:47:47.431770Z","shell.execute_reply.started":"2023-11-14T06:47:25.897199Z","shell.execute_reply":"2023-11-14T06:47:47.430966Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# %%time\n# import matplotlib.pyplot as plt\n# import multiprocessing\n\n# def process(series_id):\n#     print(series_id)\n    \n#     _train_series = train_series[train_series['series_id']==series_id]\n#     _train_events = train_events[train_events['series_id']==series_id]\n    \n#     _train_series.index = pd.to_datetime(_train_series['timestamp'], utc=True)\n#     _train_events.index = pd.to_datetime(_train_events['timestamp'], utc=True)\n    \n#     _train_series = _train_series.assign(awake=-1, event_id=-1, night=0)\n    \n#     current_event_time = _train_series.index[0]\n#     for _event_id, _events in enumerate(_train_events.itertuples()):\n#         _event = 0 if _events.event=='onset' else 1\n#         if not pd.isnull(_events.step):\n#             _train_series.loc[_train_series.index>=_events.Index, ['awake']] = _event\n#             current_event_time = _events.Index\n#         else:\n#             _train_series.loc[_train_series.index>current_event_time, ['awake']] = -1\n#         _train_series.loc[_train_series.index>=_events.Index, ['event_id']] = _event_id\n#         _train_series.loc[_train_series.index>=_events.Index, ['night']] = _events.night\n\n#     return _train_series.copy()\n\n# with multiprocessing.Pool() as pool:\n#     new_train_series_list = pool.map(process, series_ids)","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:47.432864Z","iopub.execute_input":"2023-11-14T06:47:47.433680Z","iopub.status.idle":"2023-11-14T06:47:47.438340Z","shell.execute_reply.started":"2023-11-14T06:47:47.433650Z","shell.execute_reply":"2023-11-14T06:47:47.437459Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# def plot_series(_train_series, col_name):\n#     fig, ax = plt.subplots(figsize=(20, 3))\n#     for _event_id in _train_series.event_id.unique():\n#         _series = _train_series[_train_series['event_id']==_event_id]\n#         _awake = _series.iloc[0]['awake']\n#         if _awake==1:\n#             _color = 'red'\n#         elif _awake==0:\n#             _color = 'blue'\n#         elif _awake==-1:\n#             _color = 'green'\n\n#         _series[col_name].plot(color=_color, ax=ax)\n#     plt.show()","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:47.439380Z","iopub.execute_input":"2023-11-14T06:47:47.439704Z","iopub.status.idle":"2023-11-14T06:47:47.456812Z","shell.execute_reply.started":"2023-11-14T06:47:47.439679Z","shell.execute_reply":"2023-11-14T06:47:47.456046Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# for series_id, _train_series in zip(series_ids, new_train_series_list):\n#     print('\\n'+'='*50)\n#     print(series_id)\n#     plot_series(_train_series, col_name='enmo')\n    ","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:47.458000Z","iopub.execute_input":"2023-11-14T06:47:47.458782Z","iopub.status.idle":"2023-11-14T06:47:47.465825Z","shell.execute_reply.started":"2023-11-14T06:47:47.458752Z","shell.execute_reply":"2023-11-14T06:47:47.464813Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# for series_id, _train_series in zip(series_ids, new_train_series_list):\n#     print('\\n'+'='*50)\n#     print(series_id)\n#     _train_series = _train_series.assign(enmo_1MIN=_train_series['enmo'].rolling('1MIN').mean())\n#     plot_series(_train_series, col_name='enmo_1MIN')","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:47.467103Z","iopub.execute_input":"2023-11-14T06:47:47.467468Z","iopub.status.idle":"2023-11-14T06:47:47.474235Z","shell.execute_reply.started":"2023-11-14T06:47:47.467415Z","shell.execute_reply":"2023-11-14T06:47:47.473090Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# for series_id, _train_series in zip(series_ids, new_train_series_list):\n#     print('\\n'+'='*50)\n#     print(series_id)\n#     _train_series = _train_series.assign(enmo_1MIN=_train_series['enmo'].rolling('1MIN').max())\n#     plot_series(_train_series, col_name='enmo_1MIN')\n#     plt.show()","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:47.477974Z","iopub.execute_input":"2023-11-14T06:47:47.478324Z","iopub.status.idle":"2023-11-14T06:47:47.484429Z","shell.execute_reply.started":"2023-11-14T06:47:47.478295Z","shell.execute_reply":"2023-11-14T06:47:47.483605Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# for series_id, _train_series in zip(series_ids, new_train_series_list):\n#     print('\\n'+'='*50)\n#     print(series_id)\n#     _train_series = _train_series.assign(enmo_30MIN=_train_series['enmo'].rolling('30MIN').mean())\n#     plot_series(_train_series, col_name='enmo_30MIN')\n#     plt.show()","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:47.485836Z","iopub.execute_input":"2023-11-14T06:47:47.486213Z","iopub.status.idle":"2023-11-14T06:47:47.493066Z","shell.execute_reply.started":"2023-11-14T06:47:47.486178Z","shell.execute_reply":"2023-11-14T06:47:47.492156Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# for series_id, _train_series in zip(series_ids, new_train_series_list):\n#     print('\\n'+'='*50)\n#     print(series_id)\n#     _train_series = _train_series.assign(enmo_30MIN=_train_series['enmo'].rolling('30MIN').max())\n#     plot_series(_train_series, col_name='enmo_30MIN')\n#     plt.show()","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:47.494244Z","iopub.execute_input":"2023-11-14T06:47:47.494982Z","iopub.status.idle":"2023-11-14T06:47:47.501229Z","shell.execute_reply.started":"2023-11-14T06:47:47.494936Z","shell.execute_reply":"2023-11-14T06:47:47.500312Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# new_train_series = pd.concat(new_train_series_list)\n# new_train_series","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:47.502301Z","iopub.execute_input":"2023-11-14T06:47:47.503014Z","iopub.status.idle":"2023-11-14T06:47:47.509028Z","shell.execute_reply.started":"2023-11-14T06:47:47.502978Z","shell.execute_reply":"2023-11-14T06:47:47.508355Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# new_train_series.to_csv(\"train_series_all.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:47.510406Z","iopub.execute_input":"2023-11-14T06:47:47.510686Z","iopub.status.idle":"2023-11-14T06:47:47.516855Z","shell.execute_reply.started":"2023-11-14T06:47:47.510663Z","shell.execute_reply":"2023-11-14T06:47:47.516017Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# new_train_series[new_train_series['awake']!=-1].to_csv(\"train_series.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:47:47.518323Z","iopub.execute_input":"2023-11-14T06:47:47.518866Z","iopub.status.idle":"2023-11-14T06:47:47.525068Z","shell.execute_reply.started":"2023-11-14T06:47:47.518839Z","shell.execute_reply":"2023-11-14T06:47:47.524399Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for series_id, _train_series in new_train_series_list.items():\n    _train_series.to_csv(\"train_series_{}.csv\".format(series_id), index=False)","metadata":{"execution":{"iopub.status.busy":"2023-11-14T06:48:08.001298Z","iopub.execute_input":"2023-11-14T06:48:08.001656Z","iopub.status.idle":"2023-11-14T06:48:11.466682Z","shell.execute_reply.started":"2023-11-14T06:48:08.001628Z","shell.execute_reply":"2023-11-14T06:48:11.465567Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}