R-скрипт анализа Конухова Анастасия
Страница создана Конуховой Анастасией, ИНФА-221.
Описание датасета
Датасет Billionaires содержит информацию о миллиардерах мира:https://corgis-edu.github.io/corgis/datasets/csv/billionaires/billionaires.csv
Датасет был взят с Категория:Dataset
Код R-скрипта

library(tidyverse)
data <- read_csv("https://corgis-edu.github.io/corgis/datasets/csv/billionaires/billionaires.csv")
glimpse(data)
total_records <- nrow(data)
print(paste("Всего миллиардеров в датасете:", total_records))
total_words_names <- sum(str_count(data$name, "\\S+"))
print(paste("Всего слов в именах миллиардеров:", total_words_names))
top10_names <- data %>%
separate_rows(name, sep = " ") %>%
count(word = name, sort = TRUE) %>%
head(10)
print("10 самых частых слов в именах миллиардеров:")
print(top10_names)
top_countries <- data %>%
count(country = `location.citizenship`, sort = TRUE) %>%
head(10)
print("Топ-10 стран по числу миллиардеров:")
print(top_countries)
Результаты анализа
| Показатель | Значение |
|---|---|
| Общее количество миллиардеров | 2614 |
| Общее количество слов в именах | 5908 |
10 самых частых слов в именах

| Слово | Частота |
|---|---|
| John | 65 |
| David | 41 |
| Robert | 40 |
| Michael | 39 |
| Richard | 36 |
| James | 31 |
| de | 31 |
| Jr. | 28 |
| and | 28 |
| Lee | 27 |
Топ-10 стран по числу миллиардеров

| Страна | Количество миллиардеров |
|---|---|
| United States | 903 |
| Germany | 160 |
| China | 153 |
| Russia | 119 |
| Japan | 96 |
| Brazil | 81 |
| Hong Kong | 77 |
| France | 72 |
| United Kingdom | 65 |
| India | 63 |
Расширенный анализ
Простой подсчет частоты слов не дает полной картины. В расширенном анализе я добавила биграммы для составных имен, TTR для оценки разнообразия, а также графики, чтобы сравнить распределение состояния и частотность слов по странам.
Код расширенного анализа
library(tidyverse)
library(tidytext)
library(ggplot2)
data <- read_csv("https://corgis-edu.github.io/corgis/datasets/csv/billionaires/billionaires.csv")
total_records <- nrow(data)
print(paste("Всего миллиардеров в датасете:", total_records))
total_words_names <- sum(str_count(data$name, "\\S+"))
print(paste("Всего слов в именах миллиардеров:", total_words_names))
top10_names <- data %>%
separate_rows(name, sep = " ") %>%
count(word = name, sort = TRUE) %>%
head(10)
print("10 самых частых слов в именах миллиардеров:")
print(top10_names)
top_countries <- data %>%
count(country = location.citizenship, sort = TRUE) %>%
head(10)
print("Топ-10 стран по числу миллиардеров:")
print(top_countries)
words <- data %>%
unnest_tokens(word, name) %>%
count(word, sort = TRUE)
print("Топ-20 самых частых слов:")
print(head(words, 20))
bigrams <- data %>%
unnest_tokens(bigram, name, token = "ngrams", n = 2) %>%
count(bigram, sort = TRUE)
print("Топ-10 биграмм:")
print(head(bigrams, 10))
total_tokens <- sum(words$n)
total_types <- nrow(words)
ttr <- total_types / total_tokens
print(paste("Всего слов (токенов):", total_tokens))
print(paste("Уникальных слов (типов):", total_types))
print(paste("TTR:", round(ttr, 4)))
top5_countries <- data %>%
count(country = location.citizenship, sort = TRUE) %>%
head(5) %>%
pull(country)
country_comparison <- data %>%
filter(location.citizenship %in% top5_countries) %>%
unnest_tokens(word, name) %>%
count(country = location.citizenship, word, sort = TRUE) %>%
group_by(country) %>%
slice_max(n, n = 5)
print("Топ-5 слов по странам:")
print(country_comparison)
name_lengths <- data %>%
mutate(word_count = str_count(name, "\\S+")) %>%
count(word_count)
print("Распределение количества слов в именах:")
print(name_lengths)
# столбчатая диаграмма топ 15 слов
plot1 <- words %>%
slice_max(n, n = 15) %>%
ggplot(aes(x = reorder(word, n), y = n)) +
geom_col(fill = "steelblue") +
coord_flip() +
labs(title = "15 самых частых слов в именах миллиардеров",
x = "Слово", y = "Частота") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"))
print(plot1)
# тепловая карта
heatmap_data <- data %>%
filter(location.citizenship %in% top5_countries) %>%
unnest_tokens(word, name) %>%
count(country = location.citizenship, word) %>%
group_by(country) %>%
slice_max(n, n = 10) %>%
ungroup()
plot3 <- heatmap_data %>%
ggplot(aes(x = word, y = country, fill = n)) +
geom_tile(color = "white", linewidth = 0.5) +
scale_fill_gradient(low = "white", high = "steelblue", name = "Частота") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 10),
axis.text.y = element_text(size = 11),
plot.title = element_text(hjust = 0.5, face = "bold")) +
labs(title = "Тепловая карта: частотность слов по странам",
x = "Слово", y = "Страна")
print(plot3)
Числовые результаты
В данном датасете общее количество слов (токенов) в именах миллиардеров составляет 6034, а уникальных слов 2870. Type-Token Ratio (TTR) равен 0.4756, что говорит о среднем лексическом разнообразии: имена миллиардеров не слишком однообразны, но и не сильно разнообразны. TTR близкий к 1 означал бы, что почти все имена уникальны, а близкий к 0 что имена постоянно повторяются.

