Spaces:
Runtime error
Runtime error
import pandas as pd | |
import streamlit as st | |
from sklearn.feature_extraction.text import CountVectorizer | |
from sklearn.naive_bayes import MultinomialNB | |
# Cargar los datos | |
df = pd.read_csv('./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.title("Predicción de aptitud para un trabajo") | |
st.write( | |
"Ingrese el título del trabajo para ver las habilidades más importantes.") | |
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_high = sorted(skill_freq_dict, key=skill_freq_dict.get, | |
reverse=True)[:limit] | |
# Ordenar las habilidades por frecuencia ascendente y devolver las menos importantes (según el límite dado) | |
top_skills_low = sorted(skill_freq_dict, key=skill_freq_dict.get)[:limit] | |
return top_skills_high, top_skills_low | |
if title: | |
limit = st.number_input("Cantidad de habilidades a mostrar", value=5, | |
min_value=1, max_value=len(all_skills)) | |
top_skills_high, top_skills_low = get_top_skills(title, limit) | |
col1, col2 = st.columns(2) | |
with col1: | |
st.write( | |
f"Las {limit} habilidades más importantes para el trabajo de '{title}' son:") | |
for skill in top_skills_high: | |
st.write(f"- {skill}") | |
with col2: | |
st.write( | |
f"Las {limit} habilidades menos importantes para el trabajo de '{title}' son:") | |
for skill in top_skills_low: | |
st.write(f"- {skill}") | |