Data Analytics es la ciencia de analizar data cruda y extraer de ella patrones e insights que sumen valor a la toma de decisiones. Por data cruda nos referimos a información sin parsear, sin procesar y sin formato.
Existen muchos algoritmos que tamizan la información para uno y devuelve un informe completo con percepciones de lo que se analizó. Hablando muy mal y pronto, Data Science es el hacer uso de tecnología para analizar la data. En este post vamos a ver cómo podés empezar a extraer data de tus keywords usando Python.
Antes de comenzar, definamos algunos términos:
- Data: La información recolectada
- Analytics: El análisis de la data
- Insights: Lo que se aprende tras analizar la data
A fin de aportar un poco de valor agregado a la industria del posicionamiento orgánico, voy a alejarme de Google Analytics y herramientas similares en este post ya que existen miles de entradas escritas acerca del tema y por gente más calificada que yo.
Vamos a utilizar las siguientes herramientas:
- Google Analytics (se que dije que no, pero vamos a extraer la data desde acá en este ejemplo)
- Google Chrome Console
- Bloc de notas (o equivalente)
- Python
Cómo extraer data de términos de búsqueda desde Google Analytics
- Abrir Google Analytics con Google Chrome
- En Google Analytics, entrar en: Adquisición > Search Console > Consultas
- Filtrar la vista para que muestre 5000 filas
- Abrir el inspector de Google Chrome > Solapa “Elements”
- Navegá hacia una de las filas que muestra la información de Google Search Console para asegurarnos de que esté en el cache del inspector. Si este paso no se realiza correctamente, puede que no aparezcan keywords al correr el script
- Ir a la solapa “consola”
- Ctrl + L para limpiar la consola
- Pegar el siguiente script y presionar ENTER*
for(var kwds=document.getElementsByClassName("_GApu"),clicks=document.getElementsByClassName("_GAtjb"),total=kwds.length,content='<table align="center"><tr><th>Keywords</th><th>Clicks</th><th>Impresiones</th><th>CTR</th><th>Ranking</th></tr>',i=0;i<total;i++){var current_kwd=kwds[i].innerHTML,current_clicks=clicks[i].innerText.split("(")[0].replace("%","").replace(".","").replace(",",".").trim(),current_impresiones=clicks[i+1].innerText.split("(")[0].replace("%","").replace(".","").replace(",",".").trim(),current_ctr=clicks[i+2].innerText.split("(")[0].replace("%","").replace(".","").replace(",",".").trim(),current_posicion_media=clicks[i+3].innerText.split("(")[0].replace("%","").replace(".","").replace(",",".").trim();i+=3;var row="<td>"+current_kwd+'</td><td align="center">'+current_clicks+'</td><td align="center">'+current_impresiones+'</td><td align="center">'+current_ctr+'</td><td align="center">'+current_posicion_media+"</td>";content+="<tr style=\"font-family: 'Open Sans'\">"+row+"</tr>"}with(output='<html><head><title>Punto Rojo Tools - Google Analytics Keyword Extractor</title><link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Open+Sans" /><link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans" /></head><body>',output='<table align="center" width="50%"><tr><td align="left"><img src="https://puntorojo.quickresults.co/blog/wp-content/themes/punto_rojo/img/logo_mini.png" width="200px"></td><td align="right"><h1 style="font-family: \'Open Sans\'">Google Analytics Keyword Extractor</h1></td></tr></table><br><br>',output+=content,output+="</body></html>",window.open())document.write(output),document.close();
- Si querés ver directamente la información sin formato para exportarla a un CSV, pegá el siguiente código:
for(var kwds=document.getElementsByClassName("_GApu"),clicks=document.getElementsByClassName("_GAtjb"),total=kwds.length,content="Keywords;Clicks;Impresiones;CTR;Ranking<br>",i=0;i<total;i++){var current_kwd=kwds[i].innerHTML,current_clicks=clicks[i].innerText.split("(")[0].replace("%","").replace(".","").replace(",",".").trim(),current_impresiones=clicks[i+1].innerText.split("(")[0].replace("%","").replace(".","").replace(",",".").trim(),current_ctr=clicks[i+2].innerText.split("(")[0].replace("%","").replace(".","").replace(",",".").trim(),current_posicion_media=clicks[i+3].innerText.split("(")[0].replace("%","").replace(".","").replace(",",".").trim();i+=3;var row=current_kwd+";"+current_clicks+";"+current_impresiones+";"+current_ctr+";"+current_posicion_media+"<br>";content+=row}var output="<html>";with(output+=content,output+="</html>",window.open())document.write(output),document.close();
- Copiar keywords, pegarlas en Bloc de notas
- Agregar ‘Keywords’ a la primera fila del txt (sin comillas y con K mayúscula)
- Guardar como ‘keywords.csv’
- Si querés guardar el script para futura referencia, tenés que seguir los siguientes pasos:
- Dentro del inspector de Google Chrome, ir a la solapa ‘Sources’
- En el menú de la izquierda, clickear la solapa ‘Snippets’ (si no figura, clickear la flechita a la derecha)
- Click en ‘+ New Snippet’
- Nombrá al script ‘Google Analytics – Keyword Extractor’ o similar
- Pegá el código en la ventana de al lado
- Ctrl + S para guardar (o su equivalente en MAC)
- Listo! Cada vez que lo quieras correr, hacé doble click en el nombre del snippet dentro de la ventana de la izquierda de Sources > Snippets
Cómo manipular la data con Python
- Instalar Python3
- Instalar módulos:
- pandas
- matplotlib
A continuación vamos a ver cómo cargar data desde un CSV en Python y cómo manipularla. Por cuestiones de practicidad, el código para leer el CSV lo vamos a mostrar una sola vez pero debe estar siempre en el script.
Cargá la data con el siguiente snippet:
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv(‘keywords.csv’, delimiter = ‘;’, encoding = ‘ISO-8859-1’)
Mostrar las primeras 10 filas del CSV:
print(data.head(10))
Contar la cantidad de filas:
print(len(data)
Contar la cantidad de filas 2:
print(«Cant. filas: %i» % len(data))
#El %i indica que ahí va una variable de tipo integer.
#Al cerrar comillas dobles, el % indica qué es lo que debe reemplazar a %i
Cómo hacerle splicing a la data:
print(data[:10]) #muestra las primeras 10 filas
print(data[5:]) #muestra todo salvo las primeras 5 filas
print(data[-3:]) #muestra las últimas 3 filas
print(data[:-2]) #muestra todo salvo las últimas 2 filas
print(data[-5:-2]) #muestra desde la 5ta desde el final hasta 2 desde el final
Pasar todas las keywords a minúscula:
data = data[‘Keyword’].str.lower()
#Traducido, sería: las keywords ahora son las keywords pero en minúscula
Cómo sacar el CTR promedio por cantidad de palabras
A modo de demostración, vamos a ver algo de lo que se puede realizar para obtener insights de SEO con Python.
Utilizando el código que figura arriba vamos a:
- Cargar los módulos pandas y matplotlib.pyplot
- Cargar el dataset con los términos de búsqueda y volcarlos en una variable llamada “data”
La data está ahora en lo que se llama un DataFrame de Pandas. Pandas es un módulo de Python que permite manipular data como si fuera una hoja de cálculos, pero con la salvedad de que no renderiza el contenido hasta que se lo pidamos. Esto ahorra recursos del sistema: imagínense cargar millones de filas, cliquear una celda, que vuelva a renderizar las millones de filas y así… no es viable y por eso usamos Pandas.
Pandas trabaja con columnas y filas, al igual que Excel o Google Sheets. En estos ejemplos, nuestro DataFrame se va a llamar “data”.
Cómo ver las columnas de un DataFrame en Pandas:
print(data.columns)
Cómo ver el contenido de una columna en Pandas:
print(data[‘CTR’]) #la columna se llama CTR
Cómo sacar el promedio de los valores de una columna en Pandas:
print(data[‘CTR’].mean())
Cómo obtener el promedio de una columna en Pandas agrupada según otra columna:
promedio = data.groupby([‘Ranking’])[‘CTR’].mean()
print(promedio)
El output debería ser similar a este (varía según la data)
Cómo graficar el promedio de una columna en Pandas con Matplotlib:
#continúa del script anterior
promedio.plot(kind=’bar’)
plt.title(‘CTR promedio por ranking’)
plt.xlabel(‘Ranking’)
plt.ylabel(‘CTR’)
plt.show()
El output debería ser similar a este (varía según la data)
Para graficar únicamente los puestos del 1 al 10, es necesario reducir el DataFrame antes de sacar los promedios.
df = df[df[‘Ranking’] <= 10]
promedios = df.groupby([‘Ranking’])[‘CTR’].mean()#.plot(kind=’bar’)#, cmap=’coolwarm’)
Si queremos redondear los rankings y cambiar el tipo de datos que muestra la columna para que no muestren decimales (el redondeo trataría, por ejemplo, un puesto 1.9 como un puesto 2):
df = df[df[‘Ranking’] <= 10]
df[‘Ranking’] = df[‘Ranking’].round().astype(int)
promedios = df.groupby([‘Ranking’])[‘CTR’].mean()
Y si graficamos eso agregando las líneas para graficar mostradas arriba y agregando estas dos líneas para mostrar los números del eje X de forma horizontal y sin decimales:
plt.xticks(rotation=’horizontal’)
¡Y listo! Logramos comenzar a adentrarnos en todo lo que es Data Science para SEO. Hay gran cantidad de gráficos que pueden nacer de esta data y aún más luego de comenzar a generar data de la data con feature engineering (ingeniería de funcionalidades). Un ejemplo podría ser fijarse el posicionamiento según cantidad de palabras en un término de búsqueda, cantidad de keywords short, medium y long tail, etc.
¿Qué lenguaje de programación usan ustedes para extraer gráficos e insights de su data? Comentanos debajo para poder ir dándole forma a futuros posts. Hasta la próxima y ¡buenos rankings!