Difference between revisions of "R: sentiments analysis"
Jump to navigation
Jump to search
Onnowpurbo (talk | contribs) |
Onnowpurbo (talk | contribs) |
||
| (6 intermediate revisions by the same user not shown) | |||
| Line 13: | Line 13: | ||
library(dplyr) | library(dplyr) | ||
library(stringr) | library(stringr) | ||
| − | |||
tidy_books <- austen_books() %>% | tidy_books <- austen_books() %>% | ||
group_by(book) %>% | group_by(book) %>% | ||
| Line 22: | Line 21: | ||
unnest_tokens(word, text) | unnest_tokens(word, text) | ||
| + | |||
| + | |||
| + | nrcjoy <- get_sentiments("nrc") %>% | ||
| + | filter(sentiment == "joy") | ||
| + | tidy_books %>% | ||
| + | filter(book == "Emma") %>% | ||
| + | inner_join(nrcjoy) %>% | ||
| + | count(word, sort = TRUE) | ||
| + | |||
| + | |||
| + | library(tidyr) | ||
| + | janeaustensentiment <- tidy_books %>% | ||
| + | inner_join(get_sentiments("bing")) %>% | ||
| + | count(book, index = linenumber %/% 80, sentiment) %>% | ||
| + | spread(sentiment, n, fill = 0) %>% | ||
| + | mutate(sentiment = positive - negative) | ||
| + | |||
| + | library(ggplot2) | ||
| + | ggplot(janeaustensentiment, aes(index, sentiment, fill = book)) + | ||
| + | geom_col(show.legend = FALSE) + | ||
| + | facet_wrap(~book, ncol = 2, scales = "free_x") | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | pride_prejudice <- tidy_books %>% | ||
| + | filter(book == "Pride & Prejudice") | ||
| + | pride_prejudice | ||
| + | |||
| + | |||
| + | |||
| + | afinn <- pride_prejudice %>% | ||
| + | inner_join(get_sentiments("afinn")) %>% | ||
| + | group_by(index = linenumber %/% 80) %>% | ||
| + | summarise(sentiment = sum(score)) %>% | ||
| + | mutate(method = "AFINN") | ||
| + | bing_and_nrc <- bind_rows( | ||
| + | pride_prejudice %>% | ||
| + | inner_join(get_sentiments("bing")) %>% | ||
| + | mutate(method = "Bing et al."), | ||
| + | pride_prejudice %>% | ||
| + | inner_join(get_sentiments("nrc") %>% | ||
| + | filter(sentiment %in% c("positive", | ||
| + | "negative"))) %>% | ||
| + | mutate(method = "NRC")) %>% | ||
| + | count(method, index = linenumber %/% 80, sentiment) %>% | ||
| + | spread(sentiment, n, fill = 0) %>% | ||
| + | mutate(sentiment = positive - negative) | ||
| + | |||
| + | |||
| + | bind_rows(afinn, | ||
| + | bing_and_nrc) %>% | ||
| + | ggplot(aes(index, sentiment, fill = method)) + | ||
| + | geom_col(show.legend = FALSE) + | ||
| + | facet_wrap(~method, ncol = 1, scales = "free_y") | ||
| + | |||
| + | |||
| + | get_sentiments("nrc") %>% | ||
| + | filter(sentiment %in% c("positive", | ||
| + | "negative")) %>% | ||
| + | count(sentiment) | ||
| + | |||
| + | get_sentiments("bing") %>% | ||
| + | count(sentiment) | ||
| + | |||
| + | bing_word_counts <- tidy_books %>% | ||
| + | inner_join(get_sentiments("bing")) %>% | ||
| + | count(word, sentiment, sort = TRUE) %>% | ||
| + | ungroup() | ||
| + | bing_word_counts | ||
| + | |||
| + | bing_word_counts %>% | ||
| + | group_by(sentiment) %>% | ||
| + | top_n(10) %>% | ||
| + | ungroup() %>% | ||
| + | mutate(word = reorder(word, n)) %>% | ||
| + | ggplot(aes(word, n, fill = sentiment)) + | ||
| + | geom_col(show.legend = FALSE) + | ||
| + | facet_wrap(~sentiment, scales = "free_y") + | ||
| + | labs(y = "Contribution to sentiment", | ||
| + | x = NULL) + | ||
| + | coord_flip() | ||
| + | |||
| + | |||
| + | custom_stop_words <- bind_rows(data_frame(word = c("miss"), | ||
| + | lexicon = c("custom")), | ||
| + | stop_words) | ||
| + | custom_stop_words | ||
| + | |||
| + | |||
| + | library(wordcloud) | ||
| + | tidy_books %>% | ||
| + | anti_join(stop_words) %>% | ||
| + | count(word) %>% | ||
| + | with(wordcloud(word, n, max.words = 100)) | ||
| + | |||
| + | |||
| + | library(reshape2) | ||
| + | tidy_books %>% | ||
| + | inner_join(get_sentiments("bing")) %>% | ||
| + | count(word, sentiment, sort = TRUE) %>% | ||
| + | acast(word ~ sentiment, value.var = "n", fill = 0) %>% | ||
| + | comparison.cloud(colors = c("gray20", "gray80"), | ||
| + | max.words = 100) | ||
Latest revision as of 17:35, 8 November 2018
library(tidytext) sentiments
get_sentiments("afinn")
get_sentiments("bing")
get_sentiments("nrc")
library(janeaustenr)
library(dplyr)
library(stringr)
tidy_books <- austen_books() %>%
group_by(book) %>%
mutate(linenumber = row_number(),
chapter = cumsum(str_detect(text, regex("^chapter [\\divxlc]",
ignore_case = TRUE)))) %>%
ungroup() %>%
unnest_tokens(word, text)
nrcjoy <- get_sentiments("nrc") %>%
filter(sentiment == "joy")
tidy_books %>%
filter(book == "Emma") %>%
inner_join(nrcjoy) %>%
count(word, sort = TRUE)
library(tidyr)
janeaustensentiment <- tidy_books %>%
inner_join(get_sentiments("bing")) %>%
count(book, index = linenumber %/% 80, sentiment) %>%
spread(sentiment, n, fill = 0) %>%
mutate(sentiment = positive - negative)
library(ggplot2)
ggplot(janeaustensentiment, aes(index, sentiment, fill = book)) +
geom_col(show.legend = FALSE) +
facet_wrap(~book, ncol = 2, scales = "free_x")
pride_prejudice <- tidy_books %>%
filter(book == "Pride & Prejudice")
pride_prejudice
afinn <- pride_prejudice %>%
inner_join(get_sentiments("afinn")) %>%
group_by(index = linenumber %/% 80) %>%
summarise(sentiment = sum(score)) %>%
mutate(method = "AFINN")
bing_and_nrc <- bind_rows(
pride_prejudice %>%
inner_join(get_sentiments("bing")) %>%
mutate(method = "Bing et al."),
pride_prejudice %>%
inner_join(get_sentiments("nrc") %>%
filter(sentiment %in% c("positive",
"negative"))) %>%
mutate(method = "NRC")) %>%
count(method, index = linenumber %/% 80, sentiment) %>%
spread(sentiment, n, fill = 0) %>%
mutate(sentiment = positive - negative)
bind_rows(afinn,
bing_and_nrc) %>%
ggplot(aes(index, sentiment, fill = method)) +
geom_col(show.legend = FALSE) +
facet_wrap(~method, ncol = 1, scales = "free_y")
get_sentiments("nrc") %>%
filter(sentiment %in% c("positive",
"negative")) %>%
count(sentiment)
get_sentiments("bing") %>%
count(sentiment)
bing_word_counts <- tidy_books %>%
inner_join(get_sentiments("bing")) %>%
count(word, sentiment, sort = TRUE) %>%
ungroup()
bing_word_counts
bing_word_counts %>%
group_by(sentiment) %>%
top_n(10) %>%
ungroup() %>%
mutate(word = reorder(word, n)) %>%
ggplot(aes(word, n, fill = sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(~sentiment, scales = "free_y") +
labs(y = "Contribution to sentiment",
x = NULL) +
coord_flip()
custom_stop_words <- bind_rows(data_frame(word = c("miss"),
lexicon = c("custom")),
stop_words)
custom_stop_words
library(wordcloud)
tidy_books %>%
anti_join(stop_words) %>%
count(word) %>%
with(wordcloud(word, n, max.words = 100))
library(reshape2)
tidy_books %>%
inner_join(get_sentiments("bing")) %>%
count(word, sentiment, sort = TRUE) %>%
acast(word ~ sentiment, value.var = "n", fill = 0) %>%
comparison.cloud(colors = c("gray20", "gray80"),
max.words = 100)