Даниил, здравствуйте!

Я решил рассмотреть два сюжета: первый — география летних Олимпийских игр и чемпионатов мира по футболу FIFA, а второй — анализ сообщества меценатов образовательной НКО.
Сюжет 1
География летних Олимпийских игр и чемпионатов мира по футболу


К спортивным мега-событиям относят как правило глобальные соревновательные мероприятия с бюджетом свыше 1 миллиарда долларов. Столь крупные события исследуются специалистами из разных областей — чаще всего встречаются социологический, экономический и политологический анализ. В случае, если в фокус исследования попадают одни из самых крупных спортивных феноменов современности — летние Олимпийские игры (ОИ) и чемпионат мира по футболу FIFA (ЧМ) — исследователю может быть интересно увидеть список проведенных мероприятий не в виде таблицы, а виде графа, синхронизированного с географической картой.

Наша гипотеза состоит в том, что подобное представление будет более наглядным, чем таблица. Попробуем это сделать.

Софт: Numbers, Gephi.

Оба мероприятия представляют собой спортивное событие, которое подолжается несколько недель в одной из стран, чья кандидатура выбирается за 7 лет в ходе жеребьёвки. В случае с ОИ — выбор делает Международный Олимпийский комитет, а в случае с ЧМ — международная федерация футбола FIFA, со штаб-квартирами в Лозанне и Цюрихе соответственно (чуть упростим задачу, и представим, что штаб-квартира МОК находилась в Лозанне с момента проведения первых Игр). Далее весь организационный процесс подотчётен МОК и FIFA соответственно.

В нашем случае это будет означать, что между локацией штаб-квартиры и городом проведения мероприятия будет размещён оринетированный граф (ребро будет иметь направление). Учитывая то, что города проведения мероприятий могут повторяться, будем исходить из следующего: вес «единоразового» проведения чемпионата или Игр равен 1.

Таким образом, Афины, проводившие Игры дважды, будут соединены графом с весом 2, а у графа между Лозанной и Мехико вес равен 1 (в Мехико прошли только одни Олимпийские игры).


Файлы:
В файл nodes_olympics.csv вносим информацию о городах и их географических координатах (пользуемся открытыми данными).

В edges_olympics.csv — данные о рёбрах: тип — направленные, а вес кратен количеству соревнований. Лозанна добавлена как отправная точка, откуда начинается каждая Олимпиада (формально — с зажжения огня в Грециии, но мы в данном случае говорим про бюрократический процесс).
В Европе плотность ребёр высока, потому посмотрим ещё один вариант с иным масштабом:
Пройдём аналогичные шаги, работая с датасетом FIFA (вместо Лозанны — Цюрих, а в остальном логика та же):
Возвращаясь к нашей гипотезе, делаем вывод, что граф в данном случае нагляднее таблицы, так как делает географическую привязку исследуемых событий к карте наглядной.

Далее всё зависит от оптики исследователя:
- экономисты скажут, что проведение чемпионатов мира по футболу дешевле Олимпиад, а потому развивающиеся страны чаще представлены на соответствующем графе;
- культурологи вспомнят о том, какую роль футбол занимает в Латинской Америке и объяснят присутствие Чили и Аргентины на второй карте;
- политологи могут проанализировать, почему самые крупные веса у Лос-Анджелеса, Лондона и Парижа, а развивающиеся страны (это хорошо видно на карте) почти не представлены (здесь их позиции будут близки к выводам экономистов).

Из минусов подобного подхода — не слишком наглядное изображение веса ребра, потому введем цветовое кодирование (чёрный — 1, жёлтый — 2, зелёный — 3):
Уже по окончании работы над этим сюжетом, возникла мысль сделать карту самых популярных туров рок-групп за последние 20 лет (например, топ-3: U2, The Rolling Stones и Guns'n'Roses) и посмотреть, где исполнители дают концерты чаще, а куда не заезжают совсем (хотя туры и называются мировыми). На этот проект времени не хватило, так как хотелось попробовать сделать граф, имеющий непосредственное отношение к текущей работе. Об этом — в следующем блоке.
Кнопка открывает папку в Dropbox, где выложены файлы к обоим сюжетам.
Сюжет 2

Здесь возникло желание создать код, который поможет визуализировать связи в сообществе.

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

Самый очевидный способ решить эту задачу — составить таблицу, но она будет менее наглядной, чем граф. К тому же, анализ в NetworkX может дать нам дополнительную пищу для размышлений.

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

Итак, у нас есть некий эндаумент, которому помогают следующие люди:
Ситуация максимально приближена к реальной:

Jack Smith — основатель, он знает тех, кто пожертвовал наиболее крупные суммы (т.н. 'Major Gifts').

Меценаты, сделавшие столь существенный вклад, тоже знают друг друга (но Эндрю ещё не знаком с Анной).

Действующие (3 — 5) и потенциальные (6, 7, 9) меценаты знаю друг друга только если их бизнес связан с одной и той же сферой. Это достаточно упрощённая модель, но для целей нашего исследования она подойдёт полностью.

Наконец, Daniel Lee — фандрейзер, который, само собой, знает всех вышеперечисленных (работа такая).

Первоначальная модель насчитывала 50 человек, но показалось разумным посмотреть логику анализа на менее объёмных данных.

Попробуем создать граф, который мог бы визуализировать эти условия (файл Colab доступен по той же ссылке, что и файлы для первого сюжета, а код — ниже):

import networkx as nx

#создаём граф
sample_network = nx.Graph()

#добавляем вершины
sample_network.add_nodes_from(['Amelia Lee', 'Andrew Chen', 'Anna Taylor', 'Benjamin Smith', 'Caroline Wang', 'Charlotte Kim', 'Chris Wong', 'Christopher Wu', 'Daniel Lee', 'Elizabeth Kim', 'Jack Smith'])

#добавляем рёбра
sample_network.add_edges_from([('Amelia Lee', 'Andrew Chen'), ('Amelia Lee', 'Anna Taylor'), ('Amelia Lee', 'Jack Smith'), ('Benjamin Smith', 'Christopher Wu'), ('Charlotte Kim', 'Chris Wong')])
sample_network.add_edges_from([('Daniel Lee', 'Amelia Lee'), ('Daniel Lee', 'Andrew Chen'), ('Daniel Lee', 'Anna Taylor'), ('Daniel Lee', 'Benjamin Smith'), ('Daniel Lee', 'Caroline Wang'), ('Daniel Lee', 'Charlotte Kim'), ('Daniel Lee', 'Chris Wong'), ('Daniel Lee', 'Christopher Wu'), ('Daniel Lee', 'Elizabeth Kim'), ('Daniel Lee', 'Jack Smith')])
sample_network.add_edges_from([('Jack Smith', 'Anna Taylor')])
sample_network.add_edges_from([('Jack Smith', 'Andrew Chen')])

#визуализируем
nx.draw(sample_network, with_labels=True)
Обычно эта картинка существует в голове фандрейзера, потому хорошо иметь её (картинку) в оцифрованном виде (например, для разговора с учредителем). Видны группы людей, которые пока знакомы только благодаря одной и той же сфере работы (Chris и Charlotte, Сhristopher и Benjamin). Caroline помогает НКО, но не интегрирована в сообщество (задача для фандрейзера — обеспечить это), а Elizabeth также далека от текущей деятельности организации (тут будет уместен иной дизайн ребра, например, пунктиром, так как Elizabeth пока и не вносила пожертвование).

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

В перспективе важно, чтобы этот параметр возрастал и у других меценатов: это связано с предположением, что вовлеченность меценатов (в том числе и через количество социальных связей) будет преимуществом для фандрейзинга и приведет к большим объёмам пожертвований.

Betweenness
Показатель 'betweenness' говорит, скорее о влиянии, которое участники сообщества могут оказывать друг на друга. В данном случае исключаем из анализа фандрейзера (нас будут интересовать меценаты), и обратим внимание на то, кто может оказать влияние на других членов сообщества.

Мы вводили дополнительное условие среди меценатов, чьи пожертвования относятся к категории 'Major Gifts' — Эндрю не знаком с Анной. Таким образом, у Амелии сейчас максимальное влияние (если понимать его как «наличие наибольшего числа знакомств в рамках группы»). В прикладном смысле это будет говорить о том, что Амелия вполне может быть одним из основных контактных лиц среди меценатов этой группы, что позволит нам эффективнее работать с ними, обсуждая новые пожертвования.

Схожие параметры 'betweenness' у учредителя и у самого «социально активного» мецената нас устраивают: мы отталкиваемся от того, что учредитель должен быть знаком со всеми меценатами, чей вклад наиболее заметен в финансовом смысле (речь снова о 'Major Gifts'). При этом, вряд ли учредитель будет знаком со всеми меценатами из всех категорий: потому betweenness учредителя может быть примерно равна аналогичному параметру самого активного мецената (таким образом условно формируется «первый круг» контактов учредителя из числа активных меценатов).


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

Дальнейший шаг — моделирование более объёмной сети на примере реального проекта (с учётом NDA-ограничений, распространенных в этой сфере) и проверка гипотезы на практике.