chore: start work on more general loading
This commit is contained in:
parent
c3fd1fc415
commit
3d512addb8
@ -9,6 +9,7 @@ import sys
|
||||
sys.path.insert(0, '/Users/Markus/Prosjekter git/Slovakia 2021/psf_lib/python_speech_features/python_speech_features')
|
||||
from psf_lib.python_speech_features.python_speech_features import mfcc
|
||||
import json
|
||||
import os
|
||||
|
||||
|
||||
# Global variables for MFCC
|
||||
@ -22,25 +23,29 @@ class Data_container:
|
||||
# Initiates personal data container for each subject. Dict for each session with keys 'left' and 'right',
|
||||
# and values equal to lists of EMG data indexed 0-7
|
||||
# NB! More sessions has to be added here in the future
|
||||
def __init__(self, subject_nr:int, subject_name:str):
|
||||
def __init__(self, subject_nr:int, subject_name:str, nr_sessions:int):
|
||||
self.subject_nr = subject_nr
|
||||
self.subject_name = subject_name
|
||||
self.data_dict_round1 = {'left': [None]*8, 'right': [None]*8}
|
||||
self.data_dict_round2 = {'left': [None]*8, 'right': [None]*8}
|
||||
self.data_dict_round3 = {'left': [None]*8, 'right': [None]*8}
|
||||
self.data_dict_round4 = {'left': [None]*8, 'right': [None]*8}
|
||||
self.dict_list = [self.data_dict_round1,
|
||||
self.data_dict_round2,
|
||||
self.data_dict_round3,
|
||||
self.data_dict_round4
|
||||
]
|
||||
self.dict_list = [{'left': [None]*8, 'right': [None]*8} for i in range(nr_sessions)]
|
||||
|
||||
|
||||
#self.data_dict_round1 = {'left': [None]*8, 'right': [None]*8}
|
||||
#self.data_dict_round2 = {'left': [None]*8, 'right': [None]*8}
|
||||
#self.data_dict_round3 = {'left': [None]*8, 'right': [None]*8}
|
||||
#self.data_dict_round4 = {'left': [None]*8, 'right': [None]*8}
|
||||
#self.dict_list = [self.data_dict_round1,
|
||||
# self.data_dict_round2,
|
||||
# self.data_dict_round3,
|
||||
# self.data_dict_round4
|
||||
# ]
|
||||
|
||||
class CSV_handler:
|
||||
|
||||
# Initiates object to store all datapoints in the experiment
|
||||
def __init__(self):
|
||||
self.working_dir = str(Path.cwd())
|
||||
def __init__(self, nr_subjects:int, nr_sessions:int):
|
||||
self.working_dir = str(Path.cwd())
|
||||
self.nr_subjects = nr_subjects
|
||||
self.nr_sessions = nr_sessions
|
||||
self.data_container_dict = {} # Dict with keys equal subject numbers and values equal to its respective datacontainer
|
||||
self.data_type = None # String describing which type of data is stored in the object
|
||||
|
||||
@ -48,7 +53,8 @@ class CSV_handler:
|
||||
# Input: filename of a csv-file
|
||||
# Output: DataFrame
|
||||
def make_df(self, filename):
|
||||
filepath = self.working_dir + str(filename)
|
||||
#filepath = self.working_dir + str(filename)
|
||||
filepath = str(filename)
|
||||
df = pd.read_csv(filepath)
|
||||
return df
|
||||
|
||||
@ -71,6 +77,9 @@ class CSV_handler:
|
||||
print('NaN in: subject', data_container.subject_nr, 'arm:', which_arm, 'session:', session, 'emg nr:', emg_nr)
|
||||
|
||||
# Places the data correctly:
|
||||
data_container.dict_list[session-1][which_arm][emg_nr] = df
|
||||
|
||||
'''
|
||||
if session == 1:
|
||||
if which_arm == 'left':
|
||||
data_container.data_dict_round1['left'][emg_nr] = df # Zero indexed emg_nr in the dict
|
||||
@ -93,6 +102,7 @@ class CSV_handler:
|
||||
data_container.data_dict_round4['right'][emg_nr] = df
|
||||
else:
|
||||
raise IndexError('Not a valid index')
|
||||
'''
|
||||
|
||||
# Links the data container for a subject to the csv_handler object
|
||||
# Input: the subject's data_container
|
||||
@ -478,6 +488,50 @@ class CSV_handler:
|
||||
self.data_type = 'soft'
|
||||
return self.data_container_dict
|
||||
|
||||
|
||||
def load_general(self, type, type_dir_name:str):
|
||||
|
||||
data_path = self.working_dir + '/data/' + type_dir_name
|
||||
|
||||
for i, (path, subject_dir, session_dir) in enumerate(os.walk(data_path)):
|
||||
|
||||
if path is not data_path:
|
||||
#print(i)
|
||||
#print(path)
|
||||
#print(subject_dir)
|
||||
#print(session_dir)
|
||||
subject_id = 100
|
||||
subject_name = 'bruh'
|
||||
nr_sessions = 101
|
||||
container = None
|
||||
session_count = 0
|
||||
|
||||
if subject_dir:
|
||||
session_count = 0
|
||||
subject_id = int(path[-1])
|
||||
subject_name = subject_dir[0].split('_')[0]
|
||||
nr_sessions = len(subject_dir)
|
||||
container = Data_container(subject_id, subject_name, nr_sessions)
|
||||
continue
|
||||
else:
|
||||
session_count += 1
|
||||
|
||||
for f in session_dir:
|
||||
spes_path = os.path.join(path, f)
|
||||
if f == 'myoLeftEmg.csv':
|
||||
print(path)
|
||||
print(spes_path)
|
||||
for emg_nr in range(8):
|
||||
self.store_df_in_container(spes_path, emg_nr, 'left', container, session_count)
|
||||
elif f == 'myoRightEmg.csv':
|
||||
for emg_nr in range(8):
|
||||
self.store_df_in_container(spes_path, emg_nr, 'right', container, session_count)
|
||||
|
||||
self.data_type = type
|
||||
return self.data_container_dict
|
||||
|
||||
|
||||
|
||||
# Loads data the to the CSV_handler(general load func). Choose data_type: hard, hardPP, soft og softPP as str.
|
||||
# Input: String(datatype you want)
|
||||
# Output: None -> load and stores data
|
||||
|
@ -242,11 +242,17 @@ def mfcc_all_emg_plots(csv_handler:CSV_handler):
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
csv_handler = CSV_handler()
|
||||
csv_handler.load_data('soft')
|
||||
nn_handler = NN_handler(csv_handler)
|
||||
nn_handler.store_mfcc_samples()
|
||||
nn_handler.save_json_mfcc()
|
||||
NR_SUBJECTS = 5
|
||||
NR_SESSIONS = 4
|
||||
|
||||
soft_dir_name = 'Exp20201205_2myo_softType'
|
||||
hard_dir_name = 'Exp20201205_2myo_hardType'
|
||||
|
||||
csv_handler = CSV_handler(NR_SUBJECTS, NR_SESSIONS)
|
||||
dict = csv_handler.load_general('soft', soft_dir_name)
|
||||
|
||||
pretty(dict)
|
||||
|
||||
|
||||
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user