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