引言
脑电图 (Electroencephalography, EEG) 是一种重要的神经生理学技术,通过记录头皮上的电活动来研究大脑功能。大规模、高质量的 EEG 数据集对于推动神经科学研究、开发临床诊断工具以及训练人工智能模型至关重要。在众多的公开 EEG 数据集中,Temple University Hospital (TUH) EEG 数据集以其庞大的规模和丰富的临床信息而备受研究者的青睐。本文将带您全面了解 TUH EEG 数据集,从其核心作用到采集的特征,并提供一些使用 Python 进行数据加载和分析的入门代码。
数据集下载地址:machalKing/neuro-data-learn-main
TUH EEG:一个强大的临床脑电数据平台
1. 数据集概览
TUH EEG 数据集是由 Temple University Hospital 收集并公开的临床 EEG 记录集合。该数据集包含了来自大量患者的 EEG 数据,覆盖了各种临床适应症,例如癫痫、睡眠障碍、脑肿瘤等。其主要特点包括:
-
庞大的数据量: 包含数万个 EEG 记录,总时长超过数千小时。
-
丰富的临床信息: 每个 EEG 记录通常伴随着患者的基本信息、临床诊断、药物史等元数据。
-
多样化的数据: 涵盖了不同年龄段、不同病症的患者数据,以及不同的 EEG 采集方案。
-
公开可访问: 数据集可以公开下载,为研究者提供了便利。
2. 数据集的核心作用与采集的特征
TUH EEG 数据集并非专门用于采集某一特定方面的脑电特征,而是作为为神经科学研究和机器学习模型开发提供一个大规模、真实的脑电图数据资源库。
它的核心作用体现在:
-
推动神经科学研究: 研究人员可以利用这个数据集探索大脑活动的模式,研究各种神经系统疾病(如癫痫、脑卒中、睡眠障碍等)的病理生理机制。通过分析大量真实患者的 EEG 数据,可以发现疾病相关的生物标记,为临床诊断提供新思路。
-
开发和验证机器学习模型: 数据集丰富的标注信息(如癫痫发作、正常与异常状态、患者信息等)是训练和测试人工智能模型的理想素材。研究人员可以利用它来开发 自动癫痫发作检测算法、疾病诊断辅助系统 或 脑状态分类器 等应用。
-
教育与培训: 作为一个公开且结构化的数据集,它为学生和研究人员提供了学习和实践 EEG 信号处理、特征提取以及机器学习算法的绝佳平台。
关于采集的脑电特征:
TUH EEG 数据集采集的是电生理信号,即大脑神经元活动产生的电位变化。这些原始信号反映的是大脑在不同状态下(例如静息、任务执行、睡眠、癫痫发作等)的宏观电活动。
虽然数据集本身记录的是原始的、时域的电位信号,但研究人员和开发者可以从这些原始数据中提取出各种各样的特征,这些特征可以大致分为:
-
时域特征: 信号的幅度、时延以及波形形态,如癫痫发作时常见的尖波和棘波。
-
频域特征: 通过傅里叶变换等方法提取的功率谱密度,衡量不同频率段(如 δ, θ, α, β, γ 波段)的能量分布,这可以反映大脑的不同状态。
-
时频域特征: 利用小波变换等技术同时分析信号在时间和频率上的变化。
-
复杂性和非线性特征: 衡量信号复杂性的样本熵、模糊熵等,可以反映大脑活动的复杂性。
-
连接性特征: 衡量不同脑区之间电活动同步或相关的相干性,用于构建脑功能网络。
总而言之,TUH EEG 提供的是原始的、多通道的、时域的脑电信号数据,其真正价值在于它为研究者提供了一个基础平台,可以从中提取出上述各种复杂的、有意义的特征,用于深入的科学研究和应用开发。
使用 Python 进行数据分析入门
接下来,我们将演示如何使用 Python 和一些常用的神经科学数据处理库(如 mne
和 numpy
)来加载和初步分析 TUH EEG 数据。
1. 安装必要的库
首先,确保您已经安装了以下 Python 库:
-
mne
: 用于神经电生理数据的处理和分析。 -
numpy
: 用于数值计算。 -
matplotlib
: 用于数据可视化。
您可以使用 pip 进行安装:
Bash
pip install mne numpy matplotlib
2. 加载 EDF 文件
假设您已经下载了一个 TUH EEG 的 EDF 文件,我们可以使用 mne.io.read_raw_edf()
函数来加载它:
Python
import mne
import numpy as np
import matplotlib.pyplot as plt
# 替换为您的 EDF 文件路径
edf_file_path = 'path/to/your/sample.edf'
try:
raw = mne.io.read_raw_edf(edf_file_path, preload=False)
print("EDF 文件加载成功!")
except FileNotFoundError:
print(f"错误:文件 {edf_file_path} 未找到!")
exit()
# 打印原始数据的信息
print(raw)
print(raw.info)
3. 查看通道名称和采样率
我们可以通过 raw.ch_names
和 raw.info['sfreq']
来获取通道名称和采样率:
Python
# 获取通道名称
channel_names = raw.ch_names
print("通道名称:", channel_names)
# 获取采样率
sampling_frequency = raw.info['sfreq']
print("采样率:", sampling_frequency, "Hz")
4. 加载数据并可视化
要进行数据分析,我们需要将数据加载到内存中。然后,我们可以选择一部分数据进行可视化:
Python
# 加载数据
raw.load_data()
print("数据已加载到内存!")
# 选择一段数据进行可视化 (例如前 10 秒)
duration = 10 # 秒
start_time = 0 # 秒
end_time = start_time + duration
sfreq = raw.info['sfreq']
start_sample = int(start_time * sfreq)
end_sample = int(end_time * sfreq)
# 获取所有通道的数据
data, times = raw[:, start_sample:end_sample]
# 绘制前几个通道的信号
n_channels_to_plot = 5
plt.figure(figsize=(12, 6))
for i in range(n_channels_to_plot):
plt.plot(times, data[:n_channels_to_plot][i], label=channel_names[:n_channels_to_plot][i])
plt.xlabel("时间 (s)")
plt.ylabel("幅度 (µV)")
plt.title(f"前 {duration} 秒的 EEG 信号 (前 {n_channels_to_plot} 个通道)")
plt.legend()
plt.grid(True)
plt.show()
5. 提取事件信息(如果存在)
一些 TUH EEG 数据集可能包含事件标记,例如癫痫发作的起始和结束时间。mne
提供了处理事件的功能:
Python
# 尝试读取事件
events = mne.find_events(raw, stim_channel='auto')
if len(events) > 0:
print("\n找到事件:")
print(events[:10]) # 打印前 10 个事件
# 绘制事件发生的时间点
plt.figure(figsize=(10, 4))
plt.plot(events[:, 0] / sfreq, np.ones(len(events)), 'o-')
plt.xlabel("时间 (s)")
plt.title("检测到的事件")
plt.yticks([])
plt.grid(True)
plt.show()
else:
print("\n未找到事件信息。")
结论与展望
本文从宏观到微观,全面介绍了 TUH EEG 数据集。它不仅是一个庞大的数据宝库,更是一个推动神经科学研究和人工智能发展的强大平台。希望本文能够帮助您入门 TUH EEG 数据集的探索之旅。在后续的学习和研究中,您可以深入了解 mne
库的更多功能,并结合其他机器学习和深度学习技术,挖掘 TUH EEG 数据集的巨大潜力。
相关资源
-
TUH EEG 官方网站: Temple University EEG Corpus
-
MNE-Python 文档: MNE — MNE 1.10.1 documentation
如果您有任何关于 TUH EEG 数据集的疑问或心得,欢迎在评论区交流!