Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
kihoon.lee
Lotte-LogicKor
Commits
63bcda2f
Commit
63bcda2f
authored
Sep 19, 2024
by
김강열
Browse files
feat: 결과 merge하는 스크립트 추가
parent
2a5ab844
Changes
1
Hide whitespace changes
Inline
Side-by-side
merge_results.py
0 → 100644
View file @
63bcda2f
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
()
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment