我想绘制每个电视节目中提到的单个单词的频率,作为我正在做的作业的一部分。我设法创建一个数据框,该数据框显示每个节目的频率(单词“ falsch”,德语错误)。
我想画出最常使用“ falsch”一词的节目,例如前十名的节目。
正如我之前提到的,我已经清理了数据集并隔离了单词,并且可以显示该单词在一个数据帧中每个节目说了多少次。
这是我要制作的这个特殊情节的代码:
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
我想对“ falsch”的数量进行排序,然后绘制10个图,以显示该词最常用的位置。
如何轻松删除其他节目(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")