littlebot
Published on 2025-04-10 / 4 Visits
0

【源码】基于Python的睡眠多导图数据集管理与分析工具包

项目简介

本项目名为sleepology,是使用Python开发的工具包,专注于管理、处理及采样巨大的睡眠多导图(PSG)数据集。多导睡眠图数据记录时长通常为一整晚,且具有多个电极导联,对计算机内存是极大考验。sleepology提供了用于机器学习、实时采样的功能,未来还会加入有关闭环刺激的功能。目前项目处于持续开发阶段,仍不稳定,稳定版将在0.3版本后提供。

项目的主要特性和功能

  1. 数据管理sleepology.dataset包优化批量PSG数据的导入、预处理、持久化过程。Dataset类支持多数据源、多标签数据管理,可标记数据帧标签,利用条件管理整段数据,便于数据集管理与共享。
  2. 数据导入sleepology.source模块统一数据输入接口,能处理BrainVision (vhdr)、European data format (edf)等多种脑电数据格式,还可导入日本光电机型的标签数据。
  3. 特征、标签与条件管理:明确特征、标签与条件概念及关系,提供设定、获取、删除、选择等操作函数,方便数据处理分析。
  4. 预处理:支持脑电信号滤波、重采样、时频变换等预处理操作,可设定预处理管线依次处理所有数据,并记录错误日志。
  5. 数据探索sleepology.Dataset提供统计条件、统计标签和可视化功能,助于把握数据特征。
  6. 采样方案sleepology.sample.Sample类用于采样,支持RNN网络、自编码器等多种机器学习场景,能处理非平衡和不等长数据集。

安装使用步骤

安装

在已安装Python 3.5以上版本并联网的计算机上,使用以下命令安装: shell $ pip install sleepology

使用步骤

了解数据集(Dataset)

python from sleepology.dataset import Dataset dataset = Dataset('example_name', 'example/path', '这里写这个数据集的注释。这是个示例数据集。', mode='disk') dataset = Dataset.load('example/path/example_name.dataset', mode = 'disk') dataset.save()

从源(Source)导入数据

python from sleepology.source import RawDataFile raw = RawDataFile('example_path/example.edf', 'edf', 30, 100) from sleepology.source import NihonkohdenLabelSource label = NihonkohdenLabelSource('example_path/example.txt', 'aasm') dataset.add_data(raw, label)

特征、标签与条件操作

  • 条件(Condition) python dataset.set_condition('002.edf', 'diagnose', 'A') # 设定条件 dataset.get_condition('002.edf', 'diagnose') # 获取条件 dataset.has_condition('002.edf', 'diagnose') # 查询条件 dataset.del_condition('002.edf', 'diagnose') # 删除条件 dataset.select_data('diagnose', 'A') # 根据条件选择数据 dataset.exclude_data('diagnose', 'A') # 根据条件删除数据 dataset.select_epochs('diagnose', 'A') # 根据条件选择帧
  • 标签(Label) python dataset.get_label('002.edf', 1, 'LABEL') # 获取标签 dataset.del_label('LABEL') # 删除标签 dataset.select_epochs('LABEL', '1') # 根据标签选择帧 dataset.exclude_epochs('LABEL', '1') # 根据标签删除帧

预处理

python def preprocess(): def pipeline(data): try: data.load_data() data.filter(0.3, 35, picks = ['C3-A2', 'C4-A1', 'O1-A2', 'O2-A1', 'EOG-L', 'EOG-R']) data.filter(10, None, picks = ['Chin', 'LEG', 'Snore']) data.filter(0.3, None, picks = ['ECG']) data.resample(20) data = data.get_data( picks = ['C3-A2', 'C4-A1', 'O1-A2', 'O2-A1', 'EOG-L', 'EOG-R', 'Chin', 'ECG', 'LEG', 'Snore'] ) ret = normalize(data, axis = -1) finally: del data return ret return pipeline from sleepology.procedure import Procedure procedure = Procedure(preprocess) dataset.preprocess(procedure) dataset.save()

数据探索

python stat = dataset.stat_condition('diagnose') stat = dataset.stat_label('LABEL') dataset.stat_plot_bar(stat) dataset.stat_plot_pie(stat)

采样方案(Sample)

以使用RNN网络为例: python from sleepology.dataset import Dataset from sleepology.sample import Sample dataset = Dataset.load('example.dataset') sample = Sample( unit='epoch', tmin=-5, tmax=4, n_splits=10, class_balance=True, test_size=0.1 ) sample.set_x('FEATURE') sample.set_y('LABEL') sample.from_dataset(dataset) sample.save('score.sample') import tensorflow as tf for i in range(10): sample.next_fold() train = tf.data.Dataset.from_generator(sample.train_set, (tf.float32, tf.int32)) test = tf.data.Dataset.from_generator(sample.test_set, (tf.float32, tf.int32)) history = model.fit(train, validation_data = test)

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】