
Análisis de
Sentimientos
El análisis de sentimientos, o minería de opinión,
es utilizado para extraer de forma automática, información sobre la
conotació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)
2. Cargar texto
texto_cadena <- read.delim("/Users/kristencarlos/Documents/Concentración Análisis Datos/El triste canción.txt", header=FALSE)
3. Tokenizar texto
texto_palabras <- get_tokens(texto_cadena)
4. Explorar texto
## [1] "c" "qué" "triste" "fue" "decirnos" "adiós"
## [1] 183
5. Realizar Análisis de
Sentimientos
sentimientos_df <- get_nrc_sentiment(texto_palabras, language = "spanish")
# Idiomas disponibles: spanish, english, french, german, italian, portuguese, etc.
head(sentimientos_df)
## 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
## 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
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 Sentimientos 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)


1. Instalar paquetes y llamar
librerías
# install.packages("syuzhet")
library(syuzhet)
# install.packages("RColorBrewer")
library(RColorBrewer)
2. Cargar texto
texto_completo <- read.delim("/Users/kristencarlos/Documents/Concentración Análisis Datos/HimnoMexicano.txt", header=FALSE)
3. Tokenizar texto
texto_palabrasHimno <- get_tokens(texto_completo)
4. Explorar texto
head(texto_palabrasHimno)
## [1] "c" "coro" "mexicanos" "al" "grito" "de"
length(texto_palabrasHimno)
## [1] 255
5. Realizar Análisis de
Sentimientos
sentimientos_Himno <- get_nrc_sentiment(texto_palabrasHimno, language = "spanish")
# Idiomas disponibles: spanish, english, french, german, italian, portuguese, etc.
head(sentimientos_Himno)
## 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 1 0 0 1 0 2
## 3 0 0 0 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0 0 0 0
## 5 2 0 0 1 0 1 2 0 2 0
## 6 0 0 0 0 0 0 0 0 0 0
summary(sentimientos_Himno)
## 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.07059 Mean :0.02745 Mean :0.01961 Mean :0.09804
## 3rd Qu.:0.00000 3rd Qu.:0.00000 3rd Qu.:0.00000 3rd Qu.:0.00000
## Max. :2.00000 Max. :2.00000 Max. :1.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.04706 Mean :0.05882 Mean :0.02353 Mean :0.05098
## 3rd Qu.:0.00000 3rd Qu.:0.00000 3rd Qu.:0.00000 3rd Qu.:0.00000
## Max. :2.00000 Max. :1.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.1137 Mean :0.1098
## 3rd Qu.:0.0000 3rd Qu.:0.0000
## Max. :2.0000 Max. :2.0000
6. Graficar Resultados de
Emociones
barplot(
colSums(prop.table(sentimientos_Himno[,1:8])),
space = 0.2,
horiz = FALSE,
las = 1,
cex.names = 0.7,
col = brewer.pal(n = 8, name = "Set3"),
main = "Análisis de Sentimientos de la canción Himno Nacional Mexicano",
xlab = "emociones"
)

7. Profundizar Análisis de
Emociones
palabras_miedo <- texto_palabrasHimno[sentimientos_Himno$fear > 0]
palabras_miedo_orden <- sort(table(unlist(palabras_miedo)), decreasing = TRUE)
head(palabras_miedo_orden, n= 10)
##
## guerra sangre grito destino dios enemigo
## 8 3 2 1 1 1
8. Graficar Resultados de
Sentimientos
secuencia_sentimientos <- (sentimientos_df$negative*-1) + sentimientos_df$positive
simple_plot(secuencia_sentimientos)

