В чёрную пятницу, пока у нас стартует флагманский курс Data Science, делимся интерактивными графами подписок веб-разработчиков и разработчиков моделей ML, а также знакомим читателей с инструментом визуализации больших графов — PyGraphistry.  Такие данные — косвенный индикатор конкуренции языков и технологий. К примеру, можно попробовать выяснить, сколько разработчиков C++ следят за разработчиками Rust и наоборот. За подробностями и кодом приглашаем под кат. Интерактивный граф вы найдёте здесь. Мы проанализируем GitHub при помощи набора данных в Kaggle. Узлы — это разработчики, которые поставили звезду не менее чем 10 репозиториям. Если человек является разработчиком машинного обучения, то ml_target=1, иначе ml_target=0. Рёбра (edges) — это наблюдения двух разработчиков друг за другом. Начнём с определения процентного соотношения веб-разработчиков — 𝑃(Web Developer) и разработчиков машинного обучения — 𝑃(ML Developer) в сети. 74% разработчиков в этой сети — веб-разработчики. Каков процент смешанных соединений (между веб-разработчиком и разработчиком машинного обучения)? Объединим таблицы edges и nodes: Затем рассчитайте процент смешанных связей в сети — 𝑃(ML Developer connect to Web Developer). Одинаковых соединений почти в 5,5 раз больше, чем смешанных. Ещё один интересный вопрос: если человек — веб-разработчик, какой процент его связей — веб-разработчики, а какой — разработчики ML? Чтобы ответить на этот вопрос, воспользуемся теоремой Байеса. Из этой теоремы известно, что: Мы уже знаем 𝑃(ML-Developer connect to web Developer) и 𝑃(Web Developer) из предыдущих расчётов. Воспользуемся этими цифрами, чтобы найти 𝑃(connect to ML Developer|Web Developer): Теперь легко найти 𝑃(Web Developer|Web Developer): Это означает, что если человек является веб-разработчиком, то: вероятность, что связанные с ним люди тоже веб-разработчики, составляет 71,95%; вероятность, что он связан с разработчиком ML, составляет 28,05%. Эти цифры очень похожи на процент разработчиков ML и веб-разработчиков в сети (0,258 и 0,741). Мы можем найти 𝑃(Connect to a Web developer|ML Developer): И 𝑃(ML Developer|ML Developer): Если человек — разработчик ML, то: вероятность, что связанные с ним или с ней люди также являются веб-разработчиками, составляет 59,87%; вероятность, что связанные с ним люди — разработчики ML, составляет 41,03%. Поскольку процент разработчиков ML в сети составляет всего 25,8%, удивительно наблюдать, что 41,03% связей разработчика ML — это разработчики ML. То есть разработчики ML с большей вероятностью будут следить друг за другом, чем за веб-разработчиками. Давайте попробуем подтвердить этот вывод. Визуализируем сеть GitHub с помощью PyGraphistry. PyGraphistry — это библиотека Python для визуализации больших графов. Здесь мы будем работать с большим графом, поэтому PyGraphistry — идеальный инструмент.Чтобы установить его, выполните: Чтобы использовать PyGraphistry, создайте бесплатный аккаунт graphistry.com: Затем укажите узлы и рёбра графа. Чтобы показать разные значки для разных ролей, воспользуемся encode_point_icon: Теперь выводим граф Github: В вашем блокноте должно появиться что-то вроде этого: Интерактивный граф вы найдёте здесь. Чем больше узел, тем больше количество его связей с другими узлами. Наведя курсор на определённый узел, вы увидите узлы, с которыми он связан. Интерактивный граф вы найдёте здесь.  Щёлкнув по узлу, вы получите информацию о нём. Граф красивый, но не очень информативный. Хочется знать, как разработчики разных ролей связаны друг с другом, поэтому раскрасим узлы с разными ролями в разные цвета. Разработчики моделей машинного обучения окрашены в серебряный цвет, веб-разработчики — в бордовый. Интерактивный граф вы найдёте здесь. Если цвет отображается не так, как вы этого ожидали, возможно, нужно обновить страницу. Видно, что разработчики одинаковых ролей имеют тенденцию группироваться. Нажмём на значок "Data Table" в верхней части экрана. Отсортируем её по количеству взаимосвязей и щёлкнем по интересующей точке, которая будет выделена: Интерактивный граф здесь. Из таблицы видно, что большинство популярных разработчиков — это веб-разработчики. Что неудивительно, ведь веб-разработчиков гораздо больше. Сообщество — это подмножество узлов, которые в одном и том же графе плотно связаны друг с другом и слабо связаны с узлами других сообществ. Попробуем найти сообщества с помощью метода Лувена. Мы имеем дело с большим графом, поэтому для ускорения кода воспользуемся cuGraph. В таблице ниже, partition — это сообщество, которому принадлежит узел (вершина). Сколько существует сообществ? Давайте узнаем: Их всего 22. Давайте представим, как выглядят эти сообщества. Объединим таблицы nodes с таблицами parts, чтобы получить имена узлов и их разделов. Воспользуемся faker, чтобы раскрасить разделы в разные цвета. Вы должны увидеть нечто подобное: Интерактивная версия здесь. Видно, что узлы из одного сообщества имеют тенденцию объединяться в кластеры. К каким сообществам принадлежит большинство веб-разработчиков? Мы можем выяснить это, выбрав только веб-разработчиков. Для этого нажмите кнопку Filter в верхней части экрана. После этого отображаться должны только узлы веб-разработчиков: Кажется, что веб-разработчики принадлежат к самым разным сообществам. А теперь посмотрим, к каким сообществам принадлежат разработчики моделей ML: Граф только из разработчиков ML: Интересно! Большинство разработчиков ML принадлежат к сообществу, окрашенному в розовый цвет. Это означает, что, в отличие от веб-разработчиков, разработчики ML, как правило, находятся в одном сообществе. Другими словами, разработчики ML теснее связаны друг с другом. Каков процент разработчиков ML в каждом сообществе? Чтобы выяснить это, воспользуемся сгруппированной гистограммой. Кажется, небольшой процент разработчиков ML есть в большинстве сообществ. Это означает, что большинство сообществ весьма разнообразны. Поздравляю! Вы только что узнали, как анализировать социальную сеть с помощью байесовской статистики и PyGraphistry. Свободно форкайте исходный код из этой статьи. Продолжить изучение визуализации, Python и всей науки о данных вы сможете на наших курсах: Подробности здесь. Профессия Data Scientist (24 месяца) Профессия Data Analyst (10 месяцев) Профессия Fullstack-разработчик на Python (15 месяцев) Data Science и Machine Learning Профессия Data Scientist Профессия Data Analyst Курс «Математика для Data Science» Курс «Математика и Machine Learning для Data Science» Курс по Data Engineering Курс «Machine Learning и Deep Learning» Курс по Machine Learning Python, веб-разработка Профессия Fullstack-разработчик на Python Курс «Python для веб-разработки» Профессия Frontend-разработчик Профессия Веб-разработчик Мобильная разработка Профессия iOS-разработчик Профессия Android-разработчик Java и C# Профессия Java-разработчик Профессия QA-инженер на JAVA Профессия C#-разработчик Профессия Разработчик игр на Unity От основ — в глубину Курс «Алгоритмы и структуры данных» Профессия C++ разработчик Профессия Этичный хакер А также Курс по DevOps Все курсы