Spaces:
Sleeping
Sleeping
import tensorflow as tf | |
import numpy as np | |
import gradio as gr | |
from sklearn.preprocessing import MinMaxScaler | |
import pandas as pd | |
import random | |
# Загрузка модели из локального файла | |
model = tf.keras.models.load_model('bezrabotica.keras') | |
# Загрузка данных из локального файла | |
data = pd.read_csv('data.csv') | |
# Оставляем только нужные столбцы | |
columns_to_keep = [ | |
'territory', | |
'num_economactivepopulation_all', | |
'employed_num_all', | |
'unemployed_num_all', | |
'eactivity_lvl', | |
'employment_lvl', | |
'unemployment_lvl', | |
'dis_unagegroup_30-39', | |
'dis_emagegroup_30-39', | |
'num_unagegroup_30-39', | |
'num_emagegroup_30-39', | |
'year' | |
] | |
data = data[columns_to_keep] | |
# Заполнение пропущенных значений | |
data.fillna(data.mean(numeric_only=True), inplace=True) | |
# Очистка данных для столбца "territory" | |
def clean_territory(value): | |
if isinstance(value, str) and len(value) > 100: | |
return value[:100] | |
return value | |
data['territory'] = data['territory'].apply(clean_territory) | |
data['territory'] = data['territory'].astype(str).str.strip() | |
# Маппинг территории | |
territory_mapping = {territory: idx for idx, territory in enumerate(data['territory'].unique())} | |
territory_reverse_mapping = {v: k for k, v in territory_mapping.items()} | |
data['territory'] = data['territory'].map(territory_mapping) | |
# Нормализация данных | |
scaler = MinMaxScaler() | |
normalized_data = scaler.fit_transform(data.drop(['year'], axis=1)) | |
normalized_df = pd.DataFrame(normalized_data, columns=[col for col in data.columns if col != 'year']) | |
normalized_df['year'] = data['year'].values | |
# Функция предсказания | |
def predict_unemployment(territory): | |
if territory not in territory_mapping: | |
return "Неверное название территории. Пожалуйста, выберите из списка." | |
predictions = [] | |
current_year = data['year'].max() + 1 | |
for i in range(5): | |
sample_row = data[data['territory'] == territory_mapping[territory]].iloc[-1].copy() | |
sample_row['year'] = current_year | |
input_data = sample_row.drop('year').values.reshape(1, -1) | |
# Нормализация входных данных | |
input_normalized = scaler.transform(input_data) | |
input_sequence = np.expand_dims(input_normalized, axis=0) | |
# Прогноз | |
prediction = model.predict(input_sequence) | |
random_variation = random.uniform(-0.5, 0.5) # Добавление случайной вариации | |
adjusted_prediction = max(0, prediction[0][0] * 100 + random_variation) # Гарантия, что результат не отрицательный | |
predictions.append((current_year, f"{adjusted_prediction:.2f}")) | |
# Обновление года | |
current_year += 1 | |
return [[year, value] for year, value in predictions] | |
# Интерфейс Gradio | |
interface = gr.Interface( | |
fn=predict_unemployment, | |
inputs=[ | |
gr.Dropdown(label="Территория", choices=list(territory_mapping.keys())) | |
], | |
outputs=[ | |
gr.Dataframe(headers=["Год", "Прогноз уровня безработицы (%)"], label="Прогноз на ближайшие 5 лет") | |
], | |
title="Модель прогнозирования уровня безработицы", | |
description="Выберите территорию для прогноза уровня безработицы на ближайшие 5 лет." | |
) | |
interface.launch() | |