Commit 63bcda2f authored by 김강열's avatar 김강열
Browse files

feat: 결과 merge하는 스크립트 추가

parent 2a5ab844
import os
import pandas as pd
def collect_combined_scores(evaluated_dir):
"""
evaluated_dir 내의 모든 combined_scores.xlsx 파일을 검색하여 리스트로 반환합니다.
"""
combined_scores_files = []
for root, dirs, files in os.walk(evaluated_dir):
for file in files:
if file == 'combined_scores.xlsx':
combined_scores_files.append(os.path.join(root, file))
return combined_scores_files
def extract_model_name(file_path):
"""
파일 경로에서 모델 이름을 추출합니다.
예: /path/to/model1/combined_scores.xlsx -> model1
"""
return os.path.basename(os.path.dirname(file_path))
def drop_empty_string_columns(sheet_df):
"""
각 컬럼의 문자열 길이를 기준으로 모든 값의 길이가 0인 컬럼을 삭제합니다.
"""
for column in sheet_df.columns:
# 각 셀의 문자열 길이를 측정 (NaN은 무시)
string_lengths = sheet_df[column].dropna().astype(str).apply(len)
# 모든 값의 문자열 길이가 0인 컬럼 삭제
if string_lengths.sum() == 0:
sheet_df.drop(columns=[column], inplace=True)
return sheet_df
def create_score_sheets(combined_scores_files, categories, score_types):
"""
각 스코어 유형별로 데이터프레임을 생성하여 딕셔너리에 저장합니다.
"""
# 초기화: 각 스코어 유형에 대해 빈 데이터프레임 생성
score_sheets = {score_type: pd.DataFrame(columns=categories) for score_type in score_types}
for file in combined_scores_files:
model_name = extract_model_name(file)
try:
df = pd.read_excel(file, index_col=0) # 첫 번째 열을 인덱스로 설정 (카테고리)
except Exception as e:
print(f"Error reading {file}: {e}")
continue
for score_type in score_types:
if score_type in df.columns:
# 시트별 데이터프레임에 모델 이름을 인덱스로 추가하고 스코어를 행으로 추가
# 존재하지 않는 카테고리는 NaN으로 채워짐
score_sheets[score_type].loc[model_name] = df.loc[categories, score_type]
else:
print(f"Warning: '{score_type}' not found in {file}")
# 각 시트에서 문자열 길이를 기준으로 빈 컬럼 삭제 및 'Score Average' 열 추가
for score_type, sheet_df in score_sheets.items():
# 1. 문자열 길이 기준으로 빈 컬럼 삭제
drop_empty_string_columns(sheet_df)
# 2. 기존 'Score Average' 열이 있을 경우 삭제
if 'Score Average' in sheet_df.columns:
sheet_df.drop(columns=['Score Average'], inplace=True)
# 3. 각 모델별 평균값 계산
sheet_df['Score Average'] = sheet_df.mean(axis=1, skipna=True)
# 데이터프레임을 업데이트
score_sheets[score_type] = sheet_df
return score_sheets
def save_to_excel(score_sheets, output_file):
"""
딕셔너리에 저장된 데이터프레임을 각 시트로 저장하여 엑셀 파일로 저장합니다.
"""
with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
for sheet_name, df in score_sheets.items():
df.to_excel(writer, sheet_name=sheet_name)
print(f"모든 스코어가 '{output_file}' 파일에 저장되었습니다.")
def main():
evaluated_dir = 'evaluated' # 'evaluated' 디렉토리 경로
output_file = 'merged_scores.xlsx' # 출력 엑셀 파일 이름
# 1. 'evaluated' 디렉토리 내 모든 combined_scores.xlsx 파일 검색
combined_scores_files = collect_combined_scores(evaluated_dir)
if not combined_scores_files:
print("No 'combined_scores.xlsx' files found in the 'evaluated' directory.")
return
print(f"Found {len(combined_scores_files)} 'combined_scores.xlsx' files.")
# 2. 컬럼과 행 정의
score_types = [
'cot_1_shot_single_score',
'cot_1_shot_multi_score',
'1_shot_single_score',
'1_shot_multi_score',
'default_single_score',
'default_multi_score',
'lotte_single_turn'
]
categories = [
'글쓰기(Writing)',
'문법(Grammar)',
'수학(Math)',
'이해(Understanding)',
'추론(Reasoning)',
'코딩(Coding)',
'lotte_qa',
'meeting_summary',
'mrc',
'review_summary',
'search_keyword',
'search_summary',
'task_assistant_hire',
'task_assistant_mail_introduce',
'task_assistant_mail_meeting',
'task_assistant_mail_pr',
'task_assistant_mail_share',
'text2sql'
]
# 3. 데이터 수집 및 시트 생성
score_sheets = create_score_sheets(combined_scores_files, categories, score_types)
# 4. 엑셀 파일로 저장
save_to_excel(score_sheets, output_file)
if __name__ == "__main__":
main()
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment