Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
import pandas as pd
|
3 |
+
import matplotlib.pyplot as plt
|
4 |
+
import gradio as gr
|
5 |
+
from huggingface_hub import hf_hub_download
|
6 |
+
|
7 |
+
|
8 |
+
# Импорт датасета
|
9 |
+
column_names = [
|
10 |
+
'Продольное положение центра плавучести',
|
11 |
+
'Призматический коэффициент',
|
12 |
+
'Отношение длины к водоизмещению',
|
13 |
+
'Отношение осадки к балке',
|
14 |
+
'Отношение длины к балке',
|
15 |
+
'Число Фруда',
|
16 |
+
'Остаточное сопротивление на единицу водоизмещения'
|
17 |
+
]
|
18 |
+
|
19 |
+
dataset = pd.read_csv(r'yacht_hydrodynamics.csv', encoding='utf8', sep = ' ', names = column_names)
|
20 |
+
|
21 |
+
|
22 |
+
X = dataset.iloc[:, :-1].values
|
23 |
+
y = dataset.iloc[:, 6].values
|
24 |
+
from sklearn.impute import SimpleImputer
|
25 |
+
imputer = SimpleImputer(missing_values = np.nan, strategy = 'mean')
|
26 |
+
X[:, [1]] = imputer.fit_transform(X[:, [1]])
|
27 |
+
|
28 |
+
|
29 |
+
# Разделение данных на обучающий и тестовый наборы
|
30 |
+
from sklearn.model_selection import train_test_split
|
31 |
+
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25,
|
32 |
+
random_state = 0)
|
33 |
+
|
34 |
+
|
35 |
+
# Подгонка обучающего набора к регрессору
|
36 |
+
from sklearn.ensemble import RandomForestRegressor
|
37 |
+
rfr_model = RandomForestRegressor()
|
38 |
+
rfr_model.fit(X_train, y_train)
|
39 |
+
|
40 |
+
|
41 |
+
num_features = X_train.shape[1]
|
42 |
+
|
43 |
+
|
44 |
+
model = RandomForestRegressor()
|
45 |
+
model.fit(X_train, y_train)
|
46 |
+
|
47 |
+
|
48 |
+
# Объявление глобальных переменных
|
49 |
+
продольное_положение_центра_плавучести = None
|
50 |
+
призматический_коэффициент = None
|
51 |
+
отношение_длины_к_водоизмещению= None
|
52 |
+
отношение_осадки_к_балке = None
|
53 |
+
отношение_длины_к_балке = None
|
54 |
+
число_Фруда = None
|
55 |
+
|
56 |
+
|
57 |
+
# Функция предсказания
|
58 |
+
def predict(Продольное_положение_центра_плавучести,
|
59 |
+
Призматический_коэффициент,
|
60 |
+
Отношение_длины_к_водоизмещению,
|
61 |
+
Отношение_осадки_к_балке,
|
62 |
+
Отношение_длины_к_балке,
|
63 |
+
Число_Фруда):
|
64 |
+
|
65 |
+
global продольное_положение_центра_плавучести
|
66 |
+
global призматический_коэффициент
|
67 |
+
global отношение_длины_к_водоизмещению
|
68 |
+
global отношение_осадки_к_балке
|
69 |
+
global отношение_длины_к_балке
|
70 |
+
global число_Фруда
|
71 |
+
|
72 |
+
|
73 |
+
продольное_положение_центра_плавучести = Продольное_положение_центра_плавучести
|
74 |
+
призматический_коэффициент = Призматический_коэффициент
|
75 |
+
отношение_длины_к_водоизмещению = Отношение_длины_к_водоизмещению
|
76 |
+
отношение_осадки_к_балке = Отношение_осадки_к_балке
|
77 |
+
отношение_длины_к_балке = Отношение_длины_к_балке
|
78 |
+
число_Фруда = Число_Фруда
|
79 |
+
|
80 |
+
|
81 |
+
user_features = []
|
82 |
+
user_features.append(продольное_положение_центра_плавучести)
|
83 |
+
user_features.append(призматический_коэффициент)
|
84 |
+
user_features.append(отношение_длины_к_водоизмещению)
|
85 |
+
user_features.append(отношение_осадки_к_балке)
|
86 |
+
user_features.append(отношение_длины_к_балке)
|
87 |
+
user_features.append(число_Фруда)
|
88 |
+
input_data = np.array([user_features])
|
89 |
+
return f"Остаточное сопротивление: {model.predict(input_data)[0]}"
|
90 |
+
|
91 |
+
|
92 |
+
#Создание интерфейса Gradio
|
93 |
+
interface = gr.Interface(
|
94 |
+
fn= predict,
|
95 |
+
inputs=[gr.Textbox(label="Продольное положение центра плавучести"),
|
96 |
+
gr.Textbox(label="Призматический коэффициент"),
|
97 |
+
gr.Textbox(label="Отношение длины к водоизмещению"),
|
98 |
+
gr.Textbox(label="Отношение осадки к балке"),
|
99 |
+
gr.Textbox(label="Отношение длины к балке"),
|
100 |
+
gr.Textbox(label="Число Фруда"),
|
101 |
+
],
|
102 |
+
outputs=["text"],
|
103 |
+
)
|
104 |
+
|
105 |
+
interface.launch()
|