|
a |
|
b/ecgtoHR/create_dataset.py |
|
|
1 |
import os |
|
|
2 |
import glob |
|
|
3 |
import wfdb as wf |
|
|
4 |
import matplotlib.pyplot as plt |
|
|
5 |
from tqdm import tqdm |
|
|
6 |
import numpy as np |
|
|
7 |
|
|
|
8 |
from scipy.signal import resample |
|
|
9 |
from sklearn.preprocessing import StandardScaler |
|
|
10 |
from sklearn.model_selection import train_test_split |
|
|
11 |
|
|
|
12 |
import torch |
|
|
13 |
|
|
|
14 |
from utils import dist_transform,getWindow |
|
|
15 |
|
|
|
16 |
def data_preprocess(args): |
|
|
17 |
|
|
|
18 |
PATH = args.data_path |
|
|
19 |
all_paths = sorted(glob.glob(PATH + '/*.dat')) |
|
|
20 |
all_paths = [paths[:-4] for paths in all_paths] |
|
|
21 |
|
|
|
22 |
windowed_data,windowed_beats = getWindow(all_paths) |
|
|
23 |
|
|
|
24 |
scaler = StandardScaler() |
|
|
25 |
mod_windowed_data = [] |
|
|
26 |
dist_tran_data = [] |
|
|
27 |
|
|
|
28 |
for window in range(len(windowed_data)): |
|
|
29 |
|
|
|
30 |
beats = ((windowed_beats[window] * 500/360).astype(int)) |
|
|
31 |
if(len(beats) != 0): |
|
|
32 |
mod_windowed_data.append(scaler.fit_transform(resample(windowed_data[window],5000).reshape(-1,1))) |
|
|
33 |
dist_tran_data.append(dist_transform(5000,beats)) |
|
|
34 |
|
|
|
35 |
X_train,X_test,y_train,y_test = train_test_split(np.array(mod_windowed_data)[:,:,0],np.array(dist_tran_data)[:,:,0],test_size = 0.1, random_state = 42) |
|
|
36 |
|
|
|
37 |
X_train_toTensor = torch.Tensor(X_train).type(torch.float) |
|
|
38 |
print(X_train_toTensor.size()) |
|
|
39 |
X_test_toTensor = torch.Tensor(X_test).type(torch.float) |
|
|
40 |
print(X_test_toTensor.size()) |
|
|
41 |
y_train_toTensor = torch.Tensor(y_train).type(torch.float) |
|
|
42 |
print(y_train_toTensor.size()) |
|
|
43 |
y_test_toTensor = torch.Tensor(y_test).type(torch.float) |
|
|
44 |
print(y_test_toTensor.size()) |
|
|
45 |
|
|
|
46 |
if not(os.path.exists('data')): |
|
|
47 |
os.mkdir('data') |
|
|
48 |
|
|
|
49 |
torch.save(X_train_toTensor, "data/ecgtoHR_train_data.pt") |
|
|
50 |
torch.save(y_train_toTensor, "data/ecgtoHR_train_labels.pt") |
|
|
51 |
torch.save(X_test_toTensor, "data/ecgtoHR_test_data.pt") |
|
|
52 |
torch.save(y_test_toTensor, "data/ecgtoHR_test_labels.pt") |
|
|
53 |
|