{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":53666,"databundleVersionId":6589269,"sourceType":"competition"}],"dockerImageVersionId":30698,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport pyarrow.parquet as pq\nimport torch\nfrom torch import optim, nn\nfrom torch.utils.data import Dataset, DataLoader\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-05-22T10:46:35.490803Z","iopub.execute_input":"2024-05-22T10:46:35.491156Z","iopub.status.idle":"2024-05-22T10:46:40.386818Z","shell.execute_reply.started":"2024-05-22T10:46:35.491128Z","shell.execute_reply":"2024-05-22T10:46:40.385662Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class CFG:\n    input_len = 20","metadata":{"execution":{"iopub.status.busy":"2024-05-22T10:46:40.388700Z","iopub.execute_input":"2024-05-22T10:46:40.389154Z","iopub.status.idle":"2024-05-22T10:46:40.393990Z","shell.execute_reply.started":"2024-05-22T10:46:40.389126Z","shell.execute_reply":"2024-05-22T10:46:40.392905Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pq.read_table('/kaggle/input/child-mind-institute-detect-sleep-states/train_series.parquet').to_pandas()\ntrain_events = pd.read_csv('/kaggle/input/child-mind-institute-detect-sleep-states/train_events.csv')\n\ntrain_df['timestamp'] = pd.to_datetime(train_df['timestamp'], format='%Y-%m-%dT%H:%M:%S-%f')\ntrain_events['timestamp'] = pd.to_datetime(train_events['timestamp'], format='%Y-%m-%dT%H:%M:%S-%f')\n\nprint(train_df.shape)\nprint(train_events.shape)\nprint(train_df.head())\nprint(train_events.head())","metadata":{"execution":{"iopub.status.busy":"2024-05-22T10:46:40.395654Z","iopub.execute_input":"2024-05-22T10:46:40.396845Z","iopub.status.idle":"2024-05-22T11:02:11.025411Z","shell.execute_reply.started":"2024-05-22T10:46:40.396812Z","shell.execute_reply":"2024-05-22T11:02:11.023784Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class DDS_Train_Dataset(Dataset):\n    def __init__(self, df, df_events):\n        self.mean = {k: np.mean(df[k]) for k in ['anglez', 'enmo']}\n        self.std = {k: np.std(df[k]) for k in ['anglez', 'enmo']}\n        print('mean: ', self.mean)\n        print('std: ', self.std)\n        df['anglez'] = (df['anglez'] - self.mean['anglez']) / self.std['anglez']\n        df['enmo'] = (df['enmo'] - self.mean['enmo']) / self.std['enmo']\n        \n        self.input_len = CFG.input_len\n        self.grouped_df = [(data[0], data[1].reset_index()) for data in df.groupby('series_id')]\n        self.grouped_df_events = {k: v for k,v in df_events.groupby('series_id')}\n        self.series_id = df['series_id'].unique()\n#         self.series_start_day = {k: df_events[df_events['series_id'] == k]['timestamp'].min() for k in self.series_id}\n        self.series_size = np.array([series_i[-1].shape[0] - self.input_len + 1 for series_i in self.grouped_df])\n        self.series_line = np.cumsum(self.series_size)\n    \n    def __len__(self):\n        return self.series_line[-1]\n    \n    def __getitem__(self, idx):\n        line_cnt = 0\n        while idx >= self.series_line[line_cnt]:\n            line_cnt += 1\n        \n        series_idx = idx\n        if line_cnt != 0:\n            series_idx -= self.series_line[line_cnt - 1]\n        \n        print(line_cnt, series_idx)\n        \n        row = self.grouped_df[line_cnt][-1].iloc[series_idx : series_idx + self.input_len]\n        series_id, label_step = row.iloc[-1][['series_id', 'step']]\n        \n        event_idx = 0\n        if label_step < self.grouped_df_events[series_id].iloc[event_idx]['step']:\n            label = 0 if self.grouped_df_events[series_id].iloc[0]['event'] == 'onset' else 1  # 0 awake  | 1 sleep\n        else:\n            while label_step >= self.grouped_df_events[series_id].iloc[event_idx]['step']:\n                event_idx += 1\n            label = 1 if self.grouped_df_events[series_id].iloc[event_idx]['event'] == 'onset' else 0\n            \n#         print('label: ', label)\n#         print('event_idx: ', event_idx)\n#         print(series_id, label_step)\n#         print(row)\n        feature = row[['anglez', 'enmo']]\n        feature = torch.as_tensor(feature.values, dtype=torch.float32)\n        label = torch.as_tensor(label, dtype=torch.int64)\n        \n        return feature, label\n\n\n# delta = (self.df['timestamp'].iloc[0].date() - self.series_start_day['038441c925bb'].date()).days\n\ntrain_ds = DDS_Train_Dataset(train_df, train_events)\nprint(len(train_ds))\nfeature, label = train_ds[5000]\nprint('feature: ', feature)\nprint('feature.shape: ', feature.shape)\nprint('label: ', label)\nprint('label.shape: ', label.shape)","metadata":{"execution":{"iopub.status.busy":"2024-05-22T11:06:11.938714Z","iopub.execute_input":"2024-05-22T11:06:11.939215Z","iopub.status.idle":"2024-05-22T11:07:02.855208Z","shell.execute_reply.started":"2024-05-22T11:06:11.939178Z","shell.execute_reply":"2024-05-22T11:07:02.854092Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}