Скажи мне кто твой друг, и я скажу кто ты
![](https://habrastorage.org/getpro/habr/upload_files/824/dff/28e/824dff28e0f6a33de9973e4424a6e770.jpeg)
Вы наткнулись на необычный проектик, который изучает дружеские коллективы, группы конкретного пользователя или группы профилей с помощью социального графа связей. Умею строить Портрет Пользователя, Портрет Группы, Карту Нетворкинга для соцсети ВК.
![Портрет Группы: общие друзья/подписчики Влада и Кости Портрет Группы: общие друзья/подписчики Влада и Кости](https://habrastorage.org/getpro/habr/upload_files/1c7/d74/c82/1c7d74c8264e44317f23ee1c30af8496.jpg)
![Один из графов по комментариям и лайкам на 35к профилей (общение под постами за некую неделю) Один из графов по комментариям и лайкам на 35к профилей (общение под постами за некую неделю)](https://habrastorage.org/getpro/habr/upload_files/c20/5b3/230/c205b32306f314e1cd2f42be13912bb7.png)
Зачем всё это? Изначально по приколу, но надеюсь, вы тут с благими намерениями.
Оглавление
1. Как читать свой граф или друга: построение графа
1. Как читать свой граф или друга: построение графа
Как изучить граф:
Если вы построили граф на свою страницу, то достаточно посмотреть на имена в каждом кластере, тогда будет понятно, где друзья с вуза/школы/работы/секции/родной деревни и тд. Вот пример "моего" графа.
![номера групп идут по убыванию участников номера групп идут по убыванию участников](https://habrastorage.org/getpro/habr/upload_files/2b6/0b5/964/2b60b5964fdcc02ab7a4c9309a98729e.png)
Но если решили узнать другого пользователя поближе, то имена не помогут, а наш "ультра-мега Портрет Пользователя 3000" раскроет все карты. Подробнее в главе Портрет Пользователя, где анализируется информация со страниц и подписки всех друзей и подписчиков.
Немного теории, понятной всем:
Модулярность - это мера крутизны того, как мы разбиваем граф на группы. Чем сильнее кучкуются вершины внутри группы и меньше связей между группами, тем круче модулярность (ближе к 1)
Разбиваем на кластеры (группы друзей/подписчиков): чтобы найти группы друзей/подписчиков, используем алгоритм Лувена и очень-очень-очень много оптимизаций (работа с большими графами – это не работа с малыми графами; банально, но факт). Общий алгоритм Лувена оценивает разбиение по модулярности и старается сделать её максимальной. По-простому: ищет такое разделение, где связей внутри групп много, а между группами мало
Размещаем точки-ноды:
Изначально граф - это каша точек-пикч. Тут работает алгоритм, который считает вершины графа как частицы, которые тянутся и отталкиваются друг от друга (как магнит и металлические скрепки). Если вершины связаны, они тянутся друг к другу, а если нет - отталкиваются. Происходит постоянное обновление положения вершин, пока не найдется расположение, где все ноды будут в равновесии
2. Портрет Пользователя
Если для графа достаточно получить список друзей и подписчиков, то в Портрете Пользователя достаются страницы целиком вместе с подписками и другими открытыми данными, это занимает в среднем в 6 раз больше времени. Так вот, помимо графа, в Портрете Пользователя есть:
1) Граф
Ещё пару слов об оном. Граф разбит на группы близости друзей и подписчиков пользователя. У каждой группы есть свой цвет. Связи внутри группы имеют цвет этой группы, связи с другими группами – серые. Круги – друзья, квадраты – подписчики пользователя, самого пользователя на графе нет. Сплошная линия – дружеская связь. Пунктирная со стрелкой показывает "кто на кого подписан".
Функциональность. Все точки-пикчи можно перемещать. При нажатии (наведении) на ноду (точка-пикча) - подробная информация и подсветка всех его связей. При поиске - подсветка связей. Можно подсветить несколько человек, выбирая их на графе и в поиске. Поиск работает по любой части имени или ID. Рядом с легендой есть кнопка «Физика включена» - при перемещении ноды, связанной с другими, оные будут или не будут перемещаться вслед за перетаскиваемой нодой. Позволяет сделать кастомное расположение нод на свой вкус.
Подробная информация ноды включает в себя: имя (+ ссылка на профиль), номер группы на графе, статус страницы (публичная, приватная, забаненная, заблокированная, удалённая), ID, с кем дружит/на кого подписан, возраст, число друзей и подписчиков, город, родной город, образование, популярность в группе графа (работает примерно так: чем больше связей, тем больше популярность), связи (число связей с другими нодами графа), работу (+ ссылка на место работы), связи с другими группами (номера групп: процент связей с этими группами; выделенная группа – группа с которой больше всего связей, выделенная группа не всегда является группой, в которой находится оный профиль), активность (+ ссылка на активность).
![Граф пользователя, разбитый на группы близости друзей и подписчиков. Один из друзей выделен, и показана информация о его профиле Граф пользователя, разбитый на группы близости друзей и подписчиков. Один из друзей выделен, и показана информация о его профиле](https://habrastorage.org/getpro/habr/upload_files/c94/335/a16/c94335a16aea4c7097c94518ad4d6188.png)
2) Таблица коллективов
Мега таблица всего обо всём. Столбцы:
Коллектив – номер и цвет группы, которая на графе (одиночки – сборная солянка всех профилей, которые являются друзьями/подписчиками исследуемого профиля и у которых нет дружеской/подписочной связи с другими друзьями/подписчиками исследуемого).
Людей – количество профилей в группе
Из них подписчики – количество подписчиков исследуемого в оной группе (процент подписчиков от числа профилей (столбец Людей))
Общие друзья – см. главу про Портрет Группы
Связей: Внутри/Вне группы – внутри (суммарное число связей нод в этой группе между собой)/ вне группы (суммарное число связей нод этой группы с другими группами)
Возраст: Средний/Медиана/std – среднее/медиана/стандартное отклонение возраста группы
Пол: Ж/М – процент женских/мужских профилей в группе (преобладающий (≥80%* скорее всего) процент профилей выделяется жирным)
Друзей: Среднее/Медиана/std – среднее/медиана/стандартное отклонение друзей профилей группы
Подписчиков: Среднее/Медиана/std – среднее/медиана/стандартное отклонение подписчиков профилей группы
Страниц: Open/Privat/Ban – открытые/приватные/забаненные(удаленные, заблокированные) профили группы
Общие города – общие города профилей группы (отсортированы по убыванию, «преобладающие» (≥5*) города выделены жирным)
Общие ВУЗы – общие вузы профилей группы (отсортированы по убыванию, «преобладающие» (≥3*) вузы выделены жирным)
Общие школы – общие школы профилей группы (отсортированы по убыванию, «преобладающие» (≥2*) школы выделены жирным)
Общее место работы – общие места работы профилей группы (отсортированы по убыванию, «преобладающие» (≥2*) места работы выделены жирным, + ссылки на места работы)
Колич. подписок: Среднее/Медиана/std – среднее/медиана/стандартное отклонение количества подписок профилей оной группы
Совпадение фамилий – совпадающие фамилии (однофамильцы и родственники) профилей группы (отсортированы по убыванию, «преобладающие» (≥3*) фамилии выделены жирным)
???? – цвет группы
![Таблица Коллективов (1-я часть) Таблица Коллективов (1-я часть)](https://habrastorage.org/getpro/habr/upload_files/e63/1d7/71e/e631d771ecf0779e644f7a9b3236c602.jpg)
* выделены более редкие/важные события, числа могут быть слегка другими
3) География
В профилях пользователи обычно указывают в разделе "город" своё нынешнее место жительства, "родной город" и так понятно. Учитывайте, что далеко не все указывают эту информацию на странице, поэтому можно судить о группе в целом по нескольким ее участникам.
![Выводятся города, где хотя бы 2 человека с одной группы Выводятся города, где хотя бы 2 человека с одной группы](https://habrastorage.org/getpro/habr/upload_files/71d/34d/fe8/71d34dfe804a2fa9aa7511f85d7b55d0.png)
Пример: Волгоград в "родном городе" указали 2 человека из зеленой группы, а на графике "город" эта зеленая группа разбрелась еще на Москву и Питер. Это одноклассники - кто-то поступил в столицы, многие остались. К аналогичному выводу можно прийти, смотря странички в боте на «своих» друзей.
Функциональность. Кликая на группы справа, они убираются/появляются на графиках, двойной клик – смотрим выделенную группу. При наведении на столбец графика показываются: город, число пользователей группы с этим городом, группа. Можно перемещать графики и увеличивать графики, если мелко или не влезла инфа.
4) Лидеры групп
Здесь всё просто, топ профилей с наибольшим количеством связей внутри своей группы с некоторыми оптимизациями ранжирования (по убыванию).
![](https://habrastorage.org/getpro/habr/upload_files/453/d33/c5a/453d33c5af32f1f58880689346aaf250.jpg)
Функциональность. Наводим на круг-профиль – видим имя и количество связей. Кликая на группы справа, они убираются/появляются на графике, двойной клик – смотрим выделенную группу. Можно перемещать графики и увеличивать графики, если мелко или не влезла инфа.
5) Возраст
Возраст разбит на группы, возрастные группы и пол. На этом шаге можно идентифицировать группу, которую я описал как "родственники", ведь они попали в 40+ и пошли в Одноклассники ????
![](https://habrastorage.org/getpro/habr/upload_files/4bd/3b0/25c/4bd3b025c000e33f205efdf693537e9f.jpg)
Функциональность. Наводим на столбец/линию «Общее» – видим возрастную группу, число попавших в нее из конкретной группы, номер группы. Кликая на группы справа, они убираются/появляются на графике, двойной клик – смотрим выделенную группу. Можно перемещать графики и увеличивать графики, если мелко или не влезла инфа.
6) Анализ сообществ
Самой первой изображена круговая диаграмма типов сообществ разбитых по категориям ("Юмор", "Новости", “Остальное до 1%” и тд). Это общие интересы группы по всем их подпискам (пример: у 10 профилей по 100 подписок, на диаграмме учтены типы всех 1000 сообществ). Функциональность. При наведении/тапе показывается тип категории и число подписок группы на этот тип категории.
Вторым идёт график "топ слов" из названий сообществ. По большей части смысловая нагрузка пересекается с последним графиком общих пабликов, но подписки информативнее всего описывают группу-коллектив. Особое внимание на всякие "Подслушано", ведь это могут быть районные/городские/учебные/рабочие паблики. Напоминаю, что во всем анализе мы субъективно говорим о группе в целом по некоторым участникам. Функциональность. При наведении/тапе показывается встречаемость слова в названиях сообществ и само слово. Можно перемещать график вверх/вниз, если мелко или не влезла инфа.
Третий – график общих пабликов. Сразу видно какое отношение данная группа-коллектив имеет к анализируемому профилю. Функциональность. При наведении/тапе показывается название сообщества, количество профилей группы, подписанных на него, и тематика ("Блог", "Музыкант" и тд) сообщества. Можно перемещать график вверх/вниз, если мелко или не влезла инфа. Черные столбцы – паблики с тематикой: «Городское сообщество». «Преобладающие» (≥6*) паблики выделены жирным.
![Можно перемещать графики, если столбцов много. При наведении – доп. инфа, если не видно – подвинь график влево Можно перемещать графики, если столбцов много. При наведении – доп. инфа, если не видно – подвинь график влево](https://habrastorage.org/getpro/habr/upload_files/f46/342/e7f/f46342e7f9bf5c9a01166aa0d872f323.jpg)
7) Расширения
Есть несколько расширений, которые увеличивают возможности Портрета Пользователя. Их можно использовать как вместе, так и по отдельности. Кастомные списки позволяют дополнительно к исследуемой странице передавать списки друзей и подписчиков. Это могут быть потенциальные друзья, скрытые или иные, которых хочется или не хочется видеть на графе. При этом исследуемая страница может быть непубличная, удаленная, замороженная, заблокированная, забаненная или публичная. Непубличные списки (ключ) позволяют сделать граф, например на своего непубличного друга, который является вашим другом или подписчиком.
![](https://habrastorage.org/getpro/habr/upload_files/561/059/77c/56105977cb43cad76993dd076e25382f.jpg)
Бонус. Метрики групп
Самые увлеченные котята могут изучить метрики графа по группам. Краткое описание предоставлено, но может придется дополнительно погуглить и не быть гуманитарием (в будущем и для них распишу, какие циферки о чём могут говорить)
![](https://habrastorage.org/getpro/habr/upload_files/67d/6b8/5c3/67d6b85c35f6f828d03c14a3b3dab001.png)
3. Портрет Группы
Портрет Группы показывает граф общих коллективов и общих друзей/подписчиков группы анализируемых профилей, связи профилей между собой до 2-х рукопожатий (1 рукопожатие – друг/подписчик, 2 – общие друзья).
1) Граф
Отличия этого графа от графа Портрета Пользователя в следующем:
Дополнительно в легенде показывается процент принадлежности профилей группы к каждому из анализируемых. Пример: в группе 5 все профили – это друзья/подписчики Кости и только 2% из них являются друзьями/подписчиками Влада
Дополнительно информация ноды включает в себя: с кем дружит/на кого подписан из анализируемых профилей
![Портрет Группы: общие друзья/подписчики Влада и Кости Портрет Группы: общие друзья/подписчики Влада и Кости](https://habrastorage.org/getpro/habr/upload_files/56c/b47/e44/56cb47e44fa5651b0d943d3e4c74e1dd.jpg)
2) Таблица коллективов
Отличия от Портрета Пользователя в следующем:
Рассчитывается всё для всех анализируемых профилей, друзья/подписчики считаются общими для всей группы исследуемых профилей
Людей – количество профилей в группе, количество для каждого из исследуемых, и «общие для всех» - общие друзья/подписчики всех исследуемых
Из них подписчики – количество подписчиков для каждого из исследуемых в оной группе (процент подписчиков от числа профилей (столбец Людей: конкретный исследуемый))
Общие друзья – пересечение общих друзей/подписчиков для каждых 2-х, 3-х, 4-х, и тд исследуемых из всех исследуемых профилей (показываются только существующие общие)
Всё экстраполируется с одного исследуемого в Портрете Пользователя на всех исследуемых в Портрете Группы для графа, таблицы коллективов, графиков географии, лидеров, возраста и анализа сообществ. Бонус: дополнительно к Портрету Группы строится Карта Нетворкинга для 2-х рукопожатий всех исследуемых.
4. Карта Нетворкинга
Карта Нетворкинга показывает граф связей исследуемых профилей между собой до 3-х рукопожатий включительно. Позволяет найти связи через посредников между исследуемыми профилям. Одно рукопожатие – дружеская/подписочная связь, два рукопожатия – связь через общего друга/подписчика, три рукопожатия – по аналогии.
Обозначу без повторений отличия Карты Нетворкинга от Портрета Пользователя:
1) Граф
На графе изображены только друзья/подписчики до 3-го колена (друг друга – это 2-е колено). Друзья/подписчики первого рукопожатия исследуемого имеют с ним одинаковый цвет (“зеленый”, “синий”, “красный” и тд), Если круги первых рукопожатий каждого из двух исследуемых имеют общие связи, то цвет этих связей – смесь цветов исследуемых. У каждого исследуемого есть свой цвет, чтобы можно было удобно раскрашивать связи 2-го и 3-го колена. Исследуемые расположены по кругу.
![Карта Нетворкинга 3-х исследуемых до 3-х рукопожатий Карта Нетворкинга 3-х исследуемых до 3-х рукопожатий](https://habrastorage.org/getpro/habr/upload_files/e6e/f89/373/e6ef89373ab1a9593a368a11dcaae45d.png)
Функциональность. Внизу графа есть кнопка «Физика включена».
Подробная информация ноды включает в себя: имя (+ ссылка на профиль), статус страницы (публичная, приватная, забаненная, заблокированная, удалённая), ID, возраст, город, родной город, школы, образование, работу (+ ссылка на место работы), список с кем дружит/на кого подписан (+ ссылка на профиль, жирные - исследуемые), активность (+ ссылка на активность).
![Карта Нетворкинга 12-ти исследуемых до 2-х рукопожатий Карта Нетворкинга 12-ти исследуемых до 2-х рукопожатий](https://habrastorage.org/getpro/habr/upload_files/e57/12a/839/e5712a839e6c23f9ab699b64c1e7bc2a.png)
5. Послесловие
Будьте хорошими и самое главное — помните! Вся информация…
![](https://habrastorage.org/getpro/habr/upload_files/083/ea9/a0b/083ea9a0bab60b70fc6eb8cb53d14f82.jpeg)
Мега аналитика
Которую уже разрабатываем или ещё не придумали, поэтому пишите свои идеи и любые вопросы в комментариях или здесь -> фидбэк. Нам очень нужна обратная связь, чтобы ткнуть нас носиком, где криво отображаются графики, а что работает не так, как задумано.
Планируется добавить дерево родственников и тд. Да и много чего ещё, но всё равно ждём ваших идей!
Комментарии (18)
NeoCode
07.01.2024 10:59+5А где ссылка на собственно разработку? Гитхаб там или что-то в этом роде... или разработка закрытая?
StjarnornasFred
07.01.2024 10:59Ого, знакомо, пользуюсь уже давно! А есть такие же или похожие инструменты для Facebook?
socialgraph Автор
07.01.2024 10:59Скоро сделаем)
Не собираемся останавливаться на ВК
ruslan-smirnov
07.01.2024 10:59+1Не хватает более глубокого анализа — поведение. Лайки, подарки, музыка, фото и кто когда заходил. И тогда получится еще более лучше. Правда, конечно, после введения приватных профилей, появились некие проблемы с этим. Но, скажем, дополнительной выборкой по инсте и другим сетям эта проблема нивелируется
vadimk91
07.01.2024 10:59+1Ой. Меня и так несколько напрягает, когда на меня подписываются совершенно незнакомые люди с пустыми либо закрытыми личными страницами, я вот не понимаю, что может подтянуться в этих графах через одно, два рукопожатия. А тут ещё и по поведению "заходит в соцсети только вечерами на час" ещё запишут в какую-нибудь категорию (:
Оно конечно бигдата, бигмани и всё такое, но мне больше всего понравился раздел 5 Послесловие, и тэг "информационная безопасность".
socialgraph Автор
07.01.2024 10:59Главное, чтобы в друзьях не было сомнительных личностей. А подписываться на Вас можно запретить в настройках ВК, на сколько помню
vladislavmelnichuk
Оо, теперь SG на хабре, класс! Пользуюсь периодически вашей разработкой. Вот, что значит хорошая математическая школа! Молодцы, ребята, поднимаете СНГ осинт с колен.
P. S. Не заметил линк на тг-бота в статье, держите: https://t.me/friendly_graph_bot
Надо поддержать ребят в начинаниях
Dolios
Попробовал зайти на их сайт:
Включил VPN:
В запрещенном фейсбуке они про себя пишут:
Так и не понял, что это за компания такая интересная и что они с колен поднимают. Расскажите, если в курсе.
vladislavmelnichuk
Откуда эта ссылка? У них нет сайта...
Dolios
Из гугла и хабр карьеры: https://career.habr.com/companies/socialgraphagency ))
socialgraph Автор
Мы называем себя Social Graph. А этих ребят не знаем, у них ещё agency в конце ????
Dolios
По этой фразе вас в принципе найти не возможно :)
socialgraph Автор
Это не наш сайт, какая-то ошибка, вот ссылка
Поднимают с колен - это, конечно, слишком сильно)
Мы - 3 студента математика, никакая не компания, в свободное от учёбы время рисуем графы. Просто хобби ????
Dolios
Ясно, спасибо, коллизия получилась )
socialgraph Автор
Если гуглить
Social Graph Bot
вроде выскакиваем в поиске ????
P. S. Это ответ на комменты выше, перепутал немного