{"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"}],"dockerImageVersionId":30635,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-input":true,"_kg_hide-output":true,"execution":{"iopub.status.busy":"2024-01-13T17:36:27.923813Z","iopub.execute_input":"2024-01-13T17:36:27.924615Z","iopub.status.idle":"2024-01-13T17:36:48.508067Z","shell.execute_reply.started":"2024-01-13T17:36:27.924557Z","shell.execute_reply":"2024-01-13T17:36:48.506833Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **Goal of the Competition**\n\nThe goal of this competition is to detect and classify seizures and other types of harmful brain activity. You will develop a model trained on electroencephalography (EEG) signals recorded from critically ill hospital patients.\n\nYour work may help rapidly improve electroencephalography pattern classification accuracy, unlocking transformative benefits for neurocritical care, epilepsy, and drug development. Advancement in this area may allow doctors and brain researchers to detect seizures or other brain damage to provide faster and more accurate treatments.\n\n### I will continue to work and update this notebook. Please upvote it if you find it useful in this interesting challenge!\n\n## **Context**\n\nYour work in automating EEG analysis will help doctors and brain researchers detect seizures and other types of brain activity that can cause brain damage, so that they can give treatments more quickly and accurately. The algorithms developed in this contest may also help researchers who are working to develop drugs to treat and prevent seizures.","metadata":{}},{"cell_type":"markdown","source":"## **Exploratory Data Analysis**\n\n### `train.csv` \nMetadata for the train set. The expert annotators reviewed 50 second long EEG samples plus matched spectrograms covering a 10 minute window centered at the same time and labeled the central 10 seconds. Many of these samples overlapped and have been consolidated. `train.csv` provides the metadata that allows you to extract the original subsets that the raters annotated.\n\n- **eeg_id**: A unique identifier for the entire EEG recording.\n- **eeg_sub_id**: An ID for the specific 50 second long subsample this row's labels apply to.\n- **eeg_label_offset_seconds**: The time between the beginning of the consolidated EEG and this subsample.\n- **spectrogram_id**: A unique identifier for the entire EEG recording.\n- **spectrogram_sub_id**: An ID for the specific 10 minute subsample this row's labels apply to.\n- **spectogram_label_offset_seconds**: The time between the beginning of the consolidated spectrogram and this subsample.\n- **label_id**: An ID for this set of labels.\n- **patient_id**: An ID for the patient who donated the data.\n- **expert_consensus**: The consensus annotator label. Provided for convenience only.\n- **[seizure/lpd/gpd/lrda/grda/other]_vote**: The count of annotator votes for a given brain activity class. The full names of the activity classes are as follows: \n  - *lpd*: lateralized periodic discharges\n  - *gpd*: generalized periodic discharges\n  - *lrd*: lateralized rhythmic delta activity\n  - *grda*: generalized rhythmic delta activity \n  \nThere are 106,800 columns in the train dataset.","metadata":{}},{"cell_type":"code","source":"train = pd.read_csv('../input/hms-harmful-brain-activity-classification/train.csv')\ntrain","metadata":{"_kg_hide-output":true,"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-01-13T17:36:48.509986Z","iopub.execute_input":"2024-01-13T17:36:48.511235Z","iopub.status.idle":"2024-01-13T17:36:48.739294Z","shell.execute_reply.started":"2024-01-13T17:36:48.511196Z","shell.execute_reply":"2024-01-13T17:36:48.737972Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Data Inspection\nprint(\"Data Shape:\", train.shape)\nprint(\"\\nData Types:\\n\", train.dtypes)","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:36:48.740457Z","iopub.execute_input":"2024-01-13T17:36:48.740743Z","iopub.status.idle":"2024-01-13T17:36:48.745902Z","shell.execute_reply.started":"2024-01-13T17:36:48.740716Z","shell.execute_reply":"2024-01-13T17:36:48.745292Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"There are no null values in any of the columns.","metadata":{}},{"cell_type":"code","source":"# Missing Values\nprint(\"\\nMissing Values:\\n\", train.isnull().sum())","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:36:48.747696Z","iopub.execute_input":"2024-01-13T17:36:48.748061Z","iopub.status.idle":"2024-01-13T17:36:48.770090Z","shell.execute_reply.started":"2024-01-13T17:36:48.748039Z","shell.execute_reply":"2024-01-13T17:36:48.768184Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Number of unique patients\nnum_patients = train['patient_id'].nunique()\nprint(f\"Number of unique patients in train dataset: {num_patients}\")\n\n# Number of unique EEG IDs\nnum_eeg_ids = train['eeg_id'].nunique()\nprint(f\"Number of unique EEG IDs in train dataset: {num_eeg_ids}\")","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:36:48.771621Z","iopub.execute_input":"2024-01-13T17:36:48.771992Z","iopub.status.idle":"2024-01-13T17:36:48.787400Z","shell.execute_reply.started":"2024-01-13T17:36:48.771958Z","shell.execute_reply":"2024-01-13T17:36:48.786062Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Unique Values Analysis\nfor column in train.select_dtypes(include=['object']).columns:\n    print(f\"\\nUnique values in {column}:\", train[column].unique())","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:36:48.788596Z","iopub.execute_input":"2024-01-13T17:36:48.789706Z","iopub.status.idle":"2024-01-13T17:36:48.807193Z","shell.execute_reply.started":"2024-01-13T17:36:48.789625Z","shell.execute_reply":"2024-01-13T17:36:48.805382Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Correlation Heatmap\n\nThe figure below is a heatmap of the correlation matrix for the train dataset. Here's how to understand this visualization:\n\n### Color Interpretation\n- The **color scale** on the right-hand side indicates the range of correlation coefficients.\n- **Darker red** colors correspond to stronger positive correlations.\n- **Darker blue** colors denote stronger negative correlations.\n- **Light blue or light red** colors suggest weaker correlations (both positive and negative).\n\n### Correlation Coefficient Values\n- Values are between **-1 and 1**.\n  - **Close to 1**: Indicates a strong positive correlation, meaning one variable increases with the other.\n  - **Close to -1**: Suggests a strong negative correlation, meaning one variable decreases as the other increases.\n  - **Close to 0**: Implies little to no linear relationship between the pair of variables.\n\n### Significance of Correlations\n- The **diagonal** cells are always **1** because they represent the correlation of a variable with itself.\n- High positive correlations between `eeg_sub_id`, `eeg_label_offset_seconds`, `spectrogram_sub_id`, and `spectrogram_label_offset_seconds` imply these variables are related or derived from one another.\n- The `patient_id` shows low correlation values with other variables, indicating that the patient identifiers have a negligible linear relationship with EEG or spectrogram characteristics.\n- The votes for different EEG events (`seizure_vote`, `lpd_vote`, etc.) do not show significant correlations with `eeg_id` or `spectrogram_id`, which suggests that these votes are independent of the EEG or spectrogram identifiers and are more closely related to the actual EEG event occurrences.\n\nThe correlation heatmap is a powerful tool for identifying relationships between variables, which is essential for feature selection in machine learning, understanding data patterns, and directing further analysis.","metadata":{}},{"cell_type":"code","source":"# Correlation Analysis\n# Select only numerical columns for correlation\nnumerical_columns = train.select_dtypes(include=['int64', 'float64']).columns\ncorr_matrix = train[numerical_columns].corr()\n\n# Increase the size of the figure\nplt.figure(figsize=(12, 8)) \n\n# Heatmap for correlation analysis\n# We are using 'coolwarm' colormap here to distinguish positive and negative correlations easily\nsns.heatmap(corr_matrix, annot=True, cmap='coolwarm')\nplt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-01-13T17:36:48.808652Z","iopub.execute_input":"2024-01-13T17:36:48.809066Z","iopub.status.idle":"2024-01-13T17:36:49.674717Z","shell.execute_reply.started":"2024-01-13T17:36:48.809028Z","shell.execute_reply":"2024-01-13T17:36:49.672934Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# List of specific vote columns to analyze\nvote_columns = ['seizure_vote', 'lpd_vote', 'gpd_vote', 'lrda_vote', 'grda_vote', 'other_vote']\n\n# Select only numerical columns for correlation, including the specific vote columns\nnumerical_columns = train.select_dtypes(include=['int64', 'float64']).columns\nselected_columns = [col for col in numerical_columns if col in vote_columns or col not in vote_columns]\ncorr_matrix = train[selected_columns].corr()\n\n# Filter the correlation matrix to only show correlations for vote columns\ncorr_matrix_votes = corr_matrix.loc[vote_columns, :]\n\n# Increase the size of the figure\nplt.figure(figsize=(12, 8))\n\n# Heatmap for correlation analysis\n# We are using 'coolwarm' colormap here to distinguish positive and negative correlations easily\nsns.heatmap(corr_matrix_votes, annot=True, cmap='coolwarm')\nplt.title('Correlation between Vote Columns and Other Numerical Columns')\nplt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-01-13T17:36:49.678004Z","iopub.execute_input":"2024-01-13T17:36:49.678640Z","iopub.status.idle":"2024-01-13T17:36:50.231699Z","shell.execute_reply.started":"2024-01-13T17:36:49.678601Z","shell.execute_reply":"2024-01-13T17:36:50.230800Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Histograms for numerical columns\ntrain.hist(figsize=(15, 10))\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:36:50.232748Z","iopub.execute_input":"2024-01-13T17:36:50.233022Z","iopub.status.idle":"2024-01-13T17:36:52.340203Z","shell.execute_reply.started":"2024-01-13T17:36:50.232995Z","shell.execute_reply":"2024-01-13T17:36:52.338973Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The class distribution is fairly even across the expert consensus labels, with seizures being classified slightly more often than the others.","metadata":{}},{"cell_type":"code","source":"# Class Distribution\ntrain['expert_consensus'].value_counts().plot(kind='bar')\nplt.title('Class Distribution')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:36:52.343313Z","iopub.execute_input":"2024-01-13T17:36:52.343681Z","iopub.status.idle":"2024-01-13T17:36:52.552492Z","shell.execute_reply.started":"2024-01-13T17:36:52.343633Z","shell.execute_reply":"2024-01-13T17:36:52.551134Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **EEG Data**\n\n### `train_eegs` \n\nThe `train_eegs` directory contains EEG data from one or more overlapping samples. To select specific annotated subsets, refer to the metadata provided in `train.csv`. \n\n#### Column Descriptions\n\n- The column names correspond to the individual electrode locations for EEG leads.\n- There is one exception: the `EKG` column, which represents an electrocardiogram lead that records data from the heart.\n\n#### Data Collection Frequency\n\n- All EEG data (for both train and test sets) was collected at a frequency of **200 samples per second**.\n\n**From [Wikipedia](https://en.wikipedia.org/wiki/10–20_system_%28EEG%29)**: \"The 10–20 system or International 10–20 system is an internationally recognized method to describe and apply the location of scalp electrodes in the context of an EEG exam, polysomnograph sleep study, or voluntary lab research. This method was developed to maintain standardized testing methods ensuring that a subject's study outcomes (clinical or research) could be compiled, reproduced, and effectively analyzed and compared using the scientific method. The system is based on the relationship between the location of an electrode and the underlying area of the brain, specifically the cerebral cortex.\"\n\n![the-10-20-system-1-new.png](attachment:86f344c0-3e0d-4c89-8337-58a76793a4b8.png)\n**Figure 1: The electrode layout of the 10-20 system (left) and corresponding brain regions (right)** ([Source](https://info.tmsi.com/blog/the-10-20-system-for-eeg))","metadata":{},"attachments":{"86f344c0-3e0d-4c89-8337-58a76793a4b8.png":{"image/png":"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"}}},{"cell_type":"code","source":"# Load an EEG file\neeg = pd.read_parquet('/kaggle/input/hms-harmful-brain-activity-classification/train_eegs/1484166292.parquet')\neeg","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:36:52.553897Z","iopub.execute_input":"2024-01-13T17:36:52.554196Z","iopub.status.idle":"2024-01-13T17:36:52.762398Z","shell.execute_reply.started":"2024-01-13T17:36:52.554168Z","shell.execute_reply":"2024-01-13T17:36:52.760793Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# List of columns to plot\ncolumns_to_plot = [\n    'Fp1', 'F3', 'C3', 'P3', 'F7', 'T3', 'T5', 'O1', 'Fz', 'Cz', 'Pz', \n    'Fp2', 'F4', 'C4', 'P4', 'F8', 'T4', 'T6', 'O2', 'EKG'\n]\n\n# Determine the number of rows/columns needed for subplots\nnum_plots = len(columns_to_plot)\nnum_columns = 2  # Set to 2 as per the previous code\nnum_rows = num_plots // num_columns + (num_plots % num_columns > 0)\n\n# Create subplots\nfig, axes = plt.subplots(num_rows, num_columns, figsize=(20, num_rows * 4))\n\n# Flatten the axes array for easy iteration\naxes = axes.flatten()\n\n# Plot each column in a subplot\nfor i, col in enumerate(columns_to_plot):\n    axes[i].plot(eeg[col])\n    axes[i].set_title(f'Electrode: {col}', fontsize=14)\n\n# Hide any unused subplots\nfor ax in axes[len(columns_to_plot):]:\n    ax.set_visible(False)\n\n# Set the overall figure title\nfig.suptitle('EEG Data Visualization Based on the International 10-20 System', fontsize=30, y=1.02)\n\n# Adjust layout to prevent overlap\nplt.tight_layout()\n\n# Show the plot\nplt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-01-13T17:36:52.763768Z","iopub.execute_input":"2024-01-13T17:36:52.764717Z","iopub.status.idle":"2024-01-13T17:36:57.780551Z","shell.execute_reply.started":"2024-01-13T17:36:52.764654Z","shell.execute_reply":"2024-01-13T17:36:57.779272Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"As expected, a lot of the electrode location readings are correlated with one another as shown below.","metadata":{}},{"cell_type":"code","source":"# Correlation Analysis\ncorr_matrix = eeg.corr()\n\n# Increase the size of the figure\nplt.figure(figsize=(16, 8)) \n\n# Heatmap for correlation analysis\n# We are using 'coolwarm' colormap here to distinguish positive and negative correlations easily\nsns.heatmap(corr_matrix, annot=True, cmap='coolwarm')\n\nplt.title('Pearson Correlation of the Individual Electrode Readings for EEG leads', fontsize=20)\nplt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-01-13T17:36:57.782387Z","iopub.execute_input":"2024-01-13T17:36:57.782878Z","iopub.status.idle":"2024-01-13T17:36:58.840076Z","shell.execute_reply.started":"2024-01-13T17:36:57.782849Z","shell.execute_reply":"2024-01-13T17:36:58.838630Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **Feature Engineering of EEG Data**\n\n### Time-based Features for EEG Data Analysis\n\nThe function `calculate_time_domain_features` computes several time-domain features for each channel in EEG (Electroencephalography) data. These features are crucial for understanding the characteristics of EEG signals. Below is a brief description of each feature:\n\n#### Mean (`mean`)\n- Represents the **average value** of the EEG signal for each channel.\n- Provides an idea of the **central tendency** of the signal amplitude.\n\n#### Standard Deviation (`std`)\n- Measures the **variation or dispersion** of the EEG signal from its mean.\n- A high standard deviation indicates that the signal varies widely from the mean, and vice versa.\n\n#### Maximum (`max`)\n- The **highest value** in the EEG signal for each channel.\n- Useful for identifying spikes or peaks, which are common in seizure activity.\n\n#### Minimum (`min`)\n- The **lowest value** in the EEG signal for each channel.\n- Helps in understanding the range of the signal.\n\n#### Skewness (`skewness`)\n- Measures the **asymmetry** of the EEG signal distribution.\n- A zero value indicates a symmetrical distribution, while a non-zero value suggests asymmetry, indicating potential abnormal brain activity.\n\n#### Kurtosis (`kurtosis`)\n- Quantifies the **tails of the distribution** of the EEG signal.\n- A high kurtosis value indicates heavy tails, suggesting a significant number of extreme deviation values, common in erratic signals such as those seen in seizure activities.\n\nThese features collectively provide a comprehensive profile of each EEG channel's time-domain characteristics, instrumental in automated EEG analysis for detecting abnormalities in brain activities.","metadata":{}},{"cell_type":"code","source":"from scipy.stats import skew, kurtosis\n\ndef calculate_time_domain_features(eeg_data):\n    \"\"\"\n    Calculate time domain features for each channel in the EEG data.\n\n    Parameters:\n    eeg_data (pandas.DataFrame): A DataFrame with each column representing an EEG channel.\n\n    Returns:\n    pandas.DataFrame: A DataFrame with time domain features for each channel.\n    \"\"\"\n    features_dict = {}\n\n    # Calculate features for each channel\n    for column in eeg_data.columns:\n        features_dict[f'{column}_mean'] = [eeg_data[column].mean()]\n        features_dict[f'{column}_std'] = [eeg_data[column].std()]\n        features_dict[f'{column}_max'] = [eeg_data[column].max()]\n        features_dict[f'{column}_min'] = [eeg_data[column].min()]\n        features_dict[f'{column}_skewness'] = [skew(eeg_data[column])]\n        features_dict[f'{column}_kurtosis'] = [kurtosis(eeg_data[column])]\n\n    # Create a DataFrame from the dictionary\n    features_df = pd.DataFrame(features_dict)\n\n    return features_df","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:39:03.821260Z","iopub.execute_input":"2024-01-13T17:39:03.821583Z","iopub.status.idle":"2024-01-13T17:39:03.828946Z","shell.execute_reply.started":"2024-01-13T17:39:03.821555Z","shell.execute_reply":"2024-01-13T17:39:03.827653Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"time_domain_features = calculate_time_domain_features(eeg)\ntime_domain_features","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:39:05.483575Z","iopub.execute_input":"2024-01-13T17:39:05.484020Z","iopub.status.idle":"2024-01-13T17:39:05.548967Z","shell.execute_reply.started":"2024-01-13T17:39:05.483983Z","shell.execute_reply":"2024-01-13T17:39:05.547844Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Visualization function to create subplots for each feature type\ndef visualize_features_subplots(features_df):\n    # Flatten the DataFrame for easier plotting\n    flat_data = features_df.T.reset_index()\n    flat_data.columns = ['Feature', 'Value']\n\n    # Split the features into categories\n    feature_types = ['mean', 'std', 'max', 'min', 'skewness', 'kurtosis']\n    fig, axes = plt.subplots(nrows=len(feature_types), ncols=1, figsize=(10, 20))\n\n    for i, feature_type in enumerate(feature_types):\n        ax = axes[i]\n        filtered_data = flat_data[flat_data['Feature'].str.contains(feature_type)]\n        ax.barh(filtered_data['Feature'], filtered_data['Value'])\n        ax.set_title(f'{feature_type.capitalize()} of EEG Channels')\n        ax.set_xlabel('Value')\n        ax.set_ylabel('Channel')\n\n    plt.tight_layout()\n    plt.show()\n\n# Call the function with the time_domain_features DataFrame\nvisualize_features_subplots(time_domain_features)","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:48:56.498903Z","iopub.execute_input":"2024-01-13T17:48:56.499368Z","iopub.status.idle":"2024-01-13T17:48:58.411653Z","shell.execute_reply.started":"2024-01-13T17:48:56.499331Z","shell.execute_reply":"2024-01-13T17:48:58.409963Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Peak Analysis in EEG\n\n- **Purpose**: Peak analysis in EEG aims to identify and quantify prominent features, often referred to as 'peaks' or 'spikes'.\n- **Seizure Detection**: Peaks or spikes in EEG are key indicators of abnormal brain activity, like seizures. Seizures typically manifest as sharp spikes in the EEG signal.\n- **Implementation**: The `find_peaks` function from `scipy.signal` detects these peaks. Parameters such as `height` and `distance` can be adjusted to control peak detection sensitivity.\n- **Outcome**: This function returns the indices of peaks, which can then be counted or further analyzed.\n\n### Hjorth Parameters in EEG\n\n- **Overview**: Hjorth parameters are statistical measures used to characterize EEG signals, including Activity, Mobility, and Complexity:\n  - **Activity**: Represents signal power, calculated as the variance of the signal. Indicates the overall level of brain activity in EEG.\n  - **Mobility**: Measures the mean frequency or rate of change of the signal. Higher mobility suggests more rapid signal changes.\n  - **Complexity**: Compares the signal's similarity to a pure sine wave. Higher values indicate a more complex signal.\n- **Implementation**: The `hjorth_parameters` function calculates these parameters using raw EEG data.\n- **Usage**: These parameters help distinguish different brain activities and are useful in identifying changes in brain states, such as during sleep stages or in response to stimuli.\n\n### Application in `calculate_features` Function\n\n- The function applies peak analysis and Hjorth parameter calculations to each EEG channel in a DataFrame.\n- It returns a DataFrame with columns representing peak count, activity, mobility, and complexity for each EEG channel.\n- Useful for generating a comprehensive feature set from raw EEG data for analysis, such as in seizure detection or neurophysiological studies.","metadata":{}},{"cell_type":"code","source":"import scipy.signal\n\ndef find_peaks(data, height=None, distance=None):\n    \"\"\"Identify peaks in the EEG signal.\"\"\"\n    peaks, _ = scipy.signal.find_peaks(data, height=height, distance=distance)\n    return peaks\n\ndef hjorth_parameters(data):\n    \"\"\"Calculate Hjorth parameters: Activity, Mobility, and Complexity.\"\"\"\n    activity = np.var(data)\n    mobility = np.sqrt(np.var(np.diff(data)) / activity)\n    complexity = np.sqrt(np.var(np.diff(np.diff(data))) / np.var(np.diff(data))) / mobility\n    return activity, mobility, complexity\n\ndef calculate_features(eeg_df):\n    \"\"\"\n    Calculate peaks and Hjorth parameters for each EEG channel.\n\n    Parameters:\n    eeg_df (pandas.DataFrame): DataFrame with each column representing an EEG channel.\n\n    Returns:\n    pandas.DataFrame: A single-row DataFrame containing peaks and Hjorth parameters for each channel.\n    \"\"\"\n    features = {}\n\n    for column in eeg_df.columns:\n        data = eeg_df[column]\n        \n        # Peak analysis\n        peaks = find_peaks(data)\n        features[f'{column}_peak_count'] = len(peaks)\n\n        # Hjorth parameters\n        activity, mobility, complexity = hjorth_parameters(data)\n        features[f'{column}_activity'] = activity\n        features[f'{column}_mobility'] = mobility\n        features[f'{column}_complexity'] = complexity\n\n    return pd.DataFrame([features])","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:56:41.762536Z","iopub.execute_input":"2024-01-13T17:56:41.763485Z","iopub.status.idle":"2024-01-13T17:56:41.771945Z","shell.execute_reply.started":"2024-01-13T17:56:41.763450Z","shell.execute_reply":"2024-01-13T17:56:41.770792Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"eeg_features = calculate_features(eeg)\neeg_features","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:56:43.593268Z","iopub.execute_input":"2024-01-13T17:56:43.593647Z","iopub.status.idle":"2024-01-13T17:56:43.622855Z","shell.execute_reply.started":"2024-01-13T17:56:43.593616Z","shell.execute_reply":"2024-01-13T17:56:43.622179Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The figure below shows the values for different EEG features: **peak counts, activities, mobilities, and complexities** for each EEG channel. Each subplot represents a different feature category, and within each subplot, each bar corresponds to a specific EEG channel.\n\n- The first subplot shows the peak counts for each EEG channel.\n- The second subplot illustrates the activity levels.\n- The third subplot depicts the mobility values.\n- The fourth subplot displays the complexity measurements.\n\nThis visualization provides an overview of these key EEG features across different channels, which can be useful for understanding the characteristics of the EEG signals in different regions of the brain","metadata":{}},{"cell_type":"code","source":"# Plotting\nfig, axs = plt.subplots(4, figsize=(10, 15))\n\n# Peak Counts\naxs[0].bar(eeg_features.columns[eeg_features.columns.str.contains('peak_count')], eeg_features.iloc[0, eeg_features.columns.str.contains('peak_count')])\naxs[0].set_title('Peak Counts')\naxs[0].set_ylabel('Count')\naxs[0].tick_params(axis='x', rotation=45)\n\n# Activities\naxs[1].bar(eeg_features.columns[eeg_features.columns.str.contains('activity')], eeg_features.iloc[0, eeg_features.columns.str.contains('activity')])\naxs[1].set_title('Activities')\naxs[1].set_ylabel('Activity Value')\naxs[1].tick_params(axis='x', rotation=45)\n\n# Mobilities\naxs[2].bar(eeg_features.columns[eeg_features.columns.str.contains('mobility')], eeg_features.iloc[0, eeg_features.columns.str.contains('mobility')])\naxs[2].set_title('Mobilities')\naxs[2].set_ylabel('Mobility Value')\naxs[2].tick_params(axis='x', rotation=45)\n\n# Complexities\naxs[3].bar(eeg_features.columns[eeg_features.columns.str.contains('complexity')], eeg_features.iloc[0, eeg_features.columns.str.contains('complexity')])\naxs[3].set_title('Complexities')\naxs[3].set_ylabel('Complexity Value')\naxs[3].tick_params(axis='x', rotation=45)\n\nplt.tight_layout()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-01-13T18:00:58.410788Z","iopub.execute_input":"2024-01-13T18:00:58.411138Z","iopub.status.idle":"2024-01-13T18:00:59.556564Z","shell.execute_reply.started":"2024-01-13T18:00:58.411110Z","shell.execute_reply":"2024-01-13T18:00:59.555444Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **Spectrogram Data**\n\n### `train_spectrograms` \n\nThe `train_spectrograms` directory contains spectrograms of the assembled EEG data. To investigate specific annotated subsets, utilize the metadata available in `train.csv`.\n\n#### Column Descriptions\n\n- The column names represent the frequency in hertz and the recording regions of the EEG electrodes.\n- The recording regions are abbreviated as follows:\n  - `LL`: Left Lateral\n  - `RL`: Right Lateral\n  - `LP`: Left Parasagittal\n  - `RP`: Right Parasagittal\n","metadata":{}},{"cell_type":"code","source":"# Load a Spectrogram file\nspectrogram = pd.read_parquet('/kaggle/input/hms-harmful-brain-activity-classification/train_spectrograms/862174834.parquet')\nspectrogram","metadata":{"execution":{"iopub.status.busy":"2024-01-13T17:36:58.852266Z","iopub.execute_input":"2024-01-13T17:36:58.852584Z","iopub.status.idle":"2024-01-13T17:36:58.936873Z","shell.execute_reply.started":"2024-01-13T17:36:58.852555Z","shell.execute_reply":"2024-01-13T17:36:58.935732Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def plot_spec_at_frequencies(df_spec, frequencies, handle_missing='ignore'):\n    \"\"\"\n    Plots the data at multiple frequencies for different features.\n\n    Parameters:\n    df_spec (pandas.DataFrame): The DataFrame containing the spectral data.\n    frequencies (list): A list of frequencies to plot (e.g., ['0.59', '1.17', etc.]).\n    handle_missing (str): How to handle missing data ('ignore', 'drop').\n    \"\"\"\n    features = ['LL', 'RL', 'RP', 'LP']\n\n    # Create subplots - one row for each frequency\n    fig, axes = plt.subplots(len(frequencies), 1, figsize=(12, 4 * len(frequencies)), squeeze=False)\n\n    # Iterate over frequencies to create subplots\n    for i, freq in enumerate(frequencies):\n        ax = axes[i][0]  # Current axes\n\n        # Feature columns for the current frequency\n        feature_columns = [f'{feature}_{freq}' for feature in features]\n\n        # Check if all required columns are present in the DataFrame\n        missing_columns = [col for col in feature_columns if col not in df_spec.columns]\n        if missing_columns:\n            raise ValueError(f'Missing columns for frequency {freq}: {missing_columns}')\n\n        # Handling missing data\n        if handle_missing == 'drop':\n            df_spec_freq = df_spec.dropna(subset=feature_columns)\n        else:\n            df_spec_freq = df_spec\n\n        # Plot each feature\n        for j, feature in enumerate(feature_columns):\n            ax.scatter(df_spec_freq['time'], df_spec_freq[feature], label=features[j])\n\n        # Add legend, title, and grid\n        ax.legend(loc='upper right')\n        ax.set_title(f'Frequency = {freq}', fontsize=14)\n        ax.set_xlabel('Time')\n        ax.set_ylabel('Amplitude')\n        ax.grid()\n\n    # Adjust layout\n    plt.tight_layout()\n    plt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-01-13T17:36:58.939280Z","iopub.execute_input":"2024-01-13T17:36:58.940352Z","iopub.status.idle":"2024-01-13T17:36:58.950251Z","shell.execute_reply.started":"2024-01-13T17:36:58.940307Z","shell.execute_reply":"2024-01-13T17:36:58.948767Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Example usage\nplot_spec_at_frequencies(spectrogram, ['0.59', '18.95'], handle_missing='drop')  ","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-01-13T17:36:58.951876Z","iopub.execute_input":"2024-01-13T17:36:58.952267Z","iopub.status.idle":"2024-01-13T17:36:59.611894Z","shell.execute_reply.started":"2024-01-13T17:36:58.952236Z","shell.execute_reply":"2024-01-13T17:36:59.610635Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Function `plot_spectrogram` below adapted from: https://www.kaggle.com/code/clehmann10/plot-spectrograms","metadata":{}},{"cell_type":"code","source":"def plot_spectrogram(spectrogram_path, colormap='viridis', aspect='auto', label_interval=None):\n    try:\n        sample_spect = pd.read_parquet(spectrogram_path)\n    except Exception as e:\n        print(f\"Error loading file: {e}\")\n        return\n\n    split_spect = {\n        \"LL\": sample_spect.filter(regex='^LL', axis=1),\n        \"RL\": sample_spect.filter(regex='^RL', axis=1),\n        \"RP\": sample_spect.filter(regex='^RP', axis=1),\n        \"LP\": sample_spect.filter(regex='^LP', axis=1),\n    }\n    \n    fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(15, 12))\n    axes = axes.flatten()\n\n    for i, split_name in enumerate(split_spect.keys()):\n        ax = axes[i]\n        spect_data = np.log(split_spect[split_name] + 1e-9).T  # Adding a small constant to avoid log(0)\n        img = ax.imshow(spect_data, cmap=colormap, aspect=aspect, origin='lower')\n        \n        cbar = fig.colorbar(img, ax=ax)\n        cbar.set_label('Log(Value)', rotation=270, labelpad=15)\n        ax.set_title(split_name)\n        ax.set_ylabel(\"Frequency (Hz)\")\n        ax.set_xlabel(\"Time\")\n\n        frequencies = [column_name[3:] for column_name in split_spect[split_name].columns]\n        if label_interval is None:\n            label_interval = max(1, len(frequencies) // 15)  # Dynamic label interval\n        ax.set_yticks(np.arange(0, len(frequencies), label_interval))\n        ax.set_yticklabels(frequencies[::label_interval])\n\n    plt.tight_layout()\n    plt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-01-13T17:36:59.613119Z","iopub.execute_input":"2024-01-13T17:36:59.613453Z","iopub.status.idle":"2024-01-13T17:36:59.625340Z","shell.execute_reply.started":"2024-01-13T17:36:59.613423Z","shell.execute_reply":"2024-01-13T17:36:59.623697Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plot_spectrogram(\"/kaggle/input/hms-harmful-brain-activity-classification/train_spectrograms/862174834.parquet\")","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-01-13T17:36:59.626890Z","iopub.execute_input":"2024-01-13T17:36:59.627230Z","iopub.status.idle":"2024-01-13T17:37:01.621847Z","shell.execute_reply.started":"2024-01-13T17:36:59.627197Z","shell.execute_reply":"2024-01-13T17:37:01.620740Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **To Be Continued**\n\nI will continue to update and improve this notebook. I hope it has been useful and provides a great baseline to work with for future analysis! ","metadata":{}}]}