| 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 |
|
|
| logger.info(f"λ°μ΄ν° νν°λ§: {start_year}λ
λΆν° {current_year}λ
κΉμ§") |
| |
| if '리뷰λ μ§' not in df.columns: |
| df.rename(columns={df.columns[1]: '리뷰λ μ§'}, inplace=True) |
| |
| |
| df['리뷰λ μ§'] = pd.to_datetime(df['리뷰λ μ§'], errors='coerce') |
| |
| 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() |
|
|