{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":41880,"databundleVersionId":5677426,"sourceType":"competition"}],"dockerImageVersionId":30626,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv\nfrom numpy.fft import fft","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-01-04T18:08:23.972454Z","iopub.execute_input":"2024-01-04T18:08:23.972910Z","iopub.status.idle":"2024-01-04T18:08:23.980156Z","shell.execute_reply.started":"2024-01-04T18:08:23.972878Z","shell.execute_reply":"2024-01-04T18:08:23.977988Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Note: valid is a separate column where annotators determine whether a freezing of gait (fog) event is actually one or not. ","metadata":{}},{"cell_type":"markdown","source":"IN this notebook I am ignoring valid as it may not be very reliable. \nThe initial scope is frequency detection, hopefully we will find frequencies which are most associated to types of fog event. \n\nFirst: I am using defog, all subfiles.","metadata":{}},{"cell_type":"code","source":"#merge all files \n\nimport os\nDATA_ROOT_DEFOG = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/train/defog/'\ndefog = pd.DataFrame()\nfor root, dirs, files in os.walk(DATA_ROOT_DEFOG):\n    for name in files:       \n        f = os.path.join(root, name)\n        df_list= pd.read_csv(f)\n        words = name.split('.')[0]\n        df_list['file']= name.split('.')[0]\n        defog = pd.concat([defog, df_list], axis=0)\n        \nkeys = np.arange(len(defog))\ndefog = defog.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=True)\ndefog","metadata":{"execution":{"iopub.status.busy":"2024-01-04T18:02:06.417090Z","iopub.execute_input":"2024-01-04T18:02:06.417617Z","iopub.status.idle":"2024-01-04T18:02:48.842370Z","shell.execute_reply.started":"2024-01-04T18:02:06.417578Z","shell.execute_reply":"2024-01-04T18:02:48.841299Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Here I try to group defog values by label ","metadata":{}},{"cell_type":"code","source":"defog_sh = defog.loc[defog['StartHesitation']==1]\n#now select all rows (we know they equal 1 in SH), but only acc columns \ndefog_sh = defog_sh.loc[:, ['AccV', 'AccML', 'AccAP']]\ndefog_wlk = defog.loc[defog['Walking']==1]\ndefog_wlk = defog_wlk.loc[:, ['AccV', 'AccML', 'AccAP']]\ndefog_trn = defog.loc[defog['Turn']==1]\ndefog_trn = defog_trn.loc[:, ['AccV', 'AccML', 'AccAP']]","metadata":{"execution":{"iopub.status.busy":"2024-01-04T18:12:24.066213Z","iopub.execute_input":"2024-01-04T18:12:24.066652Z","iopub.status.idle":"2024-01-04T18:12:24.156410Z","shell.execute_reply.started":"2024-01-04T18:12:24.066617Z","shell.execute_reply":"2024-01-04T18:12:24.155212Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Now I am trying to extract the most prevelant frequencies for each event","metadata":{}},{"cell_type":"code","source":"from scipy.fft import fft\nfrom scipy.stats import mode\nimport numpy as np\n\n#finding mode, mean and std \ndef extract_frequencies(data): \n    extracted_frequencies = fft(data)\n    abs_frequencies = np.abs(extracted_frequencies)\n    return mode(abs_frequencies)[0][0], np.mean(abs_frequencies) , np.std(abs_frequencies)","metadata":{"execution":{"iopub.status.busy":"2024-01-04T18:17:48.711337Z","iopub.execute_input":"2024-01-04T18:17:48.711765Z","iopub.status.idle":"2024-01-04T18:17:48.719391Z","shell.execute_reply.started":"2024-01-04T18:17:48.711729Z","shell.execute_reply":"2024-01-04T18:17:48.717632Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#find mode frequency and std for turn \nextract_frequencies(defog_trn)","metadata":{"execution":{"iopub.status.busy":"2024-01-04T18:17:51.061768Z","iopub.execute_input":"2024-01-04T18:17:51.062237Z","iopub.status.idle":"2024-01-04T18:17:51.292956Z","shell.execute_reply.started":"2024-01-04T18:17:51.062179Z","shell.execute_reply":"2024-01-04T18:17:51.291674Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#find mode frequency for walk \nextract_frequencies(defog_wlk)","metadata":{"execution":{"iopub.status.busy":"2024-01-04T18:17:53.029165Z","iopub.execute_input":"2024-01-04T18:17:53.029665Z","iopub.status.idle":"2024-01-04T18:17:53.074217Z","shell.execute_reply.started":"2024-01-04T18:17:53.029626Z","shell.execute_reply":"2024-01-04T18:17:53.072394Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#find mode frequency for start hesitation \nextract_frequencies(defog_sh)","metadata":{"execution":{"iopub.status.busy":"2024-01-04T18:17:56.978817Z","iopub.execute_input":"2024-01-04T18:17:56.979333Z","iopub.status.idle":"2024-01-04T18:17:56.990168Z","shell.execute_reply.started":"2024-01-04T18:17:56.979302Z","shell.execute_reply":"2024-01-04T18:17:56.989274Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"I dont understand why theyre so similar??\n","metadata":{}},{"cell_type":"markdown","source":"spectrogram : this is for all files so pretty useless","metadata":{}},{"cell_type":"code","source":"import scipy.signal\nimport matplotlib.pyplot as plt\n\naccel_defog = defog[['AccV', 'AccML', 'AccAP']]\n\nfor column in accel_defog.columns:\n    frequencies, times, spectrogram = scipy.signal.spectrogram(accel_defog[column].values)\n    plt.pcolormesh(times, frequencies, 10 * np.log10(spectrogram + 1e-10)) #constant to avoid division by 0 \n    plt.ylabel('Frequency [Hz]')\n    plt.xlabel('Time [sec]')\n    plt.title(f'Spectrogram of {column}')\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-01-04T18:47:14.439040Z","iopub.execute_input":"2024-01-04T18:47:14.439510Z","iopub.status.idle":"2024-01-04T18:47:28.179048Z","shell.execute_reply.started":"2024-01-04T18:47:14.439477Z","shell.execute_reply":"2024-01-04T18:47:28.178061Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Trying for walk only:","metadata":{}},{"cell_type":"code","source":"\naccel_defog_wlk = defog_wlk[['AccV', 'AccML', 'AccAP']]\n\nfor column in accel_defog.columns:\n    frequencies, times, spectrogram = scipy.signal.spectrogram(accel_defog[column].values)\n    plt.pcolormesh(times, frequencies, 10 * np.log10(spectrogram + 1e-10)) #constant to avoid division by 0 \n    plt.ylabel('Frequency [Hz]')\n    plt.xlabel('Time [sec]')\n    plt.title(f'Spectrogram of {column}')\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-01-04T18:48:27.978868Z","iopub.execute_input":"2024-01-04T18:48:27.980363Z","iopub.status.idle":"2024-01-04T18:48:41.561042Z","shell.execute_reply.started":"2024-01-04T18:48:27.980290Z","shell.execute_reply":"2024-01-04T18:48:41.559646Z"},"trusted":true},"execution_count":null,"outputs":[]}]}