4

观测者:数据爬虫与处理,历史数据可视化视频与用户排名

 3 years ago
source link: https://blog.fsky7.com/archives/167/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
观测者:数据爬虫与处理,历史数据可视化视频与用户排名 - FlyingSky's Blog
chevron_right 首页  »  随笔 & 项目  »  观测者:数据爬虫与处理,历史数据可视化视频与用户排名
watchers.png
观测者:数据爬虫与处理,历史数据可视化视频与用户排名
October 2nd, 2020   随笔 项目   3 条评论   1099 次阅读

以一篇文章,记录这三个月来的数据处理与数据可视化的入门。本文主要讲些技术向内容,但或许会穿插一些奇奇怪怪的东西(事实上,整篇文章都很奇怪)。

BiliOB 观测者 是一个搜集并观测 B 站的 UP 主、视频或番剧等数据的网站。2019 年,我在这个网站上注册了账号。作为一个由个人创建并维护的网站,为了防止被滥用,就有了用户积分来限制操作数,随之而来的功能则是:「用户经验」与「排行榜」。

逐渐的,随着「观测者预测」功能的开发,积分与经验有了新的作用——娱乐。确实,闲来无事看着网站上数据的变化,一条条「观测记录」,还挺不错的,至少对于我这种无聊的人来说。

曾在「观测者排行」的「观测记录」里看到过有人提出观测该排行的操作(BiliOB 观测者观测者),还挺有趣的(给我也整一个!咕)。今年暑假,我就决定以它为数据,试手历史数据的处理与可视化,然后挖了一个大坑。

这个网站是前后端分离的,「观测者排行」的后端 API 不需要登录就能访问。所以,这种事情还不简单吗,定时任务 curl 上!

对了,这个网站是有反爬虫机制的,源码 GitHub 开源,我曾大致研究过,但是我真不会Java,看得迷迷糊糊的。

对于我来说,最顺手的工具就是 PHP 了。这里需要处理的数据并不复杂,目前我写的这工具用起来还是挺香的。

FlyingSky@Utopianor MINGW64 /d/GitHub/BiliOB-Watcher/userRank (master)
$ php compute.php 
[2020-10-02 13:28:28] coumpute  Running.
[2020-10-02 13:28:28] zip       Unarchiving 'ranklist.zip'.
[2020-10-02 13:28:28] csv       Reading 'full-ranklist.json'.
[2020-10-02 13:28:28] json      Saving 'ranklist.json'.
[2020-10-02 13:28:28] raw       Turning 'full-ranklist.json' into 'ranklist.json'.
[2020-10-02 13:28:28] coumpute  Constructing.
[2020-10-02 13:28:28] csv       Reading 'ranklist.json'.
[2020-10-02 13:28:28] watcher   BiliOB-Watcher constructed.
[2020-10-02 13:28:28] watcher   Loading 21000 items.
[2020-10-02 13:28:28] watcher   genHash.
[2020-10-02 13:28:28] watcher   limitTime from 1596240000 to 1597017600.
[2020-10-02 13:28:28] watcher   limitPerDay at 8.
[2020-10-02 13:28:28] watcher   formatDate.
[2020-10-02 13:28:28] csv       Saving 'comp-rank-0.csv'.
[2020-10-02 13:28:28] csv       Saving 'comp-rank-1.csv'.
[2020-10-02 13:28:28] csv       Saving 'comp-rank-2.csv'.
[2020-10-02 13:28:28] csv       Saving 'comp-rank-3.csv'.
[2020-10-02 13:28:28] csv       Saving 'comp-rank-4.csv'.
[2020-10-02 13:28:28] watcher   dumpRank.
[2020-10-02 13:28:28] csv       Saving 'comp-vary-0.csv'.
[2020-10-02 13:28:28] csv       Saving 'comp-vary-1.csv'.
[2020-10-02 13:28:28] csv       Saving 'comp-vary-2.csv'.
[2020-10-02 13:28:28] csv       Saving 'comp-vary-3.csv'.
[2020-10-02 13:28:28] watcher   dumpVary.
[2020-10-02 13:28:28] csv       Saving 'comp-register.csv'.
[2020-10-02 13:28:28] watcher   dumpRegister after 1577836800.

目前使用的可视化框架是 Historical-ranking-data-visualization-based-on-d3.js,同 BiliOB 是一个作者(Jannchie 见齐,也是 B 站上的一位数据可视化 UP 主)。

整个排行榜的可视化分成了 10 部分:

  • 背景音乐可视化
  • 排行榜变化(1~40 名)
  • 排行榜变化(41~80 名)
  • 排行榜变化(81~100 名)
  • 经验变化榜(1~40 名)
  • 经验变化榜(41~80 名)
  • 2020 年新观测者的排行榜(前 20 名)

刚开始我为每个部分单独配置,每部分分开渲染然后剪辑在一起,剪了两期后(Demo 和 #1),我还是被繁琐枯燥重复的剪辑工作整暴躁了,花了一些时间封装了「数据可视化」和「音频(背景音乐)可视化」的代码,将所有内容丢到了一起,做成了一个播放器(你可以在 我是如何快速制作每一期可视化视频的?- Bilibili 的 00:52 秒看到这个东西的演示)。

这些数据处理的最终成果就是我目前在 B 站上更新的「【BiliOB 观测者】用户排名观察」系列视频,目前的更新频率是半个月。前些天写了些代码,用 PHP 联动 ffmpegPIL 将视频封面的制作也自动化了(全流程自动化指日可待,「自动化狂魔」雾)。

这两个月里,为实现上述的数据处理可视化等,我折腾了不少技术,也写了些许代码,目前全部放在 BiliOB-Watcher 这个 repo 里。现在它是 private repo,如果有哪位有需要,对技术细节有兴趣的话,我会考虑开源的。

话说回来,动手把这篇文章给写了,主要还是因为今天见齐把一位开小号刷经验的观测者给揭了。嘛其实我做「2020 年新观测者的排行榜」这东西的动机很明显啊,想知道各位观测者「冲分」是多么得猛(啊有段时间我也经常改名来着)。

那么,观测了两个半月的排行榜,这些观测者有多猛呢?我做了个图表,数据筛选条件如下:

  • 2020-07-15 19h 到 2020-10-02 20h
  • 2020 年新观测者(FlyingSky 除外)
  • 所有经验增量超过「每日 3 签(最多得到 60 经验)」的 95% 的
chart.png

竖线表示在此之前不位于前 100 内,好看吗,好看就是好图表。

目前我能想到的内容就这些,有些许困了...顺带附上截止 2020-10-02 20h 的数据文件 ranklist.zip


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK