File size: 3,367 Bytes
752f8c7 b3c0282 3def092 b3c0282 3def092 b3c0282 3def092 b3c0282 3def092 b3c0282 3def092 b3c0282 3def092 4fd2d6c 3cd95df 53abbee b3c0282 4b73621 b3c0282 4fd2d6c 3cd95df 4b73621 b3c0282 1110eae b3c0282 1110eae b3c0282 1110eae 3def092 b3c0282 |
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 70 71 72 73 74 75 76 77 78 |
import gradio as gr
import pandas as pd
from datetime import datetime
import logging
# λ‘κ·Έ μ€μ
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def analyze_reviews(file_path):
try:
logger.info("μμ
νμΌ μ
λ‘λ μμ")
# μμ
νμΌ μ½κΈ°
df = pd.read_excel(file_path)
logger.info("μμ
νμΌ μ½κΈ° μλ£")
# νμ¬ μ°λ
current_year = 2025
start_year = current_year - 3 # μ΅κ·Ό 3λ
logger.info(f"λ°μ΄ν° νν°λ§: {start_year}λ
λΆν° {current_year}λ
κΉμ§")
# Bμ΄μ΄ 리뷰 λ μ§λΌκ³ κ°μ νκ³ , 'B' μ΄μ μ΄λ¦μ '리뷰λ μ§'λ‘ λ³κ²½
if '리뷰λ μ§' not in df.columns:
df.rename(columns={df.columns[1]: '리뷰λ μ§'}, inplace=True)
# 리뷰 λ μ§λ₯Ό datetimeμΌλ‘ λ³ν
df['리뷰λ μ§'] = pd.to_datetime(df['리뷰λ μ§'], errors='coerce')
# μ΅κ·Ό 3λ
λ°μ΄ν° νν°λ§
df_recent = df[df['리뷰λ μ§'].dt.year >= start_year]
logger.info("μ΅κ·Ό 3λ
λ°μ΄ν° νν°λ§ μλ£")
# λ
λλ³ λ¦¬λ·° 건μ ν©μ° κ³μ°
logger.info("λ
λλ³ λ¦¬λ·° 건μ μ§κ³ μμ")
df_recent['λ
λ'] = df_recent['리뷰λ μ§'].dt.year
yearly_review_counts = df_recent.groupby('λ
λ').size().reset_index(name='리뷰건μ')
logger.info("λ
λλ³ λ¦¬λ·° 건μ μ§κ³ μλ£")
# μλ³ λ¦¬λ·° 건μ ν©μ° κ³μ°
logger.info("μλ³ λ¦¬λ·° 건μ μ§κ³ μμ")
df_recent['λ
μ'] = df_recent['리뷰λ μ§'].dt.to_period('M').astype(str)
monthly_review_counts = df_recent.groupby('λ
μ').size().reset_index(name='리뷰건μ')
# λλ½λ μ μ±μ°κΈ°
logger.info("λλ½λ μ μ±μ°κΈ° μμ")
all_months = pd.period_range(start=f"{start_year}-01", end=f"{current_year}-12", freq='M').astype(str)
monthly_review_counts = monthly_review_counts.set_index('λ
μ').reindex(all_months, fill_value=0).reset_index()
monthly_review_counts.columns = ['λ
μ', '리뷰건μ']
logger.info("λλ½λ μ μ±μ°κΈ° μλ£")
# μλ‘μ΄ μνΈμ μ μ₯
logger.info("μλ‘μ΄ μνΈμ λ°μ΄ν° μ μ₯ μμ")
with pd.ExcelWriter(file_path, engine='openpyxl', mode='a') as writer:
yearly_review_counts.to_excel(writer, sheet_name='λ
λλ³λ¦¬λ·°μ', index=False)
monthly_review_counts.to_excel(writer, sheet_name='μλ³λ¦¬λ·°μ', index=False)
logger.info("μλ‘μ΄ μνΈμ λ°μ΄ν° μ μ₯ μλ£")
return file_path
except Exception as e:
logger.error(f"λΆμ μ€ μ€λ₯ λ°μ: {e}")
return None
# κ·ΈλΌλμ€ μΈν°νμ΄μ€ ꡬμ±
def main():
logger.info("κ·ΈλΌλμ€ μΈν°νμ΄μ€ μμ")
with gr.Blocks() as demo:
gr.Markdown("### 리뷰 λΆμ μ€νμ΄μ€")
with gr.Row():
file_input = gr.File(label="μλ³Έ μμ
νμΌ μ
λ‘λ", file_types=[".xlsx"])
file_output = gr.File(label="λΆμλ μμ
νμΌ λ€μ΄λ‘λ", type="filepath")
analyze_button = gr.Button("λΆμ")
analyze_button.click(fn=analyze_reviews, inputs=file_input, outputs=file_output)
demo.launch()
if __name__ == "__main__":
main()
|