Описательная статистика R Климова
Использование R в описательной статистике
Проанализируем очищенный от служебного текста текст статьи из Википедии, посвящённой аниме. https://ru.wikipedia.org/wiki/Аниме
Код программы
library(tidyverse)
library(tidytext)
library(ggplot2)
cat("Загрузка данных из файла...\n")
text <- readLines("Аниме.txt", encoding = "UTF-8") %>%
paste(collapse = "\n")
if (!grepl("[.!?]$", text)) {
text <- paste0(text, ".")
}
cat("✅ Статья загружена\n")
cat("Размер текста:", nchar(text), "символов\n")
cat("Количество строк:", str_count(text, "\n") + 1, "\n\n")
tokens_df <- data.frame(text = text) %>%
unnest_tokens(word, text) %>%
# Убираем стоп-слова
anti_join(data.frame(word = stopwords::stopwords("ru")), by = "word") %>%
# Убираем числа и слишком короткие слова (1-2 символа)
filter(!str_detect(word, "^[0-9]+$"), str_length(word) > 2)
cat("=== 1. ОБЩАЯ СТАТИСТИКА ===\n")
total_tokens <- nrow(tokens_df)
unique_tokens <- n_distinct(tokens_df$word)
ttr <- unique_tokens / total_tokens * 100
cat("Всего слов (токенов):", total_tokens, "\n")
cat("Уникальных слов:", unique_tokens, "\n")
cat(sprintf("Type-Token Ratio (TTR): %.2f%%\n\n", ttr))
word_freq <- tokens_df %>%
count(word, sort = TRUE) %>%
mutate(percentage = n / sum(n) * 100)
cat("=== 2. ТОП-30 САМЫХ ЧАСТОТНЫХ СЛОВ ===\n")
print(word_freq %>% head(30))
p1 <- ggplot(word_freq %>% head(20), aes(x = reorder(word, n), y = n)) +
geom_bar(stat = "identity", fill = "steelblue") +
coord_flip() +
labs(title = "Топ-20 самых частотных слов в статье «Аниме»",
x = "Слово", y = "Частота") +
theme_minimal()
print(p1)
bigrams_df <- data.frame(text = text) %>%
unnest_tokens(bigram, text, token = "ngrams", n = 2) %>%
separate(bigram, c("word1", "word2"), sep = " ") %>%
filter(!word1 %in% stopwords::stopwords("ru"),
!word2 %in% stopwords::stopwords("ru"),
str_length(word1) > 2, str_length(word2) > 2) %>%
count(word1, word2, sort = TRUE)
cat("\n=== 3. ТОП-20 БИГРАММ ===\n")
print(bigrams_df %>% head(20))
sentences_df <- data.frame(text = text) %>%
mutate(sentences = str_split(text, "[.!?;]+")) %>%
unnest(sentences) %>%
mutate(
sentence = trimws(sentences),
word_count = str_count(sentence, "\\S+")
) %>%
filter(word_count > 0)
cat("\n=== 4. СТАТИСТИКА ДЛИНЫ ПРЕДЛОЖЕНИЙ ===\n")
cat(sprintf("Средняя длина предложения: %.2f слов\n", mean(sentences_df$word_count)))
cat(sprintf("Медианная длина предложения: %.0f слов\n", median(sentences_df$word_count)))
cat(sprintf("Минимальная длина: %d слов\n", min(sentences_df$word_count)))
cat(sprintf("Максимальная длина: %d слов\n", max(sentences_df$word_count)))
cat(sprintf("Стандартное отклонение: %.2f\n", sd(sentences_df$word_count)))
p2 <- ggplot(sentences_df, aes(x = 1, y = word_count)) +
geom_boxplot(fill = "lightblue") +
labs(title = "Распределение длины предложений в статье «Аниме»",
x = "", y = "Количество слов в предложении") +
theme_minimal() +
theme(axis.text.x = element_blank())
print(p2)
p3 <- ggplot(sentences_df, aes(x = word_count)) +
geom_histogram(binwidth = 5, fill = "steelblue", color = "white") +
labs(title = "Гистограмма длины предложений",
x = "Длина предложения (слова)", y = "Частота") +
theme_minimal()
print(p3)
cat("\n=== АНАЛИЗ ЗАВЕРШЕН! ===\n")
Вывод программы

