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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -50
app.py CHANGED
@@ -1,64 +1,60 @@
1
  import gradio as gr
2
  import pandas as pd
3
  from datetime import datetime
4
- import logging
5
 
6
- # 로그 설정
7
- logging.basicConfig(level=logging.INFO)
8
- logger = logging.getLogger(__name__)
9
 
 
10
  def analyze_reviews(file_path):
11
- try:
12
- logger.info("엑셀 파일 업로드 시작")
13
- # 엑셀 파일 읽기
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
- return file_path
45
- except Exception as e:
46
- logger.error(f"분석 오류 발생: {e}")
47
- return None
48
 
49
- # 그라디오 인터페이스 구성
50
- def main():
51
- logger.info("그라디오 인터페이스 시작")
52
- with gr.Blocks() as demo:
53
- gr.Markdown("### 리뷰 분석 스페이스")
54
- with gr.Row():
55
- file_input = gr.File(label="원본 엑셀 파일 업로드", file_types=[".xlsx"])
56
- file_output = gr.File(label="분석된 엑셀 파일 다운로드", type="filepath")
57
- analyze_button = gr.Button("분석")
58
-
59
- analyze_button.click(fn=analyze_reviews, inputs=file_input, outputs=file_output)
60
 
61
- demo.launch()
62
 
63
- if __name__ == "__main__":
64
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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()