Хабрахабр

Хабрастатистика: анализируем комментарии читателей

Привет Хабр.

Также хотелось проверить одну гипотезу, о которой скажу ниже.
В предыдущей части была проанализирована популярность различных разделов сайта, и параллельно возник вопрос — какие данные можно извлечь из комментариев к статьям.

Продолжение под катом.
Данные получились довольно интересные, также удалось составить небольшой «мини-рейтинг» комментаторов.

Сбор данных

Для анализа мы будем использовать данные за этот, 2019 год, тем более что список статей в виде csv у меня уже был получен. Осталось извлечь из каждой статьи комментарии, к счастью для нас, они хранятся там же, и никаких дополнительных запросов делать не нужно.

Для выделения комментариев из статьи достаточно следующего кода:

r = requests.get("https://habr.com/ru/post/467453/")
data_html = r.text
comments = data_html.split('<div class="comment" id=') comments_list = []
for comment in comments: body = Str(comment).find_between('<div class="comment__message', '<div class="comment__footer"').find_between('>', '</div>')# .replace('\n', '-') if len(body) < 4: continue body = body.translate(str.maketrans(dict.fromkeys("\t\n\r\v\f"))) body = body.replace('"', "'").replace(',', " ").replace('<br>', ' ').replace('<p>', '').replace('</p>', '').replace(' ', ' ') user = Str(comment).find_between('data-user-login', '>').find_between('"', '"') date_str = Str(comment).find_between('<time class="comment__date-time comment__date-time_published', 'time>').find_between('>', '<') vote = Str(comment).find_between('<div class="voting-wjt', '</div>').find_between('<span', 'span>').find_between('>', '<') date = dateparser.parse(date_str) csv_data = ",{},{},{}".format(user, date, vote, body) comments_list.append(csv_data)

Это позволяет нам получить список комментариев в примерно таком виде (ники убраны из соображений приватности):

xxxxxxx,2019-02-06 11:50:00,0,А можно пример как именно?
xxxxxxx-02-24 16:15:00,+1,Побольше читайте независимые официальные источники чтобы таких вопросов не было.
xxxxxxx,2019-02-23 20:15:00,–5,А не важно главное в итоге в плюсе оказаться

Посмотрим, что из этого мы можем получить. Как можно видеть, для каждого комментария мы можем получить имя юзера, дату, рейтинг, ну и собственно текст.

Для примера, можно посмотреть на youtube — даже самый идеальный ролик, даже ролик не несущий никакой субъективной информации, чисто справочный или выпуск новостей, все равно набирает некоторое определенное количество минусов. Кстати, изначально, идея сбора рейтинга была немного другая — посмотреть, какие оценки ставят пользователи. Может человеку уже надо не на Хабре сидеть, а депрессию лечить… Но как оказалось, проверить это здесь я не могу, т.к. Гипотеза была в том, что есть юзеры, которым чисто клинически вообще все не нравится, может серотонин в мозгу не вырабатывается или еще что-то. Ну что есть, то есть, будем работать с имеющимися данными. список поставивших оценки, в комментарии или статье не сохраняется. Что в принципе, тоже интересно. В итоге получился «обратный» рейтинг — видно, какие оценки _получают_ пользователи.

Обработка

Для начала, традиционный disclaimer. Данный рейтинг, как и все предыдущие, является неофициальным. Я не гарантирую, что нигде не ошибся. Для тех, кого интересуют технические подробности, более подробный код приведен в предыдущей части.

Для анализа были взяты комментарии за этот, 2019 год (который еще не кончился). Итак, приступим. Мощно, внушает. На момент написания текста пользователями было написано 448533 комментария, размер csv-файла составляет 288МБайт.

Время написания

Сгруппируем комментарии по часам, разделив отдельно будние и выходные дни.

Если просто смотреть «как есть», то получается что большая часть комментариев написана в рабочее время с 10 до 18 😉 С другой стороны, тут не учитываются часовые пояса, так что вопрос пока открытый. Тут нас интересуют не абсолютные значения, а относительные.

Посмотрим распределение комментариев в течение года:

И все-таки она вертится четко виден всплеск в будние дни — недельная периодичность явно прослеживается, так что с достаточно большой уверенностью можно сказать, что народ читает и комментирует Хабр с работы (но это не точно).

Кстати, была идея проверить гипотезу, различается ли число полученных минусов или плюсов от дня или времени суток, но зависимости найти не удалось — время проставления оценки не сохраняется, а прямой связи с временем комментария тут нет.

Пользователи

Разумеется, точного количества пользователей на сайте я не знаю. Но тех, кто оставил хотя бы один комментарий за этот год, оказалось примерно 25000 человек.

График количества сообщений, оставленных пользователями, выглядит довольно интересно:

5% пользователей оставляют 60% сообщений. Я в начале не поверил сам, но вроде ошибки нет. Большинство же просто читает сайт, оставляя совсем редко комментарии, или не оставляют их вообще (такие естественно, в мой список не попали). 10% — 74% всех сообщений (которых напомню, за этот год, 450тыс).

Рейтинги

Переходим к последней, и самой веселой части статистики — рейтингам. Из соображений приватности я не буду приводить полные ники пользователей, кто захочет, думаю, себя узнает.

По количеству комментариев за этот год, топ 5 занимают VoXXXX (3377 комментариев), 0xdXXXXX (3286 комментария), strXXXX (3043 комментария), AmXXXX (2897 комментариев) и khXXXX (2748 комментариев).

По количеству полученных плюсов, топ 5 занимают amXXXX (1395 комментариев, рейтинги +3231/-309), tvXXXX (1544 комментария, рейтинги +3231/-97), WhuXXXX (921 комментарий, рейтинги +2288/-13), MTXXXX (1328 комментариев, +1383/-7) и amaXXXX (736 комментариев, рейтинг +1340/-16).

В качестве исключения, привожу их ники полностью, думаю, они это заслужили. По абсолютному положительному рейтингу (ни одного негативно оцененного комментария) верхушку топа занимают Milfgard и Boomburum.

Топ по количеству набранных минусов за этот год занимают siXX (473 плюса, 699 минусов), khXX (1915 плюсов, 573 минуса) и nicXXXXX (456 плюса, 487 минуса). С минусами тоже интересно. А вот по абсолютному минусу в «антитоп» попадают vladXXXX (55 комментариев, 84 минуса, 0 плюсов), ekoXXXX (77 комментариев, 92 минуса, 1 плюс) и iMXXXX (225 комментариев, 205 минусов, 12 плюсов). Но как можно видеть, и положительных комментариев у этих пользователей достаточно.

Заключение

Удалось посчитать не все задуманное, но надеюсь, было интересно.

Тут еще есть далеко куда копать, от построения «облака слов» до анализа текста. Как можно видеть, даже датасет с таким небольшим количеством полей может дать интересные данные для анализа. Если появятся какие-то интересные результаты, они будут опубликованы.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть