Хабракланы

Около месяца назад я опубликовал статью о хабракотах на хабре. Побочным продуктом этой статьи оказался дамп страниц хабрапользователей, и мне захотелось извлечь ещё какую-нибудь информацию из него. На хабре регулярно появляются статьиоб анализе пользователей, статей, комментариев, кармы, но я не нашёл ни одной статьи, в которой анализировались бы хабраинвайты. Поэтому я построил граф хабраинвайтов и посмотрел на некоторые его характеристики.

ed4dff5825c243c3806ed4ac1b9372de.png
Напомню, что страницы были скачаны в январе 2016-го года, поэтому всё что произошло после (регистрация новых пользователей, удаление старых пользователей, изменения кармы) не учтено. Убрав из списка скачанных пользоватей всех read-only и деактивированных, получаем 79870. Насколько я знаю, это число примерно соответствует фактическому числу хабрапользователей (плюс-минус тысяча). Далее, чтобы получить граф без дырок пришлось добавить 955 read-only пользователей и 382 деактивированных (это те пользователи, которые кого-либо приглашали или были приглашены, но были выпилены с хабра или переведены в RO по тем или иным причинам). В итоге получаем граф на 81207 вершинах.

Тут стоит отметить, что получить список пользователей хабра непросто. Большая часть была получена пару лет назад, когда ещё были доступны списки подписчиков хабов. Но сейчас таких списков нет, поэтому имена пользователей за 2015 и 2016 год были извлечены из статей, комментариев, страниц уже известных пользователей, списков подписчиков, списков пользователей из заданных городов, стран, а также я нарезал часто встречаемые префиксы имён пользователей (вида Alex*, admin*, Captain* и т. п.) и сделал несколько тысяч запросов на странице поиска хабра. Ещё я добавил пользователей активных на гиктаймсе и мегамозге, поэтому, если вас нет в моём списке, вы хорошо шифруетесь.

Итак, у нас есть направленый граф с 81207 вершинами и 20195 дугами. Как видим только около 20 тыс. пользователей были зарегистрированы по инвайтам от других пользователей, остальные либо зарегистрировались до инвайтов (более 40 тыс.) или были приглашены НЛО.

Назовём хабракланом компоненту слабой связности этого ориентированного графа. Стоит заметить, что эти компоненты, вообще говоря, не являются деревьями, так как один человек может несколько раз получать инвайты. Поэтому у нас есть циклы: например, @​tangro пригласил @​Milla, а @​Milla пригласила @​tangro; петли: например, @​aavezel пригласил сам себя; вершины, в которую входит несколько дуг: пользователя @​shara приглашали 6 раз (@​Deeman, @​myagi, @​homm, @​Azya, @​veveve, @​shifttstas). Хотя всё это скорее исключения, в целом граф похож на лес.

В нашем графе имеется 61021 хабраклан. Распределение размеров следующее:

Размер компоненты Число компонент
больше 1001 1
101–1000 6
11–100 436
2–10 3110
1 57468

Давайте посмотрим на самые большие компоненты.

Размер «Корневые» вершины
1 1027 @​davekeinz (выслал 412 инвайта — больше, чем кто-либо ещё на хабре, также в этой компоненте @​Mithgol, который выслал 78 инвайтов)
2 584 @​mudhoney (выслал 242 инвайта) @​valemak
3 316 @​XaocCPS (выслал 65 ивайтов)
4 272 @​Alaunquirie (пригласил @​BarsMonster, который пригласил 73 пользователей) @​kip
5 189 @​Deeman @​homm @​DorBer @​myagi @​Azya @​maovrn @​fil9 @​yoihj
6 106 @​rossomachin
7 104 @​Garyan
8 97 @​kukutz (Яндекс.Компонента)
9 90 @​eosunknown
10 85 @​cigulev @​tyr
11 80 @​mdevils
12 80 @​nuzgul
13 77 @​ni404 @​tronix286 @​Rembish
14 77 @​Tigger
15 76 @​gaidar
16 70 @​Auren
17 69 @​saltommeister
18 68 @​Kalan
19 68 @​alisadenisova
20 67 @​horsev

Ниже приведены картинки этих 20 графов. Зелёные кружки — пользователи с положительной кармой, красные — с отрицательной, синие — с нулевой, серые — read-only или деактивированые пользователи. Площадь кружка пропорциональна модулю кармы (если это число больше 1). Все картинки являются ссылками на большую версию.
da4f8a8d21ba4860b2f9c2e88a478a4b.png36ce836398d440868a7b05379289efa1.png96e025cc83bd475c9632c8b9413ddebc.pngccf6fe47c3ad4d4fbde8940aa0dcb637.png886382066512416688010861183483f8.png3869becb8a7b457692329d5b9538b32d.pngdd29285bd40c4a2a99121180d5a2e919.png8d925bb3a3ee4243802acaa7fe5704ea.png265762dbccd1403b94cc223fd2bb9b56.png13f5cf6279464f068994085f9502addf.pngf711cb19c09f46979c040919fc28bfcb.pngaee30b3481c54c8aa8d0589f474d4c91.png461efa81e1034657bb264f4a20f0bb0d.pngc539d31d27954c5b939a5d48e8f51170.pngd2609c7262ab4988972f51cd2ffa4d55.png2f2a3bfd8302466ea210d72d45a5d0f1.png96e5b9c99c714170839c98b2bc8523b4.png181b2cf3c8d845eaa99c5586e6077e37.pnged229ce868174b1092f927521593794b.pngc604a471a516459cba5a68dfc43f2bf2.png
Посмотрим также на «высоты» хабракланов. Если выбросить пренебрежимое число графов с циклами, то dag_longest_path_length (G) даёт следующий результат.

