Теперь, когда мы определили индекс альянса для количественной оценки отношений между потерпевшими кораблекрушение, что мы можем сделать дальше? Мы можем построить сеть альянсов выживших, взяв потерпевших кораблекрушение в качестве узлов и индекс альянса между парой потерпевших кораблекрушение в качестве края. Сети альянсов выживших затем можно использовать в качестве визуальной сводки отношений в каждом сезоне.

В этом посте я покажу, как мы можем создавать сети альянсов, а затем покажу, как они выглядят.

Создание сетей Survivor Alliance с помощью NetworkX

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

Мы можем использовать модуль NetworkX в Python для очень простого построения сети. Чтобы определить сеть в NetworkX, мы создаем сетевой объект, используя nx.Graph(). Назовем получившуюся сеть G. Чтобы добавить узлы в G, мы делаем G.add_nodes_from(node_list), где node_list — это, естественно, список узлов. Чтобы добавить ребро к G, мы делаем G.add_edge(edge_pair), где edge_pair — это пара узлов, которые мы хотим соединить.

Затем мы определяем функцию plot_network(), которая принимает в качестве входных данных название сезона и выводит сеть отношений в виде файла png. Эта функция основана на коде очистки и коде индекса альянса из Scraping the Survivor Wiki и Computational Analysis of Survivor Alliances соответственно. Мы устанавливаем параметры m=50 и k=3 по умолчанию. Чтобы обсудить, что означают эти параметры, ознакомьтесь со второй статьей цикла.

Чтобы расположить узлы в пространстве, мы используем пружинную компоновку, поскольку она подчеркивает кластеризацию узлов.

Используя функцию, определенную выше, мы можем построить сеть для каждого сезона Survivor, используя следующий цикл for:

Сети Альянса выживших, визуализация

Давайте посмотрим на сеть альянсов Survivor за несколько прошлых сезонов Survivor.

Во-первых, позвольте мне сделать три замечания.

1. Помните, что толщина края обозначает индекс альянса (или силу отношений). Более толстый край соответствует более высокому индексу альянса, а более тонкий край соответствует более низкому индексу альянса.

2. Чаще всего pre-merge буты не появляются в сетях альянсов, так как они отфильтровываются по параметру k.

3. Сети альянсов зависят от m и k. Для нашего анализа мы сосредоточимся исключительно на случае m=50 и k=3. Изменение m и k даст разные результаты.

Вот сети альянса Survivor.

Я не смотрел каждый сезон шоу, поэтому не могу дать подробный анализ получившихся сетей. Одна вещь, которую мы замечаем, это то, что есть некоторые сезоны, которые имеют отдельные, несвязанные кластеры (Таиланд и Палау), в то время как некоторые сезоны имеют один, связанный кластер (Worlds Apart и Камбоджа). Есть сезоны, когда линии союзов рисуются с самого начала, тогда как в другие сезоны союзы гораздо более изменчивы и могут меняться от одного совета племени к другому.

Сети альянсов освещают ситуации, когда потерпевший кораблекрушение имел два разных альянса в течение сезона, возможно, один до слияния и один после слияния, или если потерпевший крушение переключился на свой альянс. Это можно увидеть с Шии-Энн в All-Stars, Кокраном в южной части Тихого океана и Шерри в Карамоане.

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

Я был бы очень признателен, если бы вы высказали свое мнение о сетях альянса Survivor. Имеют ли они смысл? Какова ваша интерпретация сетей?

Что еще можно сделать

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

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

P.S. Survivor Blood vs. Water почему-то ломает мой алгоритм. Я получаю ключевую ошибку с Gervase, и я не очень хочу с ней разбираться прямо сейчас.

В заключении

В этом посте мы смогли построить сети альянсов Survivor из данных истории голосования. Следующее, что я собираюсь сделать, это сравнить разные сезоны Survivor, используя некоторые сетевые показатели. Мы надеемся, что это позволит нам сопоставить разные сезоны Survivor друг с другом.

Опять же, полный код можно найти на моем Github.

Первоначально опубликовано на datameetsmedia.com