Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебники 80212

.pdf
Скачиваний:
2
Добавлен:
01.05.2022
Размер:
1.06 Mб
Скачать

DistributionDomain[emdist]}]}, PlotRange -> All,

PlotMarkers -> {Graphics[{pstyle[[1]], Circle[{0, 0}, 1]}], 0.03}];

Legended[

Show[{plots, listplot}, ImageSize -> 400, Frame -> True,

GridLinesStyle ->

Directive[GrayLevel[.8]], GridLines -> Automatic], Placed[SwatchLegend[pstyle,

{"data", "log-normal", "pareto"}, LegendMarkers ->

{Graphics[{Red, Circle[{0, 0}, 1]}], Graphics[{Line[{{0, 0}, {2,

0}}]}],

Graphics[{Line[{{0, 0}, {2, 0}}]}]},

LegendMarkerSize -> {8, {20, 10}, {20, 10}},

LegendFunction -> "Frame",

Background -> White], {{.98,

.03}, {1, 0}}]]

]

Импортирование данных и построение сети друг/недруг.

In[3]:= data = Import["http://snap.stanford.edu/ data/soc-Slashdot0902.txt.gz",

"Table"];

In[4]:= graph = Graph[DirectedEdge @@@

data[[5 ;;]]];

Нахождение основных статистических величин.

19

In[5]:= g = Subgraph[graph, First[WeaklyConnectedComponents[graph]]]; h = Subgraph[graph, Last[SortBy[ConnectedComponents[graph], Length]]];

statGrid[graph, g, h]

Out[5]//TraditionalForm=

Анализ распределения степеней входящих рёбер.

In[6]:= indegree = VertexInDegree[graph]; lndist = EstimatedDistribution[indegree,

LogNormalDistribution[mu, si]]; pdist = EstimatedDistribution[indegree, ParetoDistribution[k, al]];

emdist = EmpiricalDistribution[indegree];

In[7]:= distPlot[emdist, lndist, pdist]

20

Out[7]=

Рис. 5. Визуализация связей участников социальной сети

1.2.5. Кластеризация в сетях «малого мира»

Кластеризацию можно использовать для количественного определения устойчивости сети к возмущениям. Сети «малого мира» по модели Ватса Строгаца обладают высокой степенью кластеризации (рис. 6, 7). В эпидемиологии устойчивая сеть позволяет болезни распространяться схожим образом, даже, если в сеть вводить возмущения.

Нахождение коэффициента глобальной кластеризации случайного графа

In[1]

RandomGraph[WattsStrogatzGraphDistribut

:=

ion[40, 0.05, 5]]

Out[1]=

21

Рис. 6. Кластер

In[2] RandomGraph[WattsStrogatzGraphDistribut := ion[40, 0.05, 5]];

GlobalClusteringCoefficient[%]

Out[2]= 333/604

Нахождение коэффициентов глобальной кластеризации множества случайных графов

