{"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":"import numpy as np\nimport pandas as pd\nfrom sklearn.metrics import accuracy_score\nimport glob\n\ndef get_id(file):\n    return file.split('/')[-1].split('.')[0]\n\ndef drop_feature(df, features):\n    df = df.drop(features, axis=1)\n    return df\n    \ncount = 0\n#def get_file_data(file):\ndef get_file_data(datasets, useBreak=False):\n    \n    data_frames = []\n    count = 0\n    \n    for file in datasets:\n    \n        if count > 1000 and useBreak == True:\n           break\n        #print(file)\n        df = pd.read_csv(file)\n\n        df['Id'] = get_id(file)\n        df['Type'] = file.split('/')[-2]\n        \n        # Only look at unambiugous results\n        try:\n            df = df[(df['Valid'] == True)]\n        except:\n            pass\n        \n        data_frames.append(df)\n        \n        count = count + 1\n        \n    return pd.concat(data_frames)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-04-18T02:50:45.417483Z","iopub.execute_input":"2023-04-18T02:50:45.418592Z","iopub.status.idle":"2023-04-18T02:50:46.509160Z","shell.execute_reply.started":"2023-04-18T02:50:45.418546Z","shell.execute_reply":"2023-04-18T02:50:46.508025Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def reduce_mem_usage(df, verbose=True):\n    numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']\n    start_mem = df.memory_usage().sum() / 1024**2\n    for col in df.columns:\n        col_type = df[col].dtypes\n        if col_type in numerics:\n            c_min = df[col].min()\n            c_max = df[col].max()\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            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                    df[col] = df[col].astype(np.float64)\n\n    end_mem = df.memory_usage().sum() / 1024**2\n    #print('Memory usage after optimization is: {:.2f} MB'.format(end_mem))\n    #print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))\n\n    return df","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:50:46.511508Z","iopub.execute_input":"2023-04-18T02:50:46.511890Z","iopub.status.idle":"2023-04-18T02:50:46.527151Z","shell.execute_reply.started":"2023-04-18T02:50:46.511854Z","shell.execute_reply":"2023-04-18T02:50:46.525733Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = glob.glob('/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/train/defog/**')\ntrain2 = glob.glob('/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/train/tdcsfog/**')\ntest = glob.glob('/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/test/**/**')\nsubjects = pd.read_csv('/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/subjects.csv')\ntasks = pd.read_csv('/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/tasks.csv')\ndefog = pd.read_csv('/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/defog_metadata.csv')\ntdcsfog = pd.read_csv('/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/tdcsfog_metadata.csv')\n\n#train","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:50:46.528549Z","iopub.execute_input":"2023-04-18T02:50:46.529532Z","iopub.status.idle":"2023-04-18T02:50:46.689150Z","shell.execute_reply.started":"2023-04-18T02:50:46.529493Z","shell.execute_reply":"2023-04-18T02:50:46.688103Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = get_file_data(train, True)\ntrain_data2 = get_file_data(train2, True)\ntest_data = get_file_data(test)\n#defog_data = get_file_data(defog)\n","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:50:46.691183Z","iopub.execute_input":"2023-04-18T02:50:46.691847Z","iopub.status.idle":"2023-04-18T02:51:21.390145Z","shell.execute_reply.started":"2023-04-18T02:50:46.691811Z","shell.execute_reply":"2023-04-18T02:51:21.388982Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:51:21.391728Z","iopub.execute_input":"2023-04-18T02:51:21.392169Z","iopub.status.idle":"2023-04-18T02:51:21.421606Z","shell.execute_reply.started":"2023-04-18T02:51:21.392122Z","shell.execute_reply":"2023-04-18T02:51:21.420813Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:51:21.422684Z","iopub.execute_input":"2023-04-18T02:51:21.423649Z","iopub.status.idle":"2023-04-18T02:51:21.440991Z","shell.execute_reply.started":"2023-04-18T02:51:21.423580Z","shell.execute_reply":"2023-04-18T02:51:21.439712Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = reduce_mem_usage(train_data)\ntrain_data2 = reduce_mem_usage(train_data2)\ntest_data = reduce_mem_usage(test_data)\ntasks = reduce_mem_usage(tasks)\nsubjects = reduce_mem_usage(subjects)\ndefog = reduce_mem_usage(defog)","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:51:21.444501Z","iopub.execute_input":"2023-04-18T02:51:21.444945Z","iopub.status.idle":"2023-04-18T02:51:22.010279Z","shell.execute_reply.started":"2023-04-18T02:51:21.444911Z","shell.execute_reply":"2023-04-18T02:51:22.008998Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#tasks = drop_feature(tasks, ['Begin', 'End'])\ntrain_data = pd.merge(train_data, tasks, on='Id')\ntrain_data2 = pd.merge(train_data2, tasks, on='Id')\ntrain_data = reduce_mem_usage(train_data)","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:51:22.011706Z","iopub.execute_input":"2023-04-18T02:51:22.012041Z","iopub.status.idle":"2023-04-18T02:51:46.118478Z","shell.execute_reply.started":"2023-04-18T02:51:22.012007Z","shell.execute_reply":"2023-04-18T02:51:46.117148Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"subjects = drop_feature(subjects, ['UPDRSIII_On', 'UPDRSIII_Off', 'NFOGQ'])\nsubjects = subjects[(subjects['Age'] < 70) & (subjects['Age'] >= 40)]\nsubjects = subjects[subjects['YearsSinceDx'] <= 10]\n\ndefog['Medication'] = defog['Medication'].map({'on': 1, 'off': 0}).astype(float)\ntdcsfog['Medication'] = tdcsfog['Medication'].map({'on': 1, 'off': 0}).astype(float)\nsubjects['Sex'] = subjects['Sex'].map({'M': 1, 'F': 0}).astype(float)\n\ndefog = pd.merge(defog, subjects, on='Subject')\ntdcsfog = pd.merge(tdcsfog, subjects, on='Subject')\ndefog","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:51:46.120021Z","iopub.execute_input":"2023-04-18T02:51:46.120861Z","iopub.status.idle":"2023-04-18T02:51:46.175891Z","shell.execute_reply.started":"2023-04-18T02:51:46.120823Z","shell.execute_reply":"2023-04-18T02:51:46.174488Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = pd.merge(train_data, defog, on='Id')\ntrain_data = reduce_mem_usage(train_data)\ntrain_data2 = pd.merge(train_data2, tdcsfog, on='Id')\n\ntrain_data.append(train_data2)\n\ntrain_data","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:51:46.179262Z","iopub.execute_input":"2023-04-18T02:51:46.179652Z","iopub.status.idle":"2023-04-18T02:52:37.852517Z","shell.execute_reply.started":"2023-04-18T02:51:46.179591Z","shell.execute_reply":"2023-04-18T02:52:37.851348Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"merge testing\")\ntest_data = pd.merge(test_data, tasks, on='Id')\n#test_data = pd.merge(test_data, defog, on='Id')","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:52:37.854028Z","iopub.execute_input":"2023-04-18T02:52:37.854505Z","iopub.status.idle":"2023-04-18T02:52:39.382395Z","shell.execute_reply.started":"2023-04-18T02:52:37.854458Z","shell.execute_reply":"2023-04-18T02:52:39.381094Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:52:39.383834Z","iopub.execute_input":"2023-04-18T02:52:39.384182Z","iopub.status.idle":"2023-04-18T02:52:39.407344Z","shell.execute_reply.started":"2023-04-18T02:52:39.384147Z","shell.execute_reply":"2023-04-18T02:52:39.406072Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:52:39.410586Z","iopub.execute_input":"2023-04-18T02:52:39.411370Z","iopub.status.idle":"2023-04-18T02:52:55.554717Z","shell.execute_reply.started":"2023-04-18T02:52:39.411329Z","shell.execute_reply":"2023-04-18T02:52:55.553858Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"training\")\nfeatures = ['AccV', 'AccML', 'AccAP']#, 'Medication', 'YearsSinceDx', 'Age', 'Sex']\nX = train_data[features]\nX_test = test_data[features]\ny = train_data['Valid'].values.ravel()\n#y_test = test_data[['Task']]\nprint(\"done training\")","metadata":{"execution":{"iopub.status.busy":"2023-04-18T02:52:55.555754Z","iopub.execute_input":"2023-04-18T02:52:55.556088Z","iopub.status.idle":"2023-04-18T02:53:04.178438Z","shell.execute_reply.started":"2023-04-18T02:52:55.556056Z","shell.execute_reply":"2023-04-18T02:53:04.176982Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.cluster import KMeans\n\nn_clusters = 8\nkmeans = KMeans(n_clusters=n_clusters)\nkmeans.fit(X)","metadata":{"execution":{"iopub.status.busy":"2023-04-18T03:31:47.752131Z","iopub.execute_input":"2023-04-18T03:31:47.755038Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"path=\"/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/\"\nsub = pd.read_csv(path+'sample_submission.csv')\ntest = glob.glob(path+'test/**/**')\n\ncount = 0\nsub['t'] = 0\nsubmission = []\nfor f in test:\n    print(\"Working test \", count)\n    #if count > 30:\n    #    break\n    count = count + 1\n    df = pd.read_csv(f)\n    df['Id'] = f.split('/')[-1].split('.')[0]\n    print(df)\n    df = df.fillna(0).reset_index(drop=True)\n    res = kmeans.predict(df[features])\n    n = len(res)\n    if n % 3 != 0:\n        res = np.concatenate([res, np.zeros(3 - n % 3)])\n    res = res.reshape(-1, 3).astype('float64')\n    res = pd.DataFrame(res, columns=['StartHesitation', 'Turn', 'Walking'])\n    df = pd.concat([df, res], axis=1)\n    df['Id'] = df['Id'].astype(str) + '_' + df['Time'].astype(str)\n    submission.append(df[['Id', 'StartHesitation', 'Turn', 'Walking']])\nsubmission = pd.concat(submission)\nsubmission = pd.merge(sub[['Id', 't']], submission, how='left', on='Id').fillna(0.0)\nsubmission[['Id', 'StartHesitation', 'Turn', 'Walking']].to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2023-04-18T03:00:11.984158Z","iopub.execute_input":"2023-04-18T03:00:11.984468Z","iopub.status.idle":"2023-04-18T03:00:13.994456Z","shell.execute_reply.started":"2023-04-18T03:00:11.984438Z","shell.execute_reply":"2023-04-18T03:00:13.993159Z"},"trusted":true},"execution_count":null,"outputs":[]}]}