Длина самой длинной цепи Число компонент
9 1
7 2
6 11
5 39
4 125
3 479
2 2888
1 57468

Самая длинная цепь такова: @​Garyan пригласил @​Andrey_Rogovsky, который пригласил @​DmitryGushin, который пригласил @​Uncle_Sam, который заинвайтил @​RootHell, который прислал инвайт @​alexey_qwe, который пригласил @​Doom2, который позвал на хабр @​Odnoklassniki_ru и который, наконец, пригласил @​DarkDefender.

Анализ совпадает с ожиданием, что в большинство хабракланов небольшие и с небольшой «высотой».

Теперь вспомним, что у пользователей есть карма. Насложное суммирование даёт, что всего на хабре как минимум 450323.4 единиц положительной кармы. (Кстати, у 10579 хабрапользователей карма больше или равна 10, поэтому теоретически эта статья может набрать 10578 плюсов.)

Посмотрим какие хабракланы обладают самым наибольшими запасами кармы.

Суммарная карма «Корневые» вершины
1 6184.4 @​mudhoney @​valemak
2 5333.7 @​davekeinz
3 4720.8 @​XaocCPS
4 3587.1 @​Alaunquirie @​kip (@​BarsMonster здесь)
5 2464.5 @​Deeman @​homm @​DorBer @​myagi @​Azya @​maovrn @​fil9 @​yoihj
6 2390.1 @​horsev (@​PapaBubaDiop и @​Milfgard здесь)
7 1984.9 @​cigulev @​tyr (@​Zelenyikot здесь)
8 1780.2 @​ni404 @​tronix286 @​Rembish
9 1606.1 @​eosunknown
10 1526.9 Здесь нет корня, и всё начинается с цикла @​tangro — @​Milla
11 1319.3 @​kit
12 1304.1 @​Ocelot
13 1299.5, @​Auren
14 1104.5 @​Kalan
15 1009.1 @​rossomachin
16 985.5 @​easy_john
17 932.3 @​Assuri
18 871.7 @​sourcerer
19 845.2 @​LukaSafonov
20 838.6 @​mdevils

Ниже приведены картинки графов, которые не встретились ранее.
008939684b1e48179ca2edab223fd48f.pngf70dd0fe0d6a492a908c3ed2d5afdb16.png2212c74ff790497dbdf0d927d4c25f16.pngfef9b01bf7df48a5a7d21d0854bdc3a7.png7a819fd0fa2e4cd181dbe59efc3035e3.pngdf8818b845a940cb93cea72f95d264f8.png0bb2790df6614573ba15f8c5513357ec.png

Также у некоторых пользователей на странице в поле «Откуда» указана страна. Топ стран по пользователям можно найти на самом хабре, мне же было интересно посмотреть на инвайты, в которых приглашающий и приглашаемый находятся в разных странах. Такие инвайты характеризуют «географическую» связность хабрасообщества.

Сначала я хотел построить т. н. chord diagram, но не нашёл простого способа сделать это на питоне, поэтому привожу левых верхний угол соответсвующей матрицы. (Если кто-то подскажет как всё-таки построить диаграмму буду признателен.) Чем синее клетка на картинке, тем больше логарифм числа инвайтов из страны 1 в страну 2.
2d24c63bd06a45978736e902a891ed68.png
Заметным является связность России, Украины, Беларусии, США и Германии.

Ещё одним кусочком информации, который не связан с инвайтами, но легко извлекается из страниц пользователей — это дата регистрации и дата последнего появления. Следующая таблица показывает сколько пользователей зарегистрировалось в данный год и сколько из них появлялось на хабре с 1 января 2015 года (иначе считаем, что пользователь перестал быть хабраактивным).

2006 3091 909
2007 19433 5511
2008 22031 6348
2009 6032 3094
2010 6826 3345
2011 9341 6355
2012 5841 4160
2013 4029 2819
2014 2684 2100
2015 1473 1473
Всего 80781 36114

То же самое в виде диаграммы.
0f10d51e338e4cc3b3e5b9907b31fa14.png

Видим, что половина пользователей зарегистрировалась в 2007 и 2008 годах, а также много старожилов являются активными.

На этом всё. Таблица с исходными данными и скрипт для рисования графов доступны на гитхабе. Архив с сырыми данными доступен по запросу.

© Habrahabr.ru