Kims12 commited on
Commit
00dc9b3
·
verified ·
1 Parent(s): ce0dbd0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -52
app.py CHANGED
@@ -1,68 +1,64 @@
1
  import gradio as gr
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
- if not file.name.endswith(('.xlsx', '.xls')):
14
- logging.error("업로드된 파일이 엑셀 파일이 아닙니다.")
15
- return None
16
-
17
  # 엑셀 파일 읽기
18
- df = pd.read_excel(file.name, engine='openpyxl')
19
- logging.info("엑셀 파일 읽기 완료.")
20
-
21
- # 현재 연도 설정 (2025년 기준)
22
  current_year = 2025
23
- start_date = datetime(current_year - 3, 1, 1)
24
- end_date = datetime(current_year, 12, 31)
25
-
26
- logging.info(f"데이터 필터링: {start_date}부터 {end_date}까지.")
27
- # B열을 날짜로 변환하고 timezone 정보 제거
28
- df['B'] = pd.to_datetime(df.iloc[:, 1]).dt.tz_convert(None) if df.iloc[:, 1].dtype == 'datetime64[ns, UTC]' else pd.to_datetime(df.iloc[:, 1])
29
 
 
 
30
  # 최근 3년 데이터 필터링
31
- mask = (df['B'] >= start_date) & (df['B'] <= end_date)
32
- filtered_df = df.loc[mask]
33
- logging.info(f"필터링된 데이터 행 수: {len(filtered_df)}.")
34
-
35
- if filtered_df.empty:
36
- logging.warning("필터링된 데이터가 없습니다.")
37
- return None
38
-
39
- # 년월별 리뷰 건수 집계
40
- filtered_df['Year-Month'] = filtered_df['B'].dt.strftime('%Y-%m')
41
- review_counts = filtered_df.groupby('Year-Month').size().reset_index(name='리뷰건수')
42
- logging.info("년월별 리뷰 건수 집계 완료.")
43
-
44
- # 새로운 시트에 작성
45
- output_file = "분석_결과.xlsx"
46
- with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
47
- df.to_excel(writer, index=False, sheet_name='원본 데이터') # 원본 데이터를 새 파일에 저장
48
- review_counts.to_excel(writer, sheet_name='월별 리뷰건수', index=False, header=['A열', 'B열'])
49
- logging.info("새로운 시트 '월별 리뷰건수' 작성 완료.")
50
-
51
- return output_file
52
  except Exception as e:
53
- logging.error(f"오류 발생: {e}")
54
  return None
55
 
56
- # Gradio 인터페이스 구성
57
- with gr.Blocks() as demo:
58
- gr.Markdown("# 리뷰 분석 스페이스")
59
- with gr.Row():
60
- file_input = gr.File(label="원본 엑셀 파일 업로드")
61
- analyze_button = gr.Button("분석")
62
- file_output = gr.File(label="분석된 엑셀 파일 다운로드", type="filepath")
 
 
 
 
63
 
64
- analyze_button.click(fn=analyze_reviews, inputs=file_input, outputs=file_output)
65
 
66
- # 스페이스 실행
67
  if __name__ == "__main__":
68
- demo.launch()
 
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()