Spaces:
Sleeping
Sleeping
File size: 5,021 Bytes
2e9c8f6 279040d 2e9c8f6 279040d 8e365f3 2e9c8f6 2cc4b8e 8e365f3 2cc4b8e 983f789 2e9c8f6 0345bbc 2e9c8f6 2cc4b8e 2e9c8f6 2cc4b8e 2e9c8f6 b4cfee1 7e9ed98 2cc4b8e 2e9c8f6 8c562fd 2e9c8f6 2cc4b8e 2e9c8f6 2cc4b8e 2e9c8f6 0081f54 2cc4b8e |
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 |
import gradio as gr
import tensorflow as tf
import numpy as np
import pandas as pd
from datasets import load_dataset
from huggingface_hub import hf_hub_download
# Загрузка файла модели из Hugging Face Hub
model_path = hf_hub_download(repo_id="1sozidatel1/PricePredictorAI_Model", filename="price_model.h5")
# Загрузка модели
model = tf.keras.models.load_model(model_path)
# Карты местоположений и районов
location_mapping = {1: 'Астрахань', 2: 'Волгоград', 3: 'Краснодар', 4: 'Ростов-на-Дону', 5: 'Майкоп', 6: 'Элиста'}
district_mapping = {
1: [11, 12, 13, 14, 15],
2: [21, 22, 23, 24, 25, 26, 27, 28],
3: [31, 32, 33, 34],
4: [41, 42, 43, 44, 45, 46, 47, 48],
5: [51],
6: [61]
}
district_names = {
11: 'Кировский', 12: 'Ленинский', 13: 'Советский', 14: 'Трусовский', 15: 'Центральный',
21: 'Ворошиловский', 22: 'Дзержинский', 23: 'Кировский', 24: 'Красноармейский', 25: 'Краснооктябрьский', 26: 'Советский', 27: 'Тракторозаводский', 28: 'Центральный',
31: 'Западный', 32: 'Карасунский', 33: 'Прикубанский', 34: 'Центральный',
41: 'Ворошиловский', 42: 'Железнодорожный', 43: 'Кировский', 44: 'Ленинский', 45: 'Октябрьский', 46: 'Первомайский', 47: 'Пролетарский', 48: 'Советский',
51: 'Центральный',
61: 'Центральный'
}
author_type_mapping = {0: 'Риелтор', 1: 'Частный владелец'}
# Загрузка данных
dataset = load_dataset("1sozidatel1/sfd_housing_prices_november_2024")
data = pd.DataFrame(dataset['train'])
feature_cols = ['author_type_id', 'location_id', 'district_id', 'floor', 'rooms_count', 'total_meters']
X = data[feature_cols]
X_min = X.min()
X_max = X.max()
y = data['price'].values.reshape(-1, 1)
y_min = np.min(y)
y_max = np.max(y)
def predict_price(author_type, location, district, floor, rooms_count, total_meters):
author_type_id = list(author_type_mapping.keys())[list(author_type_mapping.values()).index(author_type)]
location_id = list(location_mapping.keys())[list(location_mapping.values()).index(location)]
district_id = list(district_names.keys())[list(district_names.values()).index(district)]
input_data = np.array([[author_type_id, location_id, district_id, floor, rooms_count, total_meters]])
input_data_normalized = (input_data - X_min.values) / (X_max.values - X_min.values)
prediction = model.predict(input_data_normalized)
prediction_unscaled = prediction * (y_max - y_min) + y_min
return np.round(prediction_unscaled.flatten()[0], 1)
def update_districts(location):
location_id = list(location_mapping.keys())[list(location_mapping.values()).index(location)]
districts = [district_names[district_id] for district_id in district_mapping[location_id]]
return gr.update(choices=districts)
# Создание интерфейса Gradio
with gr.Blocks() as demo:
gr.Markdown("# Предсказание цен на квартиры в Южном Федеральном Округе")
gr.Markdown("Этот интерфейс позволяет предсказать цену на недвижимость на основе различных параметров, таких как тип продавца, город, район, этаж, количество комнат и площадь.")
gr.Markdown("Введите необходимые данные и нажмите кнопку 'Предсказать цену', чтобы получить предсказанную цену.")
gr.Markdown("❗️Все поля обязательны для заполнения❗️")
with gr.Row():
with gr.Column():
author_type = gr.Dropdown(choices=list(author_type_mapping.values()), label="Тип продавца")
location = gr.Dropdown(choices=list(location_mapping.values()), label="Город")
district = gr.Dropdown(label="Район")
floor = gr.Number(label="Этаж", minimum=1, maximum=50)
rooms_count = gr.Dropdown(choices=[1, 2, 3, 4, 5], label="Количество комнат")
total_meters = gr.Number(label="Площадь, кв.м", minimum=18, maximum=500)
predict_btn = gr.Button("Предсказать цену")
with gr.Column():
price = gr.Number(label="Предсказанная цена, (тыс. руб.)")
location.change(update_districts, inputs=location, outputs=district)
predict_btn.click(predict_price, inputs=[author_type, location, district, floor, rooms_count, total_meters], outputs=price)
if __name__ == "__main__":
demo.launch() |