Kims12 commited on
Commit
99eadfa
·
verified ·
1 Parent(s): 723a56f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -52
app.py CHANGED
@@ -1,60 +1,61 @@
1
  import gradio as gr
2
  import pandas as pd
 
3
  from datetime import datetime
4
  import os
5
 
6
- # 로그 메시지를 출력하는 함수
7
- def log_message(step):
8
- print(f"[LOG] {step} 단계가 실행되었습니다.")
9
 
10
- # 엑셀 파일 처리 및 분석 함수
11
  def analyze_reviews(file_path):
12
- log_message("1. 파일 업로드 처리 중")
13
-
14
- # 엑셀 파일 읽기
15
- df = pd.read_excel(file_path)
16
-
17
- if "B" not in df.columns:
18
- return "오류: 원본 데이터에 B열(리뷰 날짜)이 없습니다."
19
-
20
- # "B" 열에서 년도와 월을 추출하여 새로운 열 생성
21
- df["년도-월"] = pd.to_datetime(df["B"]).dt.to_period("M").astype(str)
22
-
23
- # 최근 3년 데이터를 필터링 (기준: 2025년)
24
- current_year = 2025
25
- recent_years = [str(year) for year in range(current_year - 2, current_year + 1)]
26
- filtered_df = df[df["년도-월"].str[:4].isin(recent_years)]
27
-
28
- # 년월별 리뷰 건수 계산
29
- review_counts = filtered_df["년도-월"].value_counts().sort_index().reset_index()
30
- review_counts.columns = ["년도-월", "리뷰 건수"]
31
-
32
- # 새 엑셀 파일 작성
33
- output_path = "review_analysis.xlsx"
34
- with pd.ExcelWriter(output_path) as writer:
35
- review_counts.to_excel(writer, sheet_name="월별 리뷰건수", index=False)
36
- writer.sheets["월별 리뷰건수"].cell(1, 1, "년도-월")
37
- writer.sheets["월별 리뷰건수"].cell(1, 2, "리뷰 건수")
38
-
39
- log_message("2. 리뷰 분석 완료 및 파일 생성됨")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
- return output_path
42
-
43
- # 그라디오 인터페이스 구성
44
- def interface(file):
45
- log_message("3. 분석 버튼 클릭됨")
46
- analyzed_file_path = analyze_reviews(file.name)
47
- log_message("4. 엑셀 파일 다운로드 준비 완료")
48
- return analyzed_file_path
49
-
50
- # 그라디오 UI 구성
51
- with gr.Blocks() as demo:
52
- gr.Markdown("# 리뷰 분석 시스템")
53
- file_input = gr.File(label="엑셀 파일 업로드", type="file", file_types=[".xlsx"])
54
- analyze_button = gr.Button("분석하기")
55
- download_file = gr.File(label="분석된 엑셀 파일 다운로드", type="filepath")
56
-
57
- analyze_button.click(fn=interface, inputs=file_input, outputs=download_file)
58
-
59
- # 애플리케이션 실행
60
- demo.launch()
 
1
  import gradio as gr
2
  import pandas as pd
3
+ import logging
4
  from datetime import datetime
5
  import os
6
 
7
+ # 로깅 설정
8
+ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
 
9
 
 
10
  def analyze_reviews(file_path):
11
+ try:
12
+ logging.info("파일 업로드 시작: %s", file_path)
13
+ # 엑셀 파일 읽기
14
+ df = pd.read_excel(file_path)
15
+ logging.info("엑셀 파일 읽기 완료")
16
+
17
+ # 현재 연도 기준 최근 3년 설정 (2025년 기준)
18
+ current_year = 2025
19
+ start_year = current_year - 3
20
+ logging.info("분석할 기간: %d년부터 %d년까지", start_year, current_year)
21
+
22
+ # B열이 리뷰 날짜라고 가정
23
+ df['B'] = pd.to_datetime(df.iloc[:, 1], errors='coerce')
24
+ df = df.dropna(subset=['B'])
25
+ df['Year'] = df['B'].dt.year
26
+ df['Month'] = df['B'].dt.month
27
+
28
+ # 최근 3년 데이터 필터링
29
+ df_filtered = df[(df['Year'] > start_year) & (df['Year'] <= current_year)]
30
+ logging.info("최근 3년 데이터 필터링 완료: %d개의 데이터", len(df_filtered))
31
+
32
+ # 년월별 리뷰 건수 집계
33
+ df_filtered['Year-Month'] = df_filtered['B'].dt.strftime('%Y-%m')
34
+ review_counts = df_filtered.groupby('Year-Month').size().reset_index(name='Review Count')
35
+ logging.info("월별 리뷰 건수 집계 완료")
36
+
37
+ # 새로운 시트에 저장
38
+ with pd.ExcelWriter(file_path, engine='openpyxl', mode='a') as writer:
39
+ review_counts.to_excel(writer, sheet_name='월별 리뷰건수', index=False, header=False, startrow=0, startcol=0)
40
+ logging.info("새로운 시트 '월별 리뷰건수'에 저장 완료")
41
+
42
+ return file_path
43
+ except Exception as e:
44
+ logging.error("분석 중 오류 발생: %s", e)
45
+ return None
46
+
47
+ # 그라디오 인터페이스 정의
48
+ def main():
49
+ with gr.Blocks() as demo:
50
+ gr.Markdown("# 리뷰 분석 스페이스")
51
+ with gr.Row():
52
+ file_input = gr.File(label="원본 엑셀 파일 업로드", file_types=[".xlsx"])
53
+ analyze_button = gr.Button("분석")
54
+ file_output = gr.File(label="분석된 엑셀 파일 다운로드", file_types=[".xlsx"], type="filepath")
55
+
56
+ analyze_button.click(fn=analyze_reviews, inputs=file_input, outputs=file_output)
57
 
58
+ demo.launch()
59
+
60
+ if __name__ == "__main__":
61
+ main()