{"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":59093,"databundleVersionId":7469972,"sourceType":"competition"},{"sourceId":7405492,"sourceType":"datasetVersion","datasetId":4306407}],"dockerImageVersionId":30635,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Using Pairwise eeg sequences generated in [Notebook - Eegs Pairing Analysis & Features](https://www.kaggle.com/code/seshurajup/eegs-pairing-analysis-features)\n# Useful for training wavenet","metadata":{}},{"cell_type":"markdown","source":"## Brain activity notebook series\n\n### [EEGS 10–20 system](https://www.kaggle.com/code/seshurajup/eegs-10-20-system)\nBetter understanding eegs 10-20 system\n### [Missing Eeg_ids Train.csv vs train_eegs [Resolved]](https://www.kaggle.com/code/seshurajup/missing-eeg-ids-in-train-csv-vs-train-eegs-parquet)\nExtra training eggs [Resolved] as we can ignore it\n### [EDA train.csv](https://www.kaggle.com/code/seshurajup/eda-train-csv)\nDetailed analysis of the train.csv\n### [Eegs Pairing Analysis & Features](https://www.kaggle.com/code/seshurajup/eegs-pairing-analysis-features)\nPairing features analysis and build features\n### [Eegs Target Analysis - Correct way to merge target](https://www.kaggle.com/code/seshurajup/eegs-target-analysis-correct-way-to-merge-target)\nHow to choice the target votes for training\n### [Eegs Train Split (CV)](https://www.kaggle.com/seshurajup/eegs-train-splits-cv)\ngenerate better train split without patient_id overlap\n### [Eegs Pairing Wav](https://www.kaggle.com/seshurajup/eeg-pairing-wav)\nconverting pairwise eeg sequences into wav format\n\n### Datasets [eegs pairing dataset](https://www.kaggle.com/datasets/seshurajup/eegs-pairing-dataset), [eegs pairing wav dataset](https://www.kaggle.com/datasets/seshurajup/eegs-pairing-wav-dataset)\n\n#### **Upvote my work if it is useful**","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nfrom tqdm import tqdm\nfrom scipy.io import wavfile\nimport matplotlib.pyplot as plt\nfrom IPython.display import Audio, display, HTML","metadata":{"execution":{"iopub.status.busy":"2024-01-15T20:04:12.065688Z","iopub.execute_input":"2024-01-15T20:04:12.066125Z","iopub.status.idle":"2024-01-15T20:04:12.822618Z","shell.execute_reply.started":"2024-01-15T20:04:12.066086Z","shell.execute_reply":"2024-01-15T20:04:12.821490Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def eeg_to_wav(eeg_data, sample_rate, output_file):\n    eeg_data_flattened = eeg_data.flatten()\n    eeg_normalized = np.int16((eeg_data_flattened / np.max(np.abs(eeg_data_flattened))) * 32767)\n    wavfile.write(output_file, sample_rate, eeg_normalized)","metadata":{"execution":{"iopub.status.busy":"2024-01-15T20:04:12.825306Z","iopub.execute_input":"2024-01-15T20:04:12.825783Z","iopub.status.idle":"2024-01-15T20:04:12.832197Z","shell.execute_reply.started":"2024-01-15T20:04:12.825748Z","shell.execute_reply":"2024-01-15T20:04:12.830949Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! mkdir /kaggle/working/pair_wavs","metadata":{"execution":{"iopub.status.busy":"2024-01-15T20:04:12.833890Z","iopub.execute_input":"2024-01-15T20:04:12.834787Z","iopub.status.idle":"2024-01-15T20:04:13.936937Z","shell.execute_reply.started":"2024-01-15T20:04:12.834744Z","shell.execute_reply":"2024-01-15T20:04:13.935386Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.read_csv(\"/kaggle/input/hms-harmful-brain-activity-classification/train.csv\")\nTARGETS = [x for x in df.columns if 'vote' in x]\ntrain = df.groupby('eeg_id')[['spectrogram_id','spectrogram_label_offset_seconds']].agg(\n    {'spectrogram_id':'first','spectrogram_label_offset_seconds':'min'})\ntrain.columns = ['spec_id','min']\n\ntmp = df.groupby('eeg_id')[['spectrogram_id','spectrogram_label_offset_seconds']].agg(\n    {'spectrogram_label_offset_seconds':'max'})\ntrain['max'] = tmp\n\ntmp = df.groupby('eeg_id')[['patient_id']].agg('first')\ntrain['patient_id'] = tmp\n\ntmp = df.groupby('eeg_id')[TARGETS].agg('sum')\nfor t in TARGETS:\n    train[t] = tmp[t].values\n    \ny_data = train[TARGETS].values\ny_data = y_data / y_data.sum(axis=1,keepdims=True)\ntrain[TARGETS] = y_data\n\ntmp = df.groupby('eeg_id')[['expert_consensus']].agg('first')\ntrain['target'] = tmp\n\ntrain = train.reset_index()\nprint('Train non-overlapp eeg_id shape:', train.shape )\ntrain['max_votes'] = train.apply(lambda x: max([x[c] for c in x.keys() if 'vote' in c]), axis=1)\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2024-01-15T20:04:13.939502Z","iopub.execute_input":"2024-01-15T20:04:13.940038Z","iopub.status.idle":"2024-01-15T20:04:15.169112Z","shell.execute_reply.started":"2024-01-15T20:04:13.939958Z","shell.execute_reply":"2024-01-15T20:04:15.168050Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample = np.load(\"/kaggle/input/eegs-pairing-dataset/pair_features/568657.npy\")\nsample.shape","metadata":{"execution":{"iopub.status.busy":"2024-01-15T20:04:15.172195Z","iopub.execute_input":"2024-01-15T20:04:15.173018Z","iopub.status.idle":"2024-01-15T20:04:15.192860Z","shell.execute_reply.started":"2024-01-15T20:04:15.172963Z","shell.execute_reply":"2024-01-15T20:04:15.192070Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"eeg = pd.read_parquet(\"/kaggle/input/hms-harmful-brain-activity-classification/train_eegs/568657.parquet\")\neeg.shape","metadata":{"execution":{"iopub.status.busy":"2024-01-15T20:07:29.811639Z","iopub.execute_input":"2024-01-15T20:07:29.812176Z","iopub.status.idle":"2024-01-15T20:07:29.851046Z","shell.execute_reply.started":"2024-01-15T20:07:29.812041Z","shell.execute_reply":"2024-01-15T20:07:29.849793Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_rate = 44_100  # 44.1 kHz\nsample_wave_path = \"/kaggle/working/pair_wavs/568657.wav\"\neeg_to_wav(sample, sample_rate, sample_wave_path)","metadata":{"execution":{"iopub.status.busy":"2024-01-15T20:11:06.468063Z","iopub.execute_input":"2024-01-15T20:11:06.469047Z","iopub.status.idle":"2024-01-15T20:11:06.481561Z","shell.execute_reply.started":"2024-01-15T20:11:06.469011Z","shell.execute_reply":"2024-01-15T20:11:06.480334Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Audio(sample_wave_path)","metadata":{"execution":{"iopub.status.busy":"2024-01-15T20:11:07.345277Z","iopub.execute_input":"2024-01-15T20:11:07.345707Z","iopub.status.idle":"2024-01-15T20:11:07.360956Z","shell.execute_reply.started":"2024-01-15T20:11:07.345671Z","shell.execute_reply":"2024-01-15T20:11:07.360023Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i, row in tqdm(train.iterrows(), total=len(train)):\n    eeg_to_wav(sample, sample_rate, f\"/kaggle/working/pair_wavs/{row['eeg_id']}.wav\")","metadata":{"execution":{"iopub.status.busy":"2024-01-15T20:11:20.422860Z","iopub.execute_input":"2024-01-15T20:11:20.423261Z","iopub.status.idle":"2024-01-15T20:13:39.032852Z","shell.execute_reply.started":"2024-01-15T20:11:20.423231Z","shell.execute_reply":"2024-01-15T20:13:39.031193Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"selected_wavs = train[train['max_votes']==1].groupby('target').sample(5)\nselected_wavs\n\ngrouped = train[train['max_votes'] == 1].groupby('target')\nfor target, group in grouped:\n    display(HTML(f\"<h1>{target}</h1>\"))\n    for i, row in group.sample(5).iterrows():\n        display(Audio(f\"/kaggle/working/pair_wavs/{row['eeg_id']}.wav\"))","metadata":{"execution":{"iopub.status.busy":"2024-01-15T20:13:39.036981Z","iopub.execute_input":"2024-01-15T20:13:39.037580Z","iopub.status.idle":"2024-01-15T20:13:39.446189Z","shell.execute_reply.started":"2024-01-15T20:13:39.037529Z","shell.execute_reply":"2024-01-15T20:13:39.445294Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}