Habrastatistics:分析读者评论

你好哈布尔。 在 上一节 分析了网站各个部分的受欢迎程度,同时出现了问题 - 可以从文章评论中提取哪些数据。 我还想检验一个假设,我将在下面讨论。
Habrastatistics:分析读者评论

事实证明,这些数据非常有趣;我们还设法对评论员创建了一个小型“迷你评分”。 继续下切。

数据收集

为了进行分析,我们将使用今年 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——即使是最理想的视频,即使是不带有任何主观信息、纯粹用于参考或新闻发布的视频,仍然会有一定的缺点。 假设是,纯粹从临床角度来看,有些用户根本不喜欢一切,也许血清素不是在大脑或其他东西中产生的。 也许一个人不再需要坐在哈布雷身上,而是需要治疗抑郁症……但事实证明,我无法在这里检查这一点,因为…… 评分者名单不会保存在评论或文章中。 嗯,也就是说,我们将使用可用的数据。 结果是“反向”评级 - 您可以看到用户_收到_的评级。 从原则上讲,这也很有趣。

处理

首先是传统的免责声明。 与之前的所有评级一样,此评级是非官方的。 我不保证我没有在任何地方犯错误。 对于对技术细节感兴趣的人,提供了更详细的代码 在前一部分.

那么让我们开始吧。 我们对今年 2019 年(尚未结束)的评论进行了分析。 在撰写本文时,用户写道 448533комментария,csv文件的大小为 288MB。 强大,令人印象深刻。

写作时间

让我们按小时对评论进行分组,分别划分工作日和周末。

Habrastatistics:分析读者评论

这里我们对绝对值不感兴趣,而是对相对值感兴趣。 如果你只是“按其本来面目”来看,那么事实证明о大多数评论是在 10 点到 18 点的工作时间写的 😉 另一方面,这里没有考虑时区,所以问题仍然悬而未决。

我们来看看全年的评论分布:

Habrastatistics:分析读者评论

然而它是旋转的;工作日的激增是清晰可见的——每周的周期性是清晰可见的,所以我们可以相当有信心地说,人们正在工作中阅读和评论哈布尔(但这并不确定)。

顺便说一句,有一个想法来测试假设收到的减号或加号的数量是否与一天或一天​​中的时间不同,但不可能找到关系 - 给出评级的时间不会被保存,并且与评论时间没有直接关系。

用户

当然,我不知道该网站的确切用户数量。 但今年至少留下一条评论的人大约有 25000人.

用户留下的消息数量的图表看起来很有趣:

Habrastatistics:分析读者评论

起初我自己也不相信,但似乎没有错。 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)。

绝对正面评价 (任何 负面评论)顶部的顶部被占据 米尔夫加德 и 布姆布鲁姆。 作为例外,我完整地呈现了他们的绰号,我认为他们应得的。

缺点也很有趣。 置顶者 收集的缺点数量 今年,它们被 siXX(473 个优点,699 个缺点)、khXX(1915 个优点,573 个缺点)和 nicXXXXX(456 个优点,487 个缺点)占据。 但正如你所看到的,这些用户有足够的积极评价。 但根据 绝对负数 反主题包括 vladXXXX(55 条评论、84 条缺点、0 条优点)、ekoXXXX(77 条评论、92 条缺点、1 条优点)和 iMXXXX(225 条评论、205 条缺点、12 条优点)。

结论

我无法计算出计划中的所有内容,但我希望它很有趣。

正如您所看到的,即使具有如此少量字段的数据集也可以提供有趣的数据进行分析。 从构建“词云”到文本分析,还有很多东西需要挖掘。 如果出现任何有趣的结果,它们将被发表。

来源: habr.com

添加评论