R-скрипт анализа Конухова Анастасия: различия между версиями

Материал из Поле цифровой дидактики
Новая страница: «Страница создана Конуховой Анастасией, ИНФА-221. == Описание датасета == Датасет Billionaires содержит информацию о миллиардерах мира:https://corgis-edu.github.io/corgis/datasets/csv/billionaires/billionaires.csv Датасет был взят с https://digida.mgpu.ru/index.php/Billionaires_(dataset) == Код R-скрипта == Файл:Код R.png|400px...»
 
Нет описания правки
 
(не показаны 3 промежуточные версии этого же участника)
Строка 5: Строка 5:
Датасет Billionaires содержит информацию о миллиардерах мира:https://corgis-edu.github.io/corgis/datasets/csv/billionaires/billionaires.csv
Датасет Billionaires содержит информацию о миллиардерах мира:https://corgis-edu.github.io/corgis/datasets/csv/billionaires/billionaires.csv


Датасет был взят с https://digida.mgpu.ru/index.php/Billionaires_(dataset)
Датасет был взят с [[:Категория:Dataset]]


== Код R-скрипта ==
== Код R-скрипта ==
Строка 98: Строка 98:
|-
|-
| India || 63
| India || 63
|}
== Расширенный анализ ==
Простой подсчет частоты слов не дает полной картины. В расширенном анализе я добавила биграммы для составных имен, TTR для оценки разнообразия, а также графики, чтобы сравнить распределение состояния и частотность слов по странам.
=== Код расширенного анализа ===
<syntaxhighlight lang="R" line>
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)
</syntaxhighlight>
=== Числовые результаты ===
В данном датасете общее количество слов (токенов) в именах миллиардеров составляет 6034, а уникальных слов 2870. Type-Token Ratio (TTR) равен 0.4756, что говорит о среднем лексическом разнообразии: имена миллиардеров не слишком однообразны, но и не сильно разнообразны. TTR близкий к 1 означал бы, что почти все имена уникальны, а близкий к 0 что имена постоянно повторяются.
[[Файл:Код R 3.png|300px|thumb|right|Числовые результаты]]
{| class="wikitable"
! Показатель !! Значение
|-
| Всего слов (токенов) || 6034
|-
| Уникальных слов (типов) || 2870
|-
| Type-Token Ratio (TTR) || 0.4756
|}
=== Топ-10 биграмм ===
Биграмма - это последовательность из двух слов, которые идут подряд в тексте.
[[Файл:Биограммы.png|300px|thumb|right|Топ биграмм]]
{| class="wikitable"
! Биграмма !! Частота
|-
| 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 слов по странам ===
[[Файл:Код R 1.png|300px|thumb|right|Топ-5 слов по странам]]
{| class="wikitable"
! Страна !! Слово !! Частота
|-
| 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
|}
Там таблица еще строки есть дополнительные, но очень длинная получится, поэтому выше только ее часть.
=== Распределение количества слов в имени ===
[[Файл:Код R 2.png|300px|thumb|right|Распределение количества слов в имени]]
{| class="wikitable"
! Количество слов !! Количество имён
|-
| 1 || 2
|-
| 2 || 2099
|-
| 3 || 387
|-
| 4 || 92
|-
| 5 || 27
|-
| 6 || 6
|-
| 8 || 1
|}
|}


=== Визуализация ===
На столбчатой диаграмме видно, что самые частые слова в именах: John, David и Robert. На тепловой карте цветом выделена частотность слов: самые темные клетки (Wang в Китае, John в США) соответствуют максимальной частоте.
[[Файл:График частота r.png|600px|center|frameless|График частоты]]
[[Файл:Тепловая карта.png|600px|center|frameless|Тепловая карта]]
== Комментарий ==
== Комментарий ==
В итоге получилось, что в датасете 2614 миллиардеров, а общее количество слов в их именах 5908. При этом уникальных слов (типов) 2870, а Type-Token Ratio (TTR) = 0.4756. Это значит, что почти половина всех слов в именах уникальна, остальные повторяются. Самые частые слова ожидаемо оказались простыми английскими именами: John, David, Robert.


В датасете Billionaires содержится 2614 записей о миллиардерах. Общее количество слов в именах составляет 5908.
Что касается стран, то США сильно лидируют 903 миллиардера. Германия на втором месте (160), а Китай только третий (153). При этом в Китае в топе частотности стоят именно китайские фамилии (Wang, Li, Zhang), а в Германии интересно, что часто встречаются слова family и von, это говорит о семейных династиях и дворянском происхождении.


По странам лидируют США (903 миллиардера), затем Германия (160) и Китай (153).  
Самым сложным в этой работе было не столько написание кода, сколько его отладка. Постоянно вылезали ошибки :( то пакет не устанавливался, то графики не строились, то таблицы в вики съезжали. Особенно долго возилась с тепловой картой. Еще неожиданностью стали биграммы, например, de moraes, al kharafi, dos santos. Оказалось, что многие миллиардеры имеют составные португальские или арабские фамилии, про которые я раньше не задумывалась.


В целом работа получилась объемной, но полезной. Теперь я лучше понимаю, как работать с текстовыми данными в R, строить графики и оформлять результаты на вики-странице.
[[Категория:CompLing Works]]
[[Категория:CompLing Works]]

Текущая версия от 16:41, 10 июня 2026

Страница создана Конуховой Анастасией, ИНФА-221.

Описание датасета

Датасет Billionaires содержит информацию о миллиардерах мира:https://corgis-edu.github.io/corgis/datasets/csv/billionaires/billionaires.csv

Датасет был взят с Категория:Dataset

Код R-скрипта

Код R-скрипта в RStudio
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 самых частых слов в именах

Результаты в консоли R
Слово Частота
John 65
David 41
Robert 40
Michael 39
Richard 36
James 31
de 31
Jr. 28
and 28
Lee 27


Топ-10 стран по числу миллиардеров

Топ-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 слов по странам

Топ-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, строить графики и оформлять результаты на вики-странице.