数据来源:metacritic games 的排行页,所有平台、所有时间,因为多线程关系数据顺序是乱的,影响不大,一条查询语句就能重得排序。爬虫实现使用 jsoup,数据分析使用 plotly。
如标题所言,我并没有数据分析的经验和知识,所以只用 SQL 语句返回的结果和一些图表来瞎做总结。另外作为一名混乱邪恶的游戏玩家,所得分析和总结可能会带有个人情绪。有问题的地方还请大佬们指出,谢谢。
环境
爬取数据
浏览 Metacritic 的页面就能基本了解需要获得的一些信息:游戏名、媒体综合评分、发行日期、分级、发行商、分类、用户评分和平台。其中让我们了解一款游戏素质的媒体均分和用户评分是非常重要的两项数据,遗憾的是由于有些游戏无人问津所以用户评分是空,数据库中我用了 -1 来代替,
数据爬取其实非常简单,只要懂 Java 会看 jsoup 文档并有 HTML 基础就能开始,Chrome 审查元素获得需要的信息,之后 jsoup 一路 select() 就完事了。可以开多个线程进行爬取,也不要太激进,不然被服务器分分钟 ban 掉...没有手写 JDBC,用了 mybatis,参考其文档就能明白其基本用法了(我也只知道它的基本用法),这次的表设计比较匆忙,直接把所有的数据都丢一张表上,而且主键还用了比较脑残地用了 MD5,imgUrl 那一项可以不管,是封面链接,我为了省时间其实也只下了两百张...
数据截止 2018 年 7 月 22 日,总数据 15431 条,用户评分有效数据(非 -1)14045 条,分类非空数据 12335 条,发行商信息非空数据 15424 条,分级非空数据 14143 条。
分析数据(图表整理中)
没想到吧,我又摸了!
总结
- 数据库设计得非常蠢,所有数据全堆在一张表上,需要做分解和优化以满足范式。
- 主键的设计也很傻,特意引入了一个 Codec 库把 name + platform + releaseDate 字符串转成 md5 来做主键,空间占用大效率也差...后来经别人提示可以用自增主键,nice idea。
- 想用 python 再爬一遍...
- 数据分析做的一塌糊涂,有空想要自学下这方面的知识,尤其想摆脱 Falcon SQL Client 这种工具,自己写代码。
- 我觉得自己的概率论和线代要重学...
- 关于反爬机制需要有更多了解,python 这方面有很多参考和轮子,jsoup 文档也有关于代理和 agent 的说明。
题外话
因为前期测试无节制发请求我的校园网 ip 被 metacritic ban了...获得最终结果前换了好几次代理,玩坏了裙主的好几个 ip,当然后面都解封了,希望没有给那时使用相同 ip 且恰好有访问 metacritic 需求的用户造成麻烦...