|
library(jsonlite) |
|
library(stringr) |
|
library(tidyverse) |
|
library(wordcloud) |
|
|
|
# Загружаем данные из JSON-файла |
|
data <- fromJSON("result.json") |
|
|
|
# str(data$messages$text[10]) |
|
|
|
message_text <- data$messages$text |
|
|
|
# Создаем функцию для извлечения хэштегов из текста |
|
extract_hashtags <- function(text) { |
|
str_extract_all(text, "#\\w+") |
|
} |
|
|
|
# Извлекаем все хэштеги из списка сообщений и объединяем их в один вектор |
|
all_hashtags <- unlist(lapply(data$messages$text, extract_hashtags)) |
|
|
|
# Считаем частоту встречаемости каждого хэштега |
|
hashtag_freq <- table(all_hashtags) |
|
|
|
# Преобразуем таблицу частот в датафрейм |
|
hashtag_df <- as.data.frame(hashtag_freq, stringsAsFactors = FALSE) |
|
|
|
# Добавляем названия столбцов |
|
colnames(hashtag_df) <- c("Хэштег", "Частота встречаемости") |
|
|
|
# Упорядочиваем строки по убыванию частоты встречаемости |
|
hashtag_df <- hashtag_df[order(-hashtag_df$"Частота встречаемости"),] |
|
|
|
row.names(hashtag_df) <- NULL |
|
|
|
# Выводим полученный датафрейм |
|
hashtag_df |
|
|
|
# создаем список слов и их частот из датафрейма |
|
word_freq <- data.frame(hashtag = hashtag_df$Хэштег, freq = hashtag_df$`Частота встречаемости`) |
|
|
|
# выводим облако слов на экран |
|
png(filename = "wordcloud.png", width=800, height=800, res = 100) |
|
wc <- wordcloud(words = word_freq$hashtag, freq = word_freq$freq, max.words = 200, |
|
random.order = F, rot.per = 0.35, colors = brewer.pal(8, "Dark2")) |
|
dev.off() |
|
|
|
df <- hashtag_df %>% slice(1:25) |
|
# создаем график |
|
ggplot(data = df, aes(x = reorder(`Хэштег`, `Частота встречаемости`), y = `Частота встречаемости`)) + |
|
geom_bar(stat = "identity", fill = "darkblue") + |
|
ggtitle("Частота хэштегов") + |
|
ylab("Количество использований") + |
|
xlab("Хэштег") + |
|
scale_y_continuous(limits = c(0,50), expand = c(0,0)) + |
|
theme(panel.background = element_blank(), axis.ticks = element_blank()) + |
|
coord_flip() |
|
ggsave("hashtags_bar.png", dpi = 300, scale = 1.5) |
|
|