Я хотел бы изобразить частоту одного слова, которое упоминается в телешоу как часть задания, которое я выполняю. Мне удается создать фрейм данных, который показывает частоту слова (слово «falsch», что по-немецки означает «неправильно») за шоу
Я хотел бы подготовить шоу, где слово «фальш» используется чаще всего, например, 10 лучших шоу.
Как я упоминал ранее, я уже очистил набор данных, выделил слово и могу показать, сколько раз слово было сказано за шоу в кадре данных.
Вот мой код для этого конкретного сюжета, который я хочу сделать:
arena <- readtext("02-SRF-Arena_iso.csv", encoding = "ISO-8859-1")
corpus <- Corpus(DataframeSource(arena))
corpus <- tm_map(corpus, content_transformer(tolower))
corpus <- tm_map(corpus, removeWords, stopwords("de"))
corpus <- tm_map(corpus, removePunctuation, preserve_intra_word_dashes = TRUE)
corpus <- tm_map(corpus, removeNumbers)
corpus <- tm_map(corpus, stripWhitespace)
DTM <- DocumentTermMatrix(corpus)
terms_to_observe <- c("falsch")
DTM_reduced <- as.matrix(DTM[, terms_to_observe])
DTM_new <- aggregate(DTM_reduced, by = list(titel = arena$sendungstitel), sum)
df <- as.data.frame(DTM_new)
df
Это то, что находится в моем фрейме данных (отрывок, не все)
titel falsch
1«Arena»: Rente - jung gegen alt? 2
2«Inländervorrang light» - ist das der Volkswille? 1
3«Präsidialarena» mit Alain Berset 7
4«Zukunfts-Arena» 1
592 Prozent Nein - Super-GAU für die Energiewende? 1
6Abgestraft und blamiert - wacht die Wirtschaft jetzt endlich auf? 0
7Abstimmungs-Arena «Einbürgerung dritte Generation» 13
Я хочу отсортировать число «фальш», а затем построить график, показывающий, где слово используется чаще всего.
Как мне легко удалить другие шоу (340 других шоу) и нанести на график частоту слов? Должен ли я создать новую переменную?
Буду признателен за любую помощь.
Спасибо за вашу помощь.
Это самый простой ответ (спасибо, Джон!):
library(tidyverse); df %>% top_n(10, falsch) %>% ggplot(aes(titel %>% fct_reorder(falsch), falsch)) + geom_col() + coord_flip()
Мне удалось найти решение самостоятельно, но оно немного сложнее.
DTM <- DocumentTermMatrix(corpus)
terms_to_observe <- c("falsch")
DTM_reduced <- as.matrix(DTM[, terms_to_observe])
DTM_new <- aggregate(DTM_reduced, by = list(titel = arena$sendungstitel), sum)
df <- as.data.frame(DTM_new)
df_order <- df[order(df$falsch, df$titel),]
df_last <- tail(df_order, n=10)
df_last$titel <- factor(df_last$titel, levels = df_last$titel)
df_last$falsch <- as.factor(df_last$falsch)
ggplot(df_last, aes(x = titel, y = falsch, fill = falsch)) +
geom_col(width = 0.3, position = "dodge") +
theme(legend.position = "none", axis.text.x = element_text(angle = 25, hjust = 1), axis.title.x=element_blank()) +
ylab("Anzahl") +
scale_fill_brewer(palette="Dark2")