Это был бы отличный пример использования принципов аккуратных данных. Давайте настроим некоторые примеры данных (это мои настоящие твиты).
library(tidytext)
library(tidyverse)
tweets <- tribble(
~tweetID, ~TweetText,
1, "Was Julie helping me because I don't know anything about Python package management? Yes, yes, she was.",
2, "@darinself OMG, this is my favorite.",
3, "@treycausey @ftrain THIS IS AMAZING.",
4, "@nest No, no, not in error. Just the turkey!",
5, "The @nest people should write a blog post about how many smoke alarms went off yesterday. (I know ours did.)")
Теперь у нас есть пример данных. В приведенном ниже коде unnest_tokens()
токенизирует текст, то есть разбивает его на отдельные слова (пакет tidytext позволяет использовать специальный токенизатор для твитов), а inner_join()
реализует анализ настроений.
tweet_sentiment <- tweets %>%
unnest_tokens(word, TweetText, token = "tweets") %>%
inner_join(get_sentiments("afinn"))
#> Joining, by = "word"
Теперь мы можем найти оценки для каждого твита. Возьмите исходный набор данных твитов и left_join()
на него sum()
баллов за каждый твит. Удобная функция replace_na()
от tidyr позволяет заменить результирующие значения NA
нулями.
tweets %>%
left_join(tweet_sentiment %>%
group_by(tweetID) %>%
summarise(score = sum(score))) %>%
replace_na(list(score = 0))
#> Joining, by = "tweetID"
#> # A tibble: 5 x 3
#> tweetID TweetText score
#> <dbl> <chr> <dbl>
#> 1 1. Was Julie helping me because I don't know anything about … 4.
#> 2 2. @darinself OMG, this is my favorite. 2.
#> 3 3. @treycausey @ftrain THIS IS AMAZING. 4.
#> 4 4. @nest No, no, not in error. Just the turkey! -4.
#> 5 5. The @nest people should write a blog post about how many … 0.
Создано в 2018-05-09 пакетом Представ (v0.2.0).
Если вас интересует анализ настроений и анализ текста, я приглашаю вас ознакомиться с обширной документацией и учебными пособиями, которые у нас есть для tidytext .