Spaces:
Sleeping
Sleeping
File size: 9,018 Bytes
c85536d e234c0f c85536d 4e810c2 bdb3ff8 4e810c2 bdb3ff8 c85536d e234c0f 107757b c85536d 107757b e234c0f 107757b c85536d b35451c 107757b 2e23ee1 b35451c c85536d e234c0f eed1448 c85536d b35451c 2e8c2f0 ddcf2c9 2e8c2f0 c85536d b35451c a58a373 2e8c2f0 f07e5ac a58a373 c85536d b35451c a58a373 2e8c2f0 b35451c fff6fbb a58a373 fff6fbb b35451c fff6fbb c85536d 82e3610 b35451c 9a698e4 82e3610 b35451c c85536d e234c0f 2e8c2f0 107757b a8ead78 2e8c2f0 107757b e234c0f 2e8c2f0 e234c0f 2e8c2f0 e234c0f 107757b e234c0f bdb3ff8 4e810c2 eed1448 ddfd929 eed1448 ddfd929 bdb3ff8 e234c0f bdb3ff8 eed1448 ddfd929 bdb3ff8 ddfd929 03a3a9b bdb3ff8 b35451c e234c0f fff6fbb e234c0f fff6fbb 6229cc8 9860f2f e234c0f b35451c e234c0f be02de4 fff6fbb 2e8c2f0 fff6fbb e234c0f 2e8c2f0 b35451c a8ead78 e234c0f 67b30c7 107757b fff6fbb e234c0f fff6fbb |
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
import streamlit as st
import pandas as pd
import numpy as np
import json
import random
import matplotlib.pyplot as plt
st.title('Каталог профессий IT и Продажи')
#"""Внедрение модели"""
from predict import CatBoostPredictor
# import sys
predictor = CatBoostPredictor("catboostregressor_IT_and_sales.json",
"heuristic_regressor.json")
# """Внедрение модели"""
st.sidebar.title('Выбор параметров для подбора вакансий')
with open('catalog.json', 'r') as json_file:
data_main = json.load(json_file)
df3 = pd.DataFrame(data_main)
df1 = df3[['Сфера', 'Компания', 'Должность', 'Зарплата (руб.)', 'Необходимые навыки']]
df2 = df3[['Должность', 'Необходимые навыки', 'Подходящие курсы Нетологии', 'Ссылки']]
#
# with open('main_table.json', 'r') as json_file:
# data_main = json.load(json_file)
# df1 = pd.DataFrame(data_main)
#
# with open('dop_table.json', 'r') as json_file:
# data_dop = json.load(json_file)
# df2= pd.DataFrame(data_dop)
# df1['Необходимые навыки'] = [i.lower().replace('.', '').replace('-', '') for i in df1['Необходимые навыки']]
# df2['Необходимые навыки'] = [i.lower().replace('.', '').replace('-', '') for i in df2['Необходимые навыки']]
dohod = 0
i = 0
with st.sidebar:
sphere = st.selectbox(
"Выбери сферу:", options = list(df1['Сфера'].unique()), key=1)
st.write("Выбрано:", sphere)
job = st.selectbox(
"Выбери профессию:", options=list(df1['Должность'].unique()), key=2)
st.write("Выбрано:", job)
# st.write(df.columns)
age = st.number_input(
"Введите возраст",
min_value=1, # Минимальное значение
step=1, # Шаг единицы
format='%d', # Формат для целых чисел
value=20,
# ("IT", "Продажи")
)
dohod = st.number_input(
"Введите уровень дохода",
min_value=1, # Минимальное значение
step=1, # Шаг единицы
format='%d', # Формат для целых чисел
# max_value=(df1['ЗП в вакансии'].max() - 50000)
# ("IT", "Продажи")
value=10000,
)
st.write("Выбрано:", dohod)
st.write("Введено:", age)
# df2 = df[df['ЗП в вакансии'] >= dohod]
sphere_change = st.selectbox(
"Готов ли менять сферу", options = ["Да", "Нет"], key=f"{i+1}m",
index=None,
)
st.write("Выбрано:", sphere_change)
gotov_uchitsia = st.selectbox(
"Готов ли обучаться",
options = ["Да", "Нет"], key=f"{i+1}ml",
index=None,
)
st.write("Выбрано:", gotov_uchitsia)
st.header('Выберите навыки, которые у Вас есть')
list_skills = []
for i in sorted(set(df1['Необходимые навыки'])):
# if i != '-':
skill = st.checkbox(i, key=f"{i}")
if skill:
list_skills.append(i)
# python = st.checkbox("Python", key=f"{i+1}mlr")
# sql = st.checkbox("SQL", key=f"{i+1}mlrq")
# html = st.checkbox("HTML", key=f"{i+1}mlrw")
# java = st.checkbox("Java", key=f"{i+1}mlre")
# figma = st.checkbox("Figma", key=f"{i+1}mlrr")
# power_bi = st.checkbox("Power BI", key=f"{i+1}mlrt")
# prodaji = st.checkbox("Продажи", key=f"{i+1}mlry")
# analys_prodaj = st.checkbox("Анализ продаж", key=f"{i+1}mlru")
# work_with_clients = st.checkbox("Работа с клиентами", key=f"{i+1}mlri")
# riteil = st.checkbox("Ритейл", key=f"{i+1}mlrl")
# i+=1
# but = st.button('Данные введены в полном объеме', key=f"{i+1}mlurl")
# list_skills=[]
# if but:
# if python:
# list_skills.append('Python')
# if sql:
# list_skills.append('SQL')
# if html:
# list_skills.append('HTML')
# if java:
# list_skills.append('Java')
# if figma:
# list_skills.append('Figma')
# if power_bi:
# list_skills.append('Power BI')
# if prodaji:
# list_skills.append('Продажи')
# if work_with_clients:
# list_skills.append('Работа с клиентами')
# if riteil:
# list_skills.append('ритейл')
def table(sphere: str, list_with_skills: list, dohod, sphere_change, gotov_uchitsia):
new_df = pd.merge(df1, df2, on=['Необходимые навыки', 'Должность'], how='outer')
new_df2 = new_df
new_df2['Есть_в_списке'] = new_df2['Необходимые навыки'].apply(lambda x: 1 if x in list_with_skills else 0)
result = new_df2.groupby(['Должность', 'Сфера', 'Зарплата (руб.)']).agg(
Skill=('Необходимые навыки', set),
Cours=('Подходящие курсы Нетологии', set),
Links=('Ссылки', set),
On_list=('Есть_в_списке', set)
).reset_index()
def calculate_difference(row):
cell_set = set(row['Skill']) # Преобразуем список в набор
test_set = set(list_with_skills) # Преобразуем list_test в набор
return (cell_set - test_set)
result['Недостающие навыки'] = result.apply(calculate_difference, axis=1)
result['Требуемые навыки для позиции'] = result['Skill']
result['Наименования доступных курсов'] = result['Cours']
result['Ссылки на курс'] = result['Links']
result2 = result[['Сфера', 'Должность', 'Зарплата (руб.)', 'Требуемые навыки для позиции', 'Недостающие навыки',
'Наименования доступных курсов',
'Ссылки на курс']]
return result2
df_fin = table(sphere, list_skills, dohod, sphere_change, gotov_uchitsia)
# """Внедрение модели"""
if sphere == 'ИТ':
job_sphere = 'IT'
change_sphere = 'Sales'
else:
job_sphere = 'Sales'
change_sphere = 'IT'
st.header('Рост Вашего дохода')
labels = [age, age+3]
dohod_2 = predictor.predict(dohod, float(age), str(job_sphere))
dohod_change = predictor.predict(dohod, float(age), str(change_sphere))
# 200_000.0, 25.0, "IT"
values = [dohod, dohod_2]
values_change = [dohod, dohod_change]
st.write(f"Ваш доход через 3 года составит: {round(dohod_2)} руб.")
# labels = [age, age+1, age+2, age+3, age+4, age+5, age+6, age+7, age+8, age+9]
# values = [dohod, dohod*1.05, dohod*1.1, dohod*1.11, dohod*1.12, dohod*1.13, dohod*1.14, dohod*1.14, dohod*1.14, dohod*1.14,]
fig, ax = plt.subplots()
# fig.set_size_inches(10, 5)
ax.bar(labels, values)
# , color = ['blue', 'orange', 'green'])
# ax.set_ylabel('Сумма, руб')
# ax.set_title('Сравнение доходов')
# st.pyplot(fig)
# Построение линейного графика
fig, ax = plt.subplots(figsize=(10, 5)) # Размер графика 30 на 30 дюймов
ax.plot(labels, values, marker='o', linewidth=1, color='blue', label=f'Прогноз дохода в текущей сфере') # Линейный график с маркерами
if sphere == 'Продажи':
ax.plot(labels, values_change, marker='o', linewidth=1, color='red', linestyle='--', label=f'Прогноз дохода при смене сферы на {change_sphere}') # Линейный график с маркерами
ax.set_ylabel('Сумма, руб')
ax.set_xlabel('Ваш возраст, лет')
ax.set_title('Сравнение доходов')
ax.legend()
ax.grid(True) # Добавление сетки
count_course = 3
# Отображение графика
st.pyplot(fig)
if gotov_uchitsia == "Нет":
count_course = 0
else:
count_course = 3
if sphere_change == "Да":
mask_sphere = df_fin['Сфера'] != 0
else:
mask_sphere = df_fin['Сфера'] == sphere
mask_len = df_fin['Недостающие навыки'].apply(lambda x: ((len(x) <= count_course) or (list(x)[0] == '-')))
df_fin = df_fin[mask_len][mask_sphere][df_fin['Зарплата (руб.)'] >= dohod]
df_fin_sort = df_fin.sort_values(by=['Зарплата (руб.)'], ascending=[False]).reset_index(drop=True)
st.header('Вакансии, которые вам будут интересны')
st.dataframe(df_fin_sort, width=1100, height=500)
|