Сравнить тексты нескольких датасетов: различия между версиями
Материал из Поле цифровой дидактики
Patarakin (обсуждение | вклад) Нет описания правки |
Patarakin (обсуждение | вклад) Нет описания правки |
||
| (не показано 9 промежуточных версий этого же участника) | |||
| Строка 5: | Строка 5: | ||
|Environment=R, GitHub, VOYANT Tools | |Environment=R, GitHub, VOYANT Tools | ||
}} | }} | ||
Перечень данных к сравнению (получены из Lens) | Перечень данных к сравнению (получены из Lens) см. [[Особенности самопрезентации психолога в цифровой среде]] | ||
* Академия Наук - https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-acad-sci-psych.csv | * Академия Наук - https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-acad-sci-psych.csv | ||
* МГПУ https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-mgpu-psychol.csv | * МГПУ https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-mgpu-psychol.csv | ||
| Строка 11: | Строка 12: | ||
Все данные содержат одинаковые столбцы: Lens ID,Title,Date Published,Publication Year,Publication Type,Source Title,ISSNs,Publisher,Source Country,Author/s,Abstract,Volume,Issue Number,Start Page,End Page,Fields of Study,Keywords,MeSH Terms,Chemicals,Funding,Source URLs,External URL,PMID,DOI,Microsoft Academic ID,PMCID,Citing Patents Count,References,Citing Works Count,Is Open Access,Open Access License,Open Access Colour | Все данные содержат одинаковые столбцы: Lens ID,Title,Date Published,Publication Year,Publication Type,Source Title,ISSNs,Publisher,Source Country,Author/s,Abstract,Volume,Issue Number,Start Page,End Page,Fields of Study,Keywords,MeSH Terms,Chemicals,Funding,Source URLs,External URL,PMID,DOI,Microsoft Academic ID,PMCID,Citing Patents Count,References,Citing Works Count,Is Open Access,Open Access License,Open Access Colour | ||
; [[Считать данные в R]] | |||
=== Полезные библиотеки === | |||
<syntaxhighlight lang="R" line> | |||
library(tidyverse) | |||
library(tidytext) | |||
library(ggplot2) | |||
library(wordcloud) | |||
library(patchwork) | |||
</syntaxhighlight> | |||
=== Загрузка, выделение столбца Title и объединение данных === | |||
<syntaxhighlight lang="R" line> | |||
########## Загрузка, выделение столбца Title и объединение данных в общую таблицу | |||
data_AS <- read_csv("https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-acad-sci-psych.csv") | |||
data_MGPU <- read_csv("https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-mgpu-psychol.csv") | |||
data_MGU <- read_csv("https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-mgu-psychol.csv") | |||
titles_AS <- data_AS %>% | |||
select(Title) %>% | |||
filter(!is.na(Title), Title != "") %>% | |||
mutate(School = "AS") | |||
titles_MGPU <- data_MGPU %>% | |||
select(Title) %>% | |||
filter(!is.na(Title), Title != "") %>% | |||
mutate(School = "MGPU") | |||
titles_MGU <- data_MGU %>% | |||
select(Title) %>% | |||
filter(!is.na(Title), Title != "") %>% | |||
mutate(School = "MGU") | |||
all_titles <- bind_rows(titles_AS, titles_MGPU, titles_MGU) | |||
table(all_titles$School) | |||
</syntaxhighlight> | |||
=== Добавление свойств в столбцы (mutate) === | |||
<syntaxhighlight lang="R" line> | |||
all_titles <- all_titles %>% | |||
mutate( | |||
# Количество символов в названии | |||
char_count = nchar(Title), | |||
# Количество слов | |||
word_count = str_count(Title, "\\b\\w+\\b"), | |||
# Количество чисел в названии | |||
number_count = str_count(Title, "\\d+"), | |||
# Есть ли специальные символы (-, (, ), :, /) | |||
has_special = str_detect(Title, "[\\-():/]") | |||
) | |||
</syntaxhighlight> | |||
=== Описательная статистика === | |||
<syntaxhighlight lang="R" line> | |||
stats_table <- all_titles %>% | |||
group_by(School) %>% | |||
summarise( | |||
N = n(), # количество названий | |||
Mean_Words = round(mean(word_count), 2), # среднее количество слов | |||
Median_Words = median(word_count), # медиана | |||
SD_Words = round(sd(word_count), 2), # стандартное отклонение | |||
Min_Words = min(word_count), # минимум | |||
Max_Words = max(word_count) # максимум | |||
) | |||
################# | |||
# Боксплот показывает медиану, квартили и выбросы | |||
ggplot(all_titles, aes(x = School, y = word_count, fill = School)) + | |||
geom_boxplot(alpha = 0.7, width = 0.5) + | |||
geom_jitter(width = 0.15, alpha = 0.2, size = 1) + | |||
labs( | |||
title = "Распределение количества слов", | |||
subtitle = "Boxplot | |||
", | |||
x = "Научная школа", | |||
y = "Количество слов" | |||
) + | |||
theme_minimal() + | |||
theme( | |||
plot.title = element_text(size = 14, face = "bold"), | |||
legend.position = "none" | |||
) | |||
############# (heatmap) | |||
ggplot(stats_for_plot, aes(x = Metric, y = School, fill = Value)) + | |||
geom_tile(color = "white", size = 1) + | |||
geom_text(aes(label = round(Value, 2)), color = "black", size = 5) + | |||
scale_fill_gradient(low = "lightblue", high = "darkblue") + | |||
labs( | |||
title = "Описательная статистика по школам", | |||
x = "Показатель", | |||
y = "Школа" | |||
) + | |||
theme_minimal() + | |||
theme( | |||
plot.title = element_text(size = 14, face = "bold"), | |||
axis.text.x = element_text(angle = 45, hjust = 1) | |||
) | |||
</syntaxhighlight> | |||
=== Объединение графиков === | |||
<syntaxhighlight lang="R" line> | |||
p1 <- ggplot(stats_table, aes(x = School, y = Mean_Words, fill = School)) + | |||
geom_col(alpha = 0.7) + | |||
labs(title = "Среднее", y = "Слов") + | |||
theme_minimal() + theme(legend.position = "none") | |||
p2 <- ggplot(stats_table, aes(x = School, y = SD_Words, fill = School)) + | |||
geom_col(alpha = 0.7) + | |||
labs(title = "Стандартное отклонение", y = "SD") + | |||
theme_minimal() + theme(legend.position = "none") | |||
p3 <- ggplot(all_titles, aes(x = School, y = word_count, fill = School)) + | |||
geom_boxplot(alpha = 0.7) + | |||
labs(title = "Распределение", y = "Слов") + | |||
theme_minimal() + theme(legend.position = "none") | |||
p4 <- ggplot(all_titles, aes(x = word_count, fill = School)) + | |||
geom_density(alpha = 0.5) + | |||
labs(title = "Плотность", x = "Слов") + | |||
theme_minimal() | |||
# Объединяем в одно изображение | |||
combined <- (p1 + p2) / (p3 + p4) | |||
ggsave("10_combined_statistics.png", combined, width = 12, height = 10) | |||
</syntaxhighlight> | |||
[[Файл:10 combined statistics.png]] | |||
Версия от 18:45, 18 декабря 2025
| Описание | У нас есть несколько датасетов с библиографическими данными. Мы хотим провести сравнительный анализ по столбцу названий публикаций, чтобы понять различия между научными школами |
|---|---|
| Область знаний | Психология, Статистика |
| Область использования (ISTE) | |
| Возрастная категория | 20
|
| Поясняющее видео | |
| Близкие рецепту понятия | |
| Среды и средства для приготовления рецепта: | R, GitHub, VOYANT Tools |
Перечень данных к сравнению (получены из Lens) см. Особенности самопрезентации психолога в цифровой среде
- Академия Наук - https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-acad-sci-psych.csv
- МГПУ https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-mgpu-psychol.csv
- МГУ https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-mgu-psychol.csv
Все данные содержат одинаковые столбцы: Lens ID,Title,Date Published,Publication Year,Publication Type,Source Title,ISSNs,Publisher,Source Country,Author/s,Abstract,Volume,Issue Number,Start Page,End Page,Fields of Study,Keywords,MeSH Terms,Chemicals,Funding,Source URLs,External URL,PMID,DOI,Microsoft Academic ID,PMCID,Citing Patents Count,References,Citing Works Count,Is Open Access,Open Access License,Open Access Colour
Полезные библиотеки
library(tidyverse)
library(tidytext)
library(ggplot2)
library(wordcloud)
library(patchwork)
Загрузка, выделение столбца Title и объединение данных
########## Загрузка, выделение столбца Title и объединение данных в общую таблицу
data_AS <- read_csv("https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-acad-sci-psych.csv")
data_MGPU <- read_csv("https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-mgpu-psychol.csv")
data_MGU <- read_csv("https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/lens-mgu-psychol.csv")
titles_AS <- data_AS %>%
select(Title) %>%
filter(!is.na(Title), Title != "") %>%
mutate(School = "AS")
titles_MGPU <- data_MGPU %>%
select(Title) %>%
filter(!is.na(Title), Title != "") %>%
mutate(School = "MGPU")
titles_MGU <- data_MGU %>%
select(Title) %>%
filter(!is.na(Title), Title != "") %>%
mutate(School = "MGU")
all_titles <- bind_rows(titles_AS, titles_MGPU, titles_MGU)
table(all_titles$School)
Добавление свойств в столбцы (mutate)
all_titles <- all_titles %>%
mutate(
# Количество символов в названии
char_count = nchar(Title),
# Количество слов
word_count = str_count(Title, "\\b\\w+\\b"),
# Количество чисел в названии
number_count = str_count(Title, "\\d+"),
# Есть ли специальные символы (-, (, ), :, /)
has_special = str_detect(Title, "[\\-():/]")
)
Описательная статистика
stats_table <- all_titles %>%
group_by(School) %>%
summarise(
N = n(), # количество названий
Mean_Words = round(mean(word_count), 2), # среднее количество слов
Median_Words = median(word_count), # медиана
SD_Words = round(sd(word_count), 2), # стандартное отклонение
Min_Words = min(word_count), # минимум
Max_Words = max(word_count) # максимум
)
#################
# Боксплот показывает медиану, квартили и выбросы
ggplot(all_titles, aes(x = School, y = word_count, fill = School)) +
geom_boxplot(alpha = 0.7, width = 0.5) +
geom_jitter(width = 0.15, alpha = 0.2, size = 1) +
labs(
title = "Распределение количества слов",
subtitle = "Boxplot
",
x = "Научная школа",
y = "Количество слов"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 14, face = "bold"),
legend.position = "none"
)
############# (heatmap)
ggplot(stats_for_plot, aes(x = Metric, y = School, fill = Value)) +
geom_tile(color = "white", size = 1) +
geom_text(aes(label = round(Value, 2)), color = "black", size = 5) +
scale_fill_gradient(low = "lightblue", high = "darkblue") +
labs(
title = "Описательная статистика по школам",
x = "Показатель",
y = "Школа"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 14, face = "bold"),
axis.text.x = element_text(angle = 45, hjust = 1)
)
Объединение графиков
p1 <- ggplot(stats_table, aes(x = School, y = Mean_Words, fill = School)) +
geom_col(alpha = 0.7) +
labs(title = "Среднее", y = "Слов") +
theme_minimal() + theme(legend.position = "none")
p2 <- ggplot(stats_table, aes(x = School, y = SD_Words, fill = School)) +
geom_col(alpha = 0.7) +
labs(title = "Стандартное отклонение", y = "SD") +
theme_minimal() + theme(legend.position = "none")
p3 <- ggplot(all_titles, aes(x = School, y = word_count, fill = School)) +
geom_boxplot(alpha = 0.7) +
labs(title = "Распределение", y = "Слов") +
theme_minimal() + theme(legend.position = "none")
p4 <- ggplot(all_titles, aes(x = word_count, fill = School)) +
geom_density(alpha = 0.5) +
labs(title = "Плотность", x = "Слов") +
theme_minimal()
# Объединяем в одно изображение
combined <- (p1 + p2) / (p3 + p4)
ggsave("10_combined_statistics.png", combined, width = 12, height = 10)

