摘要:是的你没有看错,这里真的是一个正经的关于统计和数据科学的网站,本文作者也绝对没有在跑程序的时候偷偷溜去 B 站追番。这个 GitHub 库大致分为两部分,根目录下的几个文件是用来抓取弹幕数据的 R 程序,相当于前文代码的完整版,而 connan-danmu 这个文件夹则是 Shiny App 的源文件,包含了交互可视化的实现方法。

是的你没有看错,这里真的是一个正经的关于统计和数据科学的网站,本文作者也绝对没有在跑程序的时候偷偷溜去 B 站追番。嗯,大概没有吧。没有吧。有吧。

其实既然是在 B 站,那么必不可少的一项体验就是跟着弹幕一起吐槽越来越飘逸的剧情,比如为什么柯南越来越明目张胆,连麻醉枪都不用就开始推理了,比如为什么过了 1000 多集小兰还是命案现场第一个发出惊呼然后通知警察或者医院的工具人。既然很多剧情已经看过了,那么现在重新追剧的动力似乎就变成了弹幕主打、剧情辅助的观影模式了。于是我有了一个大胆的想法,能不能直接找出弹幕最多的那些剧集,以此作为观影指南呢?

这个目标看上去非常简单,只要点进剧集网页,然后查看弹幕数即可。但别忘了,B 站一次性上传了近 1000 集,即使手速足够快,也要考虑到网速和页面加载的问题。假设一个人可以用 10 秒钟的时间查询到一集的弹幕量,那算下来记录所有剧集的弹幕数差不多也得花三个小时,有这个时间都可以看好几集正片了。

有没有更好的办法呢?当然是有的,毕竟我们号称是数据科学家 ,每天都在处理海量的数据 ,其中第一步的数据收集自然是不在话下了 。由于平时用得最多的编程语言依然还是 R,因此在这里就介绍一些基本的收集 B 站弹幕数据的方法。当然,用 R 的另一个好处是 摸鱼不会被发现有许多强大的可视化工具可以使用,我会在最后提到其应用。

你可以试着在浏览器里访问这个网址,它的返回结果不是一般的网页,而是一个 XML 文件。XML 文件也是纯文本,但要从中提取出有用的信息还需要借助一些工具。下面这段 R 代码用到了 curl 和 xml2 这两个软件包,前者用来模拟浏览器访问网址的过程,后者则是去解析得到的 XML 文本。

library library api = "http://api.bilibili.com/x/v1/dm/list.so?oid=183362119" # A tibble: 979 x 3 cid titleFormat longTitle 1 183362119 第1话 云霄飞车杀人事件 2 183362192 第2话 董事长千金绑架事件 3 183362280 第3话 偶像密室杀人事件 4 183362362 第4话 大都会暗号地图事件 5 183362432 第5话 新干线大爆破事件 6 183362527 第6话 情人节杀人事件 7 183362614 第7话 每月一件礼物威胁事件 8 183362677 第8话 美术馆杀人事件 9 183362762 第9话 天下第一夜祭杀人事件 10 183362916 第10话 足球选手恐吓事件 A tibble: 979 x 2 num_danmu title 1 3000 第1话-云霄飞车杀人事件 2 3000 第2话-董事长千金绑架事件 3 3000 第3话-偶像密室杀人事件 4 3000 第5话-新干线大爆破事件 5 3000 第6话-情人节杀人事件 6 3000 第7话-每月一件礼物威胁事件 7 3000 第35话-山庄绷带怪人之杀人事件 8 3000 第51话-图书馆杀人事件 9 3000 第136话-来自黑暗组织的女子 大学教授杀人事件 10 3000 第908话-樱花班的回忆 11 3000 第1028话-目标是警视厅交通部 12 3000 第1029话-目标是警视厅交通部 13 3000 第1031话-目标是警视厅交通部 14 2930 第4话-大都会暗号地图事件 15 2903 第78话-柯南对怪盗基德 16 2859 第11话-钢琴奏鸣曲《月光》杀人事件 17 2847 第8话-美术馆杀人事件 18 2803 第1030话-目标是警视厅交通部 19 2676 第138话-来自黑暗组织的女子 大学教授杀人事件 20 2663 第21话-鬼屋杀人事件 21 2577 第10话-足球选手恐吓事件 22 2465 第13话-步美被绑架了 23 2460 第836话-绯色的真相 24 2373 第235话-名侦探齐聚一堂!工藤新一VS怪盗基德 25 2366 第23话-豪华客轮连续杀人事件 26 2335 第44话-江户川柯南诱拐事件 27 2323 第17话-古董收藏家杀人事件 28 2307 第16话-消失的尸体 29 2303 第22话-电视剧外景队杀人事件 30 2246 第59话-福尔摩斯迷杀人事件

你是否从中找到了自己的童年阴影呢?不对,你是否通过本文的学习发现奇怪的知识又增加了呢?

最后又到了结尾彩蛋的时间。前面我们介绍了利用 R 中的相关软件包来抓取弹幕的操作,然后只需要再加上亿点点细节,就可以打造出一个实用的 追剧可视化工具了。

我们用 R Shiny App来对弹幕信息进行展示,半成品如下:https://yixuanq.shinyapps.io/conan-danmu/。

如果你对这个 Shiny App 的开发感兴趣,欢迎去项目主页点赞、投币、收藏一键三连……啊不,走错片场了,欢迎大家关注、加星、分支。这个 GitHub 库大致分为两部分,根目录下的几个文件是用来抓取弹幕数据的 R 程序,相当于前文代码的完整版,而 connan-danmu 这个文件夹则是 Shiny App 的源文件,包含了交互可视化的实现方法。最后,B 站还有很多值得去发掘和研究的数据,以后有机会的话再来和大家分享。 其实下次也不一定

关于作者

邱怡轩,普渡大学统计系博士,现为卡耐基梅隆大学博士后,感兴趣的方向包括计算统计学、机器学习、大型数据处理等,参与翻译了《应用预测建模》《R 语言编程艺术》《ggplot2:数据分析与图形艺术》等经典书籍,是 showtext、RSpectra、recosystem、prettydoc 等流行 R 软件包的作者。

统计之都:专业、人本、正直的中国统计学社区。

往期推送:进入统计之都会话窗口,点击右上角小人图标,查看历史消息即可。

相关文章