漫威java_10年漫威,到底有多少角色。

08da49ab64630ab4b65df3044b7a1c44.gif

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

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

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

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

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

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

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

14e533a42dc67bb6c38b38c5c52dd164.png

eb6abde4c3851b28bfb7b23b13bac8ca.png

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

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

/ 01 / 获取分析

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

0117c992f006a5cc702dd7f251cbdf3c.png

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

5f3a4244b3d63a3833c56671e461b8a5.png

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

48f8e0ca8d7f65180c06e303173ea2cb.png

/ 02 / 数据获取

具体代码如下。

import json

import requests

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')

最后成功获取数据。

620d5204d229ae37d9518f166df512e0.png

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

6eeb0ca5205e74fbf5f2b6cc0fd8676f.png

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

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

e828a00d388f874589b42ff58cf7044a.png

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

/ 03 /  数据可视化

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

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

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

36df296ef3246509abe23fec44409fe4.png

先加载第一个文件。

3f39c5eebdf3d526b15505774f9eae7c.png

具体代码如下。

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

下面加载第二个文件。

1db409e1aedc1bd2878d5c7a479f6304.png

具体代码如下。

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按钮处,取消限制数,再点击全屏。

24e700e9bf9a82c3321f9ad27e7147ba.png

3d1d9f2f5be82d79db74feae3cd8c2a4.png

a5ad6b0883cce53f336cdab4070c776c.png

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

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

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

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

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

得到下图结果。

31ce82b8a3d5379e9454fc70fba61efd.png

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

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

266708f47f3da4a3df150fa71de0d394.png

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

/ 03 / 总结

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

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

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

万水千山总是情,点个「在看」行不行。

···  END  ···

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值