In[3] {graphs, coeffs} = := Transpose[

SortBy[{#, GlobalClusteringCoefficient[#]} & /@

RandomGraph[WattsStrogatzGraphDistribut ion[30, 0.1, 3], {10000}],

Last]];

Создание тепловой карты полученных графов по значениям коэффициентов

In[4]:= min = Min[coeffs]; max = Max[coeffs];

In[5]:= nf = Nearest[coeffs -> graphs];

In[6]:= values = Range[min, max, (max - min)/(4^2 - 1)];

In[7]:= Grid[Partition[Map[ SetProperty[

First[nf[#]] 1, {VertexStyle -> Directive[White,

EdgeForm[White]], EdgeStyle -> White, Background ->

ColorData[{"SolarColors",

"Reversed"},

Rescale[#, {min, max}]], ImageSize -> {100, 100}}] &, values],

4]]

22

Out[8]=

Рис. 7. Определение устойчивости сети к возмущениям

спомощью кластеризащии

2.ПРИМЕР РЕШЕНИЯ ЗАДАЧИ

2.1.Решения задачи построения эквивалентного графа

На рис. 8 показан пример некоторого сложного графа. Постройте эквивалентный ему граф. В решении должны быть указаны исходная матрица смежности, измененная матрица смежности и матрица смежности эквивалентного графа. Рассчитайте коэффициенты центральности и эквивалентности для выделенных позиций.

23

Рис. 8. Исходный граф с выделенными позициями для расчета центральностей и эквивалентностей

Обратим внимание на то, что в заданиях мы не выделяем специально позиции, для которых необходимо рассчитать центральности и эквивалентности.

Решение

Расчеты центральностей или эквивалентностей не требуют оптимальной нумерации вершин, поэтому их можно делать сразу же, как только заполнена матрица смежности вершин графа. Предложенные задачи лучше всего начинать с самого простого — вычисления характеристик отдельных вершин. Для расчета стандартизированной оценки центральности (нормированной центральности актора) воспользуемся самой простой формулой (1.4) , тогда, поскольку g (количество вершин в графе) равно 13, то нормировка в знаменателе будет равняться 12. В числителе же мы просто складываем все единички по 4-й (или по 8-й) строке матрицы смежности. Получаем следующую центральность акторов:

24

Эквивалентность между вершинами А4 и А8 рассчитаем по формуле 1.14. Тогда эквивалентность определяем как квадратный корень из суммы всех «несовпадений» между4-й и 8-й строкой и 4-м и 8-м столбцом:

Для = 1, 2, 3, 5, 6, 7 слагаемые под корнем будут равны ; для

для Тогда эквивалентность между 4-й и 8-й вершинами будет составлять:

.

Теперь приступим к более сложной части задания: для построения эквивалентного графа вершины исходного графа необходимо правильно и последовательно пронумеровать.

От правильной нумерации зависит количество шагов, за которое решается эта задача. При правильной нумерации можно обойтись без перемещений столбцов и строк исходной матрицы, и мы сможем сразу рассмотреть измененную матрицу смежностей, после чего сумеем построить матрицу эквивалентного графа.

Измененная матрица смежности выглядит следующим образом повторяющиеся элементы выделены) (табл. 1).

Таблица 1

Измененная матрица смежности

25

Далее мы должны проанализировать полученную матрицу и выделить в поле матрицы эквивалентные участки. Причем необходимо помечать повторяющиеся элементы не только по вертикали, но и по горизонтали. В данном примере можно объединить вершины А1, А2, А3, А4 — в эквивалентном графе A'1; A5, A6, A7, A8— в эквивалентном графе А'2; А9, А10, А11, А12— в эквивалентном графе А'3. А13 переходит в А'4. При построении эквивалентного графа нужно помнить, что связь, инцидентная одной из эквивалентных вершин, после объединения становится инцидентной для всего объединения.

Матрица смежности эквивалентного графа выражается следующим образом (табл. 2):

Таблица 2

Матрица смежности эквивалентного графа

26

Эквивалентный граф выглядит так, как показано на

рис. 9

Рис. 9. Эквивалентный граф

Задачи на эквивалентность можно решить и без построения измененных или эквивалентных матриц. Если у исследователя хорошо развито пространственное воображение, он способен заранее предсказать, какие вершины скорее всего окажутся эквивалентными. Тогда матрица эквивалентности потребуется только как доказательство {или проверка) ранее сделанных умозаключений. В «Методических указаниях» задачи подобраны таким образом, чтобы эквивалентные позиции группировались, исходя из разных закономерностей расположения фигуры на плоскости и в пространстве. Но очень часто в реальных ситуациях сложно выделить оси симметрии и заранее предугадать вид эквивалентного графа. Тогда рассчитывают эквивалентность каждой пары вершин графа. Обычно это делается при помощи специальных компьютерных программ. Однако необходимо помнить, что коэффициенты разрабатывались для неориентированных графов, и в большинстве из них невозможно учесть вес связей. Поэтому следует говорить только об эквивалентности структурных позиций.

2.2. Анализ дружеских связей vk с помощью

Wolfram Mathematica

27

Взаимодействие с VK API начинается с создания

Standalone-приложения на https://vk.com/dev (там же можно будет редактировать уже созданное приложение). После нескольких кликов и долгих раздумий над названием, система выдает ID приложения, который будет использоваться для получения Access Token.

Чтобы получить Access Token, необходимо проследовать по ссылке ниже, заменив решеточки на ID приложения. О том, как формируется строчка, можно почитать тут https://vk.com/dev/auth_mobile.

https://oauth.vk.com/authorize?client_id=#### ##&scope=friends&redirect_uri=https://oauth.v k.com/blank.html&display=page&v=5.16&response _type=token

После этого, в строке адреса появится много полезной информации, в частности, access_token и user_id. Эти два значения необходимо сохранить. Необходимо обозначить переменные myID(Integer||String) и token(String).

Следующим этапом будет написание базовой функции, взаимодействующей с API. Стандартный формат ответа от VK API — это JSON, который без труда парсится в списки и правила внутренними средствами Mathematica.

Для начала, создайте Standalone-приложение на https://vk.com/dev

Далее, во вкладке «Настройки», найдите ID приложения, скопируйте его в форму и перейдите по сгенерированной с ним ссылке

Далее, в строке адреса появятся access_token и user_id myID=1;

token="";

VK[Method_,Params_]:=Import["https://api

.vk.com/method/"<>Method<>"?"<>Params<>"&acce

28

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]