Анализ сетевых данных из «Камер-фурьерского журнала» Ходасевича
Автор
Полина Дорожкина
Дата публикации
21.03.2025
«Читателей у нас нет. Родины нет, влиять мы ни на что не можем… В то же время самый простодушный из нас “блажен”, “заживо пьет бессмертие” и не только вправе — обязан глядеть на мир со “страшной высоты”, как дух на смертных…»
Данные — это обобщённые за 1937 год файлы .gexf о социальных контактах круга В. Ходасевича. Они собраны с помощью фильтров “1937” и “File Type:”Unknown” на странице датасета.
library(tidyverse)library(rgexf)library(igraph)library(readr)library(visNetwork)# Загружаем все файлыmy_files <-list.files("./months_data", pattern =".gexf", full.names =TRUE) # Функция для чтения и преобразования данныхprocess_doc <-function(doc) {read.gexf(doc) |>gexf.to.igraph() |>as_long_data_frame() |>select(from_name, to_name, weight)}# Чтение всех файлов и объединение их в один датафреймjoined <- my_files |> purrr::map_df(process_doc)# Суммирование веса для одинаковых парfinal_tbl <- joined |>group_by(from_name, to_name) |>summarize(weight =sum(weight), .groups ="drop")final_tbl
Прежде чем смотреть на атрибуты получившегося объединённого графа хочется убедиться, что мы ничего не потеряли. Предлагаю для этого преобразовать gexf-файлы в igraph объекты и посмотреть на них.
Получаем, что первоначальные отрибуты вершин — это name (v/c), color (v/c), size (v/n), рёбер — weight (e/n). Что же в нашем квазимодном графе?
print(edge_attr_names(graph)) #вершины
[1] "weight"
print(vertex_attr_names(graph)) #рёбра
[1] "name"
Мы потеряли цвета и размеры, но сохранили имена и веса. Первые 2 атрибута не являются для нас ценными при дальнейшем анализе, поэтому не будем даже пытаться восстановить информацию о них. Это подтверждает и информация из Readme: “Все лица, упомянутые Ходасевичем, рассматриваются как узлы сети, а факт их встречи между собой в этот месяц — как основание для проведения ребра между ними”.
Читаем в Readme: “В директории betweenness_centrality представлены расчёты значения betweenness centrality для всех упомянутых в журнале Ходасевича персон, которые в данном случае рассмотрены как узлы сети, а факт их встречи в этом году как основание для проведения ребра между ними.”
Если для создателей датасета был важен этот атрибут, то и мы попытаемся сделать на нём акцент и рассказать про него подробнее.
Центральность посредничества (betweenness centrality) показывает, насколько часто узел находится на кратчайших путях между другими узлами. Это значит, что:
Узел с высоким betweenness = важный “посредник” в сети, через него проходит много связей.
Узел с низким betweenness = менее важный в передаче информации.
В графе 11 узлов. Эти узлы играют важную роль в связи различных частей сети, и их удаление нарушит существующие связи, потенциально разрывая сеть на несколько отдельных компонент.
Узнаем размер наибольшей клики:
clique_num(graph)
[1] 36
Анализ сообществ
Применим несколько методов для направленных графов и выберем лучший по модулярности и осмысленности.
Решено визуализировать сообщество, собранное с помощью метода cluster_edge_betweenness. Однако теперь мы не хотим представлять все персоналии, поэтому вводим “порог входа” в визуализацию:
betweenness_values <-betweenness(graph)threshold <-quantile(betweenness_values, 0.50) # Порог для половины значенийnodes_to_keep <-V(graph)$name[betweenness_values >= threshold]filtered_graph <-induced_subgraph(graph, nodes_to_keep)eb <-cluster_edge_betweenness(filtered_graph)modularity(eb)
[1] 0.05065251
layout_positions <-layout_with_fr(filtered_graph)community_colors <-membership(eb) plot(eb, filtered_graph, layout =layout_with_fr(filtered_graph), # Расположение вершинvertex.color = community_colors, # Цвет вершин по сообществамvertex.size =8, # Размер вершинvertex.label.cex =0.6, # Размер текстаedge.width =0.5, # Толщина рёбер (меньше значение - тоньше рёбра)edge.color ="white", # Цвет рёберedge.arrow.size =0.2, # Размер стрелок (уменьшаем стрелки)main ="Граф с сообществами (Edge Betweenness)")
Выводы
Мы видим большую сплочённость сообщества русских эмигрантов. Хотя с точки зрения исследования это немного расстораивает, хотелось расщепить их на подгруппы поинтереснее. Однако выводы об их тесных связях подтверждаются и в исследовании создателей датасета с отсылкой на социологическую характеристику русской эмиграфии Гусеффа, охарактеризованную “крепкими внутриобщинными связями”.
P.S.
pov: ты судорожно пытаешься успеть проект к дедлайну…..