Spaces:
Runtime error
Runtime error
File size: 7,269 Bytes
643da87 c2f4f2a 643da87 c2f4f2a 643da87 c2f4f2a 643da87 c2f4f2a 643da87 befbb2f 643da87 c2f4f2a 643da87 c2f4f2a befbb2f c2f4f2a 643da87 |
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 |
import time
import pandas as pd
import streamlit as st
from sklearn.ensemble import RandomForestRegressor
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.preprocessing import LabelEncoder
def New():
progress_text = "Operación en progreso... :sunglasses: Por favor " \
"espere... " \
":bomb:"
my_bar = st.progress(0, text=progress_text)
for percent_complete in range(100):
time.sleep(0.05)
my_bar.progress(percent_complete + 1, text=progress_text)
st.markdown("""
<h1>¡Descubre los proyectos más innovadores en fase Beta y
<strong>sé el primero</strong> en experimentar con ellos!</h1>
<hr>
<code>
!Te presentamos un adelanto exclusivo de lo que viene
próximamente en nuestros proyectos más innovadores!
</code>
""", unsafe_allow_html=True)
# Leer los datos y seleccionar las columnas necesarias
df = pd.read_csv('./ML/ds_salaries.csv')
df = df[['company_location', 'salary_in_usd']]
# Codificar las ubicaciones de las empresas
le = LabelEncoder()
df['company_location'] = le.fit_transform(df['company_location'])
# Decodificar las ubicaciones de las empresas
decoded_locations = le.inverse_transform(df['company_location'].unique())
# Separar los datos de entrada y salida
X = df.iloc[:, :-1].values
y = df.iloc[:, -1].values
# Entrenar el modelo
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X, y)
# Obtener las ubicaciones de las empresas y sus salarios predichos
locations = df['company_location'].unique()
predicted_salaries = model.predict(locations.reshape(-1, 1))
results_df = pd.DataFrame(
{'company_location': locations, 'predicted_salary': predicted_salaries})
# Decodificar las ubicaciones de las empresas
results_df['company_location'] = le.inverse_transform(
results_df['company_location'])
# Ordenar los resultados por salario predicho
results_df = results_df.sort_values('predicted_salary',
ascending=False).reset_index(drop=True)
# Mostrar el título y el top 5 de países mejor pagados
st.markdown("""
<h2>Atrae a los mejores talentos con nuestra lista precisa de los
países mejor pagados.</h2>
<hr>
""", unsafe_allow_html=True)
# Descripción
st.markdown("""
<p>Como reclutador, sabes que la remuneración es un factor clave
para atraer a los mejores talentos. Con nuestro algoritmo
<strong>RandomForest</strong>, obtenemos un promedio preciso de los
países
mejor pagados en todo el mundo, lo que te permite atraer a los candidatos más talentosos. Nuestra lista está menos sesgada por outliers gracias a nuestra selección aleatoria de empresas en cada país. Únete a nuestra comunidad y toma decisiones informadas para un futuro próspero. ¡Atrae a los mejores talentos y lleva tu empresa al siguiente nivel con nuestra lista precisa de los países mejor pagados!""", unsafe_allow_html=True)
for i in range(5):
location = results_df.loc[i, 'company_location']
salary = results_df.loc[i, 'predicted_salary']
st.markdown(f'### **{location}**: ${salary:,.2f}',
unsafe_allow_html=True)
# Mostrar el menú desplegable para seleccionar un país
st.markdown("""
<h2>Seleccionar un país</h2>
<hr>
""", unsafe_allow_html=True)
selected_location = st.selectbox('Ubicación de la empresa',
decoded_locations)
# Mostrar el salario predicho para el país seleccionado
predicted_salary = results_df.loc[results_df[
'company_location'] == selected_location, 'predicted_salary'].iloc[
0]
st.markdown(f'### **{selected_location}**: ${predicted_salary:,.2f}',
unsafe_allow_html=True)
#####
# Cargar los datos
df = pd.read_csv('./assets/dataset_modelo_1.csv')
# Crear una lista con todas las skills disponibles
all_skills = set()
for skills in df.skills:
all_skills.update(skills.split(", "))
# Crear un diccionario que relaciona cada skill con su índice en el vector
skill_indices = {skill: i for i, skill in enumerate(all_skills)}
# Crear una matriz de características con la frecuencia de cada skill en cada fila
vectorizer = CountVectorizer(vocabulary=skill_indices.keys(),
lowercase=False)
X = vectorizer.fit_transform(df.skills)
# Entrenar el modelo
clf = MultinomialNB()
clf.fit(X, df.Aptitude)
# Crear la interfaz de usuario con Streamlit
st.markdown("""
<h2>Encuentra el talento perfecto con nuestro modelo de Naive Bayes para identificar las habilidades más importantes.</h2>
<hr>
""", unsafe_allow_html=True)
st.markdown(
"""
<p>Como reclutador, sabes que encontrar al talento perfecto es un
desafío constante. Con nuestro modelo de <strong>Naive Bayes</strong>,
podemos
identificar las habilidades más importantes para cualquier trabajo en particular. Al ingresar el título de trabajo, nuestro algoritmo genera una lista precisa de habilidades necesarias para tener éxito en esa posición específica. Esto te permite encontrar y atraer al candidato perfecto para el trabajo. Únete a nuestra comunidad y comienza a impulsar tu carrera hoy mismo!</p>""", unsafe_allow_html=True)
title = st.text_input("Título del trabajo")
# Crear una función que encuentra las habilidades más importantes para un título dado
def get_top_skills(title, limit):
# Filtrar el dataframe por el título dado
filtered_df = df[df.job_title.str.contains(title, case=False)]
# Crear una matriz de características con la frecuencia de cada skill en el dataframe filtrado
X_filtered = vectorizer.transform(filtered_df.skills)
# Calcular la frecuencia de cada habilidad en el dataframe filtrado
skill_frequencies = X_filtered.sum(axis=0).A1
# Obtener los nombres de las habilidades
skill_names = vectorizer.vocabulary_.keys()
# Crear un diccionario que relaciona cada habilidad con su frecuencia
skill_freq_dict = dict(zip(skill_names, skill_frequencies))
# Ordenar las habilidades por frecuencia descendente y devolver las más importantes (según el límite dado)
top_skills = sorted(skill_freq_dict, key=skill_freq_dict.get,
reverse=True)[:limit]
return top_skills
if title:
limit = st.number_input("Cantidad de habilidades a mostrar", value=5,
min_value=1, max_value=len(all_skills))
top_skills = get_top_skills(title, limit)
st.write(
f"Las {limit} habilidades más importantes para el trabajo de '{title}' son:")
for skill in top_skills:
st.write(f"- {skill}")
#####
|