Una Forma Interactiva para Buscar y Analizar Ofertas de Trabajo en la Web.

Como automatizar y visualizar tus búsquedas para encontrar las mejores ofertas de trabajo con Python y Power BI.

Cristóbal V
Ciencia y Datos
8 min readSep 7, 2020

--

Word Cloud de Ofertas de Trabajo (Imagen del Autor).

Hace unos días atrás estaba buscando nuevas opciones de empleo en las diversas paginas Web que publican ofertas de trabajo. Sin embargo me llamó la atención lo complicado que se me hacía poder comparar cada una de las ofertas de empleo y sus requisitos. Ademas me empecé a frustar al tener que crear un nuevo usuario en muchas de estas paginas al momento de ver la información completa del trabajo.

En base a lo anterior, se me ocurrió la idea de automatizar estas búsquedas y visualizarlas de una manera interactiva y facil de analizar. De esta manera se podrá observar la información de una forma más ordenada al buscar opciones de trabajo rapidamente según los distintos requisitos de postulación del cargo.

El procedimiento fue realizar un Web Scraping, que corresponde a un proceso para extraer información de sitios web de manera automatica. El sitio Web que escogí no puede ser mencionado en este articulo debido a los permisos de privacidad de los datos, pero el url de la pagina se encuentra en mi Github. Finalmente con la información obtenida hice una base de datos para visualizar la información en los geniales reportes de Power BI, asi que sin más que decir, manos a la obra!.

Los archivos y scripts completos se pueden ver en mi repositorio de Github.

Herramientas Necesarias:

  • Python para extraer la información de empleos.
  • Power BI Desktop para visualizar la información final.

*Si tienes poco tiempo para leer el articulo completo y quieres ver las funcionalidades de la herramienta, ve directo al punto 3.

1. Obteniendo el Data de Ofertas de Trabajo:

Como mencioné anteriormente, El proceso de Web Scraping consiste en obtener información de una pagina web de manera automatizada, esta información se puede guardar en la forma que se desee, en mi caso quiero obtener la información de las ofertas de trabajo, pero siendo más especifico me interesan las siguientes caracteristicas:

  • Nombre de la Posición laboral.
  • Descripción.
  • Sueldos.
  • Región y Ciudad.
  • Nombre Empresa Ofertante.
  • Nivel de Experiencía.
  • Nivel de Educación.
  • Disponibilidad para Cambiar de Residencia.
  • Disponibilidad para Viajar.
  • Tipo de Contrato de Trabajo.
  • Tipo de Jornada Laboral.
  • URL de la oferta de trabajo en la pagina web.

Estas caracteristicas corresponderán a las columnas de mi Data Frame y las filas serán las distintas opciones de trabajo. Utilizando la libreria Requests, y Beautiful Soup de Python realicé el Web Scraping a la Pagina Web. Por motivos de visualización no pondré el Script en este articulo pero se puede ver cliqueando en mi Github.

De manera general el trabajo que hace el Script es extraer el codigo html de la pagina web y la almacena en una variable, con esta variable podemos ir navegando dentro del codigo html y encontrar los tags donde se almacenan los items que contienen la información objetivo. Esta información se guarda como texto en las listas de Python declaradas como nuevas variables y realizando una serie de bucles, se extrae la información de cada item, por cada pagina.

Para automatizar todo el proceso anterior definí una función llamada webscraping_jobs(busqueda,paginas) a la cual se le debe pasar como argumento la búsqueda que se desea consultar y el numero de paginas de resultados. Esta función devuelve un dataframe de la libreria Pandas con la información de las caracteristicas explicadas más arriba en este articulo.

Por ejemplo, en mi caso quiero consultar sobre ofertas de trabajo para Ingeniero, pero solamente hasta la pagina 20 de los resultados que entrega la pagina web, esto se vería de la siguiente manera:

Importante: En este articulo, las búsquedas se consultaron solamente para empleos en Chile (.cl) . Para modificar esto, solo se debe cambiar el dominio de la pagina web.

Output Web Scraping (Imagen del Autor).

Podemos ver que la función entrega la cantidad de información extraida por cada una de las paginas de resultados. En este caso se obtuvo un total de 400 ofertas de empleos para Ingenieros en Chile

2. Limpiando el Data de Ofertas de Trabajo:

Muchas veces suele suceder que las empresas no escriben la información completa sobre los empleos publicados en la web, o tal vez por errores de tipeos, la información no se llena adecuadamente en cada categoria. Debido a esto es necesario realizar una limpieza a los datos, eliminando las variables que no aporten información, y modificando algunos tipos de datos para que puedan ser procesados posteriormente en Power BI.

A modo general, para la limpieza de estos datos, elimine el texto adicional de las variables categoricas como Nombre de la Oferta Laboral y Educación. Limpié la columna de Empresa para que las Ofertas de Trabajo que no especifican el nombre de la Empresa sean categorizadas como “No Informa”. Tambien agregué una columna nueva para documentar la fecha en que fue extraida la información.

Finalmente debido a errores de tipeo de algunas empresas al escribir el Sueldo estimado de los empleos, modifiqué los valores para mantener la dimensionalidad y coherencia de la información eliminando los ceros en las cifras obtenidas que estaban sobredimensionadas. Es importante señalar que no todas las ofertas de empleos tienden a publicar el Sueldo Estimado o el Nivel de Experiencia, por lo que estas caracteristicas cuentan con valores nulos.

El Data Frame que obtuve es el siguiente:

Data Frame de Ofertas de Trabajos en Chile (Imagen del Autor).

3. Visualización de Información con Power BI:

Finalmente llegamos al final, Luego de la extracción, limpieza y modificación de los datos de ofertas de trabajo, hice un Reporte en Power BI para los Empleos de Ingeniero en Chile. Con un poco de creatividad, agregué un mapa geografico, nuevas categorias según la región y ciudad, el Sueldo promedio, Mínimo y Máximo de un Empleo en las distintas Regiones de Chile, Un análisis de Empleos según Nivel de Experiencia, Tipo de Contrato, etc.

El reporte cuenta con dos ventanas:

  • Búsqueda de Ofertas de Empleo:En esta ventana se puede navegar por la información de ofertas de trabajo, filtrando por regiones , ciudad y analizando los requisitos, descripción y caracteristicas del empleo.
Panel Búsqueda de Ofertas de Empleo (Imagen del Autor).
Panel Búsqueda de Ofertas de Empleo con Descripción (Imagen del Autor).
  • Análisis de Ofertas de Empleo:En esta ventana se puede analizar la información de ofertas de empleo como el Salario Mínimo y Máximo Ofertado, la posición laboral más ofertada Por región y Ciudad, algunos graficos de análisis de Promedio de Sueldos, Porcentaje de Oferta de Empleos según el Nivel de Experiencia, Cantidad de Oferta de Empleos por Ciudad, etc. Los graficos son interactivos por lo que al cliquear en alguna de las columnas de región o ciudad, estos se modifican para mostrar la información exclusiva de cada categoria analizada.
Panel Análisis de Ofertas de Empleo con Descripción (Imagen del Autor).

hacer click en link recuadro de abajo (Power BI Report) para ver el Reporte Completo.

BONUS: Visualizar Palabras que Aparecen con Más Frecuencia en Ofertas de Trabajo.

Una Nube de Palabras definido en Wikipedia como: «Representación visual de las palabras que conforman un texto, en donde el tamaño es mayor para las palabras que aparecen con más frecuencia«, se puede aplicar a este proyecto para estimar cuales son los conceptos y cargos más buscados por las empresas a la hora de ofrecer nuevos empleos. Para esto, basandome en el Data Frame generado, quise crear una Nube de Palabras (Word Cloud en Ingles), el cual corresponde a la imagen del principio de este articulo. En este apartado explicaré como lo realicé:

Lo primero que se debe hacer es crear una lista que contenga todas las palabras unicas por cada Nombre de la Posición Laboral. Las palabras deben estar normalizadas, es decir quitar acentos y mayusculas para que no se consideren palabras duplicadas. Esto lo hice con el siguiente codigo en Python.

#Lista donde se almacenarán las palabras
wordlist = []
#Iterar por cada fila de la columna oferta del data frame
for sentence in df['oferta'].tolist():
#Separar palabras del texto de cada fila
words = sentence.split()
# Iterar por cada palabra del texto de palabra
for word in word:
# Guardar palabras en lista y eliminar acentos y mayusculas
wordlist.append(unidecode.unidecode(word.lower().lstrip()))
#Calcular la frecuencia de ocurrencia de cada palabra unica en la lista de palabras
wordfreq = [wordlist.count(w) for w in wordlist]

Con este primer paso obtuve todas las palabras unicas de los nombres de las Posiciones Laborales así como el numero de veces que se repite la palabra en la lista. Luego pasé estas variables a un dataframe obteniendo el siguiente resultado:

Data Frame de Palabras y Frecuencias de Ocurrencia (Imagen del Autor).

Finalmente con este Data Frame e importando una serie de librerias, realicé la Imagen de la Nube de Palabras o Word Cloud de la siguiente Manera:

#librerias utilizadas  para crear Imagen de Nube de Palabras
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import matplotlib.pyplot as plt
#Guardar palabras del data frame en variable text
text = " ".join(review for review in data_words.words)
#Crear el objeto wordcloud definiendo algunos parametros de estilo
wordcloud = WordCloud(max_font_size=50,
max_words=200,
width=1000,
height=600,
background_color="black").generate(str(text))
#Crear figura donde se almacenará el word cloud y definir parametros de estiloplt.figure(figsize=(20,10),facecolor="k")
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad=0)
#Guardar imagen en archivo png
plt.savefig("wordcloud.png",format="png",facecolor='k', bbox_inches='tight')
plt.show()

Y es así como se puede obtener una interesante forma de evaluar conceptos y perfiles requeridos por la industria hoy en dia a través de las nubes de palabras y un poco de programación en python.

Word Cloud de Ofertas de Trabajo (Imagen del Autor).

Para este caso la nube de proyectos nos muestra que las palabras con más ocurrencia en las ofertas de trabajo analizadas son; Ingeniero(debido a que las búsquedas son para Ingeniero), Administrador, Tecnico, Informatico, Analista, Bilingüe, Riesgo, Proyecto, etc.

4. Conclusión:

Las herramientas que nos brinda la tecnologia hoy en dia nos ayudan a facilitar tareas que hace algunos años atrás requerian de días y hasta semanas el poder realizar. El mundo avanza cada vez más rapido y el tiempo se vuelve muy valioso para todos nosotros, es por ello que debemos aprovechar la tecnologia que se nos brinda y crear los mecanismos necesarios para utilizar ese tiempo de forma productiva, analizando los diversos aspectos de la vida apoyados de la información que nos entrega la Internet.

Otros de mis Articulos (Muy entretenidos):

Referencias:

--

--