Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
| 1 |
-
# app.py
|
| 2 |
import gradio as gr
|
| 3 |
import pandas as pd
|
| 4 |
from datetime import datetime
|
|
@@ -15,32 +14,50 @@ def analyze_reviews(file_path, selected_year):
|
|
| 15 |
df = pd.read_excel(file_path)
|
| 16 |
logger.info("엑셀 파일 읽기 완료")
|
| 17 |
|
| 18 |
-
#
|
| 19 |
current_year = 2025
|
| 20 |
-
|
| 21 |
|
| 22 |
-
logger.info(f"데이터 필터링: {
|
| 23 |
-
# B열이 리뷰 날짜라고 가정하고, '
|
| 24 |
if '리뷰날짜' not in df.columns:
|
| 25 |
df.rename(columns={df.columns[1]: '리뷰날짜'}, inplace=True)
|
| 26 |
|
| 27 |
# 리뷰 날짜를 datetime으로 변환
|
| 28 |
df['리뷰날짜'] = pd.to_datetime(df['리뷰날짜'], errors='coerce')
|
| 29 |
-
#
|
| 30 |
-
|
| 31 |
-
logger.info(
|
| 32 |
|
| 33 |
# 년월별 리뷰 건수 계산
|
| 34 |
logger.info("월별 리뷰 건수 집계 시작")
|
| 35 |
-
|
| 36 |
-
review_counts =
|
| 37 |
logger.info("월별 리뷰 건수 집계 완료")
|
| 38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
# 새로운 시트에 저장
|
| 40 |
logger.info("새로운 시트 '선택월별 리뷰건수' 생성 시작")
|
| 41 |
with pd.ExcelWriter(file_path, engine='openpyxl', mode='a') as writer:
|
| 42 |
-
|
| 43 |
logger.info("새로운 시트 '선택월별 리뷰건수' 생성 완료")
|
|
|
|
| 44 |
|
| 45 |
return file_path
|
| 46 |
except Exception as e:
|
|
@@ -54,14 +71,15 @@ def main():
|
|
| 54 |
gr.Markdown("### 리뷰 분석 스페이스")
|
| 55 |
with gr.Row():
|
| 56 |
file_input = gr.File(label="원본 엑셀 파일 업로드", file_types=[".xlsx"])
|
| 57 |
-
with gr.Column():
|
| 58 |
-
current_year = 2025
|
| 59 |
-
years = [str(current_year - i) for i in range(5)]
|
| 60 |
-
year_radio = gr.Radio(label="분석할 연도 선택", choices=years, value=str(current_year))
|
| 61 |
file_output = gr.File(label="분석된 엑셀 파일 다운로드", type="filepath")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
analyze_button = gr.Button("분석")
|
| 63 |
|
| 64 |
-
|
|
|
|
| 65 |
|
| 66 |
demo.launch()
|
| 67 |
|
|
|
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
import pandas as pd
|
| 3 |
from datetime import datetime
|
|
|
|
| 14 |
df = pd.read_excel(file_path)
|
| 15 |
logger.info("엑셀 파일 읽기 완료")
|
| 16 |
|
| 17 |
+
# 현재 연도
|
| 18 |
current_year = 2025
|
| 19 |
+
start_year = current_year - 3 # 최근 3년
|
| 20 |
|
| 21 |
+
logger.info(f"데이터 필터링: {start_year}년부터 {current_year}년까지")
|
| 22 |
+
# B열이 리뷰 날짜라고 가정하고, 'B' 열의 이름을 '리뷰날짜'로 변경
|
| 23 |
if '리뷰날짜' not in df.columns:
|
| 24 |
df.rename(columns={df.columns[1]: '리뷰날짜'}, inplace=True)
|
| 25 |
|
| 26 |
# 리뷰 날짜를 datetime으로 변환
|
| 27 |
df['리뷰날짜'] = pd.to_datetime(df['리뷰날짜'], errors='coerce')
|
| 28 |
+
# 최근 3년 데이터 필터링
|
| 29 |
+
df_recent = df[df['리뷰날짜'].dt.year >= start_year]
|
| 30 |
+
logger.info("최근 3년 데이터 필터링 완료")
|
| 31 |
|
| 32 |
# 년월별 리뷰 건수 계산
|
| 33 |
logger.info("월별 리뷰 건수 집계 시작")
|
| 34 |
+
df_recent['년월'] = df_recent['리뷰날짜'].dt.strftime('%Y-%m')
|
| 35 |
+
review_counts = df_recent.groupby('년월').size().reset_index(name='리뷰건수')
|
| 36 |
logger.info("월별 리뷰 건수 집계 완료")
|
| 37 |
|
| 38 |
+
# 새로운 시트에 저장
|
| 39 |
+
logger.info("새로운 시트 '월별 리뷰건수' 생성 시작")
|
| 40 |
+
with pd.ExcelWriter(file_path, engine='openpyxl', mode='a') as writer:
|
| 41 |
+
review_counts.to_excel(writer, sheet_name='월별 리뷰건수', index=False)
|
| 42 |
+
logger.info("새로운 시트 '월별 리뷰건수' 생성 완료")
|
| 43 |
+
|
| 44 |
+
# 요청사항 추가 시작
|
| 45 |
+
logger.info("선택년 데이터 필터링 및 분석 시작")
|
| 46 |
+
# 선택한 연도로 데이터 필터링
|
| 47 |
+
df_selected = df[df['리뷰날짜'].dt.year == selected_year]
|
| 48 |
+
logger.info(f"선택한 연도 {selected_year} 데이터 필터링 완료")
|
| 49 |
+
|
| 50 |
+
# 년월별 리뷰 건수 계산
|
| 51 |
+
df_selected['년월'] = df_selected['리뷰날짜'].dt.strftime('%Y-%m')
|
| 52 |
+
selected_review_counts = df_selected.groupby('년월').size().reset_index(name='리뷰건수')
|
| 53 |
+
logger.info("선택년 월별 리뷰 건수 집계 완료")
|
| 54 |
+
|
| 55 |
# 새로운 시트에 저장
|
| 56 |
logger.info("새로운 시트 '선택월별 리뷰건수' 생성 시작")
|
| 57 |
with pd.ExcelWriter(file_path, engine='openpyxl', mode='a') as writer:
|
| 58 |
+
selected_review_counts.to_excel(writer, sheet_name='선택월별 리뷰건수', index=False)
|
| 59 |
logger.info("새로운 시트 '선택월별 리뷰건수' 생성 완료")
|
| 60 |
+
# 요청사항 추가 끝
|
| 61 |
|
| 62 |
return file_path
|
| 63 |
except Exception as e:
|
|
|
|
| 71 |
gr.Markdown("### 리뷰 분석 스페이스")
|
| 72 |
with gr.Row():
|
| 73 |
file_input = gr.File(label="원본 엑셀 파일 업로드", file_types=[".xlsx"])
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
file_output = gr.File(label="분석된 엑셀 파일 다운로드", type="filepath")
|
| 75 |
+
with gr.Row():
|
| 76 |
+
# 최근 5년을 라디오 버튼으로 선택
|
| 77 |
+
year_options = [str(year) for year in range(2021, 2026)] # 2021년부터 2025년까지
|
| 78 |
+
year_selection = gr.Radio(label="분석할 연도 선택", choices=year_options, value="2025")
|
| 79 |
analyze_button = gr.Button("분석")
|
| 80 |
|
| 81 |
+
# 버튼 클릭 시 analyze_reviews 함수 호출, 파일과 선택한 연도 전달
|
| 82 |
+
analyze_button.click(fn=analyze_reviews, inputs=[file_input, year_selection], outputs=file_output)
|
| 83 |
|
| 84 |
demo.launch()
|
| 85 |
|