import gradio as gr import pandas as pd import pickle # 모델 로딩 함수 def load_model(): with open("model.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'{cost:,.0f}원' for cost in pred[0]] with gr.Blocks() as demo: gr.Markdown("HG 공사비 예측 모델") with gr.Row(): 구조 = gr.Dropdown(label="구조", choices=['철근콘크리트조', '철골조', '철골철근콘크리트조', '-', '기타'], value='철근콘크리트조') # '...'부분에 다른 구조 타입 추가 with gr.Row(): 지하층수 = gr.Number(label="지하층수", value=1) 지상층수 = gr.Number(label="지상층수", value=1) 주차수 = gr.Number(label="주차대수", value=50) with gr.Row(): 연면적 = gr.Number(label="연면적(m2)", value=300) 대지면적 = gr.Number(label="대지면적(m2)", value=500) 건축면적 = gr.Number(label="건축면적(m2)", value=120) 조경면적 = gr.Number(label="조경면적(m2)", value=150) with gr.Row(): 발주년 = gr.Number(label="발주년", value=2023) 발주월 = gr.Number(label="발주월", value=9) 공사기간 = gr.Number(label="공사기간(일)", value=100) with gr.Row(): 현장위치 = gr.Dropdown(label="현장위치", choices=['서울특별시', '제주특별자치도', '경상북도', '울산광역시', '광주광역시', '경기도', '충청북도', '경상남도', '전라남도', '부산광역시', '충청남도', '대구광역시', '강원도', '인천광역시', '전라북도', '세종특별자치시', '대전광역시', '강원특별자치도'], value='경기도') # '...'부분에 다른 현장 위치 추가 건축법상용도 = gr.Dropdown(label="건축법상용도", choices=['근린생활시설', '격납고', '공공업무시설', '공동주택', '공원시설', '공장', '공항시설', '관광휴게시설', '교육연구시설', '교육연구시설 ', '기숙사', '군사시설', '교정시설', '업무시설', '기타학교시설', '노유자 시설', '노유자시설', '데이터센터', '동물및식물관련시설', '묘지 관련 시설', '묘지관련시설', '문화및집회시설', '문화및 집회시설', '방송통신시설', '사회복지시설', '설공공업무시설', '수련시설', '업무시설 ', '연구시설', '운동시설', '운수시설', '운수시설 ', '의료시설', '자동차관련시설', '자원순환관련시설', '전시시설', '주차장', '창고시설', '체육시설', '판매시설'], value='업무시설') # '...'부분에 다른 건축법상용도 추가 btn = gr.Button("예측") btn.click( predict_cost, inputs=[ 구조, 지하층수, 지상층수, 주차수, 연면적, 대지면적, 건축면적, 조경면적, 발주년, 발주월, 공사기간, 현장위치, 건축법상용도 ], outputs=[ gr.Textbox(label="건축공사비"), gr.Textbox(label="기계공사비"), gr.Textbox(label="전기공사비"), gr.Textbox(label="통신공사비"), gr.Textbox(label="토목공사비"), gr.Textbox(label="조경공사비") ] ) demo.launch()