|
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() |
|
|