Загрузка данных из файла... ✅ Статья загружена Размер текста: 40503 символов Количество строк: 1
1. ОБЩАЯ СТАТИСТИКА
Всего слов (токенов): 3955 Уникальных слов: 2455 Type-Token Ratio (TTR): 62.07%
2. ТОП-30 САМЫХ ЧАСТОТНЫХ СЛОВ
1 аниме 149 3.7673831 2 обычно 34 0.8596713 3 персонажей 23 0.5815424 4 также 19 0.4804046 5 сериала 18 0.4551201 6 серий 16 0.4045512 7 например 15 0.3792668 8 произведения 15 0.3792668 9 серии 15 0.3792668 10 японии 15 0.3792668 11 ova 14 0.3539823 12 анимации 14 0.3539823 13 году 14 0.3539823 14 аудитории 13 0.3286979 15 сериалов 12 0.3034134 16 часто 12 0.3034134 17 волосы 11 0.2781290 18 могут 11 0.2781290 19 сериал 11 0.2781290 20 часть 11 0.2781290 21 являются 11 0.2781290 22 англ 10 0.2528445 23 используется 10 0.2528445 24 манги 10 0.2528445 25 сериалы 10 0.2528445 26 глаза 9 0.2275601 27 зрителя 9 0.2275601 28 слово 9 0.2275601 29 сюжета 9 0.2275601 30 японской 9 0.2275601
3. ТОП-20 БИГРАММ
1 представляет собой 5 2 аниме обычно 4 3 аниме сериалов 4 4 главных героев 4 5 других стран 4 6 слово аниме 4 7 целевой аудитории 4 8 часть аниме 4 9 японской анимации 4 10 animation анимация 3 11 nбольшая часть 3 12 shounen adventure 3 13 the shell 3 14 аниме сериалы 3 15 аниме стал 3 16 имеют глаза 3 17 одной серии 3 18 сейлор мун 3 19 японском языке 3 20 1996 году 2
4. СТАТИСТИКА ДЛИНЫ ПРЕДЛОЖЕНИЙ
Средняя длина предложения: 16.63 слов
Медианная длина предложения: 15 слов
Минимальная длина: 1 слов
Максимальная длина: 56 слов
Стандартное отклонение: 9.31
Анализ текста статьи
Общая статистика
| Показатель | Значение |
|---|---|
| Объём текста | 40 503 символа |
| Всего слов (токенов) | 3 955 |
| Уникальных слов | 2 455 |
| Type-Token Ratio (TTR) | 62.07% |
Вывод: TTR = 62,07% — очень высокий показатель лексического разнообразия. Для текста объёмом почти 4 000 слов это означает, что статья написана богатым языком с активным использованием разнообразной терминологии, что характерно для энциклопедических статей.
Топ-10 самых частотных слов
| Ранг | Слово | Частота | Доля |
|---|---|---|---|
| 1 | аниме | 149 | 3,77% |
| 2 | обычно | 34 | 0,86% |
| 3 | персонажей | 23 | 0,58% |
| 4 | также | 19 | 0,48% |
| 5 | сериала | 18 | 0,46% |
| 6 | серий | 16 | 0,40% |
| 7 | например | 15 | 0,38% |
| 8 | произведения | 15 | 0,38% |
| 9 | серии | 15 | 0,38% |
| 10 | японии | 15 | 0,38% |
Группы характерных слов по темам
Форматы и структура:
- сериала (18), серий (16), серии (15), сериалов (12), сериал (11), сериалы (10)
- OVA (14)
- фильм
Персонажи и визуальный стиль:
- персонажей (23), персонажи
- волосы (11), глаза (9)
- рисунок
Аудитория и восприятие:
- аудитории (13), зрителя (9)
Временные маркеры:
- году (14) — указание на исторические даты
Язык и терминология:
- англ (10) — англоязычные термины
- слово (9) — лингвистический комментарий
Наиболее устойчивые биграммы
| Биграмма | Частота | Интерпретация |
|---|---|---|
| представляет собой | 5 | Ввод определений |
| аниме обычно | 4 | Обобщающие утверждения |
| аниме сериалов | 4 | Указание на формат |
| главных героев | 4 | Описание персонажей |
| других стран | 4 | Сравнительный контекст |
| слово аниме | 4 | Этимологический комментарий |
| целевой аудитории | 4 | Маркетинговая/социологическая рамка |
| японской анимации | 4 | Уточнение происхождения |
| shounen adventure | 3 | Жанровая терминология |
| сейлор мун | 3 | Конкретный пример |
Статистика длины предложений
| Показатель | Значение | Интерпретация |
|---|---|---|
| Средняя длина | 16,63 слов | Оптимальная для научно-публицистического текста |
| Медианная длина | 15 слов | Половина предложений короче 15 слов |
| Минимальная длина | 1 слово | Короткие вставки, восклицания, подписи |
| Максимальная длина | 56 слов | Сложные предложения с перечислениями |
| Стандартное отклонение | 9,31 | Большой разброс — от очень коротких до длинных |
Итоговые выводы
- Тематическое ядро статьи составляют слова: аниме, сериал, персонажи, Япония, анимация. Это полностью соответствует теме.
- Высокий TTR (62%) свидетельствует о:
- профессиональном, литературном стиле изложения;
- отсутствии навязчивых повторений;
- широком охвате темы (история, эстетика, форматы, распространение).
- Частотность слов обычно, например, также указывает на:
- обобщающий, энциклопедический характер;
- богатую иллюстративную базу (примеры);
- логически связное изложение.
- Биграммы показывают, что статья:
- даёт определения («представляет собой»);
- сравнивает с другими странами;
- использует профессиональную жанровую терминологию («shounen adventure»);
- приводит конкретные примеры («сейлор мун»).
- Длина предложений (средняя 17 слов, максимум 56) типична для русскоязычного научно-публицистического текста. Наличие как коротких, так и длинных предложений делает текст динамичным, но местами сложным для восприятия.
