{"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":"# Imports","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom sklearn.preprocessing import RobustScaler\nimport plotly.express as px\nimport plotly.graph_objects as go","metadata":{"execution":{"iopub.status.busy":"2023-05-05T21:10:53.549148Z","iopub.execute_input":"2023-05-05T21:10:53.549519Z","iopub.status.idle":"2023-05-05T21:10:53.554759Z","shell.execute_reply.started":"2023-05-05T21:10:53.549490Z","shell.execute_reply":"2023-05-05T21:10:53.553482Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Load Example CSV","metadata":{}},{"cell_type":"code","source":"df = pd.read_csv('/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/train/tdcsfog/150e8227fc.csv')\ndf['time_s'] = df['Time'] / 128\ndf.AccV = df.AccV / 9.80665\ndf.AccML = df.AccML / 9.80665\ndf.AccAP = df.AccAP / 9.80665","metadata":{"execution":{"iopub.status.busy":"2023-05-05T21:10:53.558453Z","iopub.execute_input":"2023-05-05T21:10:53.559388Z","iopub.status.idle":"2023-05-05T21:10:53.634026Z","shell.execute_reply.started":"2023-05-05T21:10:53.559357Z","shell.execute_reply":"2023-05-05T21:10:53.633265Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Calculate Magnitude","metadata":{}},{"cell_type":"code","source":"def mag_calc(ax, ay, az):\n    A=np.sqrt(ax**2+ay**2+az**2)\n    return A\ndf['AccMag'] = mag_calc(df['AccV'], df['AccML'], df['AccAP'])","metadata":{"execution":{"iopub.status.busy":"2023-05-05T21:10:53.635375Z","iopub.execute_input":"2023-05-05T21:10:53.636039Z","iopub.status.idle":"2023-05-05T21:10:53.642301Z","shell.execute_reply.started":"2023-05-05T21:10:53.636010Z","shell.execute_reply":"2023-05-05T21:10:53.641362Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Action Column","metadata":{}},{"cell_type":"code","source":"df['Action'] = 'None'\ndf['Action'] = np.where(df['StartHesitation'] == 1, 'StartHesitation', df['Action'])\ndf['Action'] = np.where(df['Turn'] == 1, 'Turn', df['Action'])\ndf['Action'] = np.where(df['Walking'] == 1, 'Walking', df['Action'])","metadata":{"execution":{"iopub.status.busy":"2023-05-05T21:10:53.643672Z","iopub.execute_input":"2023-05-05T21:10:53.644225Z","iopub.status.idle":"2023-05-05T21:10:53.657878Z","shell.execute_reply.started":"2023-05-05T21:10:53.644189Z","shell.execute_reply":"2023-05-05T21:10:53.656907Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Scale Acceleration","metadata":{}},{"cell_type":"code","source":"ScaleTrain = df\nscale_columns = ['AccML', 'AccV', 'AccAP']\n\nscaler = RobustScaler()\n\nscaler = scaler.fit(ScaleTrain[scale_columns])\n\nScaleTrain.loc[:, scale_columns] = scaler.transform(ScaleTrain[scale_columns].to_numpy())","metadata":{"execution":{"iopub.status.busy":"2023-05-05T21:10:53.660609Z","iopub.execute_input":"2023-05-05T21:10:53.661015Z","iopub.status.idle":"2023-05-05T21:10:53.711460Z","shell.execute_reply.started":"2023-05-05T21:10:53.660980Z","shell.execute_reply":"2023-05-05T21:10:53.710447Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# load single csv\nd = ScaleTrain\n\n# restrict columns\nd = d[d.columns[d.columns.isin(['AccV', 'AccML', 'AccAP', 'Action', 'time_s'])]]\n\n# make new plotly figure\nfig = go.Figure()\n\nfig.add_trace(\n        go.Scatter(\n            x=d['time_s'],\n            y=d['AccV'], \n            mode='lines',\n            line={'color': 'MediumVioletRed'},\n            name = 'AccV'\n        )\n    )\nfig.add_trace(\n        go.Scatter(\n            x=d['time_s'],\n            y=d['AccML'], \n            mode='lines',\n            line={'color': 'Coral'},\n            name = 'AccML'\n        )\n    )\nfig.add_trace(\n        go.Scatter(\n            x=d['time_s'],\n            y=d['AccAP'], \n            mode='lines',\n            line={'color': 'BlueViolet'},\n            name = 'AccAP'\n        )\n    )\n\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2023-05-05T21:10:53.713038Z","iopub.execute_input":"2023-05-05T21:10:53.713337Z","iopub.status.idle":"2023-05-05T21:10:53.808781Z","shell.execute_reply.started":"2023-05-05T21:10:53.713311Z","shell.execute_reply":"2023-05-05T21:10:53.807190Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# load single csv\nd = ScaleTrain\n\n# restrict columns\ndwhole = d[d.columns[d.columns.isin(['AccV', 'AccML', 'AccAP', 'AccMag', 'Action', 'time_s'])]]\nd = d[d.columns[d.columns.isin(['AccV', 'AccML', 'AccAP', 'AccMag', 'Action', 'time_s'])]]\n\n# set color\nd['Color'] = d['Action']\nd['Color'] = np.where(d['Color'] == 'StartHesitation', 'PaleGreen', d['Color'])\nd['Color'] = np.where(d['Color'] == 'Turn', 'PaleTurquoise', d['Color'])\nd['Color'] = np.where(d['Color'] == 'Walking', 'Pink', d['Color'])\nd['Color'] = np.where(d['Color'] == 'None', 'Yellow', d['Color'])\n\n# set group of row in dataframe every time action changes\nd['group'] = d['Action'].ne(d['Action'].shift()).cumsum()\nd = d.groupby('group')\n\n# split df by group\ndsplit = []\ncolors = []\nacts = []\nfor name, data in d:\n    dsplit.append(data)\n    \n    color = data['Color'].unique()\n    colors.append(color[0])\n    \n    act = data['Action'].unique()\n    acts.append(act[0])\n\n# make new plotly figure\nfig = go.Figure()\n\n\n# add indiv acc vectors\nfig.add_trace(\n        go.Scatter(\n            x=dwhole['time_s'],\n            y=dwhole['AccV'], \n            mode='lines',\n            line={'color': 'DarkGreen'},\n            name = 'AccV'\n        )\n    )\nfig.add_trace(\n        go.Scatter(\n            x=dwhole['time_s'],\n            y=dwhole['AccML'], \n            mode='lines',\n            line={'color': 'Indigo'},\n            name = 'AccML'\n        )\n    )\nfig.add_trace(\n        go.Scatter(\n            x=dwhole['time_s'],\n            y=dwhole['AccAP'], \n            mode='lines',\n            line={'color': 'Crimson'},\n            name = 'AccAP'\n        )\n    )\n# plot every action segment\nfor n, dseg in enumerate(dsplit):\n    fig.add_trace(\n            go.Scatter(\n                x=dseg['time_s'],\n                y=dseg['AccMag'] - 1, \n                mode='lines',\n                line={'color': colors[n]},\n                name = acts[n]\n            )\n        )\n    \nnames = set()\nfig.for_each_trace(\n    lambda trace:\n        trace.update(showlegend=False)\n        if (trace.name in names) else names.add(trace.name))\n\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2023-05-05T21:10:53.810264Z","iopub.execute_input":"2023-05-05T21:10:53.810568Z","iopub.status.idle":"2023-05-05T21:10:54.007460Z","shell.execute_reply.started":"2023-05-05T21:10:53.810541Z","shell.execute_reply":"2023-05-05T21:10:54.005842Z"},"trusted":true},"execution_count":null,"outputs":[]}]}