Введение в сетевую науку с NetworkX
Часть 1. Понимание математики, лежащей в основе теории графов
Всякий раз, когда нам нужно моделировать и анализировать сложные системы, очень важно использовать модели, способные фиксировать отношения между агентами. Эти отношения - а также их относительные веса и распределения - можно смоделировать с помощью математического представления графа.
Вообще говоря, всякий раз, когда система может быть смоделирована графом, мы говорим, что эта система является сетью. Сетевая наука - это дисциплина, целью которой является понимание явлений, лежащая в основе структуры графа. А именно, в области эпидемиологии сети используются для моделирования распространения болезней, где узлы - это люди, а ссылки - контакты между людьми. В следующем примере я использовал сетевое представление для визуализации динамики модели SIR:
В этой серии статей я собираюсь поразмыслить о математике, лежащей в основе сети, ее показателях и о том, как использовать их для моделирования событий. Кроме того, я буду использовать пакет Python NetworkX, чтобы предоставить наглядные примеры того, что я объяснял в теории, и показать вам различные типы и формы сетей.
В этой первой части я сосредоточусь на математике, лежащей в основе сетей и графиков, и представлю некоторые полезные метрики.
Математика, лежащая в основе графиков
Как упоминалось выше, графы представлены набором узлов (или вершин), соединенных линиями, определенными как связи (или ребра).
Графы могут описывать многие реляционные системы. А именно, приведенный выше график может отображать воздушное движение между разными аэропортами:
Ссылки представляют собой прямые маршруты между аэропортами. А именно, чтобы попасть из Рима в Сан-Франциско, нужно обязательно проехать через Нью-Йорк.
На математическом языке мы можем представить этот граф так называемой смежной матрицей, описанной следующим образом:
Строки и столбцы представляют узлы: если элемент, соответствующий записи i, j, равен 1, это означает, что существует связь между узлами i и j , иначе элемент равен 0.
Из приведенного выше графика видно, что каждый маршрут можно выбрать в любом направлении (действительно, смежная матрица симметрична). Это верно, когда график неориентированный. С другой стороны, если бы у нас была такая ситуация:
вы можете видеть, что из Сан-Франциско вы не можете вернуться в Рим. В этом случае соседняя матрица больше не симметрична:
Эти типы графиков называются ориентированными.
Независимо от его природы (направленный или неориентированный) граф размера N (то есть граф с N узлами) может иметь не более N (N-1) / 2 ребер. Граф с таким количеством ребер называется полным. С другой стороны, когда количество ребер E приблизительно равно N ^ a (с a ‹2), граф называется разреженным.
Я уже упоминал об особенностях размера графа: это количество узлов системы. Однако это не единственная метрика, которую мы можем использовать для описания нашего графика. Мы можем сгруппировать все эти показатели по трем категориям:
- метрики расстояния
- метрики центральности
- статистические свойства
Итак, давайте рассмотрим их все.
Метрики расстояния
Понятие расстояния можно перевести в понятие «путь» в рамках сетевой структуры. Путь - это просто набор ссылок, соединяющих два или более узлов. Что еще более интересно, мы можем определить для каждой пары узлов i, j кратчайший путь l_ij, соединяющий эти узлы. А именно, в приведенном выше примере (с небольшими изменениями для этой цели) кратчайший путь между Лондоном и Сан-Франциско:
Имея в виду эту меру, мы можем определить диаметр сети, который является максимальным значением среди всех возможных кратчайших путей:
В приведенном выше примере диаметр сети равен 3, так как это наибольшее значение среди всех кратчайших путей. Для наглядности вот список всех возможных кратчайших путей:
- Сан-Франциско ‹-› Нью-Йорк = 1
- Сан-Франциско ‹-› Рим = 2
- Сан-Франциско ‹-› Лондон = 3
- Сан-Франциско ‹-› Милан = 3
- Сан-Франциско ‹-› Париж = 3
- Нью-Йорк ‹-› Рим = 1
- Нью-Йорк ‹-› Милан = 2
- Нью-Йорк ‹-› Лондон = 2
- Нью-Йорк ‹-› Париж = 2
- Рим ‹-› Лондон = 1
- Рим ‹-› Милан = 1
- Рим ‹-› Париж = 1
Показатели центральности
Среди этих мер мы можем выделить следующие:
- Степень центральности: измеряет количество ребер, попадающих в узел i. А именно, на приведенном выше рисунке степень центральности узла Rome равна 4. Обратите внимание, что, если мы имеем дело с ориентированными графами, каждый узел будет иметь меру центральности по внутренней и внешней степени, подсчитывая количество ребер, приходящих к и, соответственно, от целевого узла.
- Центральность близости: это относится к среднему расстоянию от вершины i до всех остальных и вычисляется как:
Где l_ij, как определено выше, - это кратчайший путь между вершинами i и j. Например, давайте вычислим центральность близости для узла Рим:
Если вместо этого мы вычислим Милан:
Мы можем сделать вывод, что Рим более «центральный» (он же хорошо связан), чем Милан.
- Централизация посредничества: этот показатель оценивает важность узла с точки зрения «моста», который он может создать среди других узлов. Действительно, один узел может быть плохо связан, но он может удерживать всю сеть вместе. Рассмотрим следующий пример:
Узел A имеет степень центральности 2 (довольно низкая), но при удалении вся сеть разваливается. Узел A действительно объединяет два кластера узлов. Чтобы учесть это важное свойство, на помощь приходит центральность промежуточности:
Поясним эту формулу:
- σ_hj представляет собой общее количество кратчайших путей между h и j
- σ_hj (i) - общее количество кратчайших путей между h и j, проходящих через i.
Интуитивно понятно, что чем больше кратчайших путей проходит через i, тем ближе это значение к 1. Рассмотрим следующий график:
И давайте вычислим центральность промежуточности узла A:
Таким образом, в этом случае центральность по промежуточности узла A равна 9 (сумма последнего столбца), в то время как его центральность по степени равна 2, а центральность по близости равна 0,1 (1/10).
Статистические свойства
Мы можем дополнительно охарактеризовать сеть с помощью распределения. А именно, мы можем вычислить распределение степеней: это распределение вероятностей P (k), которое сообщает нам вероятность того, что любой случайно выбранный узел будет иметь степень = k. Это можно визуализировать, просто подсчитав количество узлов, имеющих заданную степень, и построив соответствующую гистограмму. А именно, рассмотрим следующий график:
Соответствующая гистограмма:
Как видите, наиболее частая степень среди узлов равна 2. Обратите внимание, что те же рассуждения можно применить к метрике центральности промежуточности, получив распределение промежуточности.
Последние мысли
В этой первой статье я познакомил вас с некоторыми основными функциями и показателями для характеристики сетей. В следующих статьях я познакомлю вас с пакетом Python NetworkX и выделю различные типы графиков.
Надеюсь, вам понравилось чтение, следите за обновлениями Часть 2!