Spaces:
Sleeping
Sleeping
File size: 3,773 Bytes
b3f3f41 61550d2 9dd569e 46ff0e0 ff2a3a1 b3f3f41 ff2a3a1 61550d2 b2b1653 61550d2 b2b1653 61550d2 b2b1653 61550d2 b2b1653 61550d2 b2b1653 61550d2 b2b1653 61550d2 b2b1653 1c18b6b b2b1653 1c18b6b 9dd569e 1c18b6b 2012ca9 61550d2 b2b1653 61550d2 1c18b6b 61550d2 1c18b6b 61550d2 2012ca9 1c18b6b 61550d2 |
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 |
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()
|