DimaJett's picture
Create app.py
6053fdb verified
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import gradio as gr
from huggingface_hub import hf_hub_download
# Импорт датасета
column_names = [
'Продольное положение центра плавучести',
'Призматический коэффициент',
'Отношение длины к водоизмещению',
'Отношение осадки к балке',
'Отношение длины к балке',
'Число Фруда',
'Остаточное сопротивление на единицу водоизмещения'
]
dataset = pd.read_csv(r'yacht_hydrodynamics.csv', encoding='utf8', sep = ' ', names = column_names)
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 6].values
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values = np.nan, strategy = 'mean')
X[:, [1]] = imputer.fit_transform(X[:, [1]])
# Разделение данных на обучающий и тестовый наборы
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25,
random_state = 0)
# Подгонка обучающего набора к регрессору
from sklearn.ensemble import RandomForestRegressor
rfr_model = RandomForestRegressor()
rfr_model.fit(X_train, y_train)
num_features = X_train.shape[1]
model = RandomForestRegressor()
model.fit(X_train, y_train)
# Объявление глобальных переменных
продольное_положение_центра_плавучести = None
призматический_коэффициент = None
отношение_длины_к_водоизмещению= None
отношение_осадки_к_балке = None
отношение_длины_к_балке = None
число_Фруда = None
# Функция предсказания
def predict(Продольное_положение_центра_плавучести,
Призматический_коэффициент,
Отношение_длины_к_водоизмещению,
Отношение_осадки_к_балке,
Отношение_длины_к_балке,
Число_Фруда):
global продольное_положение_центра_плавучести
global призматический_коэффициент
global отношение_длины_к_водоизмещению
global отношение_осадки_к_балке
global отношение_длины_к_балке
global число_Фруда
продольное_положение_центра_плавучести = Продольное_положение_центра_плавучести
призматический_коэффициент = Призматический_коэффициент
отношение_длины_к_водоизмещению = Отношение_длины_к_водоизмещению
отношение_осадки_к_балке = Отношение_осадки_к_балке
отношение_длины_к_балке = Отношение_длины_к_балке
число_Фруда = Число_Фруда
user_features = []
user_features.append(продольное_положение_центра_плавучести)
user_features.append(призматический_коэффициент)
user_features.append(отношение_длины_к_водоизмещению)
user_features.append(отношение_осадки_к_балке)
user_features.append(отношение_длины_к_балке)
user_features.append(число_Фруда)
input_data = np.array([user_features])
return f"Остаточное сопротивление: {model.predict(input_data)[0]}"
#Создание интерфейса Gradio
interface = gr.Interface(
fn= predict,
inputs=[gr.Textbox(label="Продольное положение центра плавучести"),
gr.Textbox(label="Призматический коэффициент"),
gr.Textbox(label="Отношение длины к водоизмещению"),
gr.Textbox(label="Отношение осадки к балке"),
gr.Textbox(label="Отношение длины к балке"),
gr.Textbox(label="Число Фруда"),
],
outputs=["text"],
)
interface.launch()