first commit

This commit is contained in:
liligeng111 2025-08-06 02:04:35 +08:00
parent abc6526143
commit 26631f9b48
24 changed files with 1089 additions and 1 deletions

93
Code/2-simple-stat.py Normal file
View file

@ -0,0 +1,93 @@
import openpyxl
import csv
import os.path
import glob
def read_value(patient_dir, atlas, data_type):
folder_name = os.path.basename(patient_dir)
csv_file_path = os.path.join(patient_dir, f"{data_type}_{atlas}_result", "result_atlas.csv")
result = [folder_name]
with open(csv_file_path, mode='r') as data_csv_file:
csv_reader = csv.DictReader(data_csv_file)
for row in csv_reader:
mean = float(row["meanValue"])
result.append(mean)
return result
def read_header(patient_dir, atlas, data_type):
header = ['编号']
csv_file_path = os.path.join(patient_dir, f"{data_type}_{atlas}_result", "result_atlas.csv")
with open(csv_file_path, mode='r') as data_csv_file:
csv_reader = csv.DictReader(data_csv_file)
for row in csv_reader:
region_name = row["Chinese Name"]
header.append(region_name)
return header
def generate_stats_row(name, region_size, function, patient_size):
result = [name]
for i in range(region_size):
letter = openpyxl.utils.cell.get_column_letter(i + 2)
result.append(f'={function}({letter}2:{letter}{patient_size + 1})')
return result
def write_to_work_sheet(work_sheet, patient_list, atlas, data_type):
if len(patient_list) == 0:
return
header = read_header(patient_list[0], atlas, data_type)
work_sheet.append(header)
for patient_dir in patient_list:
print(data_type, patient_dir)
patient_data = read_value(patient_dir, atlas, data_type)
work_sheet.append(patient_data)
region_size = len(header) - 1
work_sheet.append([])
work_sheet.append([])
work_sheet.append(generate_stats_row('均值', region_size, 'AVERAGE', len(patient_list)))
work_sheet.append(generate_stats_row('标准差', region_size, 'STDEV', len(patient_list)))
work_sheet.append(generate_stats_row('最小值', region_size, 'MIN', len(patient_list)))
# 请尝试在空格的位置添加 5% 25% 50% 75% 95% 分位数使用excel的PERCENTILE函数
work_sheet.append([])
work_sheet.append([])
work_sheet.append([])
work_sheet.append([])
work_sheet.append([])
work_sheet.append(generate_stats_row('最大值', region_size, 'MAX', len(patient_list)))
def main():
data_types = ['corr-CBF', 'ATT', 'ACBV', 'CBF1', 'CBF2', 'CBF3', 'CBF4', 'CBF5']
atlas_list = ['AnImage_WholeBrain', 'AnImage_BrainLobes', 'AnImage_AAL3']
output_file = r'..\Data\csv-simple-stat.xlsx'
patient_list = glob.glob(r'..\Data\csv-data\*')
work_book = openpyxl.Workbook()
work_book.remove(work_book.active)
for data_type in data_types:
for atlas in atlas_list:
work_sheet = work_book.create_sheet(title=f'{atlas}_{data_type}')
write_to_work_sheet(work_sheet, patient_list, atlas, data_type)
work_book.save(output_file)
main()