Análisis de Sentimientos

El Análisis de Sentimientos, o minería de opinión, es utilizado para extraer de fomra automática información sobre la conotación positiva o negativa del lenguaje de un documento.

El análisis mostrará el resultado de 8 emociones basicas y 2 sentimientos.
Emociones basicas 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 (negativo).

1. Instalar paquetes y llamar librerias

library(syuzhet)
library(RColorBrewer)

2. Cargar texto

texto_cadena <- read.delim("/Users/speedymd23/Desktop/Analisis de datos - concentración/Mod 4/JoseJose.txt", header= FALSE)

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, 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)
##   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 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)

Himno nacional

2. Cargar texto

texto_cadenaM <- read.delim("/Users/speedymd23/Desktop/Analisis de datos - concentración/Mod 4/himnomexicano.txt", header= FALSE)

3. Tokenizar texto

texto_palabrasM <- get_tokens(texto_cadenaM)

4. Explorar texto

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

5. Realizar análisis de Sentimientos

sentimientos_df_M <- get_nrc_sentiment(texto_palabrasM, language = "spanish")

#Idiomas disponibles: spanish, english, french, german, italian, portoguese, etc.

summary(sentimientos_df_M)
##      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.00000   Min.   :0.0000  
##  1st Qu.:0.00000   1st Qu.:0.0000  
##  Median :0.00000   Median :0.0000  
##  Mean   :0.08249   Mean   :0.1006  
##  3rd Qu.:0.00000   3rd Qu.:0.0000  
##  Max.   :3.00000   Max.   :3.0000
head(sentimientos_df_M)
##   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_df_M[,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_M <- texto_palabras[sentimientos_df_M$sadness >0]
palabras_tristeza_orden_M <- sort(table(unlist(palabras_tristeza_M)),decreasing=TRUE)
head(palabras_tristeza_orden_M, n=10)
## 
##    adiós    estoy      fue historia       no   podido      soy   vuelva 
##        1        1        1        1        1        1        1        1

8. Graficar Resultados de Sentimientos

secuencia_sentimientosM <- (sentimientos_df_M$negative*-1)+sentimientos_df_M$positive
simple_plot(secuencia_sentimientosM)

