Análisis de Sentimientos El Triste - José José

El análisis de sentimientos, o minería de opinión, es utilizado para extraer de forma automática información sobre la connotación positiva o negativa del lenguaje de un documento.

El análisis mostrará el resultado en 8 emociones básicas y 2 sentimientos.

Emociones Básicas:
1. Alegría (joy)
2. Tristeza (sadness)
3. Ira (anger) 4. Sorpresa (surprise)
5. Asco (disgust)
6. Miedo (fear)
7. Anticipación (anticipation) 8. Confianza (trust)

Sentimientos:
1. Positivo (positive)
2. Negativo (negative)

1. Instalar paquetes y llamar librerías

# install.packages("syuzhet")
library(syuzhet)
# install.packages("RColorBrewer")
library(RColorBrewer)
library(striprtf)

2. Cargar el Texto

texto_cadena <- read.delim("/Users/estefanyvillalobos/Desktop/RPortfolio/La Letra.txt", header = FALSE)

#opt2 <- read_rtf("/Users/estefanyvillalobos/Desktop/RPortfolio/La Letra.rtf"), no me jala 

3. Tokenizar Texto

texto_palabras <- get_tokens(texto_cadena)

4. Explorar Texto

head(texto_palabras)
## [1] "c"        "qué"      "triste"   "fue"      "decirnos" "adiós"
length(texto_palabras)
## [1] 183

5. Realizar Análisis de Sentimientos

sentimientos_df <- get_nrc_sentiment(texto_palabras, language = "spanish")
#idiomas disponibles: spanish, english, french, german, italian, portoguese, latin, etc. 

summary(sentimientos_df)
##      anger          anticipation    disgust             fear       
##  Min.   :0.00000   Min.   :0     Min.   :0.00000   Min.   :0.0000  
##  1st Qu.:0.00000   1st Qu.:0     1st Qu.:0.00000   1st Qu.:0.0000  
##  Median :0.00000   Median :0     Median :0.00000   Median :0.0000  
##  Mean   :0.02186   Mean   :0     Mean   :0.03825   Mean   :0.0765  
##  3rd Qu.:0.00000   3rd Qu.:0     3rd Qu.:0.00000   3rd Qu.:0.0000  
##  Max.   :1.00000   Max.   :0     Max.   :1.00000   Max.   :2.0000  
##       joy             sadness          surprise     trust      negative     
##  Min.   :0.00000   Min.   :0.0000   Min.   :0   Min.   :0   Min.   :0.0000  
##  1st Qu.:0.00000   1st Qu.:0.0000   1st Qu.:0   1st Qu.:0   1st Qu.:0.0000  
##  Median :0.00000   Median :0.0000   Median :0   Median :0   Median :0.0000  
##  Mean   :0.03279   Mean   :0.2077   Mean   :0   Mean   :0   Mean   :0.1967  
##  3rd Qu.:0.00000   3rd Qu.:0.0000   3rd Qu.:0   3rd Qu.:0   3rd Qu.:0.0000  
##  Max.   :1.00000   Max.   :7.0000   Max.   :0   Max.   :0   Max.   :7.0000  
##     positive      
##  Min.   :0.00000  
##  1st Qu.:0.00000  
##  Median :0.00000  
##  Mean   :0.04372  
##  3rd Qu.:0.00000  
##  Max.   :1.00000
head(sentimientos_df) # mientras mas grande es el numero mas intenso es el sentimiento
##   anger anticipation disgust fear joy sadness surprise trust negative positive
## 1     0            0       0    0   0       0        0     0        0        0
## 2     0            0       0    0   0       0        0     0        0        0
## 3     1            0       1    2   0       5        0     0        5        0
## 4     0            0       0    0   0       0        0     0        0        0
## 5     0            0       0    0   0       0        0     0        0        0
## 6     0            0       0    0   0       0        0     0        0        0

6. Graficar Resultados de Emociones

barplot(
  colSums(prop.table(sentimientos_df[,1:8])), space = 0.2, 
  horiz = FALSE,
  las = 1, 
  cex.names = 0.7,
  col = brewer.pal(n=8, name = "Set3"),
  main = "Análisis de la Canción el Triste",
  xlab = "emociones"
)

