{"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":"!pip install scikit-learn-intelex --progress-bar off >> /tmp/pip_sklearnex.log\nimport pandas as pd\nimport numpy as np\nfrom sklearnex import patch_sklearn\npatch_sklearn()\nfrom sklearn import *\nimport glob\n\np = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/'\n\ntrain = glob.glob(p+'train/**/**')\ntest = glob.glob(p+'test/**/**')\nsubjects = pd.read_csv(p+'subjects.csv')\ntasks = pd.read_csv(p+'tasks.csv')\nsub = pd.read_csv(p+'sample_submission.csv')\n\n#events = pd.read_csv(p+'events.csv') #\tId \tInit \tCompletion \tType \tKinetic\n#daily = pd.read_csv(p+'daily_metadata.csv') # \tId \tSubject \tVisit \tBeginning of recording [00:00-23:59]\n#meta = pd.read_csv(p+'tdcsfog_metadata.csv') #Id \tSubject \tVisit \tTest \tMedication\n#defog = pd.read_csv(p+'defog_metadata.csv') #Id \tSubject \tVisit \tMedication\n#unlabeled = glob.glob(p+'unlabeled/**')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-03-30T03:13:59.373647Z","iopub.execute_input":"2023-03-30T03:13:59.374076Z","iopub.status.idle":"2023-03-30T03:14:35.427444Z","shell.execute_reply.started":"2023-03-30T03:13:59.374041Z","shell.execute_reply":"2023-03-30T03:14:35.425902Z"},"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_kmeans'] = cluster.KMeans(n_clusters=10, random_state=3).fit_predict(tasks[tasks.columns[1:]])\n\nsubjects = subjects.fillna(0).groupby('Subject').median()\nsubjects = subjects.reset_index()\nsubjects.rename(columns={'Subject':'Id'}, inplace=True)\nsubjects['s_kmeans'] = cluster.KMeans(n_clusters=10, random_state=3).fit_predict(subjects[subjects.columns[1:]])","metadata":{"execution":{"iopub.status.busy":"2023-03-30T03:14:58.241536Z","iopub.execute_input":"2023-03-30T03:14:58.242389Z","iopub.status.idle":"2023-03-30T03:14:58.448551Z","shell.execute_reply.started":"2023-03-30T03:14:58.242323Z","shell.execute_reply":"2023-03-30T03:14:58.447448Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def reader(f):\n    try:\n        df = pd.read_csv(f, usecols=['Time', 'AccV', 'AccML', 'AccAP', 'StartHesitation', 'Turn' , 'Walking'])\n        df['Id'] = f.split('/')[-1].split('.')[0]\n        #df = pd.merge(df, tasks[['Id','t_kmeans']], how='left', on='Id').fillna(-1)\n        #df = pd.merge(df, subjects[['Id','s_kmeans']], how='left', on='Id').fillna(-1)\n        df['AccV2'] = df['AccV'] - np.median(df['AccV'])\n        df['AccML2'] = df['AccML'] - np.median(df['AccML'])\n        df['AccAP2'] = df['AccAP'] - np.median(df['AccAP'])\n        \n        df['AccV2_s'] = df['AccV'] - df['AccV'].shift(1)\n        df['AccML2_s'] = df['AccML'] - df['AccML'].shift(1)\n        df['AccAP2_s'] = df['AccAP'] - df['AccAP'].shift(1)\n    \n        df['AccV2_sm'] = df['AccV'] - df['AccV'].shift(1).rolling(5).mean()\n        df['AccML2_sm'] = df['AccML'] - df['AccML'].shift(1).rolling(5).mean()\n        df['AccAP2_sm'] = df['AccAP'] - df['AccAP'].shift(1).rolling(5).mean()\n        \n        df = df.fillna(99)\n        return df\n    except: pass\ntrain = pd.concat([reader(f) for f in train]).fillna(0); print(train.shape)\ncols = [c for c in train.columns if c not in ['Id', 'StartHesitation', 'Turn' , 'Walking', 'Valid', 'Task','Event']]\npcols = ['StartHesitation', 'Turn' , 'Walking']\nscols = ['Id', 'StartHesitation', 'Turn' , 'Walking']","metadata":{"execution":{"iopub.status.busy":"2023-03-30T03:15:03.523613Z","iopub.execute_input":"2023-03-30T03:15:03.524105Z","iopub.status.idle":"2023-03-30T03:16:10.477650Z","shell.execute_reply.started":"2023-03-30T03:15:03.524061Z","shell.execute_reply":"2023-03-30T03:16:10.476214Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x1, x2, y1, y2 = model_selection.train_test_split(train[cols], train[pcols], test_size=.30, random_state=3, stratify=train[pcols])\ndel train\nreg = ensemble.ExtraTreesRegressor(n_estimators=200, max_depth=7, n_jobs=-1, random_state=3)\nreg.fit(x1[:5_000_000],y1[:5_000_000])\nprint(metrics.average_precision_score(y2, reg.predict(x2).clip(0.0,1.0)))\n#reg.fit(train[cols], train[['StartHesitation', 'Turn' , 'Walking']])","metadata":{"execution":{"iopub.status.busy":"2023-03-30T03:16:47.490449Z","iopub.execute_input":"2023-03-30T03:16:47.491445Z","iopub.status.idle":"2023-03-30T03:29:15.059383Z","shell.execute_reply.started":"2023-03-30T03:16:47.491388Z","shell.execute_reply":"2023-03-30T03:29:15.056846Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub['t'] = 0\nsubmission = []\nfor f in test:\n    df = pd.read_csv(f)\n    df['Id'] = f.split('/')[-1].split('.')[0]\n    df = df.fillna(0).reset_index(drop=True)\n    #df = pd.merge(df, tasks[['Id','t_kmeans']], how='left', on='Id').fillna(-1)\n    #df = pd.merge(df, subjects[['Id','s_kmeans']], how='left', on='Id').fillna(-1)\n    df['AccV2'] = df['AccV'] - np.median(df['AccV'])\n    df['AccML2'] = df['AccML'] - np.median(df['AccML'])\n    df['AccAP2'] = df['AccAP'] - np.median(df['AccAP'])\n    df['AccV2_s'] = df['AccV'] - df['AccV'].shift(1)\n    df['AccML2_s'] = df['AccML'] - df['AccML'].shift(1)\n    df['AccAP2_s'] = df['AccAP'] - df['AccAP'].shift(1)\n    df['AccV2_sm'] = df['AccV'] - df['AccV'].shift(1).rolling(5).mean()\n    df['AccML2_sm'] = df['AccML'] - df['AccML'].shift(1).rolling(5).mean()\n    df['AccAP2_sm'] = df['AccAP'] - df['AccAP'].shift(1).rolling(5).mean()\n    df = df.fillna(99)\n    res = pd.DataFrame(reg.predict(df[cols]).clip(0.0,1.0), columns=pcols)\n    df = pd.concat([df,res], axis=1)\n    df['Id'] = df['Id'].astype(str) + '_' + df['Time'].astype(str)\n    submission.append(df[scols])\nsubmission = pd.concat(submission)\nsubmission = pd.merge(sub[['Id','t']], submission, how='left', on='Id').fillna(0.0)\nsubmission[scols].to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2023-03-16T17:58:39.638925Z","iopub.execute_input":"2023-03-16T17:58:39.639339Z","iopub.status.idle":"2023-03-16T17:58:43.212387Z","shell.execute_reply.started":"2023-03-16T17:58:39.639299Z","shell.execute_reply":"2023-03-16T17:58:43.211369Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Add Features from events, daily, meta, and defog","metadata":{"execution":{"iopub.status.busy":"2023-03-16T17:58:43.213706Z","iopub.execute_input":"2023-03-16T17:58:43.214952Z","iopub.status.idle":"2023-03-16T17:58:43.220826Z","shell.execute_reply.started":"2023-03-16T17:58:43.214900Z","shell.execute_reply":"2023-03-16T17:58:43.219236Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Ｈ𝐀𝑷𝑷𝓎 🇰𝗮𝘨𝘨🇱𝖎Ｎɢ 💯\n=========================","metadata":{}}]}