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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import os
import json
import numpy as np
import argparse
class_tag_1 = {1: '磨玻璃结节',
2: '实性结节',
3: '混合结节',
4: '钙化结节'}
class_tag_2 = {1: '良性',
2: '恶性'}
def followup_processing(args):
# 按病人id和时间整理匹配结果
followup_root = os.path.join(args.job_data_root, 'output/elastix')
files = os.listdir(followup_root)
working_dicts = {}
for name in files:
patientid = name.split('_')[0].split('-')[-1]
if patientid not in working_dicts.keys():
working_dicts[patientid] = []
working_dicts[patientid].append(os.path.join(followup_root, name))
else:
working_dicts[patientid].append(os.path.join(followup_root, name))
for key in list(working_dicts.keys()):
working_dicts[key] = sorted(working_dicts[key])
# 计算每一个病人的信息,(size、类别)
working_infos = {}
for key in list(working_dicts.keys()):
working_infos[key] = []
files = working_dicts[key]
for file in files:
temp= {'matched': [],
'missing': [],
'new': []}
match_results = json.load(open(os.path.join(file, 'match_results.json'), 'r'))
if len(match_results['matched']) != 0:
for res in match_results['matched']:
res[0].append(res[0][3] * res[0][4] * res[0][5])
res[1].append(res[1][3] * res[1][4] * res[1][5])
temp['matched'].append(res)
if len(match_results['missing']) != 0:
for res in match_results['missing']:
res.append(res[3] * res[4] * res[5])
temp['missing'].append(res)
if len(match_results['new']) != 0:
for res in match_results['new']:
res.append(res[3] * res[4] * res[5])
temp['new'].append(res)
working_infos[key].append(temp)
# 得出结论
class_change = {'1': [], '2': []}
for key in list(working_infos.keys()):
print('For Patient-{}'.format(key))
print('\n')
temp = {'big': {'num': 0,
'll': []},
'small': {'num': 0,
'll': []},
'eq': {'num': 0,
'll': []}
}
for value in working_infos[key]:
if len(value['matched']) != 0:
for pp in value['matched']:
if pp[0][-1] > pp[1][-1]:
temp['small']['num'] += 1
temp['small']['ll'].append(abs(pp[0][-1] - pp[1][-1]))
elif pp[0][-1] < pp[1][-1]:
temp['big']['num'] += 1
temp['big']['ll'].append(abs(pp[0][-1] - pp[1][-1]))
elif pp[0][-1] == pp[1][-1]:
temp['eq']['num'] += 1
temp['eq']['ll'].append(pp[0][-1])
class_change['1'].append(pp[0][-3])
class_change['1'].append(pp[0][-3])
class_change['2'].append(pp[0][-2])
class_change['2'].append(pp[0][-2])
choice_tag = None
choice_num = -100
choice_ll = []
for tag in list(temp.keys()):
if choice_num < temp[tag]['num']:
choice_tag = tag
choice_num = temp[tag]['num']
choice_ll = temp[tag]['ll']
if choice_tag == 'big':
print('结节可能向变大发展,约变大{};'.format(np.random.choice(choice_ll, size=1)[0]))
print('结节分类结果可能为:{};'.format(class_tag_1[np.random.choice(class_change['1'], size=1)[0]]))
print('结节良恶性分类结果可能为: {}.'.format(class_tag_2[np.random.choice(class_change['2'], size=1)[0]]))
elif choice_tag == 'small':
print('结节可能向变小发展,约变小{};'.format(np.random.choice(choice_ll, size=1)[0]))
print('结节分类结果可能为:{};'.format(class_tag_1[np.random.choice(class_change['1'], size=1)[0]]))
print('结节良恶性分类结果可能为: {}.'.format(class_tag_2[np.random.choice(class_change['2'], size=1)[0]]))
elif choice_tag == 'eq':
print('结节可能向不变发展,约保持{};'.format(np.random.choice(choice_ll, size=1)[0]))
print('结节分类结果可能为:{};'.format(class_tag_1[np.random.choice(class_change['1'], size=1)[0]]))
print('结节良恶性分类结果可能为: {}.'.format(class_tag_2[np.random.choice(class_change['2'], size=1)[0]]))
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='followup processing')
parser.add_argument('--job_data_root', default='/data/job_715/job_data_preprocess', type=str, help='model')
args = parser.parse_args()
followup_processing(args)