| Показатель | Значение |
|---|---|
| Всего слов (токенов) | 6034 |
| Уникальных слов (типов) | 2870 |
| Type-Token Ratio (TTR) | 0.4756 |
Топ-10 биграмм
Биграмма - это последовательность из двух слов, которые идут подряд в тексте.

| Биграмма | Частота |
|---|---|
| de moraes | 7 |
| al kharafi | 5 |
| al rajhi | 5 |
| dos santos | 5 |
| ermirio de | 5 |
| roberto marinho | 5 |
| del pino | 4 |
| forrest mars | 4 |
| louis dreyfus | 4 |
| moreira salles | 4 |
Топ-5 слов по странам

| Страна | Слово | Частота |
|---|---|---|
| China | wang | 16 |
| China | li | 11 |
| China | liu | 10 |
| China | zhang | 9 |
| China | chen | 7 |
| China | wei | 7 |
| Germany | family | 15 |
| Germany | von | 12 |
| Germany | michael | 9 |
| Germany | oetker | 8 |
Распределение количества слов в имени

| Количество слов | Количество имён |
|---|---|
| 1 | 2 |
| 2 | 2099 |
| 3 | 387 |
| 4 | 92 |
| 5 | 27 |
| 6 | 6 |
| 8 | 1 |
Визуализация
На столбчатой диаграмме видно, что самые частые слова в именах: John, David и Robert. На тепловой карте цветом выделена частотность слов: самые темные клетки (Wang в Китае, John в США) соответствуют максимальной частоте.


Комментарий
В итоге получилось, что в датасете 2614 миллиардеров, а общее количество слов в их именах 5908. При этом уникальных слов (типов) 2870, а Type-Token Ratio (TTR) = 0.4756. Это значит, что почти половина всех слов в именах уникальна, остальные повторяются. Самые частые слова ожидаемо оказались простыми английскими именами: John, David, Robert.
Что касается стран, то США сильно лидируют 903 миллиардера. Германия на втором месте (160), а Китай только третий (153). При этом в Китае в топе частотности стоят именно китайские фамилии (Wang, Li, Zhang), а в Германии интересно, что часто встречаются слова family и von, это говорит о семейных династиях и дворянском происхождении.
Самым сложным в этой работе было не столько написание кода, сколько его отладка. Постоянно вылезали ошибки :( то пакет не устанавливался, то графики не строились, то таблицы в вики съезжали. Особенно долго возилась с тепловой картой. Еще неожиданностью стали биграммы, например, de moraes, al kharafi, dos santos. Оказалось, что многие миллиардеры имеют составные португальские или арабские фамилии, про которые я раньше не задумывалась.
В целом работа получилась объемной, но полезной. Теперь я лучше понимаю, как работать с текстовыми данными в R, строить графики и оформлять результаты на вики-странице.
