项目简介
本项目名为sleepology
,是使用Python开发的工具包,专注于管理、处理及采样巨大的睡眠多导图(PSG)数据集。多导睡眠图数据记录时长通常为一整晚,且具有多个电极导联,对计算机内存是极大考验。sleepology
提供了用于机器学习、实时采样的功能,未来还会加入有关闭环刺激的功能。目前项目处于持续开发阶段,仍不稳定,稳定版将在0.3
版本后提供。
项目的主要特性和功能
- 数据管理:
sleepology.dataset
包优化批量PSG数据的导入、预处理、持久化过程。Dataset
类支持多数据源、多标签数据管理,可标记数据帧标签,利用条件管理整段数据,便于数据集管理与共享。 - 数据导入:
sleepology.source
模块统一数据输入接口,能处理BrainVision (vhdr)、European data format (edf)等多种脑电数据格式,还可导入日本光电机型的标签数据。 - 特征、标签与条件管理:明确特征、标签与条件概念及关系,提供设定、获取、删除、选择等操作函数,方便数据处理分析。
- 预处理:支持脑电信号滤波、重采样、时频变换等预处理操作,可设定预处理管线依次处理所有数据,并记录错误日志。
- 数据探索:
sleepology.Dataset
提供统计条件、统计标签和可视化功能,助于把握数据特征。 - 采样方案:
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】