大数据告诉你:10年漫威,到底有多少角色

栏目: 数据库 · 发布时间: 6年前

内容简介:最近正值复联4上映,小F也发现了一个有趣的网站。主要是关于漫威人物、漫威电影的图谱。https://graphics.straitstimes.com/STI/STIMEDIA/Interactives/2018/04/marvel-cinematic-universe-whos-who-interactive/index.html(复制到浏览器打开)

最近正值复联4上映,小F也发现了一个有趣的网站。

主要是关于漫威人物、漫威电影的图谱。

https://graphics.straitstimes.com/STI/STIMEDIA/Interactives/2018/04/marvel-cinematic-universe-whos-who-interactive/index.html(复制到浏览器打开)

网站是基于Graph技术开发的。

其实之前小F也利用了有关Graph的库实现了一波人物的关系分析。

只不过分析结果比较粗糙而已~

下面是网站的概况,大家可以一览。

大数据告诉你:10年漫威,到底有多少角色

大数据告诉你:10年漫威,到底有多少角色

那么人家能做出这么酷炫的关系图,我们自己能不能实现呢?

这一期就利用网站提供的数据,使用Neo4j(NOSQL图形数据库)进行实战一波。

一、获取分析

人物及人物关联信息从网站上获取,具体接口如下。

大数据告诉你:10年漫威,到底有多少角色

数据为json格式,分别在「characters」和「relationship」中。

大数据告诉你:10年漫威,到底有多少角色

这里的信息是分别指托尼·斯达克,关系「0」为朋友,斯蒂文·罗杰斯。

大数据告诉你:10年漫威,到底有多少角色

二、 数据获取

具体代码如下。

headers = { 
    'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
} 
 
url = 'https://graphics.straitstimes.com/STI/STIMEDIA/Interactives/2018/04/marvel-cinematic-universe-whos-who-interactive/data/marvel-data.json' 
response = requests.get(url=url, headers=headers) 
result = json.loads(response.text) 
 
num = 0 
names = [] 
item = {0: 'friend', 1: 'enemy', 2: 'creation', 3: 'family', 4: 'work', 5: 'love'} 
 
for i in result['relationship']: 
    subject = result['relationship'][i]['id'] 
    object = result['relationship'][i]['target_id'] 
 
    if subject not in names: 
        names.append(subject) 
    if object not in names: 
        names.append(object) 
 
    relation = int(result['relationship'][i]['relationship']) 
    with open('relation_message.csv', 'a+') as f: 
        f.write(subject + ',' + object + ',' + item[relation] + '\n') 
 
for j in names: 
    num += 1 
    with open('names_message.csv', 'a+') as f: 
        f.write(j + ',' + str(num) + '\n') 
 
for k in result['characters']: 
    id = result['characters'][k]['id'] 
    name = result['characters'][k]['name'] 
    status = result['characters'][k]['status'] 
    species = result['characters'][k]['species'] 
    with open('message.csv', 'a+') as f: 
        f.write(id + ',' + name + ',' + status + ',' + species + '\n') 

最后成功获取数据。

大数据告诉你:10年漫威,到底有多少角色

人物名为简称,共计182个人物。

大数据告诉你:10年漫威,到底有多少角色

1144条人物关系数据,4大类型。

下面是182个人物的一些详情信息。

大数据告诉你:10年漫威,到底有多少角色

包含了人物的名字及简称,存活状态,人物属性。

三、数据可视化

下面通过Neo4j对人物关系进行可视化。

Neo4j的安装这里就不细说了,大家可以自行百度。

开启Neo4j服务后,登陆Neo4j网站,初始化界面如下。

大数据告诉你:10年漫威,到底有多少角色

先加载第一个文件。

大数据告诉你:10年漫威,到底有多少角色

具体代码如下。

LOAD CSV WITH HEADERS FROM 'file:///names_message.csv' AS data CREATE (:people{name:data.name, id:data.id}); 

下面加载第二个文件。

大数据告诉你:10年漫威,到底有多少角色

具体代码如下。

LOAD CSV  WITH HEADERS FROM "file:///relation_message.csv" AS relations 
MATCH (entity1:people{name:relations.subject}) , (entity2:people{name:relations.object}) 
CREATE (entity1)-[:rel{relation: relations.relation}]->(entity2) 

点击1144按钮处,取消限制数,再点击全屏。

大数据告诉你:10年漫威,到底有多少角色

大数据告诉你:10年漫威,到底有多少角色

大数据告诉你:10年漫威,到底有多少角色

这里大致能看出来漫威的人物聚集情况。

第一大反派灭霸(thanos),原来这么孤立的。

这里由于人物太多,造成观察不便,所以对结果进行一些筛选。

比如筛选托尼·斯达克的朋友,运行下面的代码。

match p=(n:people{name:"tonys"})-[:rel{relation:"friend"}]->() return p; 

得到下图结果。

大数据告诉你:10年漫威,到底有多少角色

其中「thor」为「雷神」,「stever」为「美队」,「blackw」为「黑寡妇」,「vision」为「幻视」,「peterp」为「蜘蛛侠」,「bruceb」为「绿巨人」。

下面再来看一下美队的女友吧。

大数据告诉你:10年漫威,到底有多少角色

佩吉·卡特和她的侄女莎朗·卡特,据说两人样貌极为相像。

四、总结

本次只是对Neo4j的一些简单操作,后期或许会去深入了解。

此外漫威的这些人物信息,还可以玩出很多花样的。

也希望大家能去动手尝试尝试,做一枚硬核铁粉~


以上所述就是小编给大家介绍的《大数据告诉你:10年漫威,到底有多少角色》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Sprint

Sprint

Jake Knapp、John Zeratsky、Braden Kowitz / Simon & Schuster / 2016-3-8 / GBP 14.60

媒体推荐 “Every business leader I know worries about the same thing: Are we moving fast enough? The genius of Jake Knapp’s Sprint is its step-by-step breakdown of what it takes to solve big problems an......一起来看看 《Sprint》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具