-
Notifications
You must be signed in to change notification settings - Fork 0
/
wettbewerb.py
103 lines (88 loc) · 3.64 KB
/
wettbewerb.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# -*- coding: utf-8 -*-
"""
Diese Datei sollte nicht verändert werden und wird von uns gestellt und zurückgesetzt.
Funktionen zum Laden und Speichern der Dateien
"""
__author__ = "Maurice Rohr und Christoph Reich"
from typing import List, Tuple
import csv
import scipy.io as sio
import numpy as np
import os
### Achtung! Diese Funktion nicht veraendern.
def load_references(folder: str = './training') -> Tuple[List[np.ndarray], List[str], int, List[str]]:
"""
Parameters
----------
folder : str, optional
Ort der Trainingsdaten. Default Wert '../training'.
Returns
-------
ecg_leads : List[np.ndarray]
EKG Signale.
ecg_labels : List[str]
Gleiche Laenge wie ecg_leads. Werte: 'N','A','O','~'
fs : int
Sampling Frequenz.
ecg_names : List[str]
Name der geladenen Dateien
"""
# Check Parameter
assert isinstance(folder, str), "Parameter folder muss ein string sein aber {} gegeben".format(type(folder))
assert os.path.exists(folder), 'Parameter folder existiert nicht!'
# Initialisiere Listen für leads, labels und names
ecg_leads: List[np.ndarray] = []
ecg_labels: List[str] = []
ecg_names: List[str] = []
# Setze sampling Frequenz
fs: int = 300
# Lade references Datei
with open(os.path.join(folder, 'REFERENCE.csv')) as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
# Iteriere über jede Zeile
for row in csv_reader:
# Lade MatLab Datei mit EKG lead and label
data = sio.loadmat(os.path.join(folder, row[0] + '.mat'))
ecg_leads.append(data['val'][0])
ecg_labels.append(row[1])
ecg_names.append(row[0])
# Zeige an wie viele Daten geladen wurden
print("{}\t Dateien wurden geladen.".format(len(ecg_leads)))
return ecg_leads, ecg_labels, fs, ecg_names
### Achtung! Diese Funktion nicht veraendern.
def save_predictions(predictions: List[Tuple[str, str]], folder: str=None) -> None:
"""
Funktion speichert the gegebenen predictions in eine CSV-Datei mit dem name PREDICTIONS.csv
Parameters
----------
predictions : List[Tuple[str, str]]
List aus Tuplen wobei jedes Tuple den Name der Datei und das vorhergesagte label ('N','A','O','~') enthaelt
Beispiel [('train_ecg_03183.mat', 'N'), ('train_ecg_03184.mat', "~"), ('train_ecg_03185.mat', 'A'),
('train_ecg_03186.mat', 'N'), ('train_ecg_03187.mat', 'O')]
folder : str
Speicherort der predictions
Returns
-------
None.
"""
# Check Parameter
assert isinstance(predictions, list), \
"Parameter predictions muss eine Liste sein aber {} gegenen.".format(type(predictions))
assert len(predictions) > 0, 'Parameter predictions muss eine nicht leere Liste sein.'
assert isinstance(predictions[0], tuple), \
"Elemente der Liste predictions muss ein Tuple sein aber {} gegenen.".format(type(predictions[0]))
if folder==None:
file = "PREDICTIONS.csv"
else:
file = os.path.join(folder, "PREDICTIONS.csv")
# Check ob Datei schon existiert wenn ja loesche Datei
if os.path.exists(file):
os.remove(file)
with open(file, mode='w', newline='') as predictions_file:
# Init CSV writer um Datei zu beschreiben
predictions_writer = csv.writer(predictions_file, delimiter=',')
# Iteriere über jede prediction
for prediction in predictions:
predictions_writer.writerow([prediction[0], prediction[1]])
# Gebe Info aus wie viele labels (predictions) gespeichert werden
print("{}\t Labels wurden geschrieben.".format(len(predictions)))