{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":82611,"databundleVersionId":9553358,"sourceType":"competition"}],"dockerImageVersionId":30786,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Let's analyze Hourly data in more detail　😆😆😆","metadata":{}},{"cell_type":"code","source":"SEED = 42\n\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns \nimport matplotlib.pyplot as plt","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:01:08.607846Z","iopub.execute_input":"2024-10-19T18:01:08.608267Z","iopub.status.idle":"2024-10-19T18:01:09.916281Z","shell.execute_reply.started":"2024-10-19T18:01:08.608229Z","shell.execute_reply":"2024-10-19T18:01:09.915307Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/brist1d/train.csv',header = 0,index_col =0)\ntest = pd.read_csv('/kaggle/input/brist1d/test.csv',header = 0,index_col =0)\nsubmission = pd.read_csv('/kaggle/input/brist1d/sample_submission.csv',header = 0,index_col =0)\ntrain.shape, test.shape, submission.shape","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:01:09.918469Z","iopub.execute_input":"2024-10-19T18:01:09.919118Z","iopub.status.idle":"2024-10-19T18:01:23.632353Z","shell.execute_reply.started":"2024-10-19T18:01:09.919067Z","shell.execute_reply":"2024-10-19T18:01:23.631110Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# bg","metadata":{}},{"cell_type":"code","source":"G_p01 = train[train['p_num']=='p01'].iloc[:,[1] + list(range(2,74))]\nG_p02 = train[train['p_num']=='p02'].iloc[:,[1] + list(range(2,74))]\nG_p03 = train[train['p_num']=='p03'].iloc[:,[1] + list(range(2,74))]\nG_p04 = train[train['p_num']=='p04'].iloc[:,[1] + list(range(2,74))]\nG_p05 = train[train['p_num']=='p05'].iloc[:,[1] + list(range(2,74))]\nG_p06 = train[train['p_num']=='p06'].iloc[:,[1] + list(range(2,74))]\nG_p10 = train[train['p_num']=='p10'].iloc[:,[1] + list(range(2,74))]\nG_p11 = train[train['p_num']=='p11'].iloc[:,[1] + list(range(2,74))]\nG_p12 = train[train['p_num']=='p12'].iloc[:,[1] + list(range(2,74))]\n\nG_all = train.iloc[:,[1] + list(range(2,74))]\n\nf, ax = plt.subplots(nrows=1, ncols=1, figsize=(10,6))\n\nsns.heatmap(G_all.iloc[:,1:].isna(), cmap='Blues')\nax.set_title('Missing Values_bg', fontsize=16)\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:01:23.634202Z","iopub.execute_input":"2024-10-19T18:01:23.634543Z","iopub.status.idle":"2024-10-19T18:01:36.996097Z","shell.execute_reply.started":"2024-10-19T18:01:23.634508Z","shell.execute_reply":"2024-10-19T18:01:36.994888Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pandas.tseries.offsets import Minute\nimport re\n\ndf = train\ndf['time'] = pd.to_datetime(df['time'], format='%H:%M:%S')\nbg_cols = [col for col in df.columns if col.startswith('bg-')]\n\ntime_offsets_bg = {}\nfor col in bg_cols:\n    match = re.search(r'bg-(\\d+):(\\d+)', col)\n    if match:\n        hours, minutes = int(match.group(1)), int(match.group(2))\n        total_minutes = hours * 60 + minutes  \n        offset = -(total_minutes)  \n        time_offsets_bg[col] = offset\n        \ntime_series_list_bg = []\n\nfor col, offset in time_offsets_bg.items():\n    temp_df = train[['p_num', 'time']].copy()  \n    temp_df['measurement_time'] = train['time'] + Minute(offset)  \n    temp_df['value'] = train[col] \n    \n    temp_df['original_time'] = train['time'] \n    temp_df['bg_column'] = col  \n    time_series_list_bg.append(temp_df)\n\ntime_series_data_bg = pd.concat(time_series_list_bg, ignore_index=True).dropna(subset=['value'])\n\ntime_series_data_bg['measurement_time'] = pd.to_datetime(time_series_data_bg['measurement_time'])\ntime_series_data_bg['hour'] = time_series_data_bg['measurement_time'].dt.hour\nhourly_avg_by_pnum_bg = time_series_data_bg.groupby(['p_num', 'hour'])['value'].mean().unstack()\n\nplt.figure(figsize=(12, 8))\nfor p_num in hourly_avg_by_pnum_bg.index:\n    plt.plot(hourly_avg_by_pnum_bg.columns, hourly_avg_by_pnum_bg.loc[p_num], marker='o', label=f'p_num: {p_num}')\n\nplt.title('Average Value by Hour for Each p_num (24-hour cycle)_bg')\nplt.xlabel('Hour of the Day')\nplt.ylabel('Average Value')\nplt.grid(True)\nplt.xticks(range(24))  \nplt.legend(title='p_num')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:01:36.997605Z","iopub.execute_input":"2024-10-19T18:01:36.998043Z","iopub.status.idle":"2024-10-19T18:01:41.923938Z","shell.execute_reply.started":"2024-10-19T18:01:36.997985Z","shell.execute_reply":"2024-10-19T18:01:41.922904Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Insulin","metadata":{}},{"cell_type":"code","source":"I_p01 = train[train['p_num']=='p01'].iloc[:,[1] + list(range(74, 146))]\nI_p02 = train[train['p_num']=='p02'].iloc[:,[1] + list(range(74, 146))]\nI_p03 = train[train['p_num']=='p03'].iloc[:,[1] + list(range(74, 146))]\nI_p04 = train[train['p_num']=='p04'].iloc[:,[1] + list(range(74, 146))]\nI_p05 = train[train['p_num']=='p05'].iloc[:,[1] + list(range(74, 146))]\nI_p06 = train[train['p_num']=='p06'].iloc[:,[1] + list(range(74, 146))]\nI_p10 = train[train['p_num']=='p10'].iloc[:,[1] + list(range(74, 146))]\nI_p11 = train[train['p_num']=='p11'].iloc[:,[1] + list(range(74, 146))]\nI_p12 = train[train['p_num']=='p12'].iloc[:,[1] + list(range(74, 146))]\n\nI_all = train.iloc[:,[1] + list(range(74, 146))]","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:02:06.455737Z","iopub.execute_input":"2024-10-19T18:02:06.456538Z","iopub.status.idle":"2024-10-19T18:02:07.193727Z","shell.execute_reply.started":"2024-10-19T18:02:06.456493Z","shell.execute_reply":"2024-10-19T18:02:07.192610Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"f, ax = plt.subplots(nrows=1, ncols=1, figsize=(10,6))\n\nsns.heatmap(I_all.iloc[:,1:].isna(), cmap='Blues')\nax.set_title('Missing Values_insulin', fontsize=16)\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:02:09.540429Z","iopub.execute_input":"2024-10-19T18:02:09.540876Z","iopub.status.idle":"2024-10-19T18:02:22.375332Z","shell.execute_reply.started":"2024-10-19T18:02:09.540835Z","shell.execute_reply":"2024-10-19T18:02:22.374113Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pandas.tseries.offsets import Minute\nimport re","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:02:22.377039Z","iopub.execute_input":"2024-10-19T18:02:22.377378Z","iopub.status.idle":"2024-10-19T18:02:22.382572Z","shell.execute_reply.started":"2024-10-19T18:02:22.377343Z","shell.execute_reply":"2024-10-19T18:02:22.381377Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df = train\ndf['time'] = pd.to_datetime(df['time'], format='%H:%M:%S')\ninsulin_cols = [col for col in df.columns if col.startswith('insulin-')]\n\ntime_offsets_insulin = {}\nfor col in insulin_cols:\n    match = re.search(r'insulin-(\\d+):(\\d+)', col)\n    if match:\n        hours, minutes = int(match.group(1)), int(match.group(2))\n        total_minutes = hours * 60 + minutes  \n        offset = -(total_minutes)  \n        time_offsets_insulin[col] = offset","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:03:02.658880Z","iopub.execute_input":"2024-10-19T18:03:02.659399Z","iopub.status.idle":"2024-10-19T18:03:02.685512Z","shell.execute_reply.started":"2024-10-19T18:03:02.659346Z","shell.execute_reply":"2024-10-19T18:03:02.684338Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"time_series_list_insulin = []\n\nfor col, offset in time_offsets_insulin.items():\n    temp_df = train[['p_num', 'time']].copy()  \n    temp_df['measurement_time'] = train['time'] + Minute(offset)  \n    temp_df['value'] = train[col] \n    \n    temp_df['original_time'] = train['time'] \n    temp_df['insulin_column'] = col  \n    time_series_list_insulin.append(temp_df)\n\ntime_series_data_insulin = pd.concat(time_series_list_insulin, ignore_index=True).dropna(subset=['value'])","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:03:39.891962Z","iopub.execute_input":"2024-10-19T18:03:39.892366Z","iopub.status.idle":"2024-10-19T18:03:42.738042Z","shell.execute_reply.started":"2024-10-19T18:03:39.892328Z","shell.execute_reply":"2024-10-19T18:03:42.736942Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"time_series_data_insulin['measurement_time'] = pd.to_datetime(time_series_data_insulin['measurement_time'])\ntime_series_data_insulin['hour'] = time_series_data_insulin['measurement_time'].dt.hour\nhourly_avg_by_pnum_insulin = time_series_data_insulin.groupby(['p_num', 'hour'])['value'].mean().unstack()\n\nplt.figure(figsize=(12, 8))\nfor p_num in hourly_avg_by_pnum_insulin.index:\n    plt.plot(hourly_avg_by_pnum_insulin.columns, hourly_avg_by_pnum_insulin.loc[p_num], marker='o', label=f'p_num: {p_num}')\n\nplt.title('Average Value by Hour for Each p_num (24-hour cycle)_insulin')\nplt.xlabel('Hour of the Day')\nplt.ylabel('Average Value')\nplt.grid(True)\nplt.xticks(range(24))  \nplt.legend(title='p_num')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:04:44.112655Z","iopub.execute_input":"2024-10-19T18:04:44.113839Z","iopub.status.idle":"2024-10-19T18:04:46.618435Z","shell.execute_reply.started":"2024-10-19T18:04:44.113780Z","shell.execute_reply":"2024-10-19T18:04:46.617159Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# carbs","metadata":{}},{"cell_type":"code","source":"Carbs_p01 = train[train['p_num']=='p01'].iloc[:,[1] + list(range(146, 218))]\nCarbs_p02 = train[train['p_num']=='p02'].iloc[:,[1] + list(range(146, 218))]\nCarbs_p03 = train[train['p_num']=='p03'].iloc[:,[1] + list(range(146, 218))]\nCarbs_p04 = train[train['p_num']=='p04'].iloc[:,[1] + list(range(146, 218))]\nCarbs_p05 = train[train['p_num']=='p05'].iloc[:,[1] + list(range(146, 218))]\nCarbs_p06 = train[train['p_num']=='p06'].iloc[:,[1] + list(range(146, 218))]\nCarbs_p10 = train[train['p_num']=='p10'].iloc[:,[1] + list(range(146, 218))]\nCarbs_p11 = train[train['p_num']=='p11'].iloc[:,[1] + list(range(146, 218))]\nCarbs_p12 = train[train['p_num']=='p12'].iloc[:,[1] + list(range(146, 218))]\n\nCarbs_all = train.iloc[:,[1] + list(range(146, 218))]\n\nf, ax = plt.subplots(nrows=1, ncols=1, figsize=(10,6))\n\nsns.heatmap(Carbs_all.iloc[:,1:].isna(), cmap='Blues')\nax.set_title('Missing Values_carbs', fontsize=16)\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:06:01.796444Z","iopub.execute_input":"2024-10-19T18:06:01.797622Z","iopub.status.idle":"2024-10-19T18:06:15.297643Z","shell.execute_reply.started":"2024-10-19T18:06:01.797557Z","shell.execute_reply":"2024-10-19T18:06:15.296565Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pandas.tseries.offsets import Minute\nimport re\n\ndf = train\ndf['time'] = pd.to_datetime(df['time'], format='%H:%M:%S')\ncarbs_cols = [col for col in df.columns if col.startswith('carbs-')]\n\ntime_offsets_carbs = {}\nfor col in carbs_cols:\n    match = re.search(r'carbs-(\\d+):(\\d+)', col)\n    if match:\n        hours, minutes = int(match.group(1)), int(match.group(2))\n        total_minutes = hours * 60 + minutes  \n        offset = -(total_minutes)  \n        time_offsets_carbs[col] = offset\n        \ntime_series_list_carbs = []\n\nfor col, offset in time_offsets_carbs.items():\n    temp_df = train[['p_num', 'time']].copy()  \n    temp_df['measurement_time'] = train['time'] + Minute(offset)  \n    temp_df['value'] = train[col] \n    \n    temp_df['original_time'] = train['time'] \n    temp_df['bg_column'] = col  \n    time_series_list_carbs.append(temp_df)\n\ntime_series_data_carbs = pd.concat(time_series_list_carbs, ignore_index=True).dropna(subset=['value'])\n\ntime_series_data_carbs['measurement_time'] = pd.to_datetime(time_series_data_carbs['measurement_time'])\ntime_series_data_carbs['hour'] = time_series_data_carbs['measurement_time'].dt.hour\nhourly_avg_by_pnum_carbs = time_series_data_carbs.groupby(['p_num', 'hour'])['value'].mean().unstack()\n\nplt.figure(figsize=(12, 8))\nfor p_num in hourly_avg_by_pnum_carbs.index:\n    plt.plot(hourly_avg_by_pnum_carbs.columns, hourly_avg_by_pnum_carbs.loc[p_num], marker='o', label=f'p_num: {p_num}')\n\nplt.title('Average Value by Hour for Each p_num (24-hour cycle)_carbs')\nplt.xlabel('Hour of the Day')\nplt.ylabel('Average Value')\nplt.grid(True)\nplt.xticks(range(24))  \nplt.legend(title='p_num')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:07:27.736920Z","iopub.execute_input":"2024-10-19T18:07:27.737895Z","iopub.status.idle":"2024-10-19T18:07:30.270105Z","shell.execute_reply.started":"2024-10-19T18:07:27.737851Z","shell.execute_reply":"2024-10-19T18:07:30.269022Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# hr","metadata":{}},{"cell_type":"code","source":"H_p01 = train[train['p_num']=='p01'].iloc[:,[1] + list(range(218, 290))]\nH_p02 = train[train['p_num']=='p02'].iloc[:,[1] + list(range(218, 290))]\nH_p03 = train[train['p_num']=='p03'].iloc[:,[1] + list(range(218, 290))]\nH_p04 = train[train['p_num']=='p04'].iloc[:,[1] + list(range(218, 290))]\nH_p05 = train[train['p_num']=='p05'].iloc[:,[1] + list(range(218, 290))]\nH_p06 = train[train['p_num']=='p06'].iloc[:,[1] + list(range(218, 290))]\nH_p10 = train[train['p_num']=='p10'].iloc[:,[1] + list(range(218, 290))]\nH_p11 = train[train['p_num']=='p11'].iloc[:,[1] + list(range(218, 290))]\nH_p12 = train[train['p_num']=='p12'].iloc[:,[1] + list(range(218, 290))]\n\nH_all = train.iloc[:,[1] + list(range(218, 290))]\n\nf, ax = plt.subplots(nrows=1, ncols=1, figsize=(10,6))\n\nsns.heatmap(H_all.iloc[:,1:].isna(), cmap='Blues')\nax.set_title('Missing Values_hr', fontsize=16)\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:09:52.475098Z","iopub.execute_input":"2024-10-19T18:09:52.475536Z","iopub.status.idle":"2024-10-19T18:10:05.876718Z","shell.execute_reply.started":"2024-10-19T18:09:52.475483Z","shell.execute_reply":"2024-10-19T18:10:05.875732Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pandas.tseries.offsets import Minute\nimport re\n\ndf = train\ndf['time'] = pd.to_datetime(df['time'], format='%H:%M:%S')\nhr_cols = [col for col in df.columns if col.startswith('hr-')]\n\ntime_offsets_hr = {}\nfor col in hr_cols:\n    match = re.search(r'hr-(\\d+):(\\d+)', col)\n    if match:\n        hours, minutes = int(match.group(1)), int(match.group(2))\n        total_minutes = hours * 60 + minutes  \n        offset = -(total_minutes)  \n        time_offsets_hr[col] = offset\n        \ntime_series_list_hr = []\n\nfor col, offset in time_offsets_hr.items():\n    temp_df = train[['p_num', 'time']].copy()  \n    temp_df['measurement_time'] = train['time'] + Minute(offset)  \n    temp_df['value'] = train[col] \n    \n    temp_df['original_time'] = train['time'] \n    temp_df['bg_column'] = col  \n    time_series_list_hr.append(temp_df)\n\ntime_series_data_hr = pd.concat(time_series_list_hr, ignore_index=True).dropna(subset=['value'])\n\ntime_series_data_hr['measurement_time'] = pd.to_datetime(time_series_data_hr['measurement_time'])\ntime_series_data_hr['hour'] = time_series_data_hr['measurement_time'].dt.hour\nhourly_avg_by_pnum_hr = time_series_data_hr.groupby(['p_num', 'hour'])['value'].mean().unstack()\n\nplt.figure(figsize=(12, 8))\nfor p_num in hourly_avg_by_pnum_hr.index:\n    plt.plot(hourly_avg_by_pnum_hr.columns, hourly_avg_by_pnum_hr.loc[p_num], marker='o', label=f'p_num: {p_num}')\n\nplt.title('Average Value by Hour for Each p_num (24-hour cycle)_hr')\nplt.xlabel('Hour of the Day')\nplt.ylabel('Average Value')\nplt.grid(True)\nplt.xticks(range(24))  \nplt.legend(title='p_num')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:10:05.877920Z","iopub.execute_input":"2024-10-19T18:10:05.878223Z","iopub.status.idle":"2024-10-19T18:10:10.241912Z","shell.execute_reply.started":"2024-10-19T18:10:05.878192Z","shell.execute_reply":"2024-10-19T18:10:10.240813Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# steps","metadata":{}},{"cell_type":"code","source":"S_p01 = train[train['p_num']=='p01'].iloc[:,[1] + list(range(290, 362))]\nS_p02 = train[train['p_num']=='p02'].iloc[:,[1] + list(range(290, 362))]\nS_p03 = train[train['p_num']=='p03'].iloc[:,[1] + list(range(290, 362))]\nS_p04 = train[train['p_num']=='p04'].iloc[:,[1] + list(range(290, 362))]\nS_p05 = train[train['p_num']=='p05'].iloc[:,[1] + list(range(290, 362))]\nS_p06 = train[train['p_num']=='p06'].iloc[:,[1] + list(range(290, 362))]\nS_p10 = train[train['p_num']=='p10'].iloc[:,[1] + list(range(290, 362))]\nS_p11 = train[train['p_num']=='p11'].iloc[:,[1] + list(range(290, 362))]\nS_p12 = train[train['p_num']=='p12'].iloc[:,[1] + list(range(290, 362))]\n\nS_all = train.iloc[:,[1] + list(range(290, 362))]\n\nf, ax = plt.subplots(nrows=1, ncols=1, figsize=(10,6))\n\nsns.heatmap(S_all.iloc[:,1:].isna(), cmap='Blues')\nax.set_title('Missing Values_steps', fontsize=16)\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:11:49.990606Z","iopub.execute_input":"2024-10-19T18:11:49.991041Z","iopub.status.idle":"2024-10-19T18:12:03.463606Z","shell.execute_reply.started":"2024-10-19T18:11:49.991001Z","shell.execute_reply":"2024-10-19T18:12:03.462283Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pandas.tseries.offsets import Minute\nimport re\n\ndf = train\ndf['time'] = pd.to_datetime(df['time'], format='%H:%M:%S')\nsteps_cols = [col for col in df.columns if col.startswith('steps-')]\n\ntime_offsets_steps = {}\nfor col in steps_cols:\n    match = re.search(r'steps-(\\d+):(\\d+)', col)\n    if match:\n        hours, minutes = int(match.group(1)), int(match.group(2))\n        total_minutes = hours * 60 + minutes  \n        offset = -(total_minutes)  \n        time_offsets_steps[col] = offset\n        \ntime_series_list_steps = []\n\nfor col, offset in time_offsets_steps.items():\n    temp_df = train[['p_num', 'time']].copy()  \n    temp_df['measurement_time'] = train['time'] + Minute(offset)  \n    temp_df['value'] = train[col] \n    \n    temp_df['original_time'] = train['time'] \n    temp_df['bg_column'] = col  \n    time_series_list_steps.append(temp_df)\n\ntime_series_data_steps = pd.concat(time_series_list_steps, ignore_index=True).dropna(subset=['value'])\n\ntime_series_data_steps['measurement_time'] = pd.to_datetime(time_series_data_steps['measurement_time'])\ntime_series_data_steps['hour'] = time_series_data_steps['measurement_time'].dt.hour\nhourly_avg_by_pnum_steps = time_series_data_steps.groupby(['p_num', 'hour'])['value'].mean().unstack()\n\nplt.figure(figsize=(12, 8))\nfor p_num in hourly_avg_by_pnum_steps.index:\n    plt.plot(hourly_avg_by_pnum_steps.columns, hourly_avg_by_pnum_steps.loc[p_num], marker='o', label=f'p_num: {p_num}')\n\nplt.title('Average Value by Hour for Each p_num (24-hour cycle)_steps')\nplt.xlabel('Hour of the Day')\nplt.ylabel('Average Value')\nplt.grid(True)\nplt.xticks(range(24))  \nplt.legend(title='p_num')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:12:03.466022Z","iopub.execute_input":"2024-10-19T18:12:03.466477Z","iopub.status.idle":"2024-10-19T18:12:07.362772Z","shell.execute_reply.started":"2024-10-19T18:12:03.466427Z","shell.execute_reply":"2024-10-19T18:12:07.361754Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# cals","metadata":{}},{"cell_type":"code","source":"Cals_p01 = train[train['p_num']=='p01'].iloc[:,[1] + list(range(362, 434))]\nCals_p02 = train[train['p_num']=='p02'].iloc[:,[1] + list(range(362, 434))]\nCals_p03 = train[train['p_num']=='p03'].iloc[:,[1] + list(range(362, 434))]\nCals_p04 = train[train['p_num']=='p04'].iloc[:,[1] + list(range(362, 434))]\nCals_p05 = train[train['p_num']=='p05'].iloc[:,[1] + list(range(362, 434))]\nCals_p06 = train[train['p_num']=='p06'].iloc[:,[1] + list(range(362, 434))]\nCals_p10 = train[train['p_num']=='p10'].iloc[:,[1] + list(range(362, 434))]\nCals_p11 = train[train['p_num']=='p11'].iloc[:,[1] + list(range(362, 434))]\nCals_p12 = train[train['p_num']=='p12'].iloc[:,[1] + list(range(362, 434))]\n\nCals_all = train.iloc[:,[1] + list(range(362, 434))]\n\nf, ax = plt.subplots(nrows=1, ncols=1, figsize=(10,6))\n\nsns.heatmap(Cals_all.iloc[:,1:].isna(), cmap='Blues')\nax.set_title('Missing Values_cals', fontsize=16)\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:12:31.909481Z","iopub.execute_input":"2024-10-19T18:12:31.909900Z","iopub.status.idle":"2024-10-19T18:12:45.502268Z","shell.execute_reply.started":"2024-10-19T18:12:31.909863Z","shell.execute_reply":"2024-10-19T18:12:45.501022Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pandas.tseries.offsets import Minute\nimport re\n\ndf = train\ndf['time'] = pd.to_datetime(df['time'], format='%H:%M:%S')\ncals_cols = [col for col in df.columns if col.startswith('cals-')]\n\ntime_offsets_cals = {}\nfor col in cals_cols:\n    match = re.search(r'cals-(\\d+):(\\d+)', col)\n    if match:\n        hours, minutes = int(match.group(1)), int(match.group(2))\n        total_minutes = hours * 60 + minutes  \n        offset = -(total_minutes)  \n        time_offsets_cals[col] = offset\n        \ntime_series_list_cals = []\n\nfor col, offset in time_offsets_cals.items():\n    temp_df = train[['p_num', 'time']].copy()  \n    temp_df['measurement_time'] = train['time'] + Minute(offset)  \n    temp_df['value'] = train[col] \n    \n    temp_df['original_time'] = train['time'] \n    temp_df['bg_column'] = col  \n    time_series_list_cals.append(temp_df)\n\ntime_series_data_cals = pd.concat(time_series_list_cals, ignore_index=True).dropna(subset=['value'])\n\ntime_series_data_cals['measurement_time'] = pd.to_datetime(time_series_data_cals['measurement_time'])\ntime_series_data_cals['hour'] = time_series_data_cals['measurement_time'].dt.hour\nhourly_avg_by_pnum_cals = time_series_data_cals.groupby(['p_num', 'hour'])['value'].mean().unstack()\n\nplt.figure(figsize=(12, 8))\nfor p_num in hourly_avg_by_pnum_cals.index:\n    plt.plot(hourly_avg_by_pnum_cals.columns, hourly_avg_by_pnum_cals.loc[p_num], marker='o', label=f'p_num: {p_num}')\n\nplt.title('Average Value by Hour for Each p_num (24-hour cycle)_cals')\nplt.xlabel('Hour of the Day')\nplt.ylabel('Average Value')\nplt.grid(True)\nplt.xticks(range(24))  \nplt.legend(title='p_num')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-19T18:13:53.935831Z","iopub.execute_input":"2024-10-19T18:13:53.936245Z","iopub.status.idle":"2024-10-19T18:13:58.684232Z","shell.execute_reply.started":"2024-10-19T18:13:53.936209Z","shell.execute_reply":"2024-10-19T18:13:58.682713Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Target","metadata":{}},{"cell_type":"code","source":"from pandas.tseries.offsets import Minute\nimport re\n\ndf = train\ndf['time'] = pd.to_datetime(df['time'], format='%H:%M:%S')\ny_cols = [col for col in df.columns if col.startswith('bg+')]\ny_cols","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:28:24.740115Z","iopub.execute_input":"2024-10-19T18:28:24.740515Z","iopub.status.idle":"2024-10-19T18:28:24.904205Z","shell.execute_reply.started":"2024-10-19T18:28:24.740478Z","shell.execute_reply":"2024-10-19T18:28:24.902933Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"time_offsets_y = {}\nfor col in y_cols:\n    match = re.search(r'bg\\+(\\d+):(\\d+)', col)\n    if match:\n        hours, minutes = int(match.group(1)), int(match.group(2))\n        total_minutes = hours * 60 + minutes  \n        offset = total_minutes  \n        time_offsets_y[col] = offset\ntime_offsets_y","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:36:26.607797Z","iopub.execute_input":"2024-10-19T18:36:26.608210Z","iopub.status.idle":"2024-10-19T18:36:26.617316Z","shell.execute_reply.started":"2024-10-19T18:36:26.608177Z","shell.execute_reply":"2024-10-19T18:36:26.616143Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"time_series_list_y = []\n\nfor col, offset in time_offsets_y.items():\n    temp_df = train[['p_num', 'time']].copy()  \n    temp_df['measurement_time'] = train['time'] + Minute(offset)  \n    temp_df['value'] = train[col] \n    \n    temp_df['original_time'] = train['time'] \n    temp_df['bg_column'] = col  \n    time_series_list_y.append(temp_df)\n\ntime_series_data_y = pd.concat(time_series_list_y, ignore_index=True).dropna(subset=['value'])\n\ntime_series_data_y['measurement_time'] = pd.to_datetime(time_series_data_y['measurement_time'])\ntime_series_data_y['hour'] = time_series_data_y['measurement_time'].dt.hour\nhourly_avg_by_pnum_y = time_series_data_y.groupby(['p_num', 'hour'])['value'].mean().unstack()\n\nplt.figure(figsize=(12, 8))\nfor p_num in hourly_avg_by_pnum_y.index:\n    plt.plot(hourly_avg_by_pnum_y.columns, hourly_avg_by_pnum_y.loc[p_num], marker='o', label=f'p_num: {p_num}')\n\nplt.title('Average Value by Hour for Each p_num (24-hour cycle)_target')\nplt.xlabel('Hour of the Day')\nplt.ylabel('Average Value')\nplt.grid(True)\nplt.xticks(range(24))  \nplt.legend(title='p_num')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:36:41.689788Z","iopub.execute_input":"2024-10-19T18:36:41.690219Z","iopub.status.idle":"2024-10-19T18:36:42.271630Z","shell.execute_reply.started":"2024-10-19T18:36:41.690182Z","shell.execute_reply":"2024-10-19T18:36:42.270606Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Correlation","metadata":{}},{"cell_type":"code","source":"hourly_avg_by_pnum_bg_mean = hourly_avg_by_pnum_bg.mean()\nhourly_avg_by_pnum_insulin_mean = hourly_avg_by_pnum_insulin.mean()\nhourly_avg_by_pnum_carbs_mean = hourly_avg_by_pnum_carbs.mean()\nhourly_avg_by_pnum_hr_mean = hourly_avg_by_pnum_hr.mean()\nhourly_avg_by_pnum_steps_mean = hourly_avg_by_pnum_steps.mean()\nhourly_avg_by_pnum_cals_mean = hourly_avg_by_pnum_cals.mean()\nhourly_avg_by_pnum_y_mean = hourly_avg_by_pnum_y.mean()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:38:40.983930Z","iopub.execute_input":"2024-10-19T18:38:40.984360Z","iopub.status.idle":"2024-10-19T18:38:40.993718Z","shell.execute_reply.started":"2024-10-19T18:38:40.984321Z","shell.execute_reply":"2024-10-19T18:38:40.992614Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"hourly_avg_df = pd.concat([hourly_avg_by_pnum_bg_mean,hourly_avg_by_pnum_insulin_mean,hourly_avg_by_pnum_carbs_mean,hourly_avg_by_pnum_hr_mean,hourly_avg_by_pnum_steps_mean,hourly_avg_by_pnum_cals_mean,hourly_avg_by_pnum_y_mean],axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:45:49.795643Z","iopub.execute_input":"2024-10-19T18:45:49.796478Z","iopub.status.idle":"2024-10-19T18:45:49.802975Z","shell.execute_reply.started":"2024-10-19T18:45:49.796432Z","shell.execute_reply":"2024-10-19T18:45:49.801853Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"hourly_avg_df.columns = ['hourly_avg_bg','hourly_avg_insulin','hourly_avg_carbs','hourly_avg_hr','hourly_avg_steps','hourly_avg_cals','hourly_avg_target']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:47:38.366486Z","iopub.execute_input":"2024-10-19T18:47:38.366895Z","iopub.status.idle":"2024-10-19T18:47:38.372120Z","shell.execute_reply.started":"2024-10-19T18:47:38.366855Z","shell.execute_reply":"2024-10-19T18:47:38.371031Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.figure(figsize=(10, 8))  \nsns.heatmap(hourly_avg_df.corr(), annot=True, cmap='coolwarm', fmt=\".2f\")  \nplt.title('Correlation Heatmap')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-10-19T18:45:53.533993Z","iopub.execute_input":"2024-10-19T18:45:53.534967Z","iopub.status.idle":"2024-10-19T18:45:54.009923Z","shell.execute_reply.started":"2024-10-19T18:45:53.534911Z","shell.execute_reply":"2024-10-19T18:45:54.008768Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"\n# Prediction of target from hourly data may be one way.\n\n# cals are positively correlated, others are negatively correlated\n","metadata":{}},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}