Pre&Post-op ppg > NRS (post-op, in PACU)
dataset class
from dataset import VitalDataset_fs
root_dir = f'../data/all_3'
trdt = VitalDataset_fs(root_dir,f'../data/pd_gy/train_3.json')
valdt = VitalDataset_fs(root_dir,f'../data/pd_gy/val_3.json')
tedt = VitalDataset_fs(root_dir,f'../data/pd_gy/test_3.json')
model class
from models import PrePostNet
model = PrePostNet()
train and validation
from train import trainval
best_model,val_losses = trainval(trdl,valdl,model,loss,opt,scheduler=scheduler,device=device, exist_acc=True)
Pre-op(5Min after NIBP(non-invasive blood pressure))
- ECG
- PPG Post-op(5Min)
- ECG
- PPG
label(pain) | nrs |
---|---|
0 | 0~3 |
1 | 4~9 |
- interpolate (constant)
- Bandpass filter (0.5~15)
- Moving average (30taps) (- z-score)
- Resampling (to set 90000)
- Spectrogram
- interpolation (constant)
- elgendi preprocessing
- label
0: no-milf psin, 1: moderate-severe pain
nrs2 | |
---|---|
0 | 545 |
1 | 116 |
There are two kinds of dataset in dataset.py
The fast-dataset extracted final results as a numpy from original dataset.
======== x: big vital files
-
vital files paths 모두 추출 (#1) ======== y: label file (회복간호_21상, 회복간호_21하, 회복간호_22상) -통합(df),
-
nrs없는 항목 제거,
-
(등록번호, 회복실퇴실날짜) 중복 시 제거
-
'등록번호','회복실퇴실일시','최대 NRS','KEY' 항목들만 추출
-
회복실퇴실일시> time, date 추출 (time, date를 key처럼 사용 (vital file 추출 용이))
- df: ['등록번호','date','time','최대 NRS','KEY']
- df: ['pt_id', 'date', 'time', 'max_nrs','key']
-
#1를 이용하여 df의 해당하는 vital이 없을 경우 삭제
- df: 'idx', 'label', 'vital', 'path', 'nrs', 'key', 'ext_path', 'room', 'path_0'
-
섞여있는 필요한 데이터를 path를 이용하여 알맞게 복사 (#data moving)
-
해당 수술에 대한 pdor과 pdrec을 매칭시켜 저장 (df > json) #json scheme ======== #data moving
-
사용되는 흩어진 데이터 > pdor/*, pdrec/에 복사 (18GB, 약 1600pair)
// 파일의 이름을 이용하여 pdor, pdrec 구별 ======== #json scheme
item[N]: 'key', 'rec_path', 'or_path', 'nrs' key: 해당 key는 raw data(회복간호.csv) 기재된 키. 이를 통해 환자의 다른 메타정보를 추적할 수 있음.
rec_path: 회복실 vital file paths
or_path: 수술시 vital file paths
nrs: (numeric rating score) 정답 라벨 // 통증의 정도를 0~10범위로 표현, 회복실에서 측정됨.
======== Final Scheme
./pdrec/* (# data moving)
./pdor/*
./all.json (# json scheme)
- +demographic data (gender, age)
======== Final Scheme
./pdrec/* (# data moving)
./pdor/*
./all_1.json
- Applied Filter4
- NRS?
- pdor&pdrec pair?
- General Anesthesia?
- Gynecology dept.?
======== Final Scheme
./pdrec/* (# data moving)
./pdor/*
./all_2.json
======== Data DESC.
About label
no-mild: moderate-severe = 545:116 ≓ 4.5:1
- Applied Filter4
- NRS?
- pdor&pdrec pair?
- General Anesthesia?
- Gynecology dept.?
- Data Quality? (Non-existing, too many null, …) (black list)
======== Final Scheme
./all_3.json
../data/all_3/*.npy
./train_3.json
./val_3.json
./test_3.json
black list
black_list = ['01826958_PDOR1_210421_124500_1',
'01853529_PDOR1_210419_083500_1',
'01876359_PDOR2_210602_083200_1',
'01656320_PDOR2_210526_091300_1',
'01618678_PDOR1_210615_083000_1',
'01159584_PDOR1_211025_083400_1',
'00578148_PDOR2_210805_111500_1',
'01853408_PDOR1_211115_083100_1',
'01906040_PDOR1_210831_110500_1',
'00435676_PDREC02_210902_093500_1', # dataset
'01060037_PDOR2_211206_102000_1', # Filling missing values error
'01929835_PDOR2_211102_093000_1',
'01392754_PDOR2_220111_105500_1',
'01439205_PDOR2_211206_121100_1', # in dl, fmissing
'00435676_PDOR1_210902_084000_1'
]
Dongheon Lee , Ph.D Boohwi Hong , M.D., Ph.D.