Анализ пользователей DTF по открытым данным
На DTF более 250000 зарегистрированных пользователей. Из них 272 дерьмака, 32 пользователя с галочками, а у 6491 отрицательный рейтинг. А еще у одного из пользователей 36715 статей в закладках — удачи ему разобрать все это. Этот пост — моя версия шитпостинга с кучей бесполезных цифр, рейтингов и графиков.
Откуда данные?
DTF сделан на платформе «Основа» издательского дома Комитет. У всех сайтов этой платформы есть API — Application Programming Interface или программный интерфейс приложения (википедия). API у «основы» открытый, есть документация, кто угодно может им воспользоваться. Например, чтобы написать бота. С помощью этого интерфейса можно получать данные, которые мы обычно видим на сайте через браузер.
Например, это обычная ссылка, которую можно открыть в браузере и увидеть мой профиль в виде обычной HTML-страницы (не забудьте нажать «Подписаться»):
А можно использовать HTTP-запрос к API:
Скорее всего, вы увидите что-то типа этого (я сократил результат для экономии места):
Здесь уже нет HTML-кода, только данные в текстовом формате JSON. Преимущество API над обычными ссылками в браузере в том, что они дают данные в виде, который удобно обрабатывать скриптами. Этим я и воспользовался.
А еще я воспользовался тем, что «основа» использует последовательные идентификаторы (далее просто ID) для пользователей, статей, подсайтов и комментариев. Я недавно писал об этом в блоге.
Я написал скрипт на Python, который просто перебирает ID, начиная с 1, и запрашивает пользователя с таким ID. Если пользователь найден, то скрипт сохраняет его в базу данных. Один такой скрипт работает с пользователями, еще один — со статьями.
Есть только одна проблема — у API есть ограничения на количество запросов в секунду с одного хоста. Я не хотел плодить сущности и распараллеливать запросы с разных хостов, поэтому просто запустил скрипт на своем компьютере. Из-за этого сбор данных занял некоторое время.
У меня ушло трое полных суток на сбор пользователей и еще пара суток на сбор статей и постов. Из-за этого копия базы данных получилась немного размазанной по времени. Т.е. я записал одного пользователя себе в базу, и пока я записывал остальных, этот пользователь мог уже написать новые статьи и комментарии. Учитывая, что у меня данные за все 4 года существования DTF, можно пренебречь погрешностью в три-четыре дня и сказать, что у меня копия базы данных DTF по состоянию на начало июня 2020 (только открытые данные).
Если кому надо, скрипты можно найти тут:
Пользователи
251488
Приток новых пользователей
Количество пользователей стабильно растет, прирост экспоненциальный.
На этом графике видно резкие скачки. Построим график количества новых пользователей в неделю.
Теперь аномалии в росте пользователей видно еще лучше. В конце 2016 года «Комитет» купил неофициальную группу пользователей Steam «ВКонтакте» и преобразовал её в группу DTF.
Я думал, что пик в конце 2016 года связан именно с этим, но этот пост был 29 ноября, а пик — в середине декабря. Да и если б народ перетекал из группы ВК на DTF, пик был бы более размазанным по времени — на графике видно, что и без пика прирост пользователей в то время был больше.
Пик в сентябре 2018 года — это очевидная атака ботов: примерно 3500 новых пользователей со сгенерированными именами из 8 случайных символов. Скорее всего, просто DDoS-атака.
Самый большой пик был в октябре 2019 года. Ничего очевидно подозрительного я там не вижу, имена адекватные, но там появилось несколько тысяч новых пользователей, у которых 0 статей, 0 комментариев и 0 постов в избранном. Быть на DTF только для чтения и ничего не писать — это нормально, но я считаю, что все эти пики какие-то подозрительные. Вполне вероятно, что все из них — это DDoS-атаки.
UPD1:
> "Самый большой пик был в октябре 2019 года."
Это выход спецпроекта, где для участия в розыгрыше нужна была авторизация — https://dtf.ru/business/80258.
UPD2:
В сентябре 2018-го всплеск связан, скорее всего, вот с этой статьей.
По какой-то причине тогда на этот лонг накрутили огромное количество лайков — счётчик не успевал обновляться, и в итоге цифра постоянно была размытой :) Все накрученные лайки тогда убрали (ну, или почти все), но лютое количество просмотров осталось. Кто это был и зачем, мы до сих пор не знаем.
UPD: Там можно комменты почитать, где все недоумевают)
Дерьмак
272
Верифицированные пользователи (с галочкой)
32
По какой логике ставится галочка, я не знаю. У редакции нет галочек. У Сергея Бабаева (один из основателей нового DTF) нет галочки, а у Леонида Сиротина (второй основатель нового DTF) — есть. Часть верифицированных пользователей довольно известны и иногда пишут на DTF (Альфина, Сергей Галёнкин, Алекс Ничипорчик), а часть — просто оставили пару комментариев или вообще ни одного.
У Рейнджера здесь 0 постов и 0 комментариев, потому что он начал работать только 18 июня.
Рейтинг
Большинство людей в топ 10 по рейтингу — это редакция. Елистратов значительно всех опережает. Если брать топ 30, то там уже много пользователей.
Эффективность рейтинга
Если взять рейтинг и поделить его на количество статей и комментариев, то получим средний рейтинг на пост/комментарий или эффективность пользователя по рейтингу. Почти все пользователи в топ 30 по эффективности — это те, кто один раз удачно пошутил или скинул мемас, а потом продолжил молчать.
Есть несколько исключений — люди, которые стабильно постили популярные мемы, гифки и видео, например Øh God и Никита Князев.
И отдельный респект пользователю Mark, который попал в эту таблицу благодаря отличному контенту про кино.
Отрицательный рейтинг
6491
Владислав Спивак навсегда запечатлен на аллее славы консольных войн.
Подписчики
Топ 30 по количеству подписчиков. По какой-то причине, я в него не попал. Я считаю, что вы все должны подписаться и сделать репост. Мне нужны подписчики!
Статьи/посты
Топ по количеству статей — это редакция, Андрей Апанасик и Mankustrap.
Комментарии
На первом месте по комментариям — бот.
Закладки
Сейчас нельзя посмотреть количество закладок в профиле на сайте, но зато эту информацию можно получить через API. Я надеюсь, эти люди знают, что делают. Удачи им все это разгрести.
Ошибки API
Иногда при запросе пользователя по определенному ID я получал ошибку. Из ошибок тоже можно получить информацию — там есть интересные аномалии.
Обычно, если пользователь не найден (либо удален, либо по еще какой-то причине), то API возвращает код 404 — ресурс не найден. Но есть один подозрительный пользователь с ID 61870. Если открыть его профиль, то имя пользователя будет отмечено как deleted, а код ошибки будет 500 — внутренняя ошибка на сервере.
На странице написано «На сайте ведутся технические работы. Пожалуйста, обновите страницу через несколько минут», но не верьте им. 500 — это серверная ошибка, и в этом случае дело явно не в технических работах. Но и ничего серьезного, скорее всего. Может, просто забыли проверить на null.
Все остальные ошибки — это код 404. Построим график количества ошибок на 1000 пользователей.
Можно открыть какого-нибудь из таких пользователей и увидеть, что это на самом деле.
Ссылка, которая выглядит как пользователь, перенаправляет сюда:
Получается, 27 мая 2018 на DTF была миграция базы данных и/или рефакторинг, чтобы и пользователи, и подсайты были в одном и том же пространстве идентификаторов. Это логично, так как можно писать от имени подсайта, будто это обычный пользователь, а с учетом блогов, с технической точки зрения пользователь мало чем отличается от подсайта.
Можно запросить список всех подсайтов через API и убедиться, что да, эти ID принадлежат этим подсайтам. Ну и многие другие подсайты, которые были добавлены позже, тоже находятся в этом же пространстве идентификаторов, и для них я тоже получил ошибку 404.
На графике есть еще один большой пик в районе ID 153000.
Эти ошибки тоже идут одна за другой. Я бы предположил, что это была какая-то атака, но мы уже видели из графиков ранее, что DTF не удаляет очевидные аккаунты ботов. Так что непонятно, что случилось здесь. Возможно, Ширяев тестировал что-то на продакшене, а потом пришлось удалять сразу 25 аккаунтов. Как знать. Пусть это останется на совести DTF и Ширяева.
To be continued…
На сегодня хватит. У меня еще есть база данных статей, так что в следующем посте на эту тему я займусь их разбором. Посмотрим, что интересного можно там найти.
Я не специалист по анализу данных, поэтому, возможно, местами мне не хватило фантазии, чтобы извлечь что-то действительно интересное из этих данных. И я не считал корреляцию между параметрами, потому что мне кажется, что там ничего интересного. Возможно, я потом попробую ее посчитать, обнаружу что-то интересное и выпущу DLC.
Если у вас есть идеи, пишите их в комментариях — база пока никуда не делась, можно продолжать копать.