- PVSM.RU - https://www.pvsm.ru -
Cегодня мы вместе с анализом графов, data mining, subgroup discovery и всеми веселыми штуками взглянем на Хабр. Весь код и данные [1] прилагаются — каждый может взглянуть на них самостоятельно, легко повторить рассчеты из статьи и найти что-то интересное самостоятельно.
[2]
(это не просто картинка для привлечения внимания, а — граф связей ~45000 пользователей Хабра по тому, кто на кого подписан; размер вершины пропорционален числу подписчиков; все картинки кликабельны; подробности далее)
Обсуждаемые проблемы возникли, конечно же, далеко не вчера, но некоторые их аспекты кажутся мне достаточно новыми и поэтому достойными дискуссии, основанной на непредвзятых и репрезентативных данных. Например в комментариях этой [3] статьи, увидел интересное утверждение:
Тут проблема в том, что на всем хабре за сегодня не насчитать больше 50-80 человек, которые вообще могут голосовать. У 90% пользователей карма просто ниже 5. Как итог оценивают комментарии и статьи только избранные. Это как жюри выходит такое.
И решил, что стоить его сформулировать в виде гипотезы и проверить:
Q1: Правда ли, что Хабр превратился в жюри-based сообщество, где два с половиной человека голосуют за статьи?
Вот в этой [4] статье к нам вернулись "железные" Хабы и стало интересно, а как вообще представлены разные сообщества внутри Хабра? Формулируем в виде гипотезы:
Q2: Как сегментировано сообщество, или проще говоря сколько у нас здесь групп по интересам и соотвествуют ли они имеющимся хабам?
Последнее, но не менее интересное наблюдение, что активность на Хабре упала (по данным Хабра-пульса и моим субъективным наблюдениям), что даже решили [5] ввести аккаунты "read & comment". Поэтому решил оценить активность сообщества и продумать, как информация о структуре сообщества может нам помочь:
Q3: Насколько активно сообщество и как нам может помочь структура внутренних групп?
За подробностями добро пожаловать под кат.
Структура статьи
Как известно, на Хабра-API пишут новую версию Duke Nukem Forever, поэтому приходится собирать все интересные данные самостоятельно (ну ок, на самом деле он не предоставляет всех интересных данных). Какие данные нам нужно собрать?
Так как у Хабра стоит лимит на число подключений лучше всего использовать распределенную архитектуру парса, например разбить все статьи на N групп и || в 4 потока на каждой машине парсить. Все данные собираются в github HabraData [1] (если вы пишите магистерскую или еще какой диплом по анализу данных, особенно если вдруг на русском, то там можно найти много всего интересного).
Общая схема сбора:
[11]
Собирались все пользователи, кто за последние ~2 года оставил комментрий иили написал статью. Потом фильтровались те, кого забанили, ушел в минус, etc. Параллельно собирались данные по статьям, а именно к каким хабам они относятся. Данные использованные в каждом эксперименте поясняются по ходу рассказа.
Неотфильтрованные список пользователей ~ 25к доступен здесь [12], а здесь [13] отфильтровнный датасет с ключевыми показателями пользователей в виде:
user,karma,rating,publications,comments,favourites,followers
....
var_bin,3.0,0.0,1,18,6,1
varagian,187.0,26.0,20,151,86,44
varanio,55.0,0.0,3,51,24,6
varerysan,16.0,0.0,9,26,0,3
....
Распределение кармы ака Карма-неравенство
Первый интересный инсайт бо́льшая часть ~61% сконцентрирована у 10% пользователей, на второй десяток (топ 20% за вычетом, тех кто в топ 10%) приходится уже меньше 20%.
[14]
Отвечаем на комментарий в начале статьи: порядка 50% активных пользователей имеют карму 5 и более, то есть порядка 7500 человек.
Само распределение показывает, что действительно существенная группа сконцентрирована в районе нуля, что будет понятным из дальнейшего анализа.
(У графиков ниже почему-то неправильно отобразилась метка на оси y, она должна читаться как «доля».)
Следующий интересный график — распределение публикаций, из него мы видим, что бо́льшую часть статей написала небольшая часть пользователей (также здесь мог сказаться и факт разделения Хабра, хотя с этого момента прошло достаточно времени.)
[16]
Не менее интересно проверить сохранится ли такое же распределение и для комментариев? На самом деле оно является более сбалансированным, но общий паттерн сохраняется и отражает ситуацию с кармой.
[17]
Мы видим, что структура сохраняется и для других показателей:
Положительная корреляция присутствует:
Интересный момент, что рейтинг больше не зависит от кармы
Так же на людей пишущих много комментариев подписываются не чаще, чем на любых других
Во-первых, данные отвергают гипотезу о том, что подавляющее число (активных) пользователей не может голосовать. Во-вторых, показывает общую корреляцию между написанными статьями, кармой и числом подписчиков, что в целом можно охарактеризовать положительно. Однако существенный дисбаланс заметен невооруженным взглядом и нам предстоит проанализировать его влияние при ответе на вопрос Q3 о падении уровня активности.
Здесь мы попытаемся понять, какие группы существуют внутри Хабрахабра. В основе анализа лежат два следующих предположения:
Как мы видим из предыдущего вопроса: у нас будет некоторая группа людей хабов (в смысле hub, т.е. людей с большим числом подписчиков) и эти хабы должны естественно группироваться по общим подписчикам.
Построим граф следующим образом, от пользователя v1 есть дуга к v2, если v1 подписан на v2. Размер вершины пользователя в графе пропорционален числу входящих дуг.
Здесь [24] доступен дасатет с подписчиками в виде:
user:follower1,folllower2,....
Здесь [25] доступен исходный граф (формат Gephi) на основе датасета выше, а здесь [26] версия с размеченными и сгруппированными сообществами (также Gephi). Всего в графе (датасете) 45 тысяч пользователей и 110 тысяч дуг "подписки".
Различные сообщества подсвечены на основе метода Louvain Сommunity Detection [27]. Здесь же приводится граф, вершины которого подсвечены в соответствии с их сообществом, так же обозначены дуги подписки.
Для удобства чтения удалим дуги и сгруппируем сообщества, подсветим всех пользователей с достаточным числом подписчиков (что как мы знаем из Q1 скоррелировано с числом статей). Теперь можно разобраться с тем, какие же темы стоят за каждой группой.
Попробовал проанализировать группы и вывести возможные метки сообществ. Было бы интересно провести более глубокий анализ сообществ и услышать мнения самих авторов из разных групп.
Из анализа графа следует, что железо является самой большой группой среди подписчиков ~10% от общего числа. Именно поэтому убранные хабы о железе вызвали столь негативную реакцию, так как большая группа активных писателей и читателей (кто буквально подписан на обновления от "железячных" авторов) вдруг потеряла привычную площадку. Более того, как мы увидим, далее железные хабы переплетены с хабами программирования, что во многом создает единое окружение и для авторов и для читателей. (Надеюсь, что не открыл Америку с анализом сообществ и хабов тем, кто их иногда передвигает.)
Другой интересный метод измерения сегментации основан на следующем наблюдении, если статьи часто помещают в два хаба А и Б, значит А и Б объединены какой-то общей тематикой или вообще говоря схожи. Мы можем взять множество статей, которое поместили в хаб А и множество, которое поместили в Б и рассчитать степень их схожести с помощью коэффициента Жаккара
Таким образом мы можем получить граф, вершинами которого являются Хабы, а дуги — это степень схожести по Жаккару. Далее применим тот же метод, что и использовался ранее (Louvain Сommunity Detection).
Здесь [31] доступны исходные данные, а здесь [32] граф с сообществами
Граф вместе с дугами; вершины соответствует цветам сообществ, также мы видим отдельно стоящую группу "переехавших" хабов. Размер вершины — это общий вес входящих в неё ребер (граф ненаправленный)
[33]
(Интесивность ребра — вес)
Более читаемая версия без рёбер. На ней мы видим порядка 10ти крупных сообществ Хабов, причем например железячный Хаб controllers (Программирование микроконтроллеров), плотно сидит в центре "группы программировния"
Из графа выше видно, что если мы двинем железные хабы, то заденем и связанные хабы программирования, заодно зацепив самую большую группу активных читателей. Также из обоих графов выше мы видим порядка 15 крупных сообществ читателей по отношению "подписан" и большую кучу различных микро-сообществ, а также порядка 10 больших групп тесно связанных хабов.
Общие статистика читателей и писателей
* Active -- кто оставил хотя бы один комментарий или написал одну статью за последние два года ~25к
* С неотрицательной кармойрейтингом и не переведен в режим read only ~ 14к
* Общее количество подписчиков у активных пользователей 44k
* Общее число подписок: 104k
* Пользователи с хотя бы одним подписчиком: 11.5k
* Диаметр графа: 4.7
* Плотность ~0
* Количество микросообществ: 528
То есть мы видим, что действительно существенная часть аудитории не участвует в обсуждении по каким-то причинам.
По различным данным (сравните июль 2014 и сентябрь 2015 на графиках ниже) просели не только просмотры и голоса, но и статьи перестали находить отклик. Как будто бы дискуссия и обсуждение пропали. Возможно это связано с а) дисбалансом, как мы видим из Q1, б) с нарушением существовавшей экосистемы, как мы видим из Q2.
Возродить дискуссию, запустив новый тип аккаунтов, задумка безусловно интересная, но возможно стоит обратить внимание на структуру разделения сайтов с учетом внутренних групп и специфики ресурса. Чтобы не быть голословным, обратите внимание на формат статей Мосигры, они безусловно вписываются в формат Хабра, однако практически все хабы, связанные с их статьями, были перемещены.
Автор: varagian
Источник [35]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/111197
Ссылки в тексте:
[1] код и данные: https://github.com/SergeyParamonov/HabraData
[2] Image: https://habrastorage.org/files/2f2/561/574/2f256157458d4da58f33c72ec91cd08b.png
[3] этой: https://habrahabr.ru/post/274219/
[4] этой: https://habrahabr.ru/company/tm/blog/273921
[5] решили: https://geektimes.ru/company/tm/blog/269922/
[6] Методология сбора данных: https://habrahabr.ru/post/276383/#methodology
[7] Распределения кармы, постов, комментариев...: https://habrahabr.ru/post/276383/#Q1
[8] Сообщества Хабра: https://habrahabr.ru/post/276383/#communities
[9] Связность Хабов: https://habrahabr.ru/post/276383/#hubsconnectivity
[10] Активность и выводы: https://habrahabr.ru/post/276383/#activity
[11] Image: https://habrastorage.org/files/c11/663/dbb/c11663dbb3954674a8665ce784827246.png
[12] здесь: https://github.com/SergeyParamonov/HabraData/blob/master/users
[13] здесь: https://github.com/SergeyParamonov/HabraData/blob/master/user_dataset.csv
[14] Image: https://habrastorage.org/files/f6d/c98/d86/f6dc98d869b348418a2a65dbf6558c05.png
[15] Image: https://habrastorage.org/files/844/4c0/a7c/8444c0a7c66f43e292a11814b51b7e9b.png
[16] Image: https://habrastorage.org/files/b20/3fb/5b7/b203fb5b75c34bfabee8e215538c6e1c.png
[17] Image: https://habrastorage.org/files/dcb/f68/98e/dcbf6898e1684cd1bf7d1683822a3adc.png
[18] Image: https://habrastorage.org/files/3cb/877/963/3cb8779636cf4d38971fed9c17dccf55.png
[19] Image: https://habrastorage.org/files/89b/c66/f3e/89bc66f3e9e04532ad691dcbf62604a3.png
[20] Image: https://habrastorage.org/files/338/8a9/f0f/3388a9f0f0c442749739c58a96a58561.png
[21] Image: https://habrastorage.org/files/bf2/4e5/066/bf24e50666e94ff3a9e16efe08c7617e.png
[22] Image: https://habrastorage.org/files/b79/f21/f90/b79f21f9048245a4a1aa603fb0553f5c.png
[23] Image: https://habrastorage.org/files/605/ea9/a88/605ea9a889d44379b5c4206a262450b2.png
[24] Здесь: https://github.com/SergeyParamonov/HabraData/blob/master/follower_dataset
[25] Здесь: https://github.com/SergeyParamonov/HabraData/blob/master/habr_followers.gexf
[26] здесь: https://github.com/SergeyParamonov/HabraData/blob/master/communities.gephi
[27] Louvain Сommunity Detection: https://en.wikipedia.org/wiki/Louvain_Modularity
[28] Image: https://habrastorage.org/files/3d6/d1f/331/3d6d1f331e4d4769bb5f7b1a35d74d33.png
[29] Image: https://habrastorage.org/files/a2c/a13/7b2/a2ca137b2cee40818d43fc03b782ad29.png
[30] Image: https://habrastorage.org/files/22f/f2d/ac6/22ff2dac6a4649879e4d45931a885014.png
[31] Здесь: https://github.com/SergeyParamonov/HabraData/blob/master/hubs_posts_dataset
[32] здесь: https://github.com/SergeyParamonov/HabraData/blob/master/hubs_graph_based_on_papers.gephi
[33] Image: https://habrastorage.org/files/3bd/55f/f8e/3bd55ff8ebce4abd9497d2ebe41513fb.png
[34] Image: https://habrastorage.org/files/322/0b5/32e/3220b532eb754973bd0156808b6153d9.png
[35] Источник: https://habrahabr.ru/post/276383/
Нажмите здесь для печати.