Hola aquí Javi Lázaro que vengo a hablaros de mi frikada de turno.Voy a poneros en contexto y la idea que tenía con este programa.
Cuando pedimos la opinión sobre un producto, o cualquier servicio muchas veces las opiniones están más sesgadas y es con ello con lo que tenemos que aprovechar el feedback y más si puede ser el “sincero” y sin presiones de que la gente se lo tome como examen.
Aprovechando que Twitter está muy de moda en la temática del SEO, pensé en scrapear Twitter y luego analizar si lo que dicen es positivo o negativo y sobre que tema es de lo que hablan dentro de lo que nos interesa.
¿Qué y cómo scrapeamos?
Podemos usar la API de twitter aunque ahora mismo tardan bastante en dartelos y si quieres sacar datos para analitica ya toca pasar por caja, pero en nuestro caso lo que nos interesa es más saber, que dicen, quién lo dice y en todo caso desde donde podemos usar twint, una librería de python que además facilita mucho el scrapeo y da estos datos, que si bien no quieres hacer estas locuras también puedes descargarlo de manera fácil en un csv o txt.
En este caso hemos usado Jupyter (es un CMS que para machine learning y data science viene muy bien, tengo que admitir que soy muy fan), porque después vamos a analizar las frases.
Explicamos los pasos que hemos seguido.
Las primeras líneas de código siempre las utiliza para importar las librerías e instalar lo que necesito para poder trabajar, en este caso instalo (que ya está hecho) una parte de código importado de github utilizando el siguiente código “pip install –upgrade -e git+https://github.com/twintproject/twint.git@origin/maste r#egg=twint”
Con esto podremos utilizar sin problemas twint con un archivo que se llama requirements.txt que lo usamos con “-r” para poderlo leer, (todo esta parte está hecha en git, es decir, hasta aquí solo estamos trayendo las cosas que nos interesa para hacer nuestro trabajo.)
Ahora vamos a importar las librerías, que serán de pyspark, esto lo usamos para acelerar el trabajo ya que twitter es muy grande y quizás nos venga un cúmulo muy grande de datos.
Twint, que lo necesitamos para hacer el scrapeo, es una librería como decía antes para sacar datos de Twitter.
También tenemos que importar para resolver problemas de compatibilidad con ordenadores portátiles y posibles errores de runtime “nest_asyncio”
Como os digo, todo esto son nombres de librerías que nos hacen falta, usaremos import y el nombre de la librería para poderlo usar y ya está, hasta aquí no hemos hecho nada más.
Empezamos con la configuración
vamos a llamar “c” a la configuración de twint, así no hace falta estar escribiendo todo el rato twint.config(), llamae bajo pero prefiero escribir c más que lo de tiwnt.config.
Después de esto viene la parte de ¿qué queremos sacar, de donde, cuanto? y que nos lo muestre.
En esta imagen vemos como utilizamos la c, que os comentaba, así no tenemos que repetir todo el rato el mismo trozo de texto.
en este caso he utilizado mi cuenta de twitter para sacar los datos, donde queremos que busque en @javilazaroSEO la información de tweets que estén escritos o me menciona y que muestre la lista de tuits que ha encontrado.
Data Cleaning
Este nombre utilizado en data science y en su defecto machine learning es lo que más trabajo lleva en estos temas, que es la limpieza de los datos, coger lo que nos interesa y vale y no tener datos de más, datos que pueden darnos un análisis erróneo o incluso datos que no vamos ni ha necesitar, no siempre hace falta tener muchos datos, si no los que necesitamos.
Acordaros de un nombre, en este mundo es muy útil e importante, que es pandas, una librería para trabajar con datos muy importante en python, donde podemos hacer grandes delicias y podremos hacer esta limpieza que os comento.
Hemos definido dos funciones, una que nos va a dar las columnas que nos va a sacar de los tweets y en otro nos va a dejar crear arrays de esas columnas y así poder elegri las columnas que nos interesa.
En este caso hemos cogido, fecha, nombre de usuario, tweet, si tiene algún hashtag, número de likes y número de retweets.
Aquí ya tenemos un scrapeo y podemos hacer lo que queramos con estos datos, separarlos por número de retweets, así sacamos que tweets nuestros interesan más, quien nos escribe más… pero la idea es saber quien habla mal o bien y de que temas hablan.
Al ser un ejemplo vamos a tener pocos datos de entrenamiento, pero siempre se puede mejorar lo que se quiera o pueda.
Análisis de sentencias
Vamos ha realizar un procesamiento de lenguaje natural (NLP) algo que habréis oido hablar mucho y quizás no lo habeis visto funcionar, pues en resumidas cuentas, es el reconocimiento de las expresiones, es utilizado por motores de búsqueda para conocer las intenciones de búsqueda, por motores de voz como Siri, filtros de Spam… vamos que no es ninguna tontería.
Empezamos importando las librerías de nltk, no me voy a estar mucho en ello, porque como os comentaba anteriormente, no es más que coger trozos de códigos ya configurados para nuestro beneficio que ha dejado la comunidad ahí preparada.
pero ya viene el meollo de nuestro trabajo en machine learning entrenamiento.
Entrenando nuestro algoritmo
En este caso es un entrenamiento supervisado, ya que somo nosotros mismos quienes decimos que frases son buenas y cuales son malas.
Quiero hacer un paréntesis aquí para deciros que siendo o no un entrenamiento supervisado no está bien que esté sobre optimizado igual de mal que que está poco optimizado, uno porque no nos da esa probabilidad, si no que directamente nos da el igual, por ejemplo si le enseñamos que siempre es malo cuando dicen la palabra malo, aunque digas “no es tan malo” te lo mostrará como mal, y si no está bien optimizado te lo mostrará como bien en unos casos, mal en otros pero de manera errónea sin tener claro un contexto.
En este caso está muy poco optimizado para el caso, y las frases son cogidas un poco al azar sin un contexto muy claro, pero esto nos ayuda para el ejemplo.
Tenemos 12 frases, divididas en grupos de 6, las frases que dicen algo positivo y las que dicen algo negativo, cuantas más frases cojamos de ejemplo nuestra máquina estará más optimizada.
Aquí podemos ver como tenemos entrenado, filtramos las palabras y cojemos el corpus de estas para que seleccione las que nos interesa, quita las interrogaciones, dejando todo en minúscula para una mejor analítica de la frases…
Toda esta parte es la tokenización o hacer los token de las frases o palabras.
Después lo que hacemos es comprobar las notas que salen con diferentes frases, para saber si lo que estamos haciendo está bien y que fallos puede haber usando ejemplos.
Como vemos en la imágen nos dice que muy bien son dos puntos de positividad y que bien a secas es 1 punto negativo, esto es así por que en las frases de entrenamiento tenemos como positivo un “me parece bien” y como negativo “así no vamos bien”, con lo que bien lo tiene en los dos pero necesita un contexto o mejor dicho una semántica para saber que lo que dice es bueno o malo.
¿Pero cómo hacer que de una puntuación?, de la misma manera que os contaba, bien aparece en las dos frases de entrenamiento, con lo que ahora todo depende de la semántica para saber si es positivo o negativo lo que dice.
Con lo que después de de unas líneas de código podemos desambiguar esa puntuación quedándonos el siguiente resultado con la misma oración.
Así que una vez entrenado y visto, vamos a ver que puntuación nos da, (os recuerdo que no está el entrenamiento realizado de la manera más óptima)
Aquí sacamos un pequeño ejemplo de las frases que tenemos, podemos ver que hay errores, ya que toma como negativo la frase de “Tengo voz de documental de animales…. Lo hago por ti” y le da 2 puntos, pero ya la siguiente frase que habla de lo bueno que es streamlit (por cierto es cierto y doy fe) le da 6 puntos.
Las frases a las que no sabe dónde meterlo tienen escrito None, pero ya podeis ver como trabaja.
Pero ahora me diréis que esto tampoco es nada del otro mundo y en B30 no se habla de cualquier cosa, teneis razón, por ello lo mejor será ahora separar por temática, no toda nos interesa, así que lo hacemos con Branding, Random y SEO.
Al final es lo mismo, misma librería y todo, pero cambian las frases, y aquí hemos cogido 14 frases separadas en tres.
Si habeis entendido lo anterior, sabreis que aquí vamos a hacer prácticamente lo mismo, que nos separe las frases, y que entrene con estas que tenemos aquí,
En el código hemos hecho ciertos cambios que nos metemos a un área ya más técnica y creo que mejor me centro en lo práctico.
Bien, le hemos dado un margen de error, con el que sacamos analizando las palabras de las frases que tienen temática.
Por ello vemos que nos dice que encuentra: que, es, mej*, opción, que…. y nos da la puntuación que tiene, que en este caso es un 80% Brandig, 21% SEO.
Esto lo hace con cada frase que hemos ido metiendo.
Con todo esto después se podría ya por los tweets que son de branding, seo, los positivos de seo, los negativos de branding…
Conclusión y donde quiero llegar
Estos son ejemplo de utilidades que podemos dar al machine learning para el SEO, marketing digital en general o a lo que nos queramos enfocar.
Creo que es una rama muy interesante, algo que puede ayudarnos mucho y si lo sumamos al scrapeo tenemos unas herramientas muy potentes, que sabiendo que usar y que necesitamos podemos prever con cierta probabilidad de acierto que va a ocurrir en un futuro con una acción, que tendencia puede tener una palabra, que similitud tienen los usuarios, clientes, palabras…. lo que sea.