LS0tCnRpdGxlOiAiQWN0aXZpZGFkIDQuNSIKYXV0aG9yOiAiRmVybmFuZG8gTW9yYWxlcyBEaWFydGUgLSBBMDE3NDA1NjciCmRhdGU6ICIyMDIzLTA5LTE4IgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIHRvY19mbG9hdDogVFJVRQogICAgY29kZV9kb3dubG9hZDogVFJVRQogICAgdGhlbWU6ICJ5ZXRpIgogICAgaGlnaGxpZ2h0OiAidGFuZ28iCi0tLQoKIVtdKC9Vc2Vycy9zcGVlZHltZDIzL0Rlc2t0b3AvQW5hbGlzaXMgZGUgZGF0b3MgLSBjb25jZW50cmFjaW/MgW4vTW9kIDQvbWFuLWNpdHkuZ2lmKQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+QW7DoWxpc2lzIGRlIFNlbnRpbWllbnRvczwvc3Bhbj4KCkVsIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+QW7DoWxpc2lzIGRlIFNlbnRpbWllbnRvczwvc3Bhbj4sIG8gKm1pbmVyw61hIGRlIG9waW5pw7NuKiwgZXMgdXRpbGl6YWRvIHBhcmEgZXh0cmFlciBkZSBmb21yYSBhdXRvbcOhdGljYSBpbmZvcm1hY2nDs24gc29icmUgbGEgY29ub3RhY2nDs24gcG9zaXRpdmEgbyBuZWdhdGl2YSBkZWwgbGVuZ3VhamUgZGUgdW4gZG9jdW1lbnRvLiAgCgpFbCBhbsOhbGlzaXMgbW9zdHJhcsOhIGVsIHJlc3VsdGFkbyBkZSA4IGVtb2Npb25lcyBiYXNpY2FzIHkgMiBzZW50aW1pZW50b3MuICAKKipFbW9jaW9uZXMgYmFzaWNhcyoqCjEuIEFsZWdyw61hIChqb3kpLiAKMi4gVHJpc3RlemEgKHNhZG5lc3MpLiAKMy4gSXJhIChhbmdlcikuIAo0LiBTb3JwcmVzYSAoc3VycHJpc2UpLiAKNS4gQXNjbyAoZGlzZ3VzdCkuIAo2LiBNaWVkbyAoZmVhcikuIAo3LiBBbnRpY2lwYWNpw7NuIChhbnRpY2lwYXRpb24pLiAKOC4gQ29uZmlhbnphICh0cnVzdCkuIAoKKipTZW50aW1pZW50b3MqKgoxLiBQb3NpdGl2byAocG9zaXRpdmUpLiAKMi4gTmVnYXRpdm8gKG5lZ2F0aXZvKS4gCgoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4xLiBJbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXJpYXM8L3NwYW4+CmBgYHtyfQpsaWJyYXJ5KHN5dXpoZXQpCmxpYnJhcnkoUkNvbG9yQnJld2VyKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+Mi4gQ2FyZ2FyIHRleHRvPC9zcGFuPgpgYGB7cn0KdGV4dG9fY2FkZW5hIDwtIHJlYWQuZGVsaW0oIi9Vc2Vycy9zcGVlZHltZDIzL0Rlc2t0b3AvQW5hbGlzaXMgZGUgZGF0b3MgLSBjb25jZW50cmFjaW/MgW4vTW9kIDQvSm9zZUpvc2UudHh0IiwgaGVhZGVyPSBGQUxTRSkKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPjMuIFRva2VuaXphciB0ZXh0bzwvc3Bhbj4KYGBge3J9CnRleHRvX3BhbGFicmFzIDwtIGdldF90b2tlbnModGV4dG9fY2FkZW5hKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+NC4gRXhwbG9yYXIgdGV4dG88L3NwYW4+CmBgYHtyfQpoZWFkKHRleHRvX3BhbGFicmFzKQpsZW5ndGgodGV4dG9fcGFsYWJyYXMpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij41LiBSZWFsaXphciBhbsOhbGlzaXMgZGUgU2VudGltaWVudG9zPC9zcGFuPgpgYGB7cn0Kc2VudGltaWVudG9zX2RmIDwtIGdldF9ucmNfc2VudGltZW50KHRleHRvX3BhbGFicmFzLCBsYW5ndWFnZSA9ICJzcGFuaXNoIikKCiNJZGlvbWFzIGRpc3BvbmlibGVzOiBzcGFuaXNoLCBlbmdsaXNoLCBmcmVuY2gsIGdlcm1hbiwgaXRhbGlhbiwgcG9ydG9ndWVzZSwgZXRjLgoKc3VtbWFyeShzZW50aW1pZW50b3NfZGYpCmhlYWQoc2VudGltaWVudG9zX2RmKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+Ni4gR3JhZmljYXIgcmVzdWx0YWRvcyBkZSBlbW9jaW9uZXM8L3NwYW4+CmBgYHtyfQpiYXJwbG90KAogIGNvbFN1bXMocHJvcC50YWJsZShzZW50aW1pZW50b3NfZGZbLDE6OF0pKSwKICBzcGFjZT0wLjIsCiAgaG9yaXo9RkFMU0UsCiAgbGFzPTEsCiAgY2V4Lm5hbWVzPTAuNywKICBjb2w9YnJld2VyLnBhbChuPTgsIG5hbWU9IlNldDMiKSwKICBtYWluPSJBbsOhbGlzaXMgZGUgc2VudGltaWVudG9zIGRlIGxhIGNhbmNpw7NuIEVsIFRyaXN0ZSIsCiAgeGxhYj0iRW1vY2lvbmVzIgopCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij43LiBQcm9mdW5kaXphciBBbsOhbGlzaXMgZGUgZW1vY2lvbmVzPC9zcGFuPgpgYGB7cn0KcGFsYWJyYXNfdHJpc3RlemEgPC0gdGV4dG9fcGFsYWJyYXNbc2VudGltaWVudG9zX2RmJHNhZG5lc3MgPjBdCnBhbGFicmFzX3RyaXN0ZXphX29yZGVuIDwtIHNvcnQodGFibGUodW5saXN0KHBhbGFicmFzX3RyaXN0ZXphKSksZGVjcmVhc2luZz1UUlVFKQpoZWFkKHBhbGFicmFzX3RyaXN0ZXphX29yZGVuLCBuPTEwKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+OC4gR3JhZmljYXIgUmVzdWx0YWRvcyBkZSBTZW50aW1pZW50b3M8L3NwYW4+CmBgYHtyfQpzZWN1ZW5jaWFfc2VudGltaWVudG9zIDwtIChzZW50aW1pZW50b3NfZGYkbmVnYXRpdmUqLTEpK3NlbnRpbWllbnRvc19kZiRwb3NpdGl2ZQpzaW1wbGVfcGxvdChzZWN1ZW5jaWFfc2VudGltaWVudG9zKQpgYGAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBncmVlbjsiPkhpbW5vIG5hY2lvbmFsPC9zcGFuPgoKIVtdKC9Vc2Vycy9zcGVlZHltZDIzL0Rlc2t0b3AvQW5hbGlzaXMgZGUgZGF0b3MgLSBjb25jZW50cmFjaW/MgW4vTW9kIDQvSGltbm8uZ2lmKQoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibGFjazsiPjIuIENhcmdhciB0ZXh0bzwvc3Bhbj4KYGBge3J9CnRleHRvX2NhZGVuYU0gPC0gcmVhZC5kZWxpbSgiL1VzZXJzL3NwZWVkeW1kMjMvRGVza3RvcC9BbmFsaXNpcyBkZSBkYXRvcyAtIGNvbmNlbnRyYWNpb8yBbi9Nb2QgNC9oaW1ub21leGljYW5vLnR4dCIsIGhlYWRlcj0gRkFMU0UpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij4zLiBUb2tlbml6YXIgdGV4dG88L3NwYW4+CmBgYHtyfQp0ZXh0b19wYWxhYnJhc00gPC0gZ2V0X3Rva2Vucyh0ZXh0b19jYWRlbmFNKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogZ3JlZW47Ij40LiBFeHBsb3JhciB0ZXh0bzwvc3Bhbj4KYGBge3J9CmhlYWQodGV4dG9fcGFsYWJyYXNNKQpsZW5ndGgodGV4dG9fcGFsYWJyYXNNKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmxhY2s7Ij41LiBSZWFsaXphciBhbsOhbGlzaXMgZGUgU2VudGltaWVudG9zPC9zcGFuPgpgYGB7cn0Kc2VudGltaWVudG9zX2RmX00gPC0gZ2V0X25yY19zZW50aW1lbnQodGV4dG9fcGFsYWJyYXNNLCBsYW5ndWFnZSA9ICJzcGFuaXNoIikKCiNJZGlvbWFzIGRpc3BvbmlibGVzOiBzcGFuaXNoLCBlbmdsaXNoLCBmcmVuY2gsIGdlcm1hbiwgaXRhbGlhbiwgcG9ydG9ndWVzZSwgZXRjLgoKc3VtbWFyeShzZW50aW1pZW50b3NfZGZfTSkKaGVhZChzZW50aW1pZW50b3NfZGZfTSkKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPjYuIEdyYWZpY2FyIHJlc3VsdGFkb3MgZGUgZW1vY2lvbmVzPC9zcGFuPgpgYGB7cn0KYmFycGxvdCgKICBjb2xTdW1zKHByb3AudGFibGUoc2VudGltaWVudG9zX2RmX01bLDE6OF0pKSwKICBzcGFjZT0wLjIsCiAgaG9yaXo9RkFMU0UsCiAgbGFzPTEsCiAgY2V4Lm5hbWVzPTAuNywKICBjb2w9YnJld2VyLnBhbChuPTgsIG5hbWU9IlNldDMiKSwKICBtYWluPSJBbsOhbGlzaXMgZGUgc2VudGltaWVudG9zIGRlIGxhIGNhbmNpw7NuIEVsIFRyaXN0ZSIsCiAgeGxhYj0iRW1vY2lvbmVzIgopCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBncmVlbjsiPjcuIFByb2Z1bmRpemFyIEFuw6FsaXNpcyBkZSBlbW9jaW9uZXM8L3NwYW4+CmBgYHtyfQpwYWxhYnJhc190cmlzdGV6YV9NIDwtIHRleHRvX3BhbGFicmFzW3NlbnRpbWllbnRvc19kZl9NJHNhZG5lc3MgPjBdCnBhbGFicmFzX3RyaXN0ZXphX29yZGVuX00gPC0gc29ydCh0YWJsZSh1bmxpc3QocGFsYWJyYXNfdHJpc3RlemFfTSkpLGRlY3JlYXNpbmc9VFJVRSkKaGVhZChwYWxhYnJhc190cmlzdGV6YV9vcmRlbl9NLCBuPTEwKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmxhY2s7Ij44LiBHcmFmaWNhciBSZXN1bHRhZG9zIGRlIFNlbnRpbWllbnRvczwvc3Bhbj4KYGBge3J9CnNlY3VlbmNpYV9zZW50aW1pZW50b3NNIDwtIChzZW50aW1pZW50b3NfZGZfTSRuZWdhdGl2ZSotMSkrc2VudGltaWVudG9zX2RmX00kcG9zaXRpdmUKc2ltcGxlX3Bsb3Qoc2VjdWVuY2lhX3NlbnRpbWllbnRvc00pCmBgYAo=