AutoSleepScorer icon indicating copy to clipboard operation
AutoSleepScorer copied to clipboard

Float edf

Open gsamyak30 opened this issue 2 years ago • 1 comments

Hi Simon

I am just getting a error

TypeError: 'float' object does not support item assignment

when I am taking the dataset of ST7022JM-Hypnogram.edf or any other hypnogram.edf from physionet in sleep telemetry while converting into csv file format

How do I resolve it !!

gsamyak30 avatar Mar 14 '22 14:03 gsamyak30

EDF is an odd format for storing hypnograms, no idea why physionet decided to do that. you need to convert the hypnogram from EDF to CSV.

try this function taken from here: https://github.com/skjerns/AutoSleepScorerDev/blob/master/edfx_database.py

import csv
from pyedflib import highlevel

def convert_hypnograms(hypnogram_edf_file):
    """
    This function is quite a hack to read the edf hypnogram as a byte array. 
    I found no working reader for the hypnogram edfs.
    """
    
    hypnogram = []
    annot = highlevel.read_edf_header(hypnogram_edf_file)['annotations']
    for bstart, blength, bstage in annot:
        length = int(blength.decode())
        stage = bstage.decode()
        if 'movement' in stage.lower(): stage='M'
        stage = [str(stage[-1])]*(length//30)
        hypnogram.extend(stage)
        
    csv_file = hypnogram_edf_file.replace('-Hypnogram','')[:-5] + '0-PSG.csv'
    with open(csv_file, "w") as f:
        writer = csv.writer(f, lineterminator='\r')
        writer.writerows(hypnogram)

skjerns avatar Mar 14 '22 17:03 skjerns