En esta oportunidad probaremos 2 maneras para analizar sentimientos, la primera es la que aprendimos en el curso de Técnicas de exploración de datos y la segunda es a partir del paquete “Syuzhet”
texto_frecuencias %>%
top_n(8) %>%
ggplot() +
aes(x = fct_reorder(Token, n), y = n, fill = Token) +
geom_col() +
labs(x = NULL, y = "Frecuencia",
title = "Analisis de texto de la novela It"
) +
theme_minimal() +
theme(legend.position = "none") + scale_fill_brewer(palette = "Paired") +
coord_flip()
texto_sentimientos <- texto %>% inner_join(sentimientos, by = c("Token" = "palabra"))
texto_sentimientos %>% dplyr::count(sentimiento) %>%
ggplot() + aes(x = fct_reorder(sentimiento, n),
y = n,
fill = sentimiento) +
geom_col(show.legend = F) + coord_flip() +
labs(title ="Análisis de sentimientos de la novela IT",
x = "Sentimientos",
y = "Frecuencia") +
theme_bw() + scale_fill_brewer(palette = "Spectral")
contar_palabras1 <- texto %>%
inner_join(sentimientos,
by = c("Token" = "palabra")) %>%
filter(sentimiento %in% c("tristeza","miedo","negativo","positivo","confianza","ira","premonición","disgusto","asombro","alegría")) %>%
dplyr::count(Token, sentimiento) %>%
group_by(sentimiento) %>%
top_n(5, n)
ggplot(contar_palabras1) +
aes(x = fct_reorder(Token, n),
y = n,
fill = sentimiento) +
geom_col(show.legend = FALSE) +
facet_wrap( ~ sentimiento, scales = "free", ncol = 3) +
labs(title = "Gráfico de palabras por sentimiento",
x = "Palabras", y = "Frecuencia") +
theme_bw() +
coord_flip() + scale_fill_manual(values = c("green1","violet","orange2","lightgreen","red3","skyblue","black","green4","grey64","purple4"))
texto_frecuencias2 <- texto_frecuencias %>% filter(n > 150)
wordcloud2(texto_frecuencias2,
size = 0.3,
shape = 'triangle-forward')
wordcloud(words = texto_frecuencias2$Token,
freq = texto_frecuencias2$n,
max.words = 100,
random.order = FALSE,
min.freq = 2,
colors = brewer.pal(8, "Dark2"),
scale = c(2.5, 0.5),
rot.per = 0.3)
barplot(
colSums(prop.table(misu1[, 1:8])),
space = 0.2,
horiz = FALSE,
las = 1,
cex.names = 0.7,
col = brewer.pal(n = 8, name = "Spectral"),
main = "Analisis de sentimientos de la novela IT",
sub = "Emociones",
ylab = NULL)
nube_emociones_vector <- c(
paste(texto_por_palabras[misu1$joy> 0], collapse = " "),
paste(texto_por_palabras[misu1$sadness > 0], collapse = " "),
paste(texto_por_palabras[misu1$anger > 0], collapse = " "),
paste(texto_por_palabras[misu1$trust > 0], collapse = " "))
nube_emociones_vector <- iconv(nube_emociones_vector, "latin1", "UTF-8")
nube_corpus <- Corpus(VectorSource(nube_emociones_vector))
nube_tdm <- TermDocumentMatrix(nube_corpus)
nube_tdm <- as.matrix(nube_tdm)
colnames(nube_tdm) <- c('felicidad', 'tristeza', 'enfado', 'confianza')
set.seed(777)
comparison.cloud(nube_tdm, random.order = FALSE,
colors = c("skyblue", "#00CD00", "#FF7F50", "purple"),
title.size = 1.5, max.words = 75, scale = c(1.5, 0.5), rot.per = 0.4)
plot(
syuzhet_vector1,
type="l",
main="Trayectoria emocional",
xlab = "Tiempo de narrativa",
ylab= "Valencia emocional"
)
mean(syuzhet_vector1)
## [1] -0.03181231
plot(
syuzhet_vector2,
type="l",
main="Trayectoria emocional",
xlab = "Tiempo de narrativa",
ylab= "Valencia emocional"
)
mean(syuzhet_vector2)
## [1] -0.03629088
plot(
syuzhet_vector3,
type="l",
main="Trayectoria emocional",
xlab = "Tiempo de narrativa",
ylab= "Valencia emocional"
)
mean(syuzhet_vector3)
## [1] -0.03233296
plot(
syuzhet_vector4,
type="l",
main="Trayectoria emocional",
xlab = "Tiempo de narrativa",
ylab= "Valencia emocional"
)
mean(syuzhet_vector4)
## [1] -0.03532754
plot(
syuzhet_vector5,
type="l",
main="Trayectoria emocional",
xlab = "Tiempo de narrativa",
ylab= "Valencia emocional"
)
mean(syuzhet_vector5)
## [1] -0.03192421
barplot(
sort(colSums(prop.table(misu1[, 1:8]))),
horiz = TRUE,
cex.names = 0.7,
las = 1,
main = "Emociones en IT", xlab="Porcentaje",
col = brewer.pal(n = 8, name = "Spectral")
)
plot(poa_list$x,
poa_list$z,
type="l",
col="blue",
xlab="Narrative Time",
ylab="Emotional Valence")
Se aprecia que la obra empieza con emociones medianamente positivas pero conforme avanza va disminuyendo significativamente para luego aumentar pero sin llegar a ser 1 (positivo) y continua en 0 hasta antes del final de la obra que es donde mas emociones positivas se concentran terminando con emociones por debajo de 0, es decir, emociones negativas
poa_sample <- seq(1, length(poa_list$x), by=round(length(poa_list$x)/100))
plot(poa_list$x[poa_sample],
poa_list$z[poa_sample],
type="l",
col="blue",
xlab="Tiempo de narrativa (muestrada)",
ylab="Valencia emocional"
)
Se divide la cantidad de oraciones en 100 muestras, se trazan los puntos muestrados y el resultado de esto es que se construye una linea de 100 puntos en el eje X (sirve para comparar textos con diferentes cantidades de palabras u oraciones)