LS0tCnRpdGxlOiAiQWN0aXZpZGFkIDQuNCIKYXV0aG9yOiAiS3Jpc3RlbiBDYXJsb3MgQTAxNTcwNzUzIgpkYXRlOiAiMjAyMy0wOS0yNSIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIHRvY19mbG9hdDogVFJVRQogICAgY29kZV9kb3dubG9hZDogVFJVRQogICAgdGhlbWU6ICJ5ZXRpIgogICAgaGlnaGxpZ2h0OiAidGFuZ28iCi0tLQoKIVtdKC9Vc2Vycy9rcmlzdGVuY2FybG9zL0RvY3VtZW50cy9Db25jZW50cmFjaW/MgW4gQW5hzIFsaXNpcyBEYXRvcy9lbW9jaW9uZXNmb3RvLmpwZykKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4qKkFuw6FsaXNpcyBkZSBTZW50aW1pZW50b3MqKjwvc3Bhbj4KCkVsICoqYW7DoWxpc2lzIGRlIHNlbnRpbWllbnRvcyoqLCBvIG1pbmVyw61hIGRlIG9waW5pw7NuLCBlcyB1dGlsaXphZG8gcGFyYSBleHRyYWVyIGRlIGZvcm1hIGF1dG9tw6F0aWNhLCBpbmZvcm1hY2nDs24gc29icmUgbGEgY29ub3RhY2nDs24gcG9zaXRpdmEgbyBuZWdhdGl2YSBkZWwgbGVuZ3VhamUgZGUgdW4gZG9jdW1lbnRvLgoKRWwgYW7DoWxpc2lzIG1vc3RyYXLDoSBlbCByZXN1bHRhZG8gZW4gKjggZW1vY2lvbmVzIGLDoXNpY2FzIHkgMiBzZW50aW1pZW50b3MuKgoKRW1vY2lvbmVzIGLDoXNpY2FzOiAgCjEuIEFsZWdyw61hIChqb3kpICAKMi4gVHJpc3RlemEgKHNhZG5lc3MpICAKMy4gSXJhIChhbmdlcikgIAo0LiBTb3JwcmVzYSAoc3VycHJpc2UpICAgIAo1LiBBc2NvIChkaXNndXN0KSAgIAo2LiBNaWVkbyAoZmVhcikgICAKNy4gQW50aWNpcGFjacOzbiAoYW50aWNpcGF0aW9uKSAgICAKOC4gQ29uZmlhbnphICh0cnVzdCkgICAgCgpTZW50aW1pZW50b3M6ICAgCjEuIFBvc2l0aXZvIChwb3NpdGl2ZSkgICAgCjIuIE5lZ2F0aXZvIChuZWdhdGl2ZSkgICAgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPjEuIEluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcsOtYXM8L3NwYW4+CgpgYGB7cn0KIyBpbnN0YWxsLnBhY2thZ2VzKCJzeXV6aGV0IikKbGlicmFyeShzeXV6aGV0KQoKIyBpbnN0YWxsLnBhY2thZ2VzKCJSQ29sb3JCcmV3ZXIiKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPjIuIENhcmdhciB0ZXh0bzwvc3Bhbj4KCmBgYHtyfQp0ZXh0b19jYWRlbmEgPC0gcmVhZC5kZWxpbSgiL1VzZXJzL2tyaXN0ZW5jYXJsb3MvRG9jdW1lbnRzL0NvbmNlbnRyYWNpb8yBbiBBbmHMgWxpc2lzIERhdG9zL0VsIHRyaXN0ZSBjYW5jaW/MgW4udHh0IiwgaGVhZGVyPUZBTFNFKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+My4gVG9rZW5pemFyIHRleHRvPC9zcGFuPgoKYGBge3J9CnRleHRvX3BhbGFicmFzIDwtIGdldF90b2tlbnModGV4dG9fY2FkZW5hKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+NC4gRXhwbG9yYXIgdGV4dG88L3NwYW4+CgpgYGB7cn0KaGVhZCh0ZXh0b19wYWxhYnJhcykKbGVuZ3RoKHRleHRvX3BhbGFicmFzKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+NS4gUmVhbGl6YXIgQW7DoWxpc2lzIGRlIFNlbnRpbWllbnRvczwvc3Bhbj4KCmBgYHtyfQpzZW50aW1pZW50b3NfZGYgPC0gZ2V0X25yY19zZW50aW1lbnQodGV4dG9fcGFsYWJyYXMsIGxhbmd1YWdlID0gInNwYW5pc2giKQoKIyBJZGlvbWFzIGRpc3BvbmlibGVzOiBzcGFuaXNoLCBlbmdsaXNoLCBmcmVuY2gsIGdlcm1hbiwgaXRhbGlhbiwgcG9ydHVndWVzZSwgZXRjLgoKaGVhZChzZW50aW1pZW50b3NfZGYpCnN1bW1hcnkoc2VudGltaWVudG9zX2RmKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+Ni4gR3JhZmljYXIgUmVzdWx0YWRvcyBkZSBFbW9jaW9uZXM8L3NwYW4+CgpgYGB7cn0KYmFycGxvdCgKICBjb2xTdW1zKHByb3AudGFibGUoc2VudGltaWVudG9zX2RmWywxOjhdKSksCiAgc3BhY2UgPSAwLjIsCiAgaG9yaXogPSBGQUxTRSwKICBsYXMgPSAxLAogIGNleC5uYW1lcyA9IDAuNywKICBjb2wgPSBicmV3ZXIucGFsKG4gPSA4LCBuYW1lID0gIlNldDMiKSwKICBtYWluID0gIkFuw6FsaXNpcyBkZSBTZW50aW1pZW50b3MgZGUgbGEgY2FuY2nDs24gRWwgVHJpc3RlIiwKICB4bGFiID0gImVtb2Npb25lcyIKKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+Ny4gUHJvZnVuZGl6YXIgQW7DoWxpc2lzIGRlIEVtb2Npb25lczwvc3Bhbj4KCmBgYHtyfQpwYWxhYnJhc190cmlzdGV6YSA8LSB0ZXh0b19wYWxhYnJhc1tzZW50aW1pZW50b3NfZGYkc2FkbmVzcyA+IDBdCnBhbGFicmFzX3RyaXN0ZXphX29yZGVuIDwtIHNvcnQodGFibGUodW5saXN0KHBhbGFicmFzX3RyaXN0ZXphKSksIGRlY3JlYXNpbmcgPSBUUlVFKQpoZWFkKHBhbGFicmFzX3RyaXN0ZXphX29yZGVuLCBuPSAxMCkKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPjguIEdyYWZpY2FyIFJlc3VsdGFkb3MgZGUgU2VudGltaWVudG9zPC9zcGFuPgoKYGBge3J9CnNlY3VlbmNpYV9zZW50aW1pZW50b3MgPC0gKHNlbnRpbWllbnRvc19kZiRuZWdhdGl2ZSotMSkgKyBzZW50aW1pZW50b3NfZGYkcG9zaXRpdmUKc2ltcGxlX3Bsb3Qoc2VjdWVuY2lhX3NlbnRpbWllbnRvcykKYGBgCgohW10oL1VzZXJzL2tyaXN0ZW5jYXJsb3MvRG9jdW1lbnRzL0NvbmNlbnRyYWNpb8yBbiBBbmHMgWxpc2lzIERhdG9zL2JhbmRlcmFtZXhpY28uanBnKQoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4xLiBJbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzPC9zcGFuPgoKYGBge3J9CiMgaW5zdGFsbC5wYWNrYWdlcygic3l1emhldCIpCmxpYnJhcnkoc3l1emhldCkKCiMgaW5zdGFsbC5wYWNrYWdlcygiUkNvbG9yQnJld2VyIikKbGlicmFyeShSQ29sb3JCcmV3ZXIpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4yLiBDYXJnYXIgdGV4dG88L3NwYW4+CgpgYGB7cn0KdGV4dG9fY29tcGxldG8gPC0gcmVhZC5kZWxpbSgiL1VzZXJzL2tyaXN0ZW5jYXJsb3MvRG9jdW1lbnRzL0NvbmNlbnRyYWNpb8yBbiBBbmHMgWxpc2lzIERhdG9zL0hpbW5vTWV4aWNhbm8udHh0IiwgaGVhZGVyPUZBTFNFKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+My4gVG9rZW5pemFyIHRleHRvPC9zcGFuPgoKYGBge3J9CnRleHRvX3BhbGFicmFzSGltbm8gPC0gZ2V0X3Rva2Vucyh0ZXh0b19jb21wbGV0bykKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPjQuIEV4cGxvcmFyIHRleHRvPC9zcGFuPgoKYGBge3J9CmhlYWQodGV4dG9fcGFsYWJyYXNIaW1ubykKbGVuZ3RoKHRleHRvX3BhbGFicmFzSGltbm8pCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij41LiBSZWFsaXphciBBbsOhbGlzaXMgZGUgU2VudGltaWVudG9zPC9zcGFuPgoKYGBge3J9CnNlbnRpbWllbnRvc19IaW1ubyA8LSBnZXRfbnJjX3NlbnRpbWVudCh0ZXh0b19wYWxhYnJhc0hpbW5vLCBsYW5ndWFnZSA9ICJzcGFuaXNoIikKCiMgSWRpb21hcyBkaXNwb25pYmxlczogc3BhbmlzaCwgZW5nbGlzaCwgZnJlbmNoLCBnZXJtYW4sIGl0YWxpYW4sIHBvcnR1Z3Vlc2UsIGV0Yy4KCmhlYWQoc2VudGltaWVudG9zX0hpbW5vKQpzdW1tYXJ5KHNlbnRpbWllbnRvc19IaW1ubykKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPjYuIEdyYWZpY2FyIFJlc3VsdGFkb3MgZGUgRW1vY2lvbmVzPC9zcGFuPgoKYGBge3J9CmJhcnBsb3QoCiAgY29sU3Vtcyhwcm9wLnRhYmxlKHNlbnRpbWllbnRvc19IaW1ub1ssMTo4XSkpLAogIHNwYWNlID0gMC4yLAogIGhvcml6ID0gRkFMU0UsCiAgbGFzID0gMSwKICBjZXgubmFtZXMgPSAwLjcsCiAgY29sID0gYnJld2VyLnBhbChuID0gOCwgbmFtZSA9ICJTZXQzIiksCiAgbWFpbiA9ICJBbsOhbGlzaXMgZGUgU2VudGltaWVudG9zIGRlIGxhIGNhbmNpw7NuIEhpbW5vIE5hY2lvbmFsIE1leGljYW5vIiwKICB4bGFiID0gImVtb2Npb25lcyIKKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+Ny4gUHJvZnVuZGl6YXIgQW7DoWxpc2lzIGRlIEVtb2Npb25lczwvc3Bhbj4KCmBgYHtyfQpwYWxhYnJhc19taWVkbyA8LSB0ZXh0b19wYWxhYnJhc0hpbW5vW3NlbnRpbWllbnRvc19IaW1ubyRmZWFyID4gMF0KcGFsYWJyYXNfbWllZG9fb3JkZW4gPC0gc29ydCh0YWJsZSh1bmxpc3QocGFsYWJyYXNfbWllZG8pKSwgZGVjcmVhc2luZyA9IFRSVUUpCmhlYWQocGFsYWJyYXNfbWllZG9fb3JkZW4sIG49IDEwKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+OC4gR3JhZmljYXIgUmVzdWx0YWRvcyBkZSBTZW50aW1pZW50b3M8L3NwYW4+CgpgYGB7cn0Kc2VjdWVuY2lhX3NlbnRpbWllbnRvcyA8LSAoc2VudGltaWVudG9zX2RmJG5lZ2F0aXZlKi0xKSArIHNlbnRpbWllbnRvc19kZiRwb3NpdGl2ZQpzaW1wbGVfcGxvdChzZWN1ZW5jaWFfc2VudGltaWVudG9zKQpgYGAKCgoKCgoK