Kims12 commited on
Commit
5e76f66
·
verified ·
1 Parent(s): 99eadfa

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -42
app.py CHANGED
@@ -2,60 +2,56 @@ 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()
 
2
  import pandas as pd
3
  import logging
4
  from datetime import datetime
 
5
 
6
  # 로깅 설정
7
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
8
 
9
+ def analyze_reviews(file):
10
  try:
11
+ logging.info("파일 업로드 시작.")
12
  # 엑셀 파일 읽기
13
+ df = pd.read_excel(file.name, engine='openpyxl')
14
+ logging.info("엑셀 파일 읽기 완료.")
15
+
16
+ # 현재 연도 설정 (2025년 기준)
17
  current_year = 2025
18
+ start_date = datetime(current_year - 3, 1, 1)
19
+ end_date = datetime(current_year, 12, 31)
20
+
21
+ logging.info(f"데이터 필터링: {start_date}부터 {end_date}까지.")
22
+ # B열을 날짜로 변환
23
+ df['B'] = pd.to_datetime(df.iloc[:, 1])
24
+
 
 
25
  # 최근 3년 데이터 필터링
26
+ mask = (df['B'] >= start_date) & (df['B'] <= end_date)
27
+ filtered_df = df.loc[mask]
28
+ logging.info(f"필터링된 데이터 행 수: {len(filtered_df)}.")
29
+
30
  # 년월별 리뷰 건수 집계
31
+ filtered_df['Year-Month'] = filtered_df['B'].dt.strftime('%Y-%m')
32
+ review_counts = filtered_df.groupby('Year-Month').size().reset_index(name='리뷰건수')
33
+ logging.info("년월별 리뷰 건수 집계 완료.")
34
+
35
+ # 새로운 시트에 작성
36
+ with pd.ExcelWriter(file.name, engine='openpyxl', mode='a') as writer:
37
+ review_counts.to_excel(writer, sheet_name='월별 리뷰건수', index=False, header=['A열', 'B열'])
38
+ logging.info("새로운 시트 '월별 리뷰건수' 작성 완료.")
39
+
40
+ return file.name
41
  except Exception as e:
42
+ logging.error(f"오류 발생: {e}")
43
  return None
44
 
45
+ # Gradio 인터페이스 구성
46
+ with gr.Blocks() as demo:
47
+ gr.Markdown("# 리뷰 분석 스페이스")
48
+ with gr.Row():
49
+ file_input = gr.File(label="원본 엑셀 파일 업로드")
50
+ analyze_button = gr.Button("분석")
51
+ file_output = gr.File(label="분석된 엑셀 파일 다운로드", type="filepath")
 
 
 
52
 
53
+ analyze_button.click(fn=analyze_reviews, inputs=file_input, outputs=file_output)
54
 
55
+ # 스페이스 실행
56
  if __name__ == "__main__":
57
+ demo.launch()