휴일정보를 특일정보 API를 활용해 받아오도록 수정,
This commit is contained in:
@ -1,4 +1,7 @@
|
|||||||
#weekly_visitor_forecast_prophet.py
|
# weekly_visitor_forecast_prophet.py
|
||||||
|
# 퍼스트가든 방문객 예측 프로그램
|
||||||
|
# prophet를 활용한 예측처리
|
||||||
|
|
||||||
import os, sys
|
import os, sys
|
||||||
import re, requests
|
import re, requests
|
||||||
from sqlalchemy import select, and_, func
|
from sqlalchemy import select, and_, func
|
||||||
@ -13,8 +16,8 @@ from datetime import date, datetime, timedelta
|
|||||||
# 경로 설정: 프로젝트 루트 conf 폴더 내 db 및 스키마 모듈 임포트
|
# 경로 설정: 프로젝트 루트 conf 폴더 내 db 및 스키마 모듈 임포트
|
||||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
||||||
from conf import db, db_schema
|
from conf import db, db_schema
|
||||||
from weather_forecast import get_weekly_precip # 변경된 날씨 예보 함수 임포트
|
from lib.weather_forecast import get_weekly_precip
|
||||||
from lib.holiday import is_korean_holiday # holiday.py의 DB 기반 휴일 판단 함수
|
from lib.holiday import is_korean_holiday
|
||||||
from lib.common import load_config
|
from lib.common import load_config
|
||||||
|
|
||||||
# DB 테이블 객체 초기화
|
# 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']])
|
future_df['pos_qty'] = model.predict(future_df[['weekday', 'minTa', 'maxTa', 'sumRn', 'avgRhm', 'pm25']])
|
||||||
return future_df
|
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():
|
def main():
|
||||||
today = datetime.today().date()
|
today = datetime.today().date()
|
||||||
start_date = today - timedelta(days=365)
|
start_date = today - timedelta(days=365)
|
||||||
|
|||||||
Reference in New Issue
Block a user