|
5 | 5 | import pandas as pd |
6 | 6 | from typing import List |
7 | 7 |
|
| 8 | +from pandas import DataFrame |
| 9 | + |
| 10 | +from core.file_service import FileService |
8 | 11 | from postprocess.correlation_service import CorrelationService |
| 12 | +from sklearn.model_selection import train_test_split |
9 | 13 |
|
10 | 14 |
|
11 | 15 | class PostprocessService: |
@@ -48,6 +52,7 @@ def get_all_correlations(self, path, ids: List[str]) -> pd.DataFrame: |
48 | 52 | data.append((ids[i], 'mean', corr)) |
49 | 53 | data.append(('mean', ids[i], corr)) |
50 | 54 | print(f"Processed correlations for [{i+1} / {n}] result") |
| 55 | + data.append(('mean', 'mean', 1.0)) |
51 | 56 | dataframe = pd.DataFrame(data, columns=['source', 'target', 'correlation']) |
52 | 57 | return dataframe.sort_values(by='correlation', ascending=False) |
53 | 58 |
|
@@ -84,3 +89,29 @@ def get_mean_image(self, inputs: list, batch_size: int) -> nib.Nifti1Image: |
84 | 89 | mean_nifti = nib.Nifti1Image(mean_image, affine=nib.load(inputs[0]).affine) |
85 | 90 | print("Mean image created.") |
86 | 91 | return mean_nifti |
| 92 | + |
| 93 | + def get_train_test(self, path: str, dataset: pd.DataFrame, train_size: float, iteration: int): |
| 94 | + print(f"Iteration [{iter}] - Training size [{train_size}]") |
| 95 | + X = dataset['id'] |
| 96 | + y = dataset['id'] |
| 97 | + X_id_train, X_id_test, y_id_train, y_id_test = train_test_split(X, y, train_size=train_size) |
| 98 | + |
| 99 | + self.write_subset(X_id_train, dataset, path, f'train_{iteration}') |
| 100 | + self.write_subset(X_id_test, dataset, path, f'test_{iteration}') |
| 101 | + |
| 102 | + def write_subset(self, ids: [], dataset: DataFrame, path: str, name: str): |
| 103 | + size = len(ids) |
| 104 | + ds_name = f'sub_dataset_{size}_{name}.csv' |
| 105 | + mean_path = os.path.join(path, 'tmp_mean_result.nii') |
| 106 | + files = [] |
| 107 | + for conf_id in ids: |
| 108 | + files.append(os.path.join(path, conf_id, '_subject_id_01', 'result.nii')) |
| 109 | + mean_img = self.get_mean_image(files, 10) |
| 110 | + nib.save(mean_img, mean_path) |
| 111 | + print(f"Computing correlations to mean image for [{size}] results...") |
| 112 | + for index, row in dataset.iterrows(): |
| 113 | + img = os.path.join(path, row['id'], '_subject_id_01', 'result.nii') |
| 114 | + dataset.at[index, 'from_mean'] = self.corr_srv.get_correlation_coefficient(mean_path, img, 'spearman') |
| 115 | + dataset.to_csv(os.path.join(path, ds_name), |
| 116 | + index=False, sep=';') |
| 117 | + print(f"Written to [{ds_name}].") |
0 commit comments