MotoPanda's picture
Update app.py
9a698e4 verified
raw
history blame
7.83 kB
import streamlit as st
import pandas as pd
import numpy as np
import json
import random
import matplotlib.pyplot as plt
st.title('Каталог профессий IT и Продажи')
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=0, # Минимальное значение
step=1, # Шаг единицы
format='%d' # Формат для целых чисел
# ("IT", "Продажи")
)
dohod = st.number_input(
"Введите уровень дохода",
min_value=0, # Минимальное значение
step=1, # Шаг единицы
format='%d', # Формат для целых чисел
# max_value=(df1['ЗП в вакансии'].max() - 50000)
# ("IT", "Продажи")
)
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)
st.header('Рост Вашего дохода')
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=2) # Линейный график с маркерами
ax.set_ylabel('Сумма, руб')
ax.set_xlabel('Ваш возраст, лет')
ax.set_title('Сравнение доходов')
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)