diff --git a/lib/weekly_visitor_forecast_prophet.py b/lib/weekly_visitor_forecast_prophet.py index e3d45ca..b02be24 100644 --- a/lib/weekly_visitor_forecast_prophet.py +++ b/lib/weekly_visitor_forecast_prophet.py @@ -1,4 +1,7 @@ -#weekly_visitor_forecast_prophet.py +# weekly_visitor_forecast_prophet.py +# 퍼스트가든 방문객 예측 프로그램 +# prophet를 활용한 예측처리 + import os, sys import re, requests from sqlalchemy import select, and_, func @@ -13,8 +16,8 @@ from datetime import date, datetime, timedelta # 경로 설정: 프로젝트 루트 conf 폴더 내 db 및 스키마 모듈 임포트 sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) from conf import db, db_schema -from weather_forecast import get_weekly_precip # 변경된 날씨 예보 함수 임포트 -from lib.holiday import is_korean_holiday # holiday.py의 DB 기반 휴일 판단 함수 +from lib.weather_forecast import get_weekly_precip +from lib.holiday import is_korean_holiday from lib.common import load_config # DB 테이블 객체 초기화 @@ -263,6 +266,31 @@ def train_and_predict_rf(df, forecast_days=7): future_df['pos_qty'] = model.predict(future_df[['weekday', 'minTa', 'maxTa', 'sumRn', 'avgRhm', 'pm25']]) return future_df +# weekly_visitor_forecast_prophet.py 하단에 추가 +def get_forecast_dict(forecast_days=3) -> dict: + """ + 오늘 기준 forecast_days일 만큼 방문객 예측 데이터를 계산해 + {'2025-07-11': 1020, '2025-07-12': 1103, ...} 형태로 반환 + """ + today = datetime.today().date() + start_date = today - timedelta(days=365) + end_date = today + + with Session(db.engine) as session: + df = load_data(session, start_date, end_date) + + prophet_df = prepare_prophet_df(df) + forecast = train_and_predict_prophet(prophet_df, forecast_days) + + result = ( + forecast[forecast['ds'].dt.date >= today] + [['ds', 'yhat']] + .copy() + ) + result['ds'] = result['ds'].dt.strftime('%Y-%m-%d') + return dict(result.values) + + def main(): today = datetime.today().date() start_date = today - timedelta(days=365)