Теперь, когда мы определили индекс альянса для количественной оценки отношений между потерпевшими кораблекрушение, что мы можем сделать дальше? Мы можем построить сеть альянсов выживших, взяв потерпевших кораблекрушение в качестве узлов и индекс альянса между парой потерпевших кораблекрушение в качестве края. Сети альянсов выживших затем можно использовать в качестве визуальной сводки отношений в каждом сезоне.
В этом посте я покажу, как мы можем создавать сети альянсов, а затем покажу, как они выглядят.
Создание сетей 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