Potential_2 / app.py
MotoPanda's picture
Create app.py
34c6aac verified
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('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)
dohod = 0
i = 0
with st.sidebar:
sphere = st.selectbox(
"Выбери сферу:", options = list(df1['Сфера'].unique()), key=i)
# st.write("Выбрано:", sphere)
# st.write(df.columns)
dohod = st.number_input(
"Введите уровень дохода", key=f"number_input_{i}"
# ("IT", "Продажи")
)
st.write("Выбрано:", dohod)
# 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('Выберите навыки, которые у Вас есть')
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: int, sphere_change, gotov_uchitsia):
new_df = pd.merge(df1, df2, on='Навыки', how='outer')
if sphere_change == "Да":
mask_sphere = new_df['Сфера'] != 0
else:
mask_sphere = new_df['Сфера'] == sphere
new_df2 = new_df[new_df['ЗП в вакансии'] >= dohod][mask_sphere]
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 list(cell_set - test_set)
result['Недостающие навыки'] = result.apply(calculate_difference, axis=1)
result['Требуемые навыки для позиции'] = result['Skill']
result['Наименования доступных курсов'] = result['Cours']
result['Ссылки на курс'] = result['Links']
if gotov_uchitsia == "Нет":
mask_ucheba = (result['On_list'] != {0}) & (result['On_list'] != {0, 1})
else:
mask_ucheba = result['On_list'] != {5}
# try:
result = result[mask_ucheba]
# except:
# result =result
result2 = result[['Сфера', 'Профессия', 'ЗП в вакансии', 'Требуемые навыки для позиции', 'Недостающие навыки',
'Наименования доступных курсов',
'Ссылки на курс']]
return result2
df_fin = table(sphere, list_skills, dohod, sphere_change, gotov_uchitsia)
st.header('Рост Вашего дохода')
labels = ['Доход сейчас', 'Доход через год', 'Доход через 2 года']
values = [dohod, dohod*1.1, dohod*1.2]
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)
st.header('Вакансии, которые вам будут интересны')
st.dataframe(df_fin, width=1100, height=500)
# st.write(but)
# st.write(python)
# st.write(html)
# st.write(sphere_change)
# st.write(gotov_uchitsia)
# mask_sphere = df1['Сфера '] == sphere
#
# if sphere_change == "Да":
# mask_sphere = df1['Сфера '] != 0
#
# st.header('Вакансии, которые вам будут интересны')
# df1 = df1[mask_sphere][df1['ЗП в вакансии'] >= dohod]
# df1 = df1[['Сфера ', 'Профессия ', 'ЗП в вакансии', 'Навыки ']]
# st.markdown(
# """
# <style>
# .my-table {
# width: 1100px;
# }
# </style>
# """,
# unsafe_allow_html=True
# )
#
#
# st.dataframe(df1, width=1900, height=300)
#
#
#
# st.header('Возможности обучения')
#
# df2 = df[df['Сфера '] == sphere][df['ЗП в вакансии'] >= dohod][~df['Навыки '].isin(list_skills)]
# df2 = pd.merge(df2, df_dop, on='Навыки ', how='left')
# st.dataframe(df_fin, width=1100, height=1000)