7. Profundizar Análisis de Emociones

palabras_tristeza <- texto_palabras[sentimientos_df$sadness> 0]
palabras_tristeza_orden <- sort(table(unlist(palabras_tristeza)), decreasing = TRUE)
head(palabras_tristeza_orden, n = 10)
## 
##  triste   dolor    azul    gris soledad 
##       4       2       1       1       1

8. Graficar Resultados de Sentimientos

secuencia_sentimientos <- (sentimientos_df$negative*-1)+sentimientos_df$positive
simple_plot(secuencia_sentimientos)

Análisis de Sentimientos Himno Nacional Mexicano

2. Cargar el Texto

himno <- read.delim("/Users/estefanyvillalobos/Desktop/RPortfolio/himnomexicano.txt", header = FALSE)

3. Tokenizar Texto

palabras <- get_tokens(himno)

4. Explorar Texto

head(palabras)
## [1] "c"         "mexicanos" "al"        "grito"     "de"        "guerra"
length(palabras)
## [1] 497

5. Realizar Análisis de Sentimientos

sentimientos <- get_nrc_sentiment(palabras, language = "spanish")
#idiomas disponibles: spanish, english, french, german, italian, portoguese, latin, etc. 

summary(sentimientos)
##      anger          anticipation        disgust             fear        
##  Min.   :0.00000   Min.   :0.00000   Min.   :0.00000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.00000  
##  Median :0.00000   Median :0.00000   Median :0.00000   Median :0.00000  
##  Mean   :0.06237   Mean   :0.04225   Mean   :0.02213   Mean   :0.07445  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000  
##  Max.   :3.00000   Max.   :2.00000   Max.   :2.00000   Max.   :2.00000  
##       joy             sadness           surprise           trust        
##  Min.   :0.00000   Min.   :0.00000   Min.   :0.00000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.00000  
##  Median :0.00000   Median :0.00000   Median :0.00000   Median :0.00000  
##  Mean   :0.04829   Mean   :0.04225   Mean   :0.02616   Mean   :0.04024  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000  
##  Max.   :2.00000   Max.   :2.00000   Max.   :2.00000   Max.   :2.00000  
##     negative         positive     
##  Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.0000  
##  Mean   :0.0825   Mean   :0.1006  
##  3rd Qu.:0.0000   3rd Qu.:0.0000  
##  Max.   :3.0000   Max.   :3.0000
head(sentimientos) # mientras mas grande es el numero mas intenso es el sentimiento
##   anger anticipation disgust fear joy sadness surprise trust negative positive
## 1     0            0       0    0   0       0        0     0        0        0
## 2     0            0       0    0   0       0        0     0        0        0
## 3     0            0       0    0   0       0        0     0        0        0
## 4     2            0       0    1   0       1        2     0        2        0
## 5     0            0       0    0   0       0        0     0        0        0
## 6     1            0       0    2   0       1        0     0        2        0

6. Graficar Resultados de Emociones

barplot(
  colSums(prop.table(sentimientos[,1:8])), space = 0.2, 
  horiz = FALSE,
  las = 1, 
  cex.names = 0.7,
  col = brewer.pal(n=8, name = "Set2"),
  main = "Análisis del Himno Nacional Mexicano",
  xlab = "emociones"
)

7. Profundizar Análisis de Emociones

palabras_miedo <- texto_palabras[sentimientos_df$fear> 0]
palabras_miedo_orden <- sort(table(unlist(palabras_miedo)), decreasing = TRUE)
head(palabras_miedo_orden, n = 10)
## 
##  triste   dolor soledad 
##       4       2       1

8. Graficar Resultados de Sentimientos

secu_sentimientos <- (sentimientos$negative*-1)+sentimientos$positive
simple_plot(secu_sentimientos)

LS0tCnRpdGxlOiAiTTQgQWN0aXZpZGFkIDQuNSIKYXV0aG9yOiAiRXN0ZWZhbnkgVmlsbGFsb2JvcyIKZGF0ZTogIjIwMjMtMDktMjUiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFCiAgICB0aGVtZTogInNhbmRzdG9uZSIKICAgIGhpZ2hsaWdodDogImVzcHJlc3NvIgotLS0KCiFbXSgvVXNlcnMvZXN0ZWZhbnl2aWxsYWxvYm9zL0Rlc2t0b3AvUlBvcnRmb2xpby80YTkwNzg3MDUyOTZhYmRiYzI0YWE0ZmE2NWIyNTRjYS5naWYpCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+KipBbsOhbGlzaXMgZGUgU2VudGltaWVudG9zIEVsIFRyaXN0ZSAtIEpvc8OpIEpvc8OpKio8L3NwYW4+CgpFbCAqKmFuw6FsaXNpcyBkZSBzZW50aW1pZW50b3MqKiwgbyAqbWluZXLDrWEgZGUgb3BpbmnDs24qLCBlcyB1dGlsaXphZG8gcGFyYSBleHRyYWVyIGRlIGZvcm1hIGF1dG9tw6F0aWNhIGluZm9ybWFjacOzbiBzb2JyZSBsYSBjb25ub3RhY2nDs24gcG9zaXRpdmEgbyBuZWdhdGl2YSBkZWwgbGVuZ3VhamUgZGUgdW4gZG9jdW1lbnRvLiAKCkVsIGFuw6FsaXNpcyBtb3N0cmFyw6EgZWwgcmVzdWx0YWRvIGVuIDggZW1vY2lvbmVzIGLDoXNpY2FzIHkgMiBzZW50aW1pZW50b3MuIAoKPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4qKkVtb2Npb25lcyBCw6FzaWNhczoqKjwvc3Bhbj4gIAoxLiBBbGVncsOtYSAoam95KSAgCjIuIFRyaXN0ZXphIChzYWRuZXNzKSAgCjMuIElyYSAoYW5nZXIpCjQuIFNvcnByZXNhIChzdXJwcmlzZSkgIAo1LiBBc2NvIChkaXNndXN0KSAgCjYuIE1pZWRvIChmZWFyKSAgCjcuIEFudGljaXBhY2nDs24gKGFudGljaXBhdGlvbikKOC4gQ29uZmlhbnphICh0cnVzdCkgIAogIAo8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPioqU2VudGltaWVudG9zOioqPC9zcGFuPiAgICAKMS4gUG9zaXRpdm8gKHBvc2l0aXZlKSAgCjIuIE5lZ2F0aXZvIChuZWdhdGl2ZSkgIAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4xLiBJbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzPC9zcGFuPgoKYGBge3J9CiMgaW5zdGFsbC5wYWNrYWdlcygic3l1emhldCIpCmxpYnJhcnkoc3l1emhldCkKIyBpbnN0YWxsLnBhY2thZ2VzKCJSQ29sb3JCcmV3ZXIiKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeShzdHJpcHJ0ZikKCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4yLiBDYXJnYXIgZWwgVGV4dG88L3NwYW4+CgpgYGB7cn0KdGV4dG9fY2FkZW5hIDwtIHJlYWQuZGVsaW0oIi9Vc2Vycy9lc3RlZmFueXZpbGxhbG9ib3MvRGVza3RvcC9SUG9ydGZvbGlvL0xhIExldHJhLnR4dCIsIGhlYWRlciA9IEZBTFNFKQoKI29wdDIgPC0gcmVhZF9ydGYoIi9Vc2Vycy9lc3RlZmFueXZpbGxhbG9ib3MvRGVza3RvcC9SUG9ydGZvbGlvL0xhIExldHJhLnJ0ZiIpLCBubyBtZSBqYWxhIApgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+My4gVG9rZW5pemFyIFRleHRvPC9zcGFuPgoKYGBge3J9CnRleHRvX3BhbGFicmFzIDwtIGdldF90b2tlbnModGV4dG9fY2FkZW5hKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+NC4gRXhwbG9yYXIgVGV4dG88L3NwYW4+CmBgYHtyfQpoZWFkKHRleHRvX3BhbGFicmFzKQpsZW5ndGgodGV4dG9fcGFsYWJyYXMpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij41LiBSZWFsaXphciBBbsOhbGlzaXMgZGUgU2VudGltaWVudG9zPC9zcGFuPgpgYGB7cn0Kc2VudGltaWVudG9zX2RmIDwtIGdldF9ucmNfc2VudGltZW50KHRleHRvX3BhbGFicmFzLCBsYW5ndWFnZSA9ICJzcGFuaXNoIikKI2lkaW9tYXMgZGlzcG9uaWJsZXM6IHNwYW5pc2gsIGVuZ2xpc2gsIGZyZW5jaCwgZ2VybWFuLCBpdGFsaWFuLCBwb3J0b2d1ZXNlLCBsYXRpbiwgZXRjLiAKCnN1bW1hcnkoc2VudGltaWVudG9zX2RmKQpoZWFkKHNlbnRpbWllbnRvc19kZikgIyBtaWVudHJhcyBtYXMgZ3JhbmRlIGVzIGVsIG51bWVybyBtYXMgaW50ZW5zbyBlcyBlbCBzZW50aW1pZW50bwpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+Ni4gR3JhZmljYXIgUmVzdWx0YWRvcyBkZSBFbW9jaW9uZXM8L3NwYW4+CmBgYHtyfQpiYXJwbG90KAogIGNvbFN1bXMocHJvcC50YWJsZShzZW50aW1pZW50b3NfZGZbLDE6OF0pKSwgc3BhY2UgPSAwLjIsIAogIGhvcml6ID0gRkFMU0UsCiAgbGFzID0gMSwgCiAgY2V4Lm5hbWVzID0gMC43LAogIGNvbCA9IGJyZXdlci5wYWwobj04LCBuYW1lID0gIlNldDMiKSwKICBtYWluID0gIkFuw6FsaXNpcyBkZSBsYSBDYW5jacOzbiBlbCBUcmlzdGUiLAogIHhsYWIgPSAiZW1vY2lvbmVzIgopCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij43LiBQcm9mdW5kaXphciBBbsOhbGlzaXMgZGUgRW1vY2lvbmVzPC9zcGFuPgoKYGBge3J9CnBhbGFicmFzX3RyaXN0ZXphIDwtIHRleHRvX3BhbGFicmFzW3NlbnRpbWllbnRvc19kZiRzYWRuZXNzPiAwXQpwYWxhYnJhc190cmlzdGV6YV9vcmRlbiA8LSBzb3J0KHRhYmxlKHVubGlzdChwYWxhYnJhc190cmlzdGV6YSkpLCBkZWNyZWFzaW5nID0gVFJVRSkKaGVhZChwYWxhYnJhc190cmlzdGV6YV9vcmRlbiwgbiA9IDEwKQoKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPjguIEdyYWZpY2FyIFJlc3VsdGFkb3MgZGUgU2VudGltaWVudG9zPC9zcGFuPgpgYGB7cn0Kc2VjdWVuY2lhX3NlbnRpbWllbnRvcyA8LSAoc2VudGltaWVudG9zX2RmJG5lZ2F0aXZlKi0xKStzZW50aW1pZW50b3NfZGYkcG9zaXRpdmUKc2ltcGxlX3Bsb3Qoc2VjdWVuY2lhX3NlbnRpbWllbnRvcykKYGBgCgohW10oL1VzZXJzL2VzdGVmYW55dmlsbGFsb2Jvcy9Eb3dubG9hZHMvbWV4aWNvLWZsYWctZ2lmLmdpZikKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBkYXJrZ3JlZW47Ij4qKkFuw6FsaXNpcyBkZSBTZW50aW1pZW50b3MgSGltbm8gTmFjaW9uYWwgTWV4aWNhbm8qKjwvc3Bhbj4gCgojIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBkYXJrZ3JlZW47Ij4yLiBDYXJnYXIgZWwgVGV4dG88L3NwYW4+CgpgYGB7cn0KaGltbm8gPC0gcmVhZC5kZWxpbSgiL1VzZXJzL2VzdGVmYW55dmlsbGFsb2Jvcy9EZXNrdG9wL1JQb3J0Zm9saW8vaGltbm9tZXhpY2Fuby50eHQiLCBoZWFkZXIgPSBGQUxTRSkKYGBgCgojIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBkYXJrZ3JlZW47Ij4zLiBUb2tlbml6YXIgVGV4dG88L3NwYW4+CgpgYGB7cn0KcGFsYWJyYXMgPC0gZ2V0X3Rva2VucyhoaW1ubykKYGBgCgojIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBkYXJrZ3JlZW47Ij40LiBFeHBsb3JhciBUZXh0bzwvc3Bhbj4KYGBge3J9CmhlYWQocGFsYWJyYXMpCmxlbmd0aChwYWxhYnJhcykKYGBgCgojIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBkYXJrZ3JlZW47Ij41LiBSZWFsaXphciBBbsOhbGlzaXMgZGUgU2VudGltaWVudG9zPC9zcGFuPgpgYGB7cn0Kc2VudGltaWVudG9zIDwtIGdldF9ucmNfc2VudGltZW50KHBhbGFicmFzLCBsYW5ndWFnZSA9ICJzcGFuaXNoIikKI2lkaW9tYXMgZGlzcG9uaWJsZXM6IHNwYW5pc2gsIGVuZ2xpc2gsIGZyZW5jaCwgZ2VybWFuLCBpdGFsaWFuLCBwb3J0b2d1ZXNlLCBsYXRpbiwgZXRjLiAKCnN1bW1hcnkoc2VudGltaWVudG9zKQpoZWFkKHNlbnRpbWllbnRvcykgIyBtaWVudHJhcyBtYXMgZ3JhbmRlIGVzIGVsIG51bWVybyBtYXMgaW50ZW5zbyBlcyBlbCBzZW50aW1pZW50bwpgYGAKCiMjIyA8c3BhbiBzdHlsZT0iY29sb3I6IGRhcmtncmVlbjsiPjYuIEdyYWZpY2FyIFJlc3VsdGFkb3MgZGUgRW1vY2lvbmVzPC9zcGFuPgpgYGB7cn0KYmFycGxvdCgKICBjb2xTdW1zKHByb3AudGFibGUoc2VudGltaWVudG9zWywxOjhdKSksIHNwYWNlID0gMC4yLCAKICBob3JpeiA9IEZBTFNFLAogIGxhcyA9IDEsIAogIGNleC5uYW1lcyA9IDAuNywKICBjb2wgPSBicmV3ZXIucGFsKG49OCwgbmFtZSA9ICJTZXQyIiksCiAgbWFpbiA9ICJBbsOhbGlzaXMgZGVsIEhpbW5vIE5hY2lvbmFsIE1leGljYW5vIiwKICB4bGFiID0gImVtb2Npb25lcyIKKQpgYGAKCiMjIyA8c3BhbiBzdHlsZT0iY29sb3I6IGRhcmtncmVlbjsiPjcuIFByb2Z1bmRpemFyIEFuw6FsaXNpcyBkZSBFbW9jaW9uZXM8L3NwYW4+CgpgYGB7cn0KcGFsYWJyYXNfbWllZG8gPC0gdGV4dG9fcGFsYWJyYXNbc2VudGltaWVudG9zX2RmJGZlYXI+IDBdCnBhbGFicmFzX21pZWRvX29yZGVuIDwtIHNvcnQodGFibGUodW5saXN0KHBhbGFicmFzX21pZWRvKSksIGRlY3JlYXNpbmcgPSBUUlVFKQpoZWFkKHBhbGFicmFzX21pZWRvX29yZGVuLCBuID0gMTApCgpgYGAKCiMjIyA8c3BhbiBzdHlsZT0iY29sb3I6IGRhcmtncmVlbjsiPjguIEdyYWZpY2FyIFJlc3VsdGFkb3MgZGUgU2VudGltaWVudG9zPC9zcGFuPgpgYGB7cn0Kc2VjdV9zZW50aW1pZW50b3MgPC0gKHNlbnRpbWllbnRvcyRuZWdhdGl2ZSotMSkrc2VudGltaWVudG9zJHBvc2l0aXZlCnNpbXBsZV9wbG90KHNlY3Vfc2VudGltaWVudG9zKQpgYGAK