seminar1_NEW - Daria-Maltseva/pajek GitHub Wiki
Семинар 1
Задание 1 / Семинар 1
Для сети ниже создайте файл формата net, откройте его в Pajek и визуализируйте.
Для отображения размера узлов и цвета разделения на группы используйте файлы форматов vec и clu.

Сеть:
% HSE seminar 1; 2022
*Vertices 6
1 "a"
2 "b"
3 "c"
4 "d"
5 "e"
6 "f"
*Arcs
1 2
2 1
1 4
1 6
2 6
3 3
5 3
5 6
*Edges
2 5
3 4
Вектор:
*Vertices 6
1
2
3
2
1
3
Файл vec
Обратите внимание, что центральность по degree для узла С = 3, т.к. у него имеется петля (поэтому он больше структурно похожего на него узла D).
Кластеринг / разделение на группы:
*Vertices 6
1
2
1
2
1
2
Визуализация
Посмотрите, что меняется при изображении разных компонентов и их комбинаций:
Draw -- Network
Draw -- Network + First Partition
Draw -- Network + First Partition + First Vector
В окошке Draw зайдите в меню Options и поменяйте цвета и размеры узлов, связей и лейблов.
Options -- Size -- of Vertices / Lines / Arrows etc.
Options -- Colors -- Edges / Arcs / Vertcies -- Select [выбираем цвет в палитре]
После применения кластеринга цвет узлов определяется через
Partition Colors -- for Vertices
Нужно открыть палитру и выбрать цвет для кластеров 1 и 2 (в файле их 2).
Чтобы отображались различные цвета линий, проверьте, отжата ли галочка в пункте:
Lines - Grey Scale
(в обратном случае это хорошая опция для визуализации больших сетей, которая показывает силу связи градиентом серого).
Сохраните картинку:
Export -- 2D -- JPEG -- RUN [картинка будет максимально приближена к тому, что вы видите на экране]
Export -- 2D -- SVG -- General [картинка будет отличаться от изображения на экране и будет опосредована параметрами в:]
Export -- Options
Задание 2 / Семинар 2
Используйте сети:
Мировая торговля различными изделиями из металла, 1994
Неформальное общение на лесопилке во время забастовки
Откройте сети net и связанные файлы (vec, clu), либо файл paj, и попробуйте сделать следующие шаги. Внимательно прочтите описание сетей, обратите внимание на их характеристики и подумайте, что из предложенного вы можете сделать, а что нет.
- выведите основную информацию по сети
Network - Info - General
(или используем кнопку I рядом с окошком Networks)
- посчитайте для узлов различные виды центральностей, выведите топ значений
Network - Create vector - Centrality - Degree - Input \ Output \ All
- сделайте line cut для сети, удалите узлы-изолянты (node cut)
[смотрим на line values]
Network - Info - Line values [write the number of clusters to which you`d like to split the line values]
[выбираем пороговое значение]
Network - Create new network - Transform - Remove - Lines with value - Lower than [treshold]
[чтобы удалить узлы-изолянты]
Network - Create Partition - Centrality - Degree - All [смотрим на partition, видим кластер 0]
Operations - Network + Partition - Extract - SubNetwork Induced by Union of Selected Clusters [1-*, т.е. не включаем кластер 0]
получаем подсеть без изолянтов
Для сети strike этот пункт невыполним, т.к. сеть является невзвешенной (сила всех связей = 1, что видно из файла).
- переведите взаимные связи из направленных в ненаправленные
Network - Create New Network - Transform - Arcs->Edges - Bidirected Only [только взаимно направленные]
Для сети strike этот пункт невыполним, т.к. сеть является ненаправленной (имеет только edges, видно из файла). С ней можно сделать обратную процедуру:
Network - Create New Network - Transform - Edges->Arcs
- визуализируйте получившуюся сеть, поменяйте цвета, сохраните визуализации (используйте код выше, также см. подсказки здесь
Draw -- Network
Draw -- Network + First Partition
Draw -- Network + First Partition + First Vector
Семинар 3
На прошлых двух семинарах мы уже научились работать в Pajek - загружать и сохранять сетевые данные и атрибуты сети, визуализировать, трансформировать сети, считать некоторые статистики и меры центральности, выделять подгруппы на основе наиболее сильных связей. На этом семинаре мы посмотрим на выполнение других процедур сетевого анализа, которые мы уже знаем по работе в R, таким образом структурируя наши знания по нескольким основным блокам - подсчету сетевой статистики, выделению важных узлов и выделению важных подгрупп в сети.
Для удобства, продолжим работать с уже знакомыми нам сетевыми объектами:
Мировая торговля различными изделиями из металла, 1994
Неформальное общение на лесопилке во время забастовки
Сетевая статистика
Размер сети
Network - Info - General
(или используем кнопку I рядом с окошком Networks)
(!) Если вы потеряли окошко с отчетом (Report), откройте его через (да, иногда его приходится открывать таким образом):
Info - Child Windows - Report Windows - Show
Пример информации о сети:
==============================================================================
1. Strike.net (24)
==============================================================================
Number of vertices (n): 24
----------------------------------------------------------
Arcs Edges
----------------------------------------------------------
Total number of lines 0 38
----------------------------------------------------------
Number of loops 0 0
Number of multiple lines 0 0
----------------------------------------------------------
Density1 [loops allowed] = 0.13194444
Density2 [no loops allowed] = 0.13768116
Average Degree = 3.16666667
Получаем:
- размер сети (количество узлов)
- количество направленных и ненаправленных связей, петлей и множественных связей
- плотность сети (с петлями и без)
- среднее значение количества связей (average degree)
Геодезическое расстояние
Расчет кратчайших путей между двумя узлами в сети (дистанции):
Network - Create Vector - Distribution of Distances* [звездочка означает, что выполнение требует вычислительных мощностей и лучше использовать для небольших сетей]
Для сети strike.paj:
Distribution of Distances
==============================================================================
Number of unreachable pairs: 0
Average distance among reachable pairs: 2.99275
The most distant vertices: Frank (1) and Russ (20). Distance is 6.
Для сети trade.paj:
Distribution of Distances
==============================================================================
Number of unreachable pairs: 2574
Average distance among reachable pairs: 2.93833
The most distant vertices: Turkey (76) and Czech Rep. (17). Distance is 12.
Диады и триады, транзитивность и реципрокность
Напомним, какие типы (диад и) триад существуют (Triadic Census):

Посчитать количество диад и триад в сети, определить их реципрокность, найти транзитивные триады:
Network - Info - Triadic Census - [Report with models?] - Yes / No
Пример выдачи [Yes]:
Type Number of triads (ni) Expected (ei) (ni-ei)/ei Model
----------------------------------------------------------------------------------------------------------
3 - 102 664 63.64 9.43 Balance [реципрокные отношения в диаде]
16 - 300 12 0.01 869.41 Balance [реципрокные отношения в триаде]
----------------------------------------------------------------------------------------------------------
1 - 003 1280 832.18 0.54 Clusterability
----------------------------------------------------------------------------------------------------------
4 - 021D 0 63.64 -1.00 Ranked Clusters [ранжированные кластеры]
5 - 021U 0 63.64 -1.00 Ranked Clusters [ранжированные кластеры]
Пример выдачи [No]:
Type Number of triads (ni) Expected (ei) (ni-ei)/ei
--------------------------------------------------------------------------------
1 - 003 1280 832.18 0.54 [пустая триада]
2 - 012 0 797.22 -1.00
3 - 102 664 63.64 9.43 [реципрокная диада]
4 - 021D 0 63.64 -1.00
5 - 021U 0 63.64 -1.00
6 - 021C 0 127.29 -1.00
7 - 111D 0 20.32 -1.00
8 - 111U 0 20.32 -1.00
9 - 030T 0 20.32 -1.00
10 - 030C 0 6.77 -1.00
11 - 201 68 1.62 40.91 [запрещенные триады]
12 - 120D 0 1.62 -1.00
13 - 120U 0 1.62 -1.00
14 - 120C 0 3.24 -1.00
15 - 210 0 0.52 -1.00
16 - 300 12 0.01 869.41 [реципрокная триада]
--------------------------------------------------------------------------------
Transitive 12 23.58
Intransitive 68 180.09
--------------------------------------------------------------------------------
Chi-Square: 20167.3828***
6 cells (37.50%) have expected frequencies less than 5.
The minimum expected cell frequency is 0.01.
Количество присутствующих триад в сети можно сравнить с расчетом их случайного распределения в данной сети (и увидеть, что какие-то типы триад встречаются в сети чаще, чем ожидается).
Степень узла и ассортативность
Что-то новое :)
Ассортативность по степени (количеству связей, degree) - это феномен в социальных сетях, согласно которому узлы с высокой степенью связей связаны с узлами с высокой степенью связей, тогда как узлы с низкой степенью связаны с узлами с низкой степенью связей (похоже на гомофилию - "Рыбак рыбака видит издалека", но для числовых (не категориальных, как при гомофилии) переменных). Можно сравнивать соответствие значений для "отправителя" и "получателя".
Network - Info - Degree Assortativity - Input/Output-Input/Output [для направленных сетей; для ненаправленных подходит любой вариант]
Возвращает коэффициент ассортативности - корреляцию Пирсона между числовыми значениями узлов (их степенями). Максимальное значение = 1, минимальное = -1 (дисассортативность).
Сила связей
Для сети trade.paj
Network - Info - Line values [выбираем количество кластеров, на которые распределяем веса связей]
Пример выдачи:
2. Imports_manufactures (80)
==============================================================================
Lowest value of line: 144.00000000
Highest value of line: 3059235.00000000
Line Values Frequency Freq% CumFreq CumFreq%
---------------------------------------------------------------------------------------------------
( ... 144.0000] 1 0.1000 1 0.1000
( 144.0000 ... 1019841.0000] 991 99.1000 992 99.2000
( 1019841.0000 ... 2039538.0000] 6 0.6000 998 99.8000
( 2039538.0000 ... 3059235.0000] 2 0.2000 1000 100.0000
---------------------------------------------------------------------------------------------------
Total 1000 100.0000
- Дихотомизация сети по силе связи
Для дихотомизации сеть должна иметь разную силу связей, поэтому используем сетьtrade.paj(в R мы также дихотомизировали сети мировой торговли). Выше мы уже рассмотрели, как можно удалить в сети связи ниже определенного порогового значения (и соответствующие им узлы); в таком случае у нас удаляются связи ниже определенного значения, но у оставшихся связей присутствует вариация в силе связи. При дихотомизации такой вариации нет - связи делятся на две группы - 1 (которые не входят в новую сеть) и 2 (которые входят). Чтобы определить группу 1, нужно задать условие - при каком пороговом значении показатели силы связи делятся на две группы.
Network - Create New Network - Transform - Line values - Recode [в открывающемся окошке указать пороговое значение]
[проверим]
Network - Info - Line Values [видим разделение на 1 и 2]
[Этого уже может быть достаточно для наших целей, но также можно и сократить сеть.]
[удалим связи, относящиеся к группе 1]
Network - Create new network - Transform - Remove - Lines with value - Lower than [2] [указываем значение, которое НЕ входит в нужный промежуток]
[удалим узлы, относящиеся к связям, вошедшим в группу 1]
Network - Create Partition - Centrality - Degree - All [смотрим на partition, видим кластер 0]
Operations - Network + Partition - Extract - SubNetwork Induced by Union of Selected Clusters [1-*, т.е. не включаем кластер 0]
[получаем подсеть без изолянтов - остались только узлы, связанные силой связи 2; можем перекодировать]
Network - Create New Network - Transform - Line values - Set all line values to 1
Важные узлы в сети
Степень центральности
В семинаре 2 мы уже рассчитывали центральность. В Pajek есть различные меры центральности:
Network - Create vector - Centrality - Degree - Input \ Output \ All
Network - Create vector - Centrality - Weighted Degree - Input \ Output \ All [для взвешенных (с разным весом связей) сетей]
Network - Create vector - Centrality - Closenness
Network - Create vector - Centrality - Betweenness
...
Подгруппы в сети
Выделение групп по атрибутам
Посмотрим на сеть strike.paj и выделим группу испаноговорящих работников (Strike_groups.clu: classification of the (24) employees according to age and ethnic group: 1 - Spanish-speaking employees, 2 - young (30 or younger) English-speaking employees, 3 - old (over 30) English- speaking employees).
Partition - Info
[получаем]
1. Strike_groups.clu (24)
==============================================================================
Dimension: 24
The lowest value: 1
The highest value: 3
Frequency distribution of cluster values:
Cluster Freq Freq% CumFreq CumFreq% Representative
----------------------------------------------------------------
1 4 16.6667 4 16.6667 Alejandro
2 9 37.5000 13 54.1667 Frank
3 11 45.8333 24 100.0000 Norm
----------------------------------------------------------------
Sum 24 100.0000
Выделяем группу 1:
Operations - Network + Partition - Extract - SubNetwork Induced by Union of Selected Clusters [1]

Выделение групп по сетевым характеристикам
- Компоненты
Network - Create Partition - Components [Weak/ Strong]
Вспомните - в чем разница между слабыми и сильными компонентами?
- k-Core
k-Ядро - подграф, в котором каждый узел примыкает по крайней мере к минимальному числу k других узлов в подгруппе (in-, out-, all). Если из графа рекурсивно удалить все узлы и связи, инцидентные им, степени меньше чем k, оставшийся граф является k-ядром.
Network - Create Partition - k-Core
Результат для сети strike.paj:
9. All core partition of N1 (24, core=3)
==============================================================================
Dimension: 24
The lowest value: 1
The highest value: 3
Frequency distribution of cluster values:
Cluster Freq Freq% CumFreq CumFreq% Representative
----------------------------------------------------------------
1 1 4.1667 1 4.1667 Frank
2 19 79.1667 20 83.3333 Gill
3 4 16.6667 24 100.0000 Alejandro
----------------------------------------------------------------
Sum 24 100.000
- Подход островов / Islands Approach
Network - Create Partition - Islands - Generate Networks with Islands [нужно нажать эту опцию]
Network - Create Partition - Islands - Line Weights [указать минимальный и максимальный размеры подгрупп; рекомендуется минимальный делать >=2]
Сеть trade.paj - размер [2, 10]
15. Islands [Line Weights] in N2 [2,10] (80, Islands=3)
==============================================================================
Dimension: 80
The lowest value: 0
The highest value: 3
Frequency distribution of cluster values:
Cluster Freq Freq% CumFreq CumFreq% Representative
----------------------------------------------------------------
0 65 81.2500 65 81.2500 Algeria
1 2 2.5000 67 83.7500 Argentina
2 7 8.7500 74 92.5000 Austria
3 6 7.5000 80 100.0000 Canada
----------------------------------------------------------------
Sum 80 100.000
Выделяем подгруппы:
Operations - Network + Partition - Extract - SubNetwork Induced by Union of Selected Clusters [1-*]

-
Клики и полные подграфы в сети
Максимально связанная подгруппа в сети, состоящая их 3+ узлов. Клики размера 3 могут быть найдены с помощью процедуры поиска Triadic Census. -
Выделение сообществ / Community detection
Network - Create Partition - Communities [Louvain Method / VOS Clustering]