Spaces:
Sleeping
Sleeping
File size: 4,677 Bytes
01f75cf |
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 |
import os
from collections import defaultdict
import numpy as np
import pandas as pd
# このファイルのあるディレクトリの絶対パスを取得し、そこから level ディレクトリへの絶対パスを作成
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
LEVEL_DIR = os.path.abspath(os.path.join(CURRENT_DIR, "..", "..", "level"))
def change_level(df, level="Type1_Level1", sulcus=True):
"""
Change the level of the given DataFrame based on specified ROI levels.
Parameters:
df (pd.DataFrame): The input DataFrame to be modified.
level (str): The level to which the DataFrame should be changed. Default is "Type1_Level1".
sulcus (bool): A flag indicating whether to include sulcus regions. Default is True.
Returns:
pd.DataFrame: The modified DataFrame with the specified level changes applied.
"""
# LEVEL_DIR を基準に CSV ファイルの絶対パスを作成
ROI_number = pd.read_csv(os.path.join(LEVEL_DIR, "Level_ROI_No.csv"))
ROI_name = pd.read_csv(os.path.join(LEVEL_DIR, "Level_ROI_Name.csv"))
if sulcus == False:
tmp = ROI_number["Type1_Level2"]
ROI_number = ROI_number[tmp != 18]
ROI_number = ROI_number[tmp != 19]
ROI_name = ROI_name[tmp != 18]
ROI_name = ROI_name[tmp != 19]
data = dict(zip(ROI_number["ROI"], ROI_number[level]))
level_dict = defaultdict(list)
for key, value in data.items():
level_dict[str(value)].append(key)
change_df_list = []
for i, (key, value) in enumerate(level_dict.items()):
name = ROI_name[level].unique()[i]
change_df_list.append(df[value].sum(axis=1).rename(name))
change_df = pd.concat(change_df_list, axis=1)
return change_df
def make_csv(parcellation, output_dir, basename):
"""
Generates multiple CSV files containing volume data for different levels of parcellation.
Parameters:
parcellation (numpy.ndarray): The parcellation data array where each unique integer represents a different region.
output_dir (str): The directory where the output CSV files will be saved.
basename (str): The base name for the output CSV files.
Returns:
pandas.DataFrame: The DataFrame containing volume data for Type1_Level5.
"""
# LEVEL_DIR を基準にテキストファイルの絶対パスを作成
csv_path = os.path.join(LEVEL_DIR, "Level5.txt")
df_Type1_level5 = (
pd.read_table(csv_path, names=["number", "region"]).astype("str").set_index("number")
)
for i in range(1, 281):
volume = np.count_nonzero(parcellation == i)
df_Type1_level5.loc[str(i), basename] = volume
df_Type1_level5 = df_Type1_level5.set_index("region").T.reset_index(drop=True)
df_Type1_level4 = change_level(df_Type1_level5, level="Type1_Level4")
df_Type1_level3 = change_level(df_Type1_level5, level="Type1_Level3")
df_Type1_level2 = change_level(df_Type1_level5, level="Type1_Level2")
df_Type1_level1 = change_level(df_Type1_level5, level="Type1_Level1")
df_Type2_level5 = change_level(df_Type1_level5, level="Type2_Level5")
df_Type2_level4 = change_level(df_Type1_level5, level="Type2_Level4")
df_Type2_level3 = change_level(df_Type1_level5, level="Type2_Level3")
df_Type2_level2 = change_level(df_Type1_level5, level="Type2_Level2")
df_Type2_level1 = change_level(df_Type1_level5, level="Type2_Level1")
os.makedirs(os.path.join(output_dir, "csv"), exist_ok=True)
df_Type1_level5.to_csv(
os.path.join(output_dir, f"csv/{basename}_Type1_Level5.csv"), index=False
)
df_Type1_level4.to_csv(
os.path.join(output_dir, f"csv/{basename}_Type1_Level4.csv"), index=False
)
df_Type1_level3.to_csv(
os.path.join(output_dir, f"csv/{basename}_Type1_Level3.csv"), index=False
)
df_Type1_level2.to_csv(
os.path.join(output_dir, f"csv/{basename}_Type1_Level2.csv"), index=False
)
df_Type1_level1.to_csv(
os.path.join(output_dir, f"csv/{basename}_Type1_Level1.csv"), index=False
)
df_Type2_level5.to_csv(
os.path.join(output_dir, f"csv/{basename}_Type2_Level5.csv"), index=False
)
df_Type2_level4.to_csv(
os.path.join(output_dir, f"csv/{basename}_Type2_Level4.csv"), index=False
)
df_Type2_level3.to_csv(
os.path.join(output_dir, f"csv/{basename}_Type2_Level3.csv"), index=False
)
df_Type2_level2.to_csv(
os.path.join(output_dir, f"csv/{basename}_Type2_Level2.csv"), index=False
)
df_Type2_level1.to_csv(
os.path.join(output_dir, f"csv/{basename}_Type2_Level1.csv"), index=False
)
return df_Type1_level5
|