Spaces:
Sleeping
Sleeping
File size: 5,029 Bytes
98d9a60 fee7f0e a70211f fee7f0e a70211f 98d9a60 fee7f0e a70211f fee7f0e a70211f fee7f0e fefe649 fee7f0e a70211f fee7f0e a70211f fee7f0e a70211f fee7f0e 4abfa37 a70211f fee7f0e a9a7e3e ea61704 fee7f0e a9a7e3e c4582c5 fee7f0e a9a7e3e ea61704 fee7f0e ea61704 fee7f0e 98d9a60 a70211f fee7f0e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
'''
Приложение для запуска на Hugging Face Spaces
'''
import gradio as gr
import pandas as pd
from huggingface_hub import hf_hub_download
import joblib
from geopy.geocoders import Nominatim, Photon
from geopy.exc import GeocoderTimedOut, GeocoderUnavailable
import time
# Загрузка модели из репозитория HF
model_path = hf_hub_download(repo_id="Nikgorby/real_estate_predict", filename="random_forest_model (1).pkl")
model = joblib.load(model_path)
def predict(features_lst: list, model):
"""Получение предсказаний от модели
Args:
features_lst (list): список фичей
model (model): обученная модель
Returns:
list: предсказание
"""
# Предсказание
predictions = model.predict(features_lst)
return predictions
# end def
def addr_to_coords(addr: str):
"""Функция получения координат по адресу
Args:
addr (str): Строка с адресом
Returns:
float: координаты широта, долгота
"""
geolocator = Photon(user_agent="my_geocoder")
# Геокодирование адреса
try:
# попытка получения координат
location = geolocator.geocode(addr)
if (location):
# координаты получены
return location.latitude, location.longitude
else:
# координаты не получены
return 0, 0
# end if
except (GeocoderTimedOut, GeocoderUnavailable) as e:
print(f"Error: {e}. Retrying...")
time.sleep(2) # Добавляем задержку перед повторной попыткой
return addr_to_coords(addr)
# end try
def predict_out(baths, square, beds, address, pool, property_type, state, year_built, remodeled_year, avg_school_rating, schools_qty, avg_school_dist):
"""Функция получения предсказания от модели
Args:
args: фичи
Returns:
float: предсказание модели
"""
# Формирование признака объекта
lst = [0]*8
lst[property_type] = 1
property_type = ", ".join(map(str, lst))
# Преобразование адреса в координаты
coords = addr_to_coords(address)
coords = ", ".join(map(str, coords))
# Формирование списка фичей
features_lst = f'{baths}, {square}, {beds}, {coords}, {pool}, {property_type}, {state}, {year_built}, {remodeled_year}, {avg_school_rating}, {schools_qty}, {avg_school_dist}'
features_lst = features_lst.split(", ")
features_lst = [float(num) for num in features_lst]
features_lst = [features_lst]
# Предсказание
predictions = predict(features_lst, model)
# Возвращение предсказаний в виде DataFrame
result = int(predictions[0])
return features_lst, result
# Создание интерфейса Gradio
title = "Демо модели"
description = "Введите фичи."
iface = gr.Interface(
fn=predict_out,
inputs=[gr.Textbox(label="Кол-во ванных", value=1),
gr.Textbox(label="Площадь, кв. фут.", value=1),
gr.Textbox(label="Кол-во спален", value=1),
gr.Textbox(label="Адрес в виде 32413 Crystal Breeze Ln, Leesburg", value="32413 Crystal Breeze Ln, Leesburg"),
gr.Radio(
["Нет", "Да"], type="index",
label = "Бассейн",
value="Нет"
),
gr.Dropdown(
["Кондоминиум", "Зем. участок", "На неск. семей", "Другое", "Ранчо", "На одну семью", "Таунхаус", "Традиционное"],
label='Тип объекта',
type="index",
value="Кондоминиум"
),
gr.Textbox(label='Штат (номер)', value=12),
gr.Textbox(label="Год постройки", value=1999),
gr.Textbox(label="Год капитального ремонта (0 если не проводился)", value=0),
gr.Textbox(label="Средний рейтинг школ рядом (от 0 до 1)", value=1),
gr.Textbox(label="Количество школ рядом", value=1),
gr.Textbox(label="Среднее расстояние до школы, миль", value=1),
],
outputs=[gr.Textbox(label="Строка фичей, передаваемая в модель (для контроля)"),
gr.Textbox(label="Предсказание, $")],
title=title,
description=description,
allow_flagging='never'
)
# Запуск приложения
iface.launch() |