import gradio as gr import pandas as pd import pickle # 모델 로딩 함수 def load_model(시설유형): with open(시설유형+".pkl", "rb") as file: loaded_pipeline = pickle.load(file) return loaded_pipeline # 예측 함수 정의 def predict_cost(시설유형, 구조, 지하층수, 지상층수, 기준층층고, 최고높이, 연면적, 대지면적, 건축면적, 조경면적, 주차대수, 발주년도, 발주월, 현장위치): new_project = { '구조': [구조], '지하층수': [지하층수], '지상층수': [지상층수], '기준층층고': [기준층층고], '최고높이': [최고높이], '주차대수': [주차대수], '연면적': [연면적], '대지면적': [대지면적], '건축면적': [건축면적], '조경면적': [조경면적], '발주년도': [발주년도], '발주월': [발주월], '현장위치': [현장위치], } model = load_model(시설유형) pred = model.predict(pd.DataFrame.from_dict(new_project)) return f'{pred[0]:,.0f}일' with gr.Blocks() as demo: gr.Markdown("## HG 공사기간 예측 모델") with gr.Row(): 시설유형 = gr.Dropdown(label="시설유형", choices=["일반청사","일반형초중고","기타시설","복합형초중고","대형청사","일반형연구소","노유자시설","일반형전시시설","실험용연구시설","복합형체육시설","복합형대학교","강의형대학교","복지시설","도서관","일반형수련시설","기숙사","대형의료시설","일반형공장","첨단연구시설","복합형수련시설","특수형공장"], value='강의형대학교') # '...'부분에 다른 시설유형 추가 현장위치 = gr.Dropdown(label="현장위치", choices=['서울특별시', '제주특별자치도', '경상북도', '울산광역시', '광주광역시', '경기도', '충청북도', '경상남도', '전라남도', '부산광역시', '충청남도', '대구광역시', '강원도', '인천광역시', '전라북도', '세종특별자치시', '대전광역시', '강원특별자치도'], value='광주광역시') 구조 = gr.Dropdown(label="구조", choices=['철근콘크리트조', '철골조', '철골철근콘크리트조', '기타'], value='철골철근콘크리트조') # '...'부분에 다른 구조 타입 추가 with gr.Row(): 지하층수 = gr.Number(label="지하층수", value=0) 지상층수 = gr.Number(label="지상층수", value=7) 기준층층고 = gr.Number(label="기준층층고(m)", value=4.5) 최고높이 = gr.Number(label="최고높이(m)", value=33.9) with gr.Row(): 연면적 = gr.Number(label="연면적(m2)", value=4451) 대지면적 = gr.Number(label="대지면적(m2)", value=989860) 건축면적 = gr.Number(label="건축면적(m2)", value=922) 조경면적 = gr.Number(label="조경면적(m2)", value=180) with gr.Row(): 주차수 = gr.Number(label="주차대수", value=7) 발주년 = gr.Number(label="발주년도", value=2023) 발주월 = gr.Number(label="발주월", value=8) btn = gr.Button("공사기간 예측") btn.click( predict_cost, inputs=[ 시설유형, 구조, 지하층수, 지상층수, 기준층층고, 최고높이, 연면적, 대지면적, 건축면적, 조경면적, 주차수, 발주년, 발주월, 현장위치 ], outputs=[ gr.Textbox(label="공사기간") ] ) demo.launch()