{"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":"Credit to 此般浅薄 for the initial inspiration","metadata":{}},{"cell_type":"code","source":"# Install tsflex and seglearn\n!pip install tsflex --no-index --find-links=file:///kaggle/input/time-series-tools\n!pip install seglearn --no-index --find-links=file:///kaggle/input/time-series-tools","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","papermill":{"duration":26.425736,"end_time":"2023-04-16T22:41:22.382325","exception":false,"start_time":"2023-04-16T22:40:55.956589","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:00:10.052825Z","iopub.execute_input":"2023-05-24T06:00:10.053506Z","iopub.status.idle":"2023-05-24T06:00:43.032149Z","shell.execute_reply.started":"2023-05-24T06:00:10.053448Z","shell.execute_reply":"2023-05-24T06:00:43.030067Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nfrom sklearn import *\nimport glob\nfrom tqdm.auto import tqdm\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom os import path\nfrom pathlib import Path\nfrom seglearn.feature_functions import base_features, emg_features\nfrom tsflex.features import FeatureCollection, MultipleFeatureDescriptors\nfrom tsflex.features.integrations import seglearn_feature_dict_wrapper\nfrom sklearn.model_selection import GroupKFold, train_test_split\nimport lightgbm as lgb\nfrom sklearn.multioutput import MultiOutputRegressor\nfrom sklearn.base import clone\nfrom sklearn.metrics import average_precision_score\nfrom sklearn.multioutput import MultiOutputClassifier","metadata":{"papermill":{"duration":2.755431,"end_time":"2023-04-16T22:41:25.148066","exception":false,"start_time":"2023-04-16T22:41:22.392635","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:00:43.038676Z","iopub.execute_input":"2023-05-24T06:00:43.039240Z","iopub.status.idle":"2023-05-24T06:00:46.854518Z","shell.execute_reply.started":"2023-05-24T06:00:43.039179Z","shell.execute_reply":"2023-05-24T06:00:46.852932Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def reduce_memory_usage(df):\n    \n    start_mem = df.memory_usage().sum() / 1024**2\n    print('Memory usage of dataframe is {:.2f} MB'.format(start_mem))\n    \n    for col in df.columns:\n        col_type = df[col].dtype.name\n        if ((col_type != 'datetime64[ns]') & (col_type != 'category')):\n            if (col_type != 'object'):\n                c_min = df[col].min()\n                c_max = df[col].max()\n\n                if str(col_type)[:3] == 'int':\n                    if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:\n                        df[col] = df[col].astype(np.int8)\n                    elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:\n                        df[col] = df[col].astype(np.int16)\n                    elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:\n                        df[col] = df[col].astype(np.int32)\n                    elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:\n                        df[col] = df[col].astype(np.int64)\n\n                else:\n                    if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:\n                        df[col] = df[col].astype(np.float16)\n                    elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:\n                        df[col] = df[col].astype(np.float32)\n                    else:\n                        pass\n            else:\n                df[col] = df[col].astype('category')\n    mem_usg = df.memory_usage().sum() / 1024**2 \n    print(\"Memory usage became: \",mem_usg,\" MB\")\n    \n    return df\n","metadata":{"execution":{"iopub.status.busy":"2023-05-24T06:00:46.859873Z","iopub.execute_input":"2023-05-24T06:00:46.860389Z","iopub.status.idle":"2023-05-24T06:00:46.882077Z","shell.execute_reply.started":"2023-05-24T06:00:46.860337Z","shell.execute_reply":"2023-05-24T06:00:46.880391Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Grab important files","metadata":{"papermill":{"duration":0.009576,"end_time":"2023-04-16T22:41:25.16752","exception":false,"start_time":"2023-04-16T22:41:25.157944","status":"completed"},"tags":[]}},{"cell_type":"code","source":"root = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/'\n\ntrain = glob.glob(path.join(root, 'train/**/**'))\ntest = glob.glob(path.join(root, 'test/**/**'))\n\nsubjects = pd.read_csv(path.join(root, 'subjects.csv'))\ntasks = pd.read_csv(path.join(root, 'tasks.csv'))\nevents = pd.read_csv(path.join(root, 'events.csv'))\n\ntdcsfog_metadata = pd.read_csv(path.join(root, 'tdcsfog_metadata.csv'))\ndefog_metadata = pd.read_csv(path.join(root, 'defog_metadata.csv')) \n\ntdcsfog_metadata['Module'] = 'tdcsfog'\ndefog_metadata['Module'] = 'defog'\n\nfull_metadata = pd.concat([tdcsfog_metadata, defog_metadata])","metadata":{"papermill":{"duration":0.170669,"end_time":"2023-04-16T22:41:25.347896","exception":false,"start_time":"2023-04-16T22:41:25.177227","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:00:46.886801Z","iopub.execute_input":"2023-05-24T06:00:46.887396Z","iopub.status.idle":"2023-05-24T06:00:47.105198Z","shell.execute_reply.started":"2023-05-24T06:00:46.887336Z","shell.execute_reply":"2023-05-24T06:00:47.103473Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"seed = 100\ncluster_size = 8","metadata":{"papermill":{"duration":0.02392,"end_time":"2023-04-16T22:41:25.577077","exception":false,"start_time":"2023-04-16T22:41:25.553157","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:00:47.106974Z","iopub.execute_input":"2023-05-24T06:00:47.107430Z","iopub.status.idle":"2023-05-24T06:00:47.112745Z","shell.execute_reply.started":"2023-05-24T06:00:47.107390Z","shell.execute_reply":"2023-05-24T06:00:47.111550Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.experimental import enable_iterative_imputer  # Import necessary module\nfrom sklearn.impute import IterativeImputer\n\nfrom sklearn.ensemble import ExtraTreesRegressor\n","metadata":{"execution":{"iopub.status.busy":"2023-05-24T06:00:47.114666Z","iopub.execute_input":"2023-05-24T06:00:47.115464Z","iopub.status.idle":"2023-05-24T06:00:47.134662Z","shell.execute_reply.started":"2023-05-24T06:00:47.115402Z","shell.execute_reply":"2023-05-24T06:00:47.132926Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"subjects['Sex'] = subjects['Sex'].factorize()[0]\nsubjects.Visit = subjects.Visit.fillna(0)\nimputer = IterativeImputer(estimator = ExtraTreesRegressor(n_estimators=10))  # By default, it uses a Bayesian Ridge regression model\nsubjects[subjects.columns[1:]]= imputer.fit_transform(subjects[subjects.columns[1:]])\n\nsubjects = subjects.groupby('Subject').mean()\nnew_names = {'Visit':'s_visit','Age':'s_age','YearsSinceDx':'s_years','UPDRSIII_On':'s_on','UPDRSIII_Off':'s_off','NFOGQ':'s_NFOGQ', 'Sex': 's_sex'}\nsubjects = subjects.rename(columns = new_names)\nsubjects","metadata":{"papermill":{"duration":0.110973,"end_time":"2023-04-16T22:41:25.698532","exception":false,"start_time":"2023-04-16T22:41:25.587559","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:00:47.136768Z","iopub.execute_input":"2023-05-24T06:00:47.137635Z","iopub.status.idle":"2023-05-24T06:00:48.306284Z","shell.execute_reply.started":"2023-05-24T06:00:47.137589Z","shell.execute_reply":"2023-05-24T06:00:48.305066Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tasks['Duration'] = tasks['End'] - tasks['Begin']\ntasks = pd.pivot_table(tasks, values=['Duration'], index=['Id'], columns=['Task'], aggfunc='sum', fill_value=0)\ntasks.columns = [c[1] for c in tasks.columns]\ntasks = tasks.reset_index()\ntasks['t_group'] = cluster.KMeans(n_clusters = cluster_size, random_state = seed).fit_predict(tasks[tasks.columns[1:]])","metadata":{"papermill":{"duration":0.108699,"end_time":"2023-04-16T22:41:25.903139","exception":false,"start_time":"2023-04-16T22:41:25.79444","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:00:48.308034Z","iopub.execute_input":"2023-05-24T06:00:48.308468Z","iopub.status.idle":"2023-05-24T06:00:48.412046Z","shell.execute_reply.started":"2023-05-24T06:00:48.308424Z","shell.execute_reply":"2023-05-24T06:00:48.410755Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# merge the subjects with the metadata\nmetadata_w_subjects = full_metadata.merge(subjects, how='inner', on='Subject').copy()\nfeatures = metadata_w_subjects.columns","metadata":{"papermill":{"duration":0.060364,"end_time":"2023-04-16T22:41:26.141472","exception":false,"start_time":"2023-04-16T22:41:26.081108","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:00:48.413712Z","iopub.execute_input":"2023-05-24T06:00:48.414874Z","iopub.status.idle":"2023-05-24T06:00:48.428528Z","shell.execute_reply.started":"2023-05-24T06:00:48.414824Z","shell.execute_reply":"2023-05-24T06:00:48.427173Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"metadata_w_subjects['Medication'] = metadata_w_subjects['Medication'].factorize()[0]","metadata":{"execution":{"iopub.status.busy":"2023-05-24T06:00:48.434975Z","iopub.execute_input":"2023-05-24T06:00:48.436370Z","iopub.status.idle":"2023-05-24T06:00:48.444457Z","shell.execute_reply.started":"2023-05-24T06:00:48.436301Z","shell.execute_reply":"2023-05-24T06:00:48.442724Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Extract from seglearn.feature_functions import base_features, emg_features\n\nfrom tsflex.features import FeatureCollection, MultipleFeatureDescriptors\nfrom tsflex.features.integrations import seglearn_feature_dict_wrapper from the time series data itself","metadata":{"papermill":{"duration":0.021931,"end_time":"2023-04-16T22:41:26.370019","exception":false,"start_time":"2023-04-16T22:41:26.348088","status":"completed"},"tags":[]}},{"cell_type":"code","source":"from seglearn.feature_functions import base_features, emg_features\n\nfrom tsflex.features import FeatureCollection, MultipleFeatureDescriptors\nfrom tsflex.features.integrations import seglearn_feature_dict_wrapper ","metadata":{"execution":{"iopub.status.busy":"2023-05-24T06:00:48.446649Z","iopub.execute_input":"2023-05-24T06:00:48.447268Z","iopub.status.idle":"2023-05-24T06:00:48.459777Z","shell.execute_reply.started":"2023-05-24T06:00:48.447209Z","shell.execute_reply":"2023-05-24T06:00:48.458378Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"basic_feats = MultipleFeatureDescriptors(\n    functions=seglearn_feature_dict_wrapper(base_features()),\n    series_names=['AccV', 'AccML', 'AccAP'],\n    windows=[5000],\n    strides=[5000],\n)\n\nemg_feats = emg_features()\ndel emg_feats['simple square integral'] # is same as abs_energy (which is in base_features)\n\nemg_feats = MultipleFeatureDescriptors(\n    functions=seglearn_feature_dict_wrapper(emg_feats),\n    series_names=['AccV', 'AccML', 'AccAP'],\n    windows=[5000],\n    strides=[5000],\n)\n\nfc = FeatureCollection([basic_feats, emg_feats])","metadata":{"papermill":{"duration":0.032203,"end_time":"2023-04-16T22:41:26.517639","exception":false,"start_time":"2023-04-16T22:41:26.485436","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:00:48.461543Z","iopub.execute_input":"2023-05-24T06:00:48.462515Z","iopub.status.idle":"2023-05-24T06:00:48.482892Z","shell.execute_reply.started":"2023-05-24T06:00:48.462462Z","shell.execute_reply":"2023-05-24T06:00:48.481317Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def reader(file):\n    try:\n        df = pd.read_csv(file, index_col='Time', usecols=['Time', 'AccV', 'AccML', 'AccAP', 'StartHesitation', 'Turn' , 'Walking'])\n\n        path_split = file.split('/')\n        df['Id'] = path_split[-1].split('.')[0]\n        dataset = Path(file).parts[-2]\n        df['Module'] = dataset\n        \n        # this is done because the speeds are at different rates for the datasets\n        if dataset == 'tdcsfog':\n            df.AccV = df.AccV / 9.80665\n            df.AccML = df.AccML / 9.80665\n            df.AccAP = df.AccAP / 9.80665\n\n        df['Time_frac']=(df.index/df.index.max()).values\n        \n        df = pd.merge(df, tasks[['Id','t_group']], how='left', on='Id').fillna(-1)\n        \n        df = pd.merge(df, metadata_w_subjects[['Id','Subject', 'Visit','Test','Medication']], how='left', on='Id').fillna(-1)\n        \n        df_feats = fc.calculate(df, return_df=True, include_final_window=True, approve_sparsity=True, window_idx=\"begin\").astype(np.float32)\n        df = df.merge(df_feats, how=\"left\", left_index=True, right_index=True)\n        \n#         # stride\n#         df[\"Stride\"] = df[\"AccV\"] + df[\"AccML\"] + df[\"AccAP\"]\n\n#         # step\n#         df[\"Step\"] = np.sqrt(abs(df[\"Stride\"]))\n    \n        df.fillna(method=\"ffill\", inplace=True)\n        \n        return df\n    except: pass\n\ntrain = pd.concat([reader(f) for f in tqdm(train)]).fillna(0); print(train.shape)\n","metadata":{"papermill":{"duration":533.977331,"end_time":"2023-04-16T22:50:20.513889","exception":false,"start_time":"2023-04-16T22:41:26.536558","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:00:48.485073Z","iopub.execute_input":"2023-05-24T06:00:48.485655Z","iopub.status.idle":"2023-05-24T06:10:00.715356Z","shell.execute_reply.started":"2023-05-24T06:00:48.485594Z","shell.execute_reply":"2023-05-24T06:10:00.713747Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df =reduce_memory_usage(train)","metadata":{"execution":{"iopub.status.busy":"2023-05-24T06:10:00.717447Z","iopub.execute_input":"2023-05-24T06:10:00.718916Z","iopub.status.idle":"2023-05-24T06:11:13.061650Z","shell.execute_reply.started":"2023-05-24T06:10:00.718852Z","shell.execute_reply":"2023-05-24T06:11:13.059986Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cols = [c for c in train.columns if c not in ['Id','Subject','Module', 'Time', 'StartHesitation', 'Turn' , 'Walking', 'Valid', 'Task','Event']]\npcols = ['StartHesitation', 'Turn' , 'Walking']\nscols = ['Id', 'StartHesitation', 'Turn' , 'Walking']\ntrain=df.reset_index(drop=True)","metadata":{"execution":{"iopub.status.busy":"2023-05-24T06:11:13.063689Z","iopub.execute_input":"2023-05-24T06:11:13.064156Z","iopub.status.idle":"2023-05-24T06:11:16.291890Z","shell.execute_reply.started":"2023-05-24T06:11:13.064111Z","shell.execute_reply":"2023-05-24T06:11:16.290461Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"best_params_ = {'colsample_bytree': 0.5282057895135501,\n 'max_depth': 8,\n 'min_child_weight': 3.1233911067827616,\n 'n_estimators': 200,\n 'subsample': 0.9961057796456088,\n }\n\ndef custom_average_precision(y_true, y_pred):\n    score = average_precision_score(y_true, y_pred)\n    return 'average_precision', score, True\n\n","metadata":{"papermill":{"duration":0.031497,"end_time":"2023-04-16T22:50:29.071479","exception":false,"start_time":"2023-04-16T22:50:29.039982","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:11:16.296208Z","iopub.execute_input":"2023-05-24T06:11:16.296642Z","iopub.status.idle":"2023-05-24T06:11:16.303911Z","shell.execute_reply.started":"2023-05-24T06:11:16.296599Z","shell.execute_reply":"2023-05-24T06:11:16.302508Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train,X_test,y_train,y_test= train_test_split(train[cols],train[pcols],test_size=0.3)","metadata":{"execution":{"iopub.status.busy":"2023-05-24T06:11:16.305696Z","iopub.execute_input":"2023-05-24T06:11:16.306163Z","iopub.status.idle":"2023-05-24T06:11:50.231172Z","shell.execute_reply.started":"2023-05-24T06:11:16.306100Z","shell.execute_reply":"2023-05-24T06:11:50.229504Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import sklearn.metrics as me\nfrom sklearn.calibration import CalibratedClassifierCV","metadata":{"execution":{"iopub.status.busy":"2023-05-24T06:11:50.232867Z","iopub.execute_input":"2023-05-24T06:11:50.233311Z","iopub.status.idle":"2023-05-24T06:11:50.239846Z","shell.execute_reply.started":"2023-05-24T06:11:50.233250Z","shell.execute_reply":"2023-05-24T06:11:50.238239Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"me.recall_score","metadata":{"execution":{"iopub.status.busy":"2023-05-23T19:48:45.154911Z","iopub.execute_input":"2023-05-23T19:48:45.155618Z","iopub.status.idle":"2023-05-23T19:48:45.165280Z","shell.execute_reply.started":"2023-05-23T19:48:45.155551Z","shell.execute_reply":"2023-05-23T19:48:45.164134Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n\n\n\n    \n# Fit and transform the multi-label data\naps = []\nmodels = []\n\n\n\nfor label in pcols :\n    \n    y_tr= y_train[label]\n    y_ts =  y_test[label]\n    scale_pos_weight= np.sqrt(y_tr.value_counts()[0]/y_tr.value_counts()[1])\n    multioutput_classifier = lgb.LGBMClassifier(objective=\"binary\",scale_pos_weight=scale_pos_weight,max_depth=9)\n    \n    multioutput_classifier.fit(\n                X_train, y_tr,\n                eval_set=(X_test, y_ts),\n                eval_metric=custom_average_precision,\n                callbacks=[lgb.early_stopping(20)]\n            )\n\n    calibrated_classifier = CalibratedClassifierCV(multioutput_classifier, cv='prefit', method='sigmoid')\n    calibrated_classifier.fit(X_train, y_tr)\n\n    ap = metrics.average_precision_score(y_ts, calibrated_classifier.predict(X_test))\n    print(\"average percision for {} = {}\".format(label,ap))\n    print(\"recall for {} = {} \".format(label,me.recall_score(y_ts, calibrated_classifier.predict(X_test))))\n    aps.append(ap)\n    models.append(calibrated_classifier)\n\nprint('ap for 3 labels = {}'.format(np.mean(aps)))","metadata":{"papermill":{"duration":943.279901,"end_time":"2023-04-16T23:06:12.366865","exception":false,"start_time":"2023-04-16T22:50:29.086964","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:11:50.241657Z","iopub.execute_input":"2023-05-24T06:11:50.242179Z","iopub.status.idle":"2023-05-24T06:46:17.158518Z","shell.execute_reply.started":"2023-05-24T06:11:50.242136Z","shell.execute_reply":"2023-05-24T06:46:17.156704Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub = pd.read_csv(path.join(root, 'sample_submission.csv'))\nsubmission = []\n\nfor f in test:\n    df = pd.read_csv(f)\n    df.set_index('Time', drop=True, inplace=True)\n\n    df['Id'] = f.split('/')[-1].split('.')[0]\n\n    dataset = Path(f).parts[-2]\n        \n    if dataset == 'tdcsfog':\n        df.AccV = df.AccV / 9.80665\n        df.AccML = df.AccML / 9.80665\n        df.AccAP = df.AccAP / 9.80665\n            \n    df['Time_frac']=(df.index/df.index.max()).values\n    df = pd.merge(df, tasks[['Id','t_group']], how='left', on='Id').fillna(-1)\n\n    df = pd.merge(df, metadata_w_subjects[['Id','Subject', 'Visit','Test','Medication']], how='left', on='Id').fillna(-1)\n    df_feats = fc.calculate(df, return_df=True, include_final_window=True, approve_sparsity=True, window_idx=\"begin\")\n    df = df.merge(df_feats, how=\"left\", left_index=True, right_index=True)\n    df.fillna(method=\"ffill\", inplace=True)\n\n#     # stride\n#     df[\"Stride\"] = df[\"AccV\"] + df[\"AccML\"] + df[\"AccAP\"]\n\n#     # step\n#     df[\"Step\"] = np.sqrt(abs(df[\"Stride\"]))\n        \n    res_vals = []\n    res = pd.DataFrame()\n    for i,label in enumerate(pcols):\n        \n        pred = models[i].predict_proba(df[cols])[:, 1]\n        \n        res[label] = pred\n    \n    df = pd.concat([df,res], axis=1)\n    df['Id'] = df['Id'].astype(str) + '_' + df.index.astype(str)\n    submission.append(df[scols])\n    \nsubmission = pd.concat(submission)\nsubmission = pd.merge(sub[['Id']], submission, how='left', on='Id').fillna(0.0)\nsubmission[scols].to_csv('submission.csv', index=False)","metadata":{"papermill":{"duration":10.790056,"end_time":"2023-04-16T23:06:23.20594","exception":false,"start_time":"2023-04-16T23:06:12.415884","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:47:39.532505Z","iopub.execute_input":"2023-05-24T06:47:39.533784Z","iopub.status.idle":"2023-05-24T06:47:48.585524Z","shell.execute_reply.started":"2023-05-24T06:47:39.533709Z","shell.execute_reply":"2023-05-24T06:47:48.583937Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission","metadata":{"papermill":{"duration":0.076052,"end_time":"2023-04-16T23:06:23.331235","exception":false,"start_time":"2023-04-16T23:06:23.255183","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-05-24T06:47:54.049870Z","iopub.execute_input":"2023-05-24T06:47:54.050393Z","iopub.status.idle":"2023-05-24T06:47:54.072115Z","shell.execute_reply.started":"2023-05-24T06:47:54.050349Z","shell.execute_reply":"2023-05-24T06:47:54.070715Z"},"trusted":true},"execution_count":null,"outputs":[]}]}