lunes, 3 de abril de 2017

Sentiment Analysis - Canciones de Adele



Text Mining o Minería de textos según su traducción, se refiere al proceso de derivar información nueva a partir de textos. En este caso analizaremos los coros de algunas de las canciones más famosos de Adele como son: Rolling In the Deep, Someone Like You, Hello, etc.

Desde el punto de vista de Text Mining, Sentiment Analysis o Analisis de Setnimientos es una tarea de clasificación masiva de textos o documentos de manera automática, en función de la connotación positiva o negativa del lenguaje ocupado. Es importante mencionar que estos tratamientos generalmente se basan en relaciones estadísticas y de asociación, no en análisis lingüístico.

El análisis de sentimiento intenta determinar la actitud de un interlocutor o un escritor con respecto a algún tema. La actitud puede ser su juicio o evaluación, estado afectivo (o sea, el estado emocional del autor al momento de escribir), o la intención comunicativa emocional (o sea, el efecto emocional que el autor intenta causar en el lector).

En nuestro caso, analizaremos que tipo de sentimiento nos transmiten las canciones de Adele que además de voz y ritmo, que sentimientos esconden sus letras.






Utilizaremos R, y procedemos a cargar algunas librerías utilitarias:

library(syuzhet)
library(lubridate)
library(ggplot2)
library(scales)
library(reshape2)
library(dplyr)


Puedes leer acerca de cada una de las librerías y puedes extenderte en ellas. De manera especial, el algoritmo de análisis de sentimientos utilizado aquí se basa en NRC Word-Emotion Association Lexicon de Saif Mohammad y Peter Turney. La idea aquí es que estos investigadores han construido un diccionario / léxico que contiene un montón de palabras con puntuaciones asociadas para ocho emociones diferentes y dos sentimientos (positivos / negativos). Cada palabra individual del léxico tendrá un "sí" (uno) o un "no" (cero) para las emociones y los sentimientos, y podemos calcular el sentimiento total de una oración agregando los sentimientos individuales de cada palabra en la oración. No todas las palabras en inglés están en el diccionario porque muchas palabras en inglés son bastante neutras. 


Echémosle un vistazo a los datos:

song_id
artist_name
song_title
song_chorus_lyric
1
Adele
Rolling In The Deep
We could have had it all…
2
Adele
Hello
Hello from the other side…
3
Adele
Someone like you
Never mind, I'll find someone like you…
4
Adele
When we were young
Let me photograph you in this light…
5
Adele
Send My Love
Send my love to your new lover…








Cargamos los datos:
songs <- read.csv("./songs.csv", stringsAsFactors = FALSE)

Realizamos una prueba:
get_nrc_sentiment("I'm so excited")

 anger anticipation disgust fear joy sadness surprise trust negative positive
0             1       0    0   1       0        1     1        0       1

Como vemos analiza la oración y nos muestra los sentimientos que contiene. Y analiza la oración como positiva.

Realizamos el análisis en el coro:
mySentiment <- get_nrc_sentiment(songs$song_lyric)

Miramos algunos de los datos:
head(mySentiment)

  anger anticipation disgust fear joy sadness surprise trust negative positive
1     0            0       0    0   0       1        0     0        1        0
2     0            0       0    0   0       0        0     0        0        0
3     0            0       0    0   1       1        0     0        2        1
4     0            1       0    1   0       1        0     0        1        0
5     1            2       1    1   3       1        1     2        1        3

Ahora, podemos realizar un gráfico con estos valores, algunos detalles son mas avanzados, pero podemos leer el grafico.
songs <- cbind(songs, mySentiment)

sentimentTotals <- data.frame(colSums(songs[,c(6:12)]))

names(sentimentTotals) <- "count"

sentimentTotals <- cbind("sentiment" = rownames(sentimentTotals), sentimentTotals)

rownames(sentimentTotals) <- NULL

ggplot(data = sentimentTotals, aes(x = sentiment, y = count)) +
        geom_bar(aes(fill = sentiment), stat = "identity") +
        theme(legend.position = "none") +
        xlab("Sentiment") + ylab("Total Count") + ggtitle("Total Sentiment Score for Top 5 Adele Songs")

 

A manera de conclusión, podemos mencionar que la alegría y la tristeza, seguido de la esperanza son los sentimientos que más predominan y emocionan a los fans.

Síguenos en nuestra próxima entrega,

Aqui dejo el link del video:























No hay comentarios:

Publicar un comentario