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)