Ejemplo de WEB SCRAPING la automatización web – Parte 2
Vamos con la segunda parte del ejemplo de web scraping. En esta nueva entrega vamos a mostrar de una manera visual los datos extraídos de nuestro Linkedin utilizando Python.

En la entrada anterior generamos un fichero con nuestros contactos, su titular y el tiempo que hace que los tenemos. Vamos a cargar los datos y a pintar algunos gráficos.
Este script no lo voy a encapsular ya que solo es para mostrar alguna de las utilidades disponibles cuando extraemos datos.
Para empezar crearemos un un fichero llamado print.py
Importando librerías
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
import pandas as pd
También necesitaremos instalar las librerías usando el comando PIP en el terminal:
pip install wordcloud
pip install matplotlib
pip install pandas
Con las librerías ya cargadas podemos empezar con el código
Cargar datos
Lo primero sera cargar los datos y preparar algunas variables que nos acompañaran durante el proceso:
df = pd.read_csv(r"export_in.csv", sep = ';')
comment_words = ''
stop_words = ["y", "s", "a","en","de","de la","la","del","l"] + list(STOPWORDS)
stopwords = set(stop_words)
La lista que vemos con el nombre stop_words es donde podemos añadir palabras que no nos interesa que aparezcan en la nube de palabras por no aportar valor. Por ejemplo preposiciones o nombres de empresas.
Preparando los datos
Lo siguiente preparar los datos para poder pintarlos, para ello, utilizaremos el siguiente código:
for val in df.CONTENT:
val = str(val)
# split the value
tokens = val.split()
# Converts each token into lowercase
for i in range(len(tokens)):
tokens[i] = tokens[i].lower()
comment_words += " ".join(tokens)+" "
Lo que vamos a hacer este loop es que para cada titular de nuestros contactos vamos a separar cada una de las palabas » val.split() » y las pasaremos a minúsculas utilizando «lower()».
Pintando la nube de palabras
Vamos a utilizar la librería para preparar una imagen tipo nube de palabras. una vez generada la imagen, la pintaremos por pantalla utilizando la variable ptl:
wordcloud = WordCloud(width = 800, height = 800,
background_color ='black',
stopwords = stopwords,
max_words = 30,
min_font_size = 12).generate(comment_words)
# plot the WordCloud image
plt.figure(figsize = (8, 8), facecolor = None)
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad = 0)
plt.show()
Algunas variables relevantes:
- width = 800, height = 800 = Tamaño de la imagen
- max_words = número máximo de palabras a pintar
- min_font_size = tamaño mínimo de la fuente, como veréis en función de la aparición de las palabras estas tendrán un tamaño mayor cuanta mas frecuencia tengan. Este será el tamaño mínimo.
- figsize = Tamaño de la ventana de salida
Con esto podremos tener el siguiente resultado al ejecutar nuestro script:
Pintando gráfico de crecida de red
Lo siguiente sera separar los datos de como ha crecido nuestra red durante el tiempo, para ello necesitamos primero preparar los datos de la siguiente manera:
index = []
values = {'results':[]}
counter = 0
index.append("")
for val in df.TIME:
if "meses" in val or "mes" in val:
if not val in index:
index.append(val)
values['results'].append(counter)
counter = 0
else:
counter = counter + 1
values['results'].append(counter)
Este trozo de código no permite analizar todas las fechas de contacto. Si la fecha contiene la palabra mes o messes, sumaremos ese contacto al mes al que se añadió el contacto.
Por último pintaremos el gráfico mediante:
data = pd.DataFrame(values,
index=(index))
total = data.sum(axis=1)
plt.bar(total.index, total)
plt.show()
Al ejecutar el script este es el resultado:
Podemos hacer el mismo ejercicio pero con los datos de los años anteriores:
index = []
values = {'results':[]}
counter = 0
index.append("")
for val in df.TIME:
if "años" in val or "año" in val:
if not val in index:
index.append(val)
values['results'].append(counter)
counter = 0
else:
counter = counter + 1
values['results'].append(counter)
Script completo
# importing all necessary modules
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv(r"export_in.csv", sep = ';')
comment_words = ''
stop_words = ["y", "s", "a","en","de","clinic","ntt","de la","la","del","p","ii","l","deloitte","stratesys","accenture","e","everis","ex","hospital clínic","ibm"] + list(STOPWORDS)
stopwords = set(stop_words)
# iterate through the csv file
for val in df.CONTENT:
# typecaste each val to string
val = str(val)
# split the value
tokens = val.split()
# Converts each token into lowercase
for i in range(len(tokens)):
tokens[i] = tokens[i].lower()
comment_words += " ".join(tokens)+" "
wordcloud = WordCloud(width = 800, height = 800,
background_color ='black',
stopwords = stopwords,
max_words = 30,
min_font_size = 12).generate(comment_words)
# plot the WordCloud image
plt.figure(figsize = (8, 8), facecolor = None)
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad = 0)
plt.show()
index = []
values = {'results':[]}
counter = 0
index.append("")
for val in df.TIME:
if "meses" in val or "mes" in val:
if not val in index:
index.append(val)
values['results'].append(counter)
counter = 0
else:
counter = counter + 1
values['results'].append(counter)
data = pd.DataFrame(values,
index=(index))
total = data.sum(axis=1)
plt.bar(total.index, total)
plt.show()
index = []
values = {'results':[]}
counter = 0
index.append("")
for val in df.TIME:
if "años" in val or "año" in val:
if not val in index:
index.append(val)
values['results'].append(counter)
counter = 0
else:
counter = counter + 1
values['results'].append(counter)
data = pd.DataFrame(values,
index=(index))
total = data.sum(axis=1)
plt.bar(total.index, total)
plt.show()
Para ejecutar el script este será el comado:
python print.py
Y hasta aquí la explotación de datos de nuestra red, espero que esta sea un buen punto de partida para vuestros análisis y proyectos.
Aunque este tema no esta relacionado con SAP, como podéis ver, puede ser utilizado par automatizar o hacer test de vuestras aplicaciones SAPUI5.
Si veo que este tema os despierta interés, publicará una tercera parte con una utilidad que os puede hacer todas estas tareas de testing mucho mas fáciles sin necesidad de programar
Como siempre suscribete, dale a la campanita de notificaciones y comparte en redes para estar a la última.