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

Привіт Хабр. У попередньої частини було проаналізовано популярність різних розділів сайту, і паралельно постало питання — які дані можна отримати з коментарів до статей. Також хотілося перевірити одну гіпотезу, про яку скажу нижче.
Хабрастатистика: аналізуємо коментарі читачів

Дані вийшли досить цікаві, також вдалося скласти невеликий міні-рейтинг коментаторів. Продовження під катом.

Збір даних

Для аналізу ми будемо використовувати дані за цей 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("tnrvf")))
    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) та amaXXXX (7 коментарів, рейтинг +736/-1340).

За абсолютному позитивному рейтингу (жодного негативно оціненого коментаря) верхівку топа займають Milfgard и Boomburum. Як виняток, наводжу їх ніки повністю, думаю, вони це заслужили.

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

Висновок

Вдалося порахувати не все задумане, але сподіваюсь було цікаво.

Як можна бачити, навіть датасет із такою невеликою кількістю полів може дати цікаві дані для аналізу. Тут ще далеко куди копати, від побудови «хмари слів» до аналізу тексту. Якщо з'являться якісь цікаві результати, їх буде опубліковано.

Джерело: habr.com

Додати